利用嵌套虚拟化在 Amazon EC2 实例中运行虚拟机监控程序 - Amazon Elastic Compute Cloud
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

利用嵌套虚拟化在 Amazon EC2 实例中运行虚拟机监控程序

使用嵌套虚拟化,您可以在虚拟 Amazon EC2 实例内运行虚拟机监控程序,例如 Hyper-V 和 KVM。虚拟的 EC2 实例是非裸机实例。此功能通过为虚拟的 EC2 实例添加处理器级虚拟化支持,增强了虚拟化的灵活性,使得运行在实例中的虚拟机监控程序能够创建和管理虚拟机。

当您在开发工作流程中运行 Docker Desktop、Windows Subsystem for Linux 2(WSL2)、Android Studio 模拟器或 QEMU 等开发工具时,采用嵌套虚拟化技术会非常有用,因为它能让您从众多符合您特定性能和价格要求的标准 Amazon EC2 虚拟实例类型中进行选择。

使用嵌套虚拟化技术无需额外付费。

工作原理

虚拟 EC2 实例在装有 Nitro 虚拟机监控器的物理主机上运行。为了支持嵌套虚拟化,Nitro System 会将处理器扩展程序(例如 Intel VT-x)传递给各个实例,以方便运行嵌套虚拟机。嵌套虚拟化架构由三层组成:物理 Amazon 基础设施和 Nitro 虚拟机监控器(L0)、运行虚拟机监控程序的 EC2 实例(L1),以及在该实例中创建的一台或多台虚拟机(L2)。

注意事项

在开始使用嵌套虚拟化之前,请考虑以下几点:

  • 支持的实例类型:C8i、M8i 和 R8i 实例目前支持嵌套虚拟化。

  • 支持的虚拟机监控程序:目前,KVM 和 Hyper-V 是所支持的 L1 虚拟化监控程序。

  • Windows 实例:在 Windows 实例上启用嵌套虚拟化时:

    • 凭证保护:虚拟安全模式(VSM)已自动禁用。

    • 休眠:不支持实例休眠和恢复。

    • CPU 限制:在 CPU 超过 192 的 Windows 实例上不受支持,例如 m8i.96xl

  • 安全责任:在 EC2 实例上使用嵌套虚拟化时,Amazon 负责“云安全”、保护底层基础设施并维护 Amazon Nitro System 提供的 EC2 实例之间的坚固隔离边界。客户负责“云安全”,包括保护 EC2 实例中的操作系统、虚拟机监控程序、嵌套虚拟机、访客操作系统、应用程序和数据的安全。

  • 性能:Amazon 建议那些希望运行需要使用硬件虚拟化扩展程序的工作负载、并且对性能有较高要求或者对延迟有严格限制的客户,来评估裸机实例。

在启用了嵌套虚拟化的情况下启动新实例

启动新实例时,您可以开启嵌套虚拟化功能,以便在此实例上运行虚拟机监控程序和虚拟机。

先决条件

您必须拥有启动 Amazon EC2 实例所需的 IAM 权限。

Console
要在实例启动期间启用嵌套虚拟化
  1. 按照 使用控制台中的启动实例向导来启动 EC2 实例 程序进行操作并根据需要配置实例。

  2. 确保选择了支持的实例类型。

  3. 展开高级详细信息,对于嵌套虚拟化,请选择启用

  4. Summary(摘要)面板中查看实例配置,然后选择 Launch instance(启动实例)。

Amazon CLI
要在启用嵌套虚拟化的情况下启动实例

可以使用 run-instances 命令。

aws ec2 run-instances \ --image-id ami-0abcdef1234567890 \ --instance-type r8i.4xlarge \ --cpu-options "NestedVirtualization=enabled" \ --key-name my-key-pair \ --placement "Tenancy=host"
PowerShell
要在启用嵌套虚拟化的情况下启动实例

使用 New-EC2Instance 命令。

New-EC2Instance `     -ImageId ami-0abcdef1234567890 `     -InstanceType r8i.4xlarge `     -CpuOption @{NestedVirtualization='enabled'} `     -KeyName my-key-pair `     -Placement_Tenancy host

将现有实例配置为使用嵌套虚拟化

您可以在现有 Amazon EC2 实例上开启嵌套虚拟化。

先决条件
  • 该实例必须处于 stopped 状态。

  • 该实例类型必须支持嵌套虚拟化。

Console
要在现有实例上启用嵌套虚拟化
  1. 通过以下网址打开 Amazon EC2 控制台:https://console.aws.amazon.com/ec2/

  2. 在导航窗格中,选择 Instances (实例)

  3. 从实例表中选择要修改的实例。

  4. 选择操作实例设置更改 CPU 选项

  5. 更改 CPU 选项页面上,对于嵌套虚拟化,选择以下选项之一:

    • 启用:为实例开启嵌套虚拟化

    • 禁用:为实例关闭嵌套虚拟化

  6. 查看您的更改,然后选择更改,以应用新的 CPU 选项。

Amazon CLI
要在现有实例上启用嵌套虚拟化

首先停止实例,然后使用 modify-instance-cpu-options 命令。

aws ec2 modify-instance-cpu-options \ --instance-id i-1234567890abcdef0 \ --core-count 4 \ --threads-per-core 2 \ --nested-virtualization enabled
PowerShell
要在现有实例上启用嵌套虚拟化

首先停止实例,然后使用 Edit-EC2InstanceCpuOption 命令。

Edit-EC2InstanceCpuOption `     -InstanceId i-1234567890abcdef0 `     -CoreCount 4 `     -ThreadsPerCore 2 `     -NestedVirtualization enabled