最近測試esxi6.7的vmotion功能,爲了熟悉kvm決定在kvm上實現, 系統是ubuntu16.04, 啓動一個kvm,發現esxi在遷移時會崩潰,無法進行遷移,查找相關次料,解決方案如下:
KVM的安裝和使用
- 首先安裝kvm
# apt install qemu-system-x86 qemu-kvm qemu libvirt-bin virt-manager virtinst bridge-utils cpu-checker virt-viewer
- 校驗kvm是否安裝,並檢測cpu的VT-x虛擬化有沒有開,出現以下信息說明正常
# kvm-ok INFO: /dev/kvm exists KVM acceleration can be used
- 運行virt-host-validate查看你的環境對kvm的技持,如果全部爲pass,說明可以
# virt-host-validate QEMU: Checking for hardware virtualization : PASS QEMU: Checking if device /dev/kvm exists : PASS
- 如果你想使普通用戶能夠使用kvm,可以添加當前用戶到libvirt組中
cat /etc/group | grep libvirt | awk -F':' {'print $1'} | xargs -n1 sudo adduser $USER
# add user to kvm group also
sudo adduser $USER kvm
# relogin, then show group membership
exec su -l $USER
id | grep libvirt
- 缺省的,kvm會建立一個虛擬的交換機名字爲virbr0, 使用192.168.122.0/24
# ip addr show virbr0 17: virbr0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN group default qlen 1000 link/ether 52:54:00:d2:52:b5 brd ff:ff:ff:ff:ff:ff inet 192.168.122.1/24 brd 192.168.122.255 scope global virbr0 valid_lft forever preferred_lft forever
- virbr0實際上是一個nat模式,我們可以通過iptables看到實際的情況
# iptable -t nat -vnL Chain POSTROUTING (policy ACCEPT 146 packets, 11359 bytes) pkts bytes target prot opt in out source destination 0 0 RETURN all -- * * 192.168.122.0/24 224.0.0.0/24 0 0 RETURN all -- * * 192.168.122.0/24 255.255.255.255 0 0 MASQUERADE tcp -- * * 192.168.122.0/24 !192.168.122.0/24 masq ports: 1024-65535 0 0 MASQUERADE udp -- * * 192.168.122.0/24 !192.168.122.0/24 masq ports: 1024-65535 0 0 MASQUERADE all -- * * 192.168.122.0/24 !192.168.122.0/24
- 定義存儲池,缺省的存儲池是/var/lib/libvirt/images, 但你可以另外mount你想要的os磁盤
# virsh pool-list --all
Name State Autostart
-------------------------------------------
default active yes
$ virsh pool-define-as kvmpool --type dir --target /data/kvm/pool
Pool kvmpool defined
$ virsh pool-list --all
$ virsh pool-start kvmpool
$ virsh pool-autostart kvmpool
$ virsh pool-list --all
Name State Autostart
-------------------------------------------
default active yes
kvmpool active yes
- 佈署一個vm在你的kvm上,建立一個1vcpu/1G RAM使用缺省的virbr0 NAT網絡和缺省的pool storage
virt-install --virt-type=kvm --name=ukvm1404 --ram 1024 --vcpus=1 --virt-type=kvm --hvm --cdrom ~/Downloads/mini.iso --network network=default --graphics vnc --disk pool=default,size=20,bus=virtio,format=qcow2 --noautoconsole
# open console to VM
virt-viewer ukvm1404
- 如果你想刪除這個vm,可以使用如下命令:
virsh destroy ukvm1404 virsh undefine ukvm1404
- 如你想要一個全部圖形化的軟件管理kvm,可以使用virt-manager,當你沒安裝圖形介面時你可以使用x協議的ssh客戶端,如xshell, 或xming+ssh客戶端軟件
佈署esxi在KVM中
- 配置VT-x,你同樣需要在ubuntu中配置VT
# vi /etc/modprobe.d/qemu-system-x86.conf
options kvm_intel nested=1 enable_apicv=n
options kvm ignore_msrs=1
- 重啓系統,執行下列命令,必須返回如下值
# want Y to be returned
$ cat /sys/module/kvm/parameters/ignore_msrs
# want N to be returned
$ cat /sys/module/kvm_intel/parameters/enable_apicv
# want Y to be returned
$ cat /sys/module/kvm_intel/parameters/nested
- 建立kvm虛擬機
# virt-install --virt-type=kvm --name=esxi4 \ --ram 4096 --vcpus=4 \ --virt-type=kvm --hvm \ --cdrom /data/iso/VMware-VMvisor-Installer-6.7.0.update03-14320388.x86_64.iso \ --network network:default,model=e1000 \ --graphics vnc --video qxl \ --disk pool=default,size=80,sparse=true,bus=ide,format=qcow2 \ --boot cdrom,hd --noautoconsole --force \ --cpu host-model-only 當然你也可以使用virt-manager來建立虛擬機。
- 重複建立兩個虛擬機,建立兩個esxi實現動態vmotion遷移,測試和建立步驟省略,經測試vmotion可以正常工作,不會出現崩潰現象。