Windows Server 2016 Hyper-v Nested Virtualization

在Windows Server 2016没有发布以前,作为屌丝的我们在没有太多物理机的情况下如果想要做Hyper-v群集的实验就必须使用VMWare Workstation的嵌套虚拟化技术!

但是随着Windows Server 2016的发布,微软已经允许我们在Hyper-v平台上使用嵌套虚拟化技术!嵌套虚拟化是一个允许我们在Hyper-v虚拟机中运行Hyper-v虚拟机的功能。换句话来说,通过Windows Server 2016的嵌套虚拟化功能,Hyper-v主机本身可以被虚拟化。

Windows Server 2016的嵌套虚拟化技术主要应用于以下场景:

1、在虚拟化容器主机中运行Hyper-v容器。

2、在虚拟化环境中运行Hyper-v实验。

3、在不需要单独硬件的情况下测试多机器的场景

如果想使用Windows Server 2016的嵌套虚拟化技术,必须满足如下先觉条件:

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

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

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

4、采用VT-x和EPT技术的Intel处理器。

注意:

在Windows Server 2016中开启嵌套虚拟化技术以后,动态内存和运行时调整内存大小功能将不可用:

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

说了这么多下面我们来看一下如何在Windows Server 2016中配置嵌套虚拟化。

本次实验我将对虚拟机Nested开启嵌套虚拟化技术:

clip_image002

首先我们使用管理员身份运行WindowsPowershell,键入如下命令:

Get-VMProcessor -VMName Nested | FL

可以看到,当前“ExposeVirtualizationExtensions”的值为Fales,也就是说明目前虚拟机“Nested”没有开启嵌套虚拟化技术:

clip_image003

我们启用Hyper-v将会提示如下错误:

clip_image005

键入如下PS命令来启用嵌套虚拟化:

Set-VMProcessor -VMName Nested -ExposeVirtualizationExtensions $True

clip_image007

执行完成以后检查“ExposeVirtualizationExtensions”,运行如下命令

Get-VMProcessor -VMName Nested | FL

clip_image009

我们开启计算机Nested并启用Hyper-v功能:

clip_image011嵌套虚拟化功能启用成功:

clip_image013

如果想关闭嵌套虚拟化功能可以使用如下PS命令:

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