KVM (全稱是 Kernel-based Virtual Machine) 是 Linux 下 x86 硬件平台上的全功能虛擬化解決方案,包含一個可加載的內核模塊 kvm.ko 提供和虛擬化核心架構和處理器規范模塊。全虛擬化,可以快速部署新的環境,能使用qcow2磁盤格式,利用類似寫實復制的功能,節約磁盤空間和創建時間。
快速創建虛擬機的模板,可以參考使用
# 需要准備 :[ .kvm-master.xml / .kvm-master.qcow2]
# 已經創建的虛擬機的 xml文件 / img文件 可以做為模板
#!/bin/bash
. /etc/init.d/functions
ONF_DIR=/etc/libvirt/qemu
IMG_DIR=/var/lib/libvirt/images
function createvm(){
if [ -e ${IMG_DIR}/${1}.img ];then
echo "警告 xn ${1}.img 已經存在"
return 1
else
qemu-img create -b ${IMG_DIR}/.kvm-master.qcow2 -f \
qcow2 ${IMG_DIR}/${1}.img 40G &>/dev/null
sed -e "s,kvm-name,${1}," ${IMG_DIR}/.kvm-master.xml >${CONF_DIR}/${1}.xml
sudo virsh define ${CONF_DIR}/${1}.xml &>/dev/null
echo "' xn ${1} 創建成功"
fi
}
if (( $# == 0 ));then
echo "$0 xn1 xn2 xn3 ... ..."
else
for i in $@;do
createvm ${i}
done
fi
exit 0
安裝 KVM
1. 如何查看當前linux服務器是否支持虛擬化
grep -E '(svm|vmx)' /proc/cpuinfo
# 輸出有SVM或VMX,表明CPU支持虛擬化技術:
# svm - AMD 的虛擬化技術AMD-V
# vmx - Intel 的虛擬化技術Intel-VT
# 使kvm虛擬機的支持虛擬化嵌套:
modinfo kvm_intel | grep nested
# parm: nested:bool
cat /sys/module/kvm_intel/parameters/nested
# 如果上面的顯示結果不是 Y 的話需要開啟 nested,執行以下:
modprobe -r kvm-intel
modprobe kvm-intel nested=1
cat /sys/module/kvm_intel/parameters/nested
# 上面的顯示結果是 Y,已經 正確開啟 虛擬化嵌套
#添加到內核自啟動
tee /etc/sysconfig/modules/kvm.modules <<-'EOF'
modprobe -r kvm-intel
modprobe kvm-intel nested=1
EOF
chmod 755 /etc/sysconfig/modules/kvm.modules
source /etc/sysconfig/modules/kvm.modules
2. 安裝KVM相關包文件
yum install -y virt-* libvirt bridge-utils qemu-img
3. 確認載入kvm模塊
lsmod | grep kvm
4. 啟動libvirtd服務(必須)
systemctl start libvirtd && systemctl enable libvirtd
KVM 已經完成安裝了,接下來配置網絡
方式一:
# 配置橋接網卡
tee /etc/sysconfig/network-scripts/ifcfg-br0 <<-'EOF'
TYPE=Bridge
NAME=br0
DEVICE=br0
IPADDR=10.0.10.129
NETMASK=255.255.255.0
GATEWAY=10.0.10.1
EOF
# 配置本地網卡與橋接網卡相同
echo 'BRIDGE=br0' >> /etc/sysconfig/network-scripts/ifcfg-eth0
# 重啟網絡服務 (注意可能會導致網絡啟動失敗,無法 ssh連接)
# 或者增加一個備份網卡,保障
systemctl restart network
方式二:
# 拷貝當前的網卡文件,並修改名字
cp /etc/sysconfig/network-scripts/ifcfg-eth0 /etc/sysconfig/network-scripts/ifcfg-br0
# 增加一個橋接網卡
tee /etc/sysconfig/network-scripts/ifcfg-br0 <<-'EOF'
TYPE=Bridge
BOOTPROTO=dhcp
DEFROUTE=yes
PEERDNS=yes
PEERROUTES=yes
IPV4_FAILURE_FATAL=no
IPV6INIT=yes
IPV6_AUTOCONF=yes
IPV6_DEFROUTE=yes
IPV6_PEERDNS=yes
IPV6_PEERROUTES=yes
IPV6_FAILURE_FATAL=no
NAME=br0
DEVICE=br0
ONBOOT=yes
EOF
# 配置本地網卡與橋接網卡相同
echo 'BRIDGE=br0' >> /etc/sysconfig/network-scripts/ifcfg-eth0
# 重啟網絡服務 (注意可能會導致網絡啟動失敗,無法 ssh連接)
# 或者增加一個備份網卡,保障
systemctl restart network
# 然后,ifconfig命令可以看出,eth0網卡的IP到br0上
使用KVM(命令行方式)安裝centos7
# 創建 Kvm 數據基准目錄
mkdir -p /kvm/iso/ /kvm/img/
# 下載 Centos鏡像
cd /kvm/img/
wget https://mirrors.aliyun.com/centos/7.7.1908/isos/x86_64/CentOS-7-x86_64-Minimal-1908.iso
# 安裝(可合理調整資源大小)
virt-install --name=demo --memory=512,maxmemory=1024 --vcpus=1,maxvcpus=2 \
--os-type=linux --os-variant=rhel7 \
--location=/kvm/iso/CentOS-7-x86_64-Minimal-1908.iso\
--disk path=/kvm/img/demo.img,size=10 --bridge=br0 \
--graphics=none --console=pty,target_type=serial --extra-args="console=tty0 console=ttyS0" \
-enable-kvm -cpu qemu64,+vmx
# 添加vmx支持
圖形安裝的虛擬機的 默認目錄
# 存放虛擬機的img文件
/var/lib/libvirt/images/
# 存放虛擬機的xml文件
/etc/libvirt/qemu/
建立一台支持虛擬化的虛擬機
修改 xml 文件 cpu 部分
# 完全模擬物理機CPU
<cpu mode='host-passthrough' check='none'/>
管理虛擬機的一些命令
# 假設 虛擬機 為 demo
# 啟動 虛擬機 demo
virsh start demo
# 關閉虛擬機
virsh shutdown demo
# 強制停止虛擬機
virsh destroy demo
# 徹底銷毀虛擬機,會刪除虛擬機配置文件,但不會刪除虛擬磁盤
virsh undefine demo
# 設置宿主機開機時該虛擬機也開機
virsh autostart demo
# 解除開機啟動
virsh autostart --disable demo
# 掛起虛擬機
virsh suspend demo
# 恢復掛起的虛擬機
virsh resume demo
自己遇到的坑
錯誤:
重啟服務器后,發現
qemu://system 沒有連接驅動器可用;
讀取數據時進入文件終點: 輸入/輸出錯誤。
原因:
KVM的相關包 裝少了
解決方法:
KVM的相關包 重新安裝
yum install -y virt-* libvirt bridge-utils qemu-img
錯誤:
無法 virsh console 虛擬機
原因:
沒有 /dev/ttyS0 啟用串口登錄
解決方法:
systemctl start serial-getty@ttyS0.service
systemctl enable serial-getty@ttyS0.service