微软宣布 Hyper-V 将开始支持嵌套虚拟化,以让大家可以在 Hyper-V 虚拟机中运行 Hyper-V 容器,而在刚发布的 Windows 10 Build 10565 中微软已经开始提供嵌套虚拟化功能的早期预览。之所以说是”早期预览”表明目前已经有许多已知问题,而且功能还并没有完善,只提供给专业人士提前了解功能。
之前我们曾提到过 Hyper-V 需要依靠硬件虚拟化支持(Intel VT-x 或 AMD-V)来运行虚拟机,而不允许在虚拟机中再安装 Hyper-V 进行嵌套。而使用嵌套虚拟化技术则可以将硬件虚拟化层暴露给 Guest OS,这就使得我们可以在 Hyper-V 的 Guest OS 再安装 Hyper-V 来跑虚拟机。
在下图中,我们可以看到目前 Windows 10 Build 10565 Hyper-V 中的 Guest OS 中已可再安装 Hyper-V 嵌套虚拟化出来一个 Windows 10。
通常情况下 Hyper-V 的 hypervisor 层会完全控制虚拟化扩展,不会暴露给 Guest OS。
而在启用嵌套虚拟化之后,Hyper-V 的已经配置虚拟化扩展可直接暴露给 Guest VM,而 Guest VM 可使用这个特性安装自己的虚拟机管理程序来跑 Guest OS。
就像前面所说,该功能是只一个预览功能,不应当在生产环境中进行使用,以下列出已知问题列表:
1创建一个虚拟机
2运行启用脚本
该脚本会自动检测当前 Hyper-V 配置,对不满足条件的配置进行更改(例如禁用动态内存),再启用虚拟机的嵌套虚拟化功能。
- Invoke-WebRequest https://raw.githubusercontent.com/Microsoft/Virtualization-Documentation/master/hyperv-tools/Nested/Enable-NestedVm.ps1 -OutFile ~/Enable-NestedVm.ps1
- ~/Enable-NestedVm.ps1 -VmName
注意:虚拟机必需为关闭状态
3在 Guest VM 中再安装 Hyper-V
4启用网络(可选)
一旦启用 Guest VM 嵌套虚拟化,则必需启用 MAC spoofing 功能之后 Guest VM 里面的 Guest OS 网络才能正常工作。
- Set-VMNetworkAdapter -VMName -MacAddressSpoofing on
5最后我们就可以创建嵌套的 Guest OS 啦。
……