在Hyper-V虛擬化平台舊版本中,要實作出Nested Virtaulization的環境非常困難。但是從Windows Server 2016 TP4(10565)版本之後,Hyper-V開始支援「Nested Virtualization」機制,往後要建置Lab環境將更容易了。接下來用圖來說明舊版與新版的差別。
圖片參考來源:MSDN-Nested Virtualization
但是,Hyper-V必須在以下的環境需求才可作Nested Virtualization:
- 實體主機CPU必須搭載Intel VT-x與EPT技術的處理器。
- 作業系統必須為Windows Server 2016(Standard , Datacenter)或Windows 10周年更新版(Enterprise, Professional, Education)
- Nested VM 至少要指派4GB虛擬記憶體空間。
- VM虛擬主機必須啟用vCPU Virtualization Extensions功能。
- VM 虛擬主機必須啟用MAC Address Spoofing 功能。
- Level 1的Hyper-V Hypervisor 及 Level 2的Hyper-V Hypervisor,應該採用相同版本。
Level 2上運作的VM(Nested VM)的限制:
- 上層的Device Guard機制無法套用
- 上層的VBS(Virtualization Based Security)機制無法套用
- 必須停用VM動態記憶體功能
- Runtime Memory Resize機制會失敗
- Checkpoint會失敗
- Live Migration會失敗
- Save/Restore會失敗
一開始,在Level 1 的Hyper-V Host中,所建立的WINSER-2016虛擬主機採用Coreinfo檢查後發現,目前此虛擬主機尚未知道母體的虛擬化功能。此時,在此虛擬主機上安裝Hyper-V 伺服器角色時,將會失敗(如下圖所示)。
Step1:開啟Powershell輸入以下指令執行vCPU Virtualization Extensions
Set-VMProcessor –VMName <VMName> -ExposeVirtualizationExtensions $true (此LAB中的VM名稱為WINSER-2016)
※因為未將虛擬機器關機而執行此指令,所以出現執行失敗的錯誤訊息
Step4:此時,再透過Cortinfo檢查後發現,目前虛擬主機已經知道母體的虛擬化功能。接著再次在WINSER-2016虛擬主機上安裝Hyper-V 伺服器角色時,就可順利安裝了(如下圖所示)。
Step5:執行此指令「Set-VMMemory –VMName WINSER-2016 –DynamicMemoryEnable $false」將WINSER-2016虛擬機器的動態記憶體關閉(如下圖所示)。
Step6:執行此指令「Get-VMNetworkAdapter –VMName WINSER-2016 |Set-VMNetworkAdapter –MacAddressSpoofing On」來啟用MAC Address Spoofing功能,避免建立的Guest OS 會發生網路連線不通的情況(如下圖所示)。
完成以上步驟的設定,接下來在WINSER-2016虛擬主機開啟Hyper-V Manager,來建立一台虛擬機WINSER-2016-2,看看是否會成功(如下圖所示)
WINSER-2016-2已建立成功,並可安裝Guest OS。
WINSER-2016-2已建立成功,並可安裝Guest OS。
沒有留言:
張貼留言