微软终于在Windows2016&Windows10中支持了嵌套虚拟化,嵌套虚拟化就是在Hyper-v虚拟机中创建Hyper-v,它的使用场景大多用来做测试,比如在虚拟化容器主机中运行Hyper-V容器,我们不需要更多的物理资源,以前我们部署Hyper-v群集至少需要2台支持虚拟化的物理服务器,有了嵌套虚拟化我们只需要一只高配的服务器即可,本文档将详细介绍软件和硬件先决条件,配置步骤和限制

先决条件:

  • 运行Windows Server 2016或Windows 10周年更新的Hyper-V主机。

  • 运行Windows Server 2016或Windows 10周年更新的Hyper-V VM。

  • 配置版本为8.0或更高版本的Hyper-V VM。

  • 采用VT-x和EPT技术的英特尔处理器。

配置嵌套虚拟化:

1、创建一个先决条件中支持的Windows版本虚拟机

2、确保刚创建的虚拟机处于关机状态,在物理服务器的Powershell中运行以下命令

Set-VMProcessor -VMName <VMName> -ExposeVirtualizationExtensions $true

禁止嵌套命令为:

Set-VMProcessor -VMName <VMName> -ExposeVirtualizationExtensions $false

3、动态内存和运行时内存调整大小

当Hyper-V在虚拟机中运行时,必须关闭虚拟机以调整其内存。 这意味着即使启用动态内存,内存量也不会波动。 对于未启用动态内存的虚拟机,任何尝试在启动时调整内存量的尝试都将失败。

请注意,简单地启用嵌套虚拟化将不会影响动态内存或运行时内存调整大小。 不兼容性仅在Hyper-V在VM中运行时发生。

4、网络选项

使用嵌套虚拟机进行网络连接有两个选项:MAC地址欺骗和NAT模式

MAC地址欺骗

为了通过两个虚拟交换机路由网络数据包,必须在虚拟交换机的第一级上启用MAC地址欺骗,可以通过Powershell完成

Get-VMNetworkAdapter -VMName <VMName> | Set-VMNetworkAdapter -MacAddressSpoofing On

网络地址转换

第二个选项依赖于网络地址转换(NAT)。 此方法最适合于不可能进行MAC地址欺骗的情况,例如在公共云环境中。

首先,必须在主机虚拟机(“中间”VM)中创建虚拟NAT交换机。 请注意,IP地址只是一个示例,并且会因环境而异:

new-vmswitch -name VmNAT -SwitchType Internal
New-NetNat –Name LocalNAT –InternalIPInterfaceAddressPrefix “192.168.100.0/24”

接下来,为网络适配器分配一个IP地址:

get-netadapter "vEthernet (VmNat)" | New-NetIPAddress -IPAddress 192.168.100.1 -AddressFamily IPv4 -PrefixLength 24

每个嵌套虚拟机必须分配有IP地址和网关。 请注意,网关IP必须指向上一步中的NAT适配器。 您可能还需要分配DNS服务器:

get-netadapter "Ethernet" | New-NetIPAddress -IPAddress 192.168.100.2 -DefaultGateway 192.168.100.1 -AddressFamily IPv4 -PrefixLength 24
Netsh interface ip add dnsserver “Ethernet” address=<my DNS server>

PS:在Hyper-V虚拟机中不支持Hyper-V以外的虚拟化应用程序,并且可能会失败