在Windows Server 2016 Hyper-V中开启嵌套虚拟化(NestedVM)
2016年 早期如果我们想做Hyper-V功能测试,例如Hyper-V Cluster或者Hyper-V Replica时至少使用两台物理机器实现,作为大众屌丝没那么多钱购买机器怎么办?——嵌套虚拟化。嵌套虚拟化,顾名思义,即在虚拟机中运行虚拟机。该技术最早出现在VMware产品中,包括我,早期介绍Windows Server 2012 R2 Hyper-V时也不得不借助VMware产品实...
2016年
早期如果我们想做Hyper-V功能测试,例如Hyper-V Cluster或者Hyper-V Replica时至少使用两台物理机器实现,作为大众屌丝没那么多钱购买机器怎么办?——嵌套虚拟化。嵌套虚拟化,顾名思义,即在虚拟机中运行虚拟机。该技术最早出现在VMware产品中,包括我,早期介绍Windows Server 2012 R2 Hyper-V时也不得不借助VMware产品实现Hyper-V高级功能测试。
随着Windows Server 2016的正式发布,微软服务器虚拟化产品Hyper-V也带来了该技术,即在Hyper-V虚拟机内运行Hyper-V。通过使用嵌套虚拟化,我们可以继续先前所说的高大上的功能,也能够进行Windows Server 2016中另外一个新功能-Hyper-V Container【后续为大家带来】。
其实作为IT人员或者企业管理员,大家都有一个共识:嵌套虚拟化技术似乎并不能在生产环境当中发挥任何重要作用。那么究竟应该在哪些情况中使用嵌套虚拟化技术呢?既然不能在生产环境发挥重要作用,为什么还大费周章开发这项技术?
个人认为使用嵌套虚拟化技术目前主要有以下场景:
第一:利用嵌套虚拟化技术搭建开发环境或者测试环境
过去,需要使用专用的物理服务器才能够完成一系列开发测试工作,因为需要在物理服务器当中安装 hypervisor,之后按照需求创建虚拟机。使用这种方式的问题在于成本过高。IT部门没有足够的预算为开发/测试环境购买专用硬件。即便预算方面不存在问题,如果硬件使用率很低,也很难证明专用服务器的必要性。
嵌套虚拟化技术可以解决这种问题,它允许IT部门在独立环境当中创建开发/测试虚拟机,并且不会产生任何专用硬件开销。企业可以在一个单独的虚拟 Hyper-V服务器当中搭建完整的开发/测试环境。确实,这台运行Hyper-V服务器的虚拟机需要大量内存、虚拟 CPU 和存储才能够保证虚拟化环境高效运行,但是Hyper-V能够支持大规模虚拟机。即便是这样的大型虚拟机也不会消耗过多的硬件资源,因此不用担心需要购买额外的 硬件服务器。
第二:培训
用户在进行Hyper-V培训过当中肯定不希望一个没有任何经验的管理员操作生产环境当中的Hyper-V服务器。但是可以使用嵌套虚拟化技术搭建一个全新环境,让没有经验的管理员“安全”学习Hyper-V的各种原理与技术。
第三:“屌丝版”私有云
Hyper-V 嵌套虚拟化特性允许IT管理员为有经验的用户提供虚拟Hyper-V服务器,将其作为私有云的替代解决方案。由于这些Hyper-V服务器是虚拟的,因此管理员能够限制资源使用情况,就像在真正的私有云环境当中一样。Windows Server 2016当中的Hyper-V甚至支持动态增加内存和网卡,意味着管理员可以在 不产生任何中断的情况下为虚拟 Hyper-V 服务器添加额外的硬件资源。
不过就目前而言最大的作用就是解决实验时机器不够用的问题。
先决条件
- 运行 Windows Server 2016 或 Windows 10 周年更新的 Hyper-V 主机。
- 运行 Windows Server 2016 或 Windows 10 周年更新的 Hyper-V VM。
- 配置版本为 8.0 或更高的 Hyper-V VM。
- 采用 VT-x 和 EPT 技术的 Intel 处理器(AMD-V技术的暂时不支持)
配置嵌套虚拟化
1、 在Windows Server 2016中启用Hyper-V角色,创建一台虚拟机
2、 以管理员身份运行Windows PowerShell,使用以下命令开启Hyper-V嵌套虚拟化
Set-VMProcessor -VMName NestedVM -ExposeVirtualizationExtensions $true
3、 启动并连接虚拟机“NestedVM”
4、 在虚拟机“NestedVM”中安装Hyper-V角色
5、 在早期build中,如果想启用Hyper-V嵌套虚拟化,还必须进行另一项设置:启用MAC 地址欺骗,但是最新的RTM版本并不需要单独进行设置,如果还想启用MAC 地址欺骗,您可以使用命令行或者GUI操作
Get-VMNetworkAdapter -VMName NestedVM | Set-VMNetworkAdapter -MacAddressSpoofing On
6、 如果想禁用嵌套虚拟化,可使用以下 PowerShell 命令禁用已停止虚拟机的嵌套虚拟化
Set-VMProcessor -VMName NestedVM -ExposeVirtualizationExtensions $false
在早期build中,当启用嵌套虚拟化技术之后,如下功能无法使用:
- 动态内存必须被关闭;
- Runtime内存大小调整失败;
- 虚拟机中的检查点功能不能正常工作;
- 不能进行实时迁移操作;
- 无法使用虚拟机“保存”和“恢复”;
在Windows Server 2016 Hyper-V中启用嵌套虚拟化之后如下功能依然不可用
- 动态内存必须被关闭;
- Runtime内存大小调整失败;
可以使用Hyper-V中的“保存”和“恢复”
最早在build10565时写过一篇在Windows 10下启用Hyper-V嵌套虚拟化技术,有兴趣的朋友可以前往我的51CTO博客:
Microsoft 嵌套虚拟化技术(Nested Virtualization)
更多推荐
所有评论(0)