實作 Hyper-V Nested Virtualization

前言

在 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 1Hyper-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 伺服器角色了。



至此,我們完成為 Level 1 的 VM 虛擬主機啟用 Guest Hypervisor 功能。記得,啟用 MAC Address Spoofing 功能,否則屆時建立的 Guest OS 網路連線會發生不通的情況。


下列為 Hyper-V Nested Virtualization 巢狀虛擬化實作階層說明:
     Level 1 (實體伺服器、Hyper-V Hypervisor、Guardhost01)
          Level 2 (Guest Hypervisor、WS2016-Nested)
               Level 3 (Guest OS、WS2016)



同樣的組態設定方式,我們可以為 Level 3 的 VM 虛擬主機啟用 Guest Hypervisor 功能,建立出 Level 4 的 VM 虛擬。

下列為 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)






參考資源