为ECS实例开启嵌套虚拟化功能

更新时间:
复制为 MD 格式

在 ECS 实例内运行 Docker Desktop、WSL2 等依赖虚拟化能力的开发工具,或搭建 KVM 虚拟化测试环境时,可为实例开启嵌套虚拟化功能,使实例获得硬件虚拟化透传能力。

重要

ECS 仅针对 L1 VM 提供完整的技术支持及 SLA 保障。L2 VM 及其内部的所有生命周期管理、补丁、配置、安全加固均由用户负责运维。L2 VM 所部署的所有软件属于客户安装软件或非阿里云直接运营的第三方软件或配置。

概述

嵌套虚拟化(Nested Virtualization)是指在虚拟机内部再次创建虚拟机的技术。传统虚拟化架构中,Hypervisor 直接运行在物理硬件上管理虚拟机;而在嵌套虚拟化场景下,ECS 实例(L1 VM)内部运行的 Hypervisor(如 KVM、Hyper-V)可以再次创建和管理更深层次的虚拟机(L2 VM)。

ECS 嵌套虚拟化功能具有以下特点:

  • 硬件虚拟化透传:将物理 CPU 的虚拟化扩展指令集(Intel VT-x 或 AMD-V)暴露给 L1 实例,使实例中的 Hypervisor 能够直接使用硬件加速能力创建 L2 VM。

  • 无额外计费:使用嵌套虚拟化功能不会产生额外费用,您只需为 ECS 实例及关联资源付费。

  • 灵活规格选择:可在多种标准 ECS 实例规格上启用嵌套虚拟化能力,根据性能和成本需求选择合适的实例类型。

典型应用场景:

  • 开发工具链支持:在 ECS 实例中运行 Docker Desktop、Windows Subsystem for Linux 2 (WSL2)、Android Studio 模拟器、QEMU 等开发工具,这些工具底层依赖虚拟化能力。

  • 沙箱环境构建:基于 E2B 等开源方案构建代码执行沙箱、Agent 运行时环境,实现安全隔离的多租户计算环境。

  • 虚拟化测试与培训:在实例中搭建 KVM、Hyper-V 等虚拟化环境,用于虚拟化技术的学习、测试和演示。

  • 云原生与容器化:在虚拟机内部运行容器运行时,实现虚拟机与容器的混合部署和管理。

使用限制

实例规格支持

嵌套虚拟化功能依赖 CPU 硬件的 VT-x 等虚拟化扩展能力。当前仅以下实例规格支持嵌套虚拟化功能:

代系

实例规格族

实例规格

9 代 Intel

计算型 c9i

  • ecs.c9i.8xlarge

  • ecs.c9i.16xlarge

通用型 g9i

  • ecs.g9i.8xlarge

  • ecs.g9i.16xlarge

内存型 r9i

  • ecs.r9i.8xlarge

  • ecs.r9i.16xlarge

操作系统

  • 当前建议选择 Linux 操作系统作为 L1 实例的操作系统。

  • L2 VM 所使用操作系统的授权、合规性完全由您承担,阿里云无法提供嵌套场景下的操作系统许可证或支持相关服务。

功能限制

  • 嵌套虚拟化功能仅支持在实例创建时或实例已停止状态下配置。对于运行中实例,需先停止实例后才能修改嵌套虚拟化配置。

  • L2 虚拟机的性能相比裸金属实例会有一定损耗,建议对性能敏感的业务场景进行充分的基准测试。

  • 除了满足实例规格变更限制外,开启嵌套虚拟化后进行规格变配时还需遵循以下规则:

    • 若当前实例已开启嵌套虚拟化,目标规格必须也支持嵌套虚拟化功能。若目标规格不支持,变配操作将被拦截。

    • 若当前实例未开启嵌套虚拟化,可以变配到任意规格。

前提条件

  • 实例必须属于支持嵌套虚拟化的实例规格

  • 如需为已有实例开启嵌套虚拟化,请先停止实例

  • 确保 L2 VM 的业务已经做好必要的可用性操作(如业务迁移、主备、容灾等),关键数据已完成备份。

操作步骤

创建实例时开启

控制台

您可以在自定义购买实例时,通过高级选项 > CPU选项勾选启用嵌套虚拟化能力。相关配置项说明如下:

配置项

说明

实例规格

选择支持嵌套虚拟化的实例规格,如 ecs.c9i.8xlarge、ecs.g9i.8xlarge、ecs.r9i.8xlarge。

启用嵌套虚拟化能力

勾选后,实例启动时将加载 KVM 模块,支持在实例内部创建和运行虚拟机。

API

调用 RunInstances 创建实例时,通过 CpuOptions.NestedVirtualization 参数开启嵌套虚拟化。相关参数说明如下:

参数名

类型

描述

CpuOptions.NestedVirtualization

String

是否开启嵌套虚拟化。取值范围:enabled(开启)、disabled(不开启)。

CLI 调用示例:

aliyun ecs RunInstances \
  --RegionId cn-hangzhou \
  --ImageId aliyun_3_x64_20G_alibase_20250117.vhd \
  --InstanceType ecs.g9i.8xlarge \
  --SecurityGroupId sg-bp1****** \
  --VSwitchId vsw-bp1****** \
  --SystemDisk.Category cloud_essd \
  --CpuOptions.NestedVirtualization enabled \
  --Amount 1

修改已有实例

控制台

  1. 访问ECS控制台-实例,在页面左侧顶部选择目标资源所在的地域。

  2. 找到目标实例并停止实例。等待实例进入已停止状态。

  3. 选中实例,单击操作列下的实例设置 > 更改 CPU 选项。也可以在实例详情页的配置信息卡片中找到嵌套虚拟化选项,单击调整

  4. 在弹出的更改 CPU 选项窗口中,将嵌套虚拟化选项设置为开启,单击确定

    重要

    嵌套虚拟化调整将直接影响当前实例上的 L2 VM 状态,操作前请确保相关服务已执行必要的可用性操作(如业务迁移、主备、容灾等),关键数据已完成备份。

  5. 返回实例列表,启动实例。等待实例启动完成。

API

  1. 调用 StopInstance 停止实例。

  2. 调用 ModifyInstanceAttribute 开启嵌套虚拟化。相关参数说明如下:

    参数名

    类型

    描述

    CpuOptions.NestedVirtualization

    String

    是否开启嵌套虚拟化。取值范围:enabled(开启)、disabled(不开启)。

  3. 调用 StartInstance 启动实例。

CLI 调用示例:

# 停止实例
aliyun ecs StopInstance --InstanceId i-bp1******

# 开启嵌套虚拟化
aliyun ecs ModifyInstanceAttribute --InstanceId i-bp1****** --CpuOptions.NestedVirtualization enabled

# 启动实例
aliyun ecs StartInstance --InstanceId i-bp1******

常见问题

嵌套虚拟化会产生额外费用吗?

不会。嵌套虚拟化功能本身不产生额外费用。

实例开启嵌套虚拟化后,是否可以在上面任意创建 L2 虚拟机?

不建议。创建 L2 虚拟机的数量较多时,实例可能无法保持正常运行。建议提前做好业务验证测试,确保负载稳定可运行,并对 L1 VM 进行必要的备份。

L2 虚拟机的性能损耗有多大?

L2 虚拟机的性能损耗取决于工作负载类型。建议在使用嵌套虚拟化能力前,使用主流 Benchmark 工具对业务进行充分的性能测试,并自行承担相关性能风险。如果业务对 IO 的敏感度较高,或侧重系统调用、上下文切换等场景,建议优先选择裸金属实例部署相关业务。

后续步骤

  • 登录实例,安装并配置 Hypervisor(如 KVM、QEMU),在实例内部创建 L2 虚拟机。

  • 运行 lscpu 或查看 /proc/cpuinfo 确认虚拟化扩展(VT-x/AMD-V)已启用。