前言
在 Hyper-V 虛擬化化平台舊版本中,要實作出 Nested Virtualization 環境非常困難。現在,Windows Server 2016 直接內建支援「Nested Virtualization in Windows Server Hyper-V」機制,往後 IT 管理人員建置 Lab 環境將更方便了。簡單來說,在舊版的 Hyper-V 虛擬化平台當中僅支援 Level 0、Level 1 這樣的運作架構。
現在,可以在 Hyper-V Hypervisor (Level 1) 當中,再產生出一層 Guest Hypervisor (Level 2) 並且能夠運作 Guest OS,甚至 Level 2 的 VM 虛擬主機還能再次產生出一層 Guest Hypervisor (Level 3) 並運作 Guest OS。
下列為目前 Hyper-V Nested Virtualization 的環境需求及相關限制:
- 實體主機 CPU 必須支援 Intel VT-x 及 EPT 硬體輔助虛擬化技術,作業系統必須採用 Windows 10 年度更新版 (Enterprise, Professional, Education) 或 Windows Server 2016 (Standard, Datacenter)。
- 必須為擔任 Guest Hypervisor 的 VM 虛擬主機啟用 vCPU Virtualization Extensions 功能。
- 必須為擔任 Guest Hypervisor 啟用 MAC Address Spoofing 功能,否則屆時建立的 Guest OS 網路連線會發生不通的情況。
- 必須為擔任 Guest Hypervisor 採用第 2 世代及 8.0 版本格式的 VM 虛擬主機。
- 必須要停用 VM 動態記憶體功能,同時為 VM 虛擬主機執行 Runtime Memory Resize 的動作時會失敗。
實作 Hyper-V Nested Virtualization
首先,我們可以看到在 Level 1 的 Hyper-V Host 中,所建立的 VM 虛擬主機採用 Coreinfo 檢查後可以發現,目前的 VM 虛擬主機「尚未感知」到母體的虛擬化功能。同時,當你嘗試為 VM 虛擬主機 (準備擔任 Guest Hypervisor) 安裝 Hyper-V 伺服器角色時,將會發現無法順利安裝。請在 Level 1 的 Hyper-V Host 中,執行下列指令將 Hyper-V Host 的硬體輔助虛擬化技術「傳遞」給 VM 虛擬主機 (此實作該 VM 的名稱為 WS2016-Nested,當然前提是 Hyper-V Host 支援 Intel VT-x / EPT 硬體輔助虛擬化技術)。但是,請先將準備擔任 Guest Hypervisor 的 VM 虛擬主機關機,倘若 VM 虛擬主機未關機的話,稍後執行 vCPU Virtualization Extensions 的動作時,將會發生 PowerShell 指令執行失敗的情況。
順利將擔任 Guest Hypervisor 的 VM 虛擬主機關機後,便可以執行 PowerShell 指令「Set-VMProcessor -VMName <VMName> -ExposeVirtualizationExtensions $true」,為 Guest Hypervisor 的 VM 虛擬主機 (此實作中名稱為 WS2016-Nested)啟用「vCPU Virtualization Extenstions」的功能。
此時,重新將擔任 Guest Hypervisor 的 VM 虛擬主機 (WS2016-Nested) 開機後,再度使用 Coreinfo 檢查後可以發現,目前已經可以「感知」到 Hyper-V Host 所傳遞過來的硬體輔助虛擬化技術。當然,也就可以順利安裝 Hyper-V 伺服器角色了。
下列為 Hyper-V Nested Virtualization 巢狀虛擬化實作階層說明:
Level 1 (實體伺服器、Hyper-V Hypervisor、Guardhost01)
Level 2 (Guest Hypervisor、WS2016-Nested)
Level 3 (Guest OS、WS2016)
下列為 Hyper-V Nested Virtualization 巢狀虛擬化實作階層說明:
Level 1 (實體伺服器、Hyper-V Hypervisor、Guardhost01)
Level 2 (Guest Hypervisor、WS2016-Nested)
Level 3 (Guest Hypervisor、WS2016)
Level 4 (Guest OS、WS2016-Inner)