Posted by WeYo. 轉(zhuǎn)載請注明出處:http://weyo.me/pages/techs/vmware-vm-for-kvm/
嵌套虛擬化(nested virtualization)是一種在虛擬機內(nèi)部繼續(xù)虛擬化的一種技術(shù)享潜,Linux Kernel 文檔 Nested VMX 對于嵌套虛擬化特性有詳細(xì)說明困鸥。曾經(jīng)一度認(rèn)為嵌套虛擬化只支持同類虛擬化技術(shù)(例如VMware虛擬機內(nèi)嵌套部署VMware虛擬機,知乎上也有人討論過只要硬件給力理論上是能夠無限嵌套的:虛擬機中運行虛擬機中運行虛擬機……如此循環(huán)能運行多少個剑按?)疾就,最近在研究KVM虛擬機鏡像制作的時候才發(fā)現(xiàn) VMware 實際上也是支持虛擬化 KVM 的(當(dāng)然,前提還是硬件支持)艺蝴,不過實際操作才發(fā)現(xiàn)有些過程并不像網(wǎng)上的文章那么簡單(主要的坑在于 GDK 的 bug)猬腰,這里匯總整理下完整的操作步驟。(本文部分內(nèi)容引用自其他文章吴趴,詳情列于文末以示感謝漆诽。)
NOTE:
- 本文基于 vSphere 6.0 版本操作,其他版本可類比操作锣枝;
- 應(yīng)用嵌套虛擬化之后性能必然有所下降厢拭,也會帶來一定的不穩(wěn)定性,比較適用于需要在 VMware 環(huán)境模擬 KVM 的場景撇叁,不建議使用在生產(chǎn)環(huán)境供鸠。
1. 開啟VMware虛擬機的CPU虛擬化選項
本節(jié)內(nèi)容源自參考文獻[1]:對ESXi主機內(nèi)的虛擬機開啟CPU硬件虛擬化支持
首先,在VMware中創(chuàng)建一臺虛擬機(建議版本 10 以上)陨闹,并安裝 Linux 操作系統(tǒng)(本文安裝的是CentOS 7.2系統(tǒng))楞捂,在虛擬機關(guān)機的情況下做如下配置:
1)登錄VMware桌面客戶端 vsphere client,編輯虛擬機趋厉,設(shè)置“CPU/MMU虛擬化”選項寨闹,配置“使用Intel VT-x/AMD-v進行指令集虛擬化并使用Intel EPT/AMD RVI進行MMU虛擬化”;
2)登錄 VMware 網(wǎng)頁客戶端 vsphere web client 對虛擬機做其他配置(VMware 還是太分裂君账,強行將設(shè)置放在 web 端繁堡,所以這里建議 vSphere 版本在 6.0 以上,web 的支持相對好那么一點點,雖然也還是一樣難用)椭蹄;
3)如果前面創(chuàng)建的虛擬機版本較低(版本9闻牡、10),這里還需要升級虛擬機的兼容性:在虛機上右鍵選擇“兼容性”->“升級虛擬機兼容性”绳矩;
4)再次進入虛擬機的編輯設(shè)置界面罩润,打開 CPU 選項卡,有一行“硬件虛擬化:向客戶機操作系統(tǒng)公開硬件輔助的虛擬化”翼馆,將其打鉤即可打開虛擬機的 CPU 虛擬化功能割以;
VMware 的配置操作到此結(jié)束,接下來是虛擬機內(nèi)部操作应媚。
2. 配置虛擬機 KVM 模塊
本節(jié)內(nèi)容源自文獻[3]:Centos7.4安裝kvm虛擬機(使用virt-manager管理)
1)打開虛擬機電源拳球,登錄虛擬機執(zhí)行以下命令檢查虛擬機是否支持虛擬化:
# grep vmx /proc/cpuinfo
如果該命令有信息輸出,就說明 CPU 支持虛擬化珍特,可以繼續(xù)往下進行;否則 CPU 不支持的情況下無法進行嵌套虛擬化部署魔吐。
注意扎筒,由于大多數(shù)服務(wù)器基于 Intel CPU,本命令只針對 Intel CPU酬姆,對于 AMD CPU 將命令中的 vmx 改成 svm 即可嗜桌。
2)執(zhí)行以下命令查看是否加載KVM模塊:
# lsmod | grep kvm
如果沒有加載,依次執(zhí)行以下命令:
# modprobe kvm
# modprobe kvm-intel(針對Intel CPU)或者 modprobe kvm-amd(針對AMD CPU)
# lsmod | grep kvm
3. 虛擬機環(huán)境安裝
1)將虛擬機 Python 環(huán)境配置為 2.7 版本辞色,并安裝 KVM 與 virt-manager骨宠;
yum install qemu qemu-kvm
yum install virt-manager libvirt libvirt-Python python-virtinst libvirt-client virt-viewer -y
2)為防止出現(xiàn) GDK 圖形界面異常:
DEBUG (cli:257) Uncaught exception:
Traceback (most recent call last):
File "/usr/share/virt-manager/virtManager/createnet.py", line 830, in finish
self.set_finish_cursor()
File "/usr/share/virt-manager/virtManager/baseclass.py", line 272, in set_finish_cursor
cursor = Gdk.Cursor.new_from_name(gdk_window.get_display(), "progress")
TypeError: constructor returned NULL
需要編輯 /usr/share/virt-manager/virtManager/baseclass.py
將其中涉及Gdk.Cursor.new_from_name
行注釋掉(簡單粗暴的操作有時候意外的有效):
#cursor = Gdk.Cursor.new_from_name(gdk_window.get_display(), "progress")
#gdk_window.set_cursor(cursor)
#cursor = Gdk.Cursor.new_from_name(gdk_window.get_display(), "default")
#gdk_window.set_cursor(cursor)
同樣編輯 /usr/share/virt-manager/virtManager/asyncjob.py
將其中涉及 Gdk.Cursor.new_from_name
行注釋掉:
#gdk_window.set_cursor(
# Gdk.Cursor.new_from_name(gdk_window.get_display(), "progress"))
3)在 Terminal 中運行 virt-manager 命令打開 Virtual Machine Manager:
4)如果沒有圖中的 connection,可以新建一個connection(QEMU/KVM)相满;
5)對已有的 connection 創(chuàng)建NAT虛擬網(wǎng)絡(luò):
6)在控制臺界面或者直接使用命令創(chuàng)建新的虛擬機层亿。
創(chuàng)建虛擬機之后,為了防止打開控制臺窗口出現(xiàn)無法連接到圖形界面錯誤:
Error connecting to graphical console: could not get a reference to type class
需要設(shè)置顯示模式為“vnc server”
隨后立美,就可以按照正常的操作系統(tǒng)安裝步驟配置安裝虛擬機了匿又。
Tips
virt-manager 的日志位于 /root/.cache/virt-manager/virt-manager.log
,任何問題均可以查詢?nèi)罩窘ㄌ恪J褂脜?shù)--no-fork
打開virt-manager(virt-manager --no-fork
)可以不輸出日志碌更。
Reference & 致謝
[1] 對ESXi主機內(nèi)的虛擬機開啟CPU硬件虛擬化支持
[2] vSphere 5 文檔中心: 在 vSphere Client 中更改 CPU/MMU 虛擬化設(shè)置
[3] Centos7.4安裝kvm虛擬機(使用virt-manager管理)