KVM on KVM 嵌套虛擬化的實(shí)現(xiàn)
本實(shí)驗(yàn)系統(tǒng)環(huán)境為:Mac OS X El Capitan 10.11.6 15G1217
使用的虛擬機(jī)系統(tǒng)為:Parallels Desktop 12
虛擬化技術(shù):Nested 虛擬化技術(shù) + PMU虛擬化技術(shù)
L0: Ubuntu 16.04.1 Xenial LTS Desktop
L1: CentOS 6.4 Desktop
L2: Cirros Linux 0.3.5
首先,若要準(zhǔn)備L2級(jí)虛擬機(jī)的系統(tǒng)鏡像,可參考Ubuntu官網(wǎng)提供的cloud-images,鏈接為:https://cloud-images.ubuntu.com/?_ga=1.222879259.1831544656.1487263184
首先可以在物理機(jī)使用scp命令將L2級(jí)虛擬機(jī)所需img鏡像文件傳輸至L0,命令及效果圖如圖所示:
- scp xenial-server-cloudimg-amd64-disk1.img fa1c0n@10.211.55.6:~/
若當(dāng)前虛擬機(jī)不存在網(wǎng)橋,則需要配置網(wǎng)橋才可使虛擬機(jī)聯(lián)網(wǎng)。由于之前的實(shí)驗(yàn)已完成配置,此處只寫出相關(guān)命令:
- #root@master:~# brctl addbr br0 #增加一個(gè)虛擬網(wǎng)橋br0
- #root@master:~# brctl addif br0 enp0s5 #在br0中添加一個(gè)接口eth0
- #root@master:~# brctl stp br0 on #打開STP協(xié)議,否則可能造成環(huán)路
- #root@master:~# ifconfig enp0s5 0 #將eth0的IP設(shè)置為0
- #root@master:~# dhclient br0 #設(shè)置動(dòng)態(tài)給br0配置ip、route等
- #root@master:~# route #顯示路由表信息
- #root@master:~# brctl show #檢查br0狀態(tài)
效果圖如下
同樣,由于已完成之前的實(shí)驗(yàn),qemu_ifup啟動(dòng)腳本為在啟動(dòng)時(shí)創(chuàng)建和打開指定的TAP接口以供虛擬機(jī)連接使用。啟動(dòng)腳本見主要算法和程序清單。
接下來(lái),即可開啟L1虛擬機(jī),命令如下:
- qemu-system-x86_64 –cpu qemu64,+vmx -m 1024 -smp 4 -boot order=d -hda rhel-6.4.img -net nic -net tap
啟動(dòng)虛擬機(jī)后,如圖所示:
如圖可以看到已成功在L0上運(yùn)行L1
首先開始安裝qemu,kvm,libvirt,libvirt-python,命令如下:
- yum install qemu-kvm libvirt libvirt-python virt-manager python-virtinst libvirt-client
安裝完成后,運(yùn)行如下命令確認(rèn)kvm是否安裝成功:
- lsmod | grep kvm && stat /dev/kvm
如上圖所示,即為安裝成功。安裝成功后,需要配置L1的網(wǎng)橋才可使L1創(chuàng)建的L2虛擬機(jī)可上網(wǎng)。命令同上:
- #root@master:~# brctl addbr br0 #增加一個(gè)虛擬網(wǎng)橋br0
- #root@master:~# brctl addif br0 enp0s5 #在br0中添加一個(gè)接口eth0
- #root@master:~# brctl stp br0 on #打開STP協(xié)議,否則可能造成環(huán)路
- #root@master:~# ifconfig enp0s5 0 #將eth0的IP設(shè)置為0
- #root@master:~# dhclient br0 #設(shè)置動(dòng)態(tài)給br0配置ip、route等
- #root@master:~# route #顯示路由表信息
- #root@master:~# brctl show #檢查br0狀態(tài)
接下來(lái),將鏡像文件從L0拷貝至L1中,使用命令:
- scp cirros-0.3.5-x86_64-disk.img root@10.211.55.9:~/
傳輸完成后如圖所示:
接下來(lái)即可在L1中啟動(dòng)L2虛擬機(jī)。命令如下:
- qemu-system-x86_64 -smp 4 -m 256 -boot order=d -hda cirros-0.3.5-x86_64-disk.img -net nic -net tap -enable-kvm
啟動(dòng)成功后,可以看到已成功啟動(dòng)L2虛擬機(jī)。且L2虛擬機(jī)可ping通百度,可以上網(wǎng)。至此,KVM on KVM嵌套虛擬化的實(shí)現(xiàn)已完成。
在CentOS 6.4下,啟動(dòng)虛擬機(jī)時(shí),遇到libdevmapper庫(kù)錯(cuò)誤問題,錯(cuò)誤提示如下:
libvirtd: relocation error: libvirtd: symbol dmtaskgetinfowithdeferredremove, version Base not defined in file libdevmapper.so.1.02 with link time reference
解決方案:yum -y upgrade device-mapper-libs
若啟動(dòng)虛擬機(jī)時(shí)遇到如下問題,問題描述為:
error: internal error: unable to execute QEMU command 'cont': Resetting the Virtual Machine is required
檢查系統(tǒng)是否有vmx:cat /proc/cpuinfo | grep vmx
若沒有vmx,則需要開啟-enable-kvm選項(xiàng)。
若有vmx,則重新開啟虛擬機(jī)即可。