什么是嵌套虚拟化?
什么是嵌套虚拟化?
嵌套虚拟化是Hyper-V的一项高级功能,它允许在虚拟机(VM)中运行另一个虚拟化环境。这项技术可以为测试、开发和培训等场景提供更灵活的解决方案。本文将为您详细介绍嵌套虚拟化的概念、应用场景以及使用注意事项。
什么是嵌套虚拟化?
嵌套虚拟化是Hyper-V的一项功能,它允许在Hyper-V虚拟机(VM)中运行另一个Hyper-V环境。随着硬件技术的发展,嵌套虚拟化的应用场景也在不断扩展,包括:
- 在嵌套VM中运行应用程序或仿真器
- 在VM上测试软件发行版
- 减少训练环境的部署时间
- 对容器使用Hyper-V隔离
现代处理器包含可加速虚拟化并增强安全性的硬件功能,如Intel VT-x和AMD-V。Hyper-V依赖这些硬件扩展来运行虚拟机。嵌套虚拟化则进一步将这些硬件支持开放给来宾虚拟机。
下图展示了没有嵌套的Hyper-V架构。Hyper-V虚拟机监控程序完全控制硬件虚拟化功能(橙色箭头),并不向来宾操作系统公开这些功能。
而下图则展示了已启用嵌套虚拟化的Hyper-V架构。在这种情况下,Hyper-V会向其虚拟机公开硬件虚拟化扩展。启用嵌套后,来宾虚拟机可以安装自己的虚拟机监控程序并运行自己的来宾VM。
动态内存和运行时内存大小调整
当Hyper-V在虚拟机内运行时,必须关闭虚拟机才能调整其内存。这意味着即使启用了动态内存,内存量也不会波动。仅启用嵌套虚拟化不会影响动态内存或运行时内存大小调整。
对于未启用动态内存的虚拟机,在运行时尝试调整内存量会失败。这种不兼容性仅在Hyper-V在VM中运行时出现。
第三方虚拟化应用
Hyper-V虚拟机中不支持除Hyper-V之外的虚拟化应用程序,这些应用程序可能会失败。虚拟化应用程序包括需要硬件虚拟化扩展的任何软件。
支持的方案
在以下方案中,Azure和本地都支持在生产环境中使用嵌套的Hyper-V VM。我们还建议确保你的服务和应用程序也受支持。嵌套虚拟化不适用于Windows Server故障转移群集和性能敏感型应用程序。建议全面评估服务和应用程序。
Hyper-V VM上的Hyper-V VM
运行嵌套在Hyper-V VM上的Hyper-V VM非常适合测试实验室和评估环境。特别是在可以轻松修改配置,并且可以使用保存的状态来还原特定配置的情况下。测试实验室通常不需要与生产环境相同的服务级别协议(SLA)。
如果生产环境运行的Hyper-V VM正在Hyper-V VM上运行,那么这些生产环境受到支持。不过,建议确保你的服务和应用程序也受支持。如果在生产环境中使用嵌套的Hyper-V VM,建议全面评估服务或应用程序是否提供预期行为。
Hyper-V虚拟化上的第三方虚拟化
虽然第三方虚拟化可能能够在Hyper-V上运行,但Microsoft不对这种方案进行测试。不支持Hyper-V虚拟化上的第三方虚拟化,请确保你的虚拟机监控程序供应商支持此方案。
第三方虚拟化上的Hyper-V虚拟化
虽然Hyper-V虚拟化可能能够在第三方虚拟化上运行,但Microsoft不对此方案进行测试。不支持第三方虚拟化上的Hyper-V虚拟化,请确保你的虚拟机监控程序供应商支持此方案。
嵌套在Hyper-V VM上的Azure Stack HCI
Azure Stack HCI经过设计和测试,可在经过验证的物理硬件上运行。Azure Stack HCI可以在虚拟机中嵌套运行来进行评估,但不支持嵌套配置中的生产环境。
在Hyper-V上嵌套运行的Hyper-V隔离容器
Microsoft为容器提供了Hyper-V隔离。此隔离模式在主机和容器版本之间提供增强的安全性和更广泛的兼容性。借助Hyper-V隔离,多个容器实例可在主机上并发运行。每个容器在经过高度优化的虚拟机内部运行,并有效地获得它自己的内核。由于Hyper-V隔离容器通过其自身与容器主机之间的虚拟机监控程序层来提供隔离,因此当容器主机是基于Hyper-V的虚拟机时,会产生性能开销。在容器启动时间、存储、网络和CPU操作方面会产生相关的性能开销。
Hyper-V隔离容器在Hyper-V VM中运行时,是以嵌套方式运行的。使用Hyper-V VM可实现很多有用的方案,但着也会增加延迟,因为有两个级别的虚拟机监控程序在物理主机上运行。
支持运行嵌套在Hyper-V上的Hyper-V隔离容器。生产环境中支持一级嵌套虚拟化,这允许对隔离的容器进行部署。
在Hyper-V上嵌套运行的Hyper-V VM中运行WSL2
适用于Linux的Windows子系统(WSL)是Windows操作系统的一项功能,除了使用Linux命令行工具和GUI应用,还可通过该功能直接在Windows上运行Linux文件系统。
支持在Hyper-V上嵌套运行的Hyper-V VM中运行WSL2。
后续步骤
- 借助嵌套虚拟化在虚拟机中运行Hyper-V
本文原文来自微软官方文档