2016年12月20日 星期二

Windows Server 2016 Hyper-V 強大新功能-巢狀虛擬化)


    在Hyper-V虛擬化平台舊版本中,要實作出Nested Virtaulization的環境非常困難。但是從Windows Server 2016 TP4(10565)版本之後,Hyper-V開始支援「Nested Virtualization」機制,往後要建置Lab環境將更容易了。接下來用圖來說明舊版與新版的差別。



圖片參考來源:MSDN-Nested Virtualization


    在以前舊版的Hyper-V虛擬化平台,僅支援Level 0、Level 1的運作架構。現在,新版的Hyper-V Hypervisor(Level 1)中,再產生出一層Hyper-V Hypervisor(Level 2),並且可運作Guest OS。(如下圖所示)
圖片參考來源:MSDN-Nested Virtualization




但是,Hyper-V必須在以下的環境需求才可作Nested Virtualization:

  • 實體主機CPU必須搭載Intel VT-xEPT技術的處理器。 
  • 作業系統必須為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會失敗

現在,讓我們來實作Hyper-V Nested Virtualization吧

一開始,在Level 1Hyper-V Host中,所建立的WINSER-2016虛擬主機採用Coreinfo檢查後發現,目前此虛擬主機尚未知道母體的虛擬化功能。此時,在此虛擬主機上安裝Hyper-V 伺服器角色時,將會失敗(如下圖所示)。


 
要解決此問題,需在Level 1 Hyper-V Host 中,執行下列指令將Hyper-V Host的硬體輔助虛擬化技術傳送給WINSER-2016此虛擬機器。前提是Hyper-V Host 支援Intel VT-x /EPT。但在執行這些指令時,必須先將WINSER-2016此虛擬機器關機。否則在執行vCPU Virtualization Extensions的動作時,會執行失敗(如下圖所示)。

Step1:開啟Powershell輸入以下指令執行vCPU Virtualization Extensions

Set-VMProcessor –VMName <VMName> -ExposeVirtualizationExtensions $true (此LAB中的VM名稱為WINSER-2016)
※因為未將虛擬機器關機而執行此指令,所以出現執行失敗的錯誤訊息


Step2:將此VM 關機,再次執行此指令,成功將WINSER-2016此虛擬主機開啟「vCPU Virtualization Extensions」的功能。 (如下圖所示)。




Step3:執行「Get-VMProcessor –VMName WINSER-2016 |fl」確認WINSER-2016虛擬主機的ExposeVirtualizationExtensions已開啟(如下圖所示)。



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。


安裝完畢後,可看到此結果,在SWOTW-LAB(實體主機)上有一台WINSER-2016的虛擬主機,在WINSER-2016(虛擬主機)上還有一台WINSER-2016-2的虛擬主機,表示Hyper-V Nested Virtualization成功。透過同樣的組態設定方式,還可以在Level 3 (WINSER-2016-2)的虛擬主機啟用Guest Hypervisor功能,建立出Level 4的虛擬主機,大家如果有興趣,不妨可以實作看看。







沒有留言:

張貼留言