2012年10月21日 星期日

Hypervisor中安裝hypervisor(Nested KVM)


雲端風氣的盛行與虛擬機器(Virtual Machine簡稱VM)日漸成熟的這個大環境下,無論是虛擬化導入的應用或是系統軟體的測試開發,有越來越多的IT人員與電腦玩家透過各家大廠的Hypervisor來建置VM,在實體機器數量不足卻又需要嘗試各種Hypervisor的情況下,Nested VMs(巢狀式虛擬機器)這項功能便承擔起這個重責大任,讓用戶可透過單一實體機器(Physical Machine簡稱PM)、利用原生Hypervisor所建置之VM以巢狀方式再往下建置VM。

最常見的情境就是在VMware Workstation 上想安裝ESXi或Microsoft Hyper-V等hypervisor時,在早期Workstation並不支援這種VM建置VM的方式,僅能透過自帶第一層hypervisor以水平方式創建無數VM,若是想要垂直向下延伸,那麼首先在第一層的hypervisor就必須支援Nested VMs這項功能,而VMware Workstation不落人後率先在Workstation 8推出此功能,但終究全虛擬化的Workstation並非是hypervisor的最佳選擇,因此在本篇文章中將為各位介紹如何以Linux核心內建支援的KVM hypervisor來達成Nested VMs。


【環境說明】
1. 實體機器(Physical Machine兼Host hypervisor)
2. 虛擬機器A(由Host hypervisor所創建之VM,以Guest hypervisor稱呼之)
3. 虛擬機器B(由Guest hypervisor所創建之VM,以Guest VM稱呼之)

【軟硬體環境說明】
1. 實體機器中央處理器為AMD AthlonII X4 910E (支援虛擬化)
2. 
實體機器作業系統安裝Ubuntu 12.04LTS Desktop x64
3. 虛擬機器A作業系統安裝Ubuntu 12.04LTS Desktop x64
4. 虛擬機器B作業系統安裝Ubuntu 10.04LTS Server x64

在這個Nested VMs的測試作業中,為何選用版本挑選上Ubuntu,事實上根據tomy在多個Linux Distribution的測試下發現一個問題,雖然說KVM模組自動啟用了nested功能,但幾乎在保守派的發行版本如CentOS上的libvirt服務並不支援nested的VM創建,這對於創建Nested VMs有一定的麻煩在,除非用戶願意以手動指令qemu-kvm來管理他的VM,那便可透過 -enable-nesting參數來啟用;再來說到中央處理器的選擇,在AMD部份的CPU旗標SVM在很早期就已被Linux所支援、不論是自動或被動的在KVM模組中被啟用Nested功能,但Intel VT部分卻遲到2012年所發行的少數Linux版本(如Fedora 17或它的上一個版本)才正確無bug的支援KVM模組中Nested功能的啟用,那麼這是Linux自身支援配合程度的問題,所以如果是怕麻煩的玩家就可以像tomy一樣直接使用AMD的中央處理器來建構Nested VMs的硬體環境。



Step1.實體機器與Host hypervisor的建置
為了確保套件皆為最新版本,請於安裝實體機器時勾選「Download Updates」


安裝完畢後進入作業系統也不忘進到Update Manager進行套件更新


安裝KVM所需套件
[root@ubuntu1204 ~]# apt-get update
[root@ubuntu1204 ~]# apt-get install qemu-kvm libvirt-bin virt-manager

將要執行virt-manager的用戶加入kvm與libvirt群組


bridge一個外部網路給virt-manager使用並reboot實體機器




Step2. 創建Guest hypervisor
reboot後以指定用戶執行virt-manager創建VM(Geust hypervisor)


以qemu-img指令創建一個虛擬磁碟映像檔給Guest hypervisor使用


個人習慣將VM映像檔置放於用戶家目錄中


設定完畢前記得將「在安裝前自定組態」勾選


將虛擬磁碟設定為Virtio與qcow2格式


網路卡也設定為Virtio以增進VM效能表現


最重要的部分「複製主機CPU組態」,確認svm為繼承模組後進行VM建置


後續步驟請參閱Step1進行Ubuntu 12.04LTS的作業系統安裝....



Step3. 於Guest hypervisor中創建 Guest VM
目前是第二層要前往第三層,請參閱Lesson 2步驟創建Guest VM




Step4. 觀察KVM模組的繼承狀態
注意第二層Guest hypervisor的KVM模組狀態


再注意第三層Guest VM的KVM模組狀態,nested功能持續向下繼承




結語
KVM模組預設啟用nested功能,只要中央處理器夠力並搭配上包裝較新版本libvirt的Linux distribution,理論上KVM可無限向下延伸,那麼在Virtio強力的支援下,雖然有VMware、Hyper-V與Citrix Xen的強力夾擊,但Linux/KVM嚴然已成為檯面上最強的hypervisor選項之一,重要的是...它還免費呢!在國內KVM的資訊仍嫌不足、KVM Nested功能在國內外更顯少被討論,希望透過本文介紹能讓更多人知道KVM的力量。

0 意見: