AWS 终于支持非裸金属实例的嵌套虚拟化了!成本直降 95%

AWS Nested Virtualization

AWS 终于支持非裸金属实例的嵌套虚拟化了!成本直降 95%

2026年2月12日,AWS 悄悄地在 EC2 API 中加入了一个重磅功能:非裸金属实例的嵌套虚拟化支持。这个更新对于需要在云上运行虚拟机的开发者来说,简直是个大喜讯。

在此之前,如果你想在 AWS 上使用嵌套虚拟化(比如在 EC2 实例里跑 KVM、Docker Desktop 或 Firecracker),唯一的选择就是昂贵的裸金属实例。最便宜的 m5.metal 实例每月要花 $3,364,对于只想跑几个测试虚拟机的开发者来说,这个价格实在是太不友好了。

现在,AWS 终于在第8代 Intel 实例(c8i、m8i、r8i 系列)上支持了嵌套虚拟化,最小的 m8i.large 实例每月只需 $70,成本直接降低了 97.9%

🎯 什么是嵌套虚拟化?

简单来说,嵌套虚拟化就是"虚拟机里跑虚拟机"。在云计算环境中,这意味着:

  • L0 层:AWS 的物理服务器和 Nitro System hypervisor
  • L1 层:你的 EC2 实例(已经是虚拟机了)
  • L2 层:在 EC2 实例内创建的虚拟机

这种技术允许你在云虚拟机中运行自己的虚拟化环境,比如 KVM、Firecracker、Kata Containers 等。对于开发测试、CI/CD、容器隔离等场景非常有用。

📊 AWS 嵌套虚拟化的演进

时间 支持情况
2026年2月12日之前 仅支持裸金属实例(m5.metal、c5.metal 等)
2026年2月12日 新增第8代 Intel 实例支持(c8i、m8i、r8i 系列)
当前 标准虚拟化实例 + 裸金属实例双轨支持

⚙️ 技术实现原理

AWS 通过在 EC2 实例中暴露 Intel VT-x(Intel Virtualization Technology) 指令集来实现嵌套虚拟化。简单来说:

  1. 物理主机使用 AWS Nitro System(基于 KVM 的安全加固 hypervisor)
  2. L1 实例(你的 EC2)获得 VT-x 扩展支持
  3. L1 实例内的 hypervisor(如 KVM)可以利用硬件辅助虚拟化创建 L2 虚拟机

这样一来,嵌套虚拟化的性能损耗可以控制在 10% 左右,对于大多数开发测试场景来说完全可以接受。

💻 支持的实例类型

目前支持嵌套虚拟化的是第8代 Intel 实例系列,这些实例采用 定制版 Intel Xeon 6 处理器(仅在 AWS 上提供),性能相当强悍:

  • 全核心持续 Turbo 频率:3.9 GHz
  • 相比第7代 Intel 实例性能提升 20%
  • 内存带宽提升 2.5 倍
  • NGINX Web 应用快 60%
  • AI 深度学习推荐模型快 40%

通用型实例(General Purpose)

  • M8i 系列:从 m8i.large(2 vCPU, 8 GB)到 m8i.96xlarge(384 vCPU, 1536 GB)
  • M8id 系列:带本地 NVMe 存储,规格同上

计算优化型实例(Compute Optimized)

  • C8i 系列:从 c8i.large(2 vCPU, 4 GB)到 c8i.96xlarge(384 vCPU, 768 GB)
  • C8i-flex 系列:灵活配置,适合突发工作负载
  • C8id 系列:带本地 NVMe 存储

内存优化型实例(Memory Optimized)

  • R8i 系列:从 r8i.large(2 vCPU, 16 GB)到 r8i.96xlarge(384 vCPU, 3072 GB)
  • R8i-flex 系列:灵活配置
  • R8id 系列:带本地 NVMe 存储

⚠️ 注意:E2 系列、AMD 处理器实例、ARM 处理器实例(Graviton)都不支持嵌套虚拟化。

你可以用这个命令查询所有支持嵌套虚拟化的实例类型:

aws ec2 describe-instance-types \
  --filters "Name=processor-info.supported-features,Values=nested-virtualization" \
  --query "sort(InstanceTypes[].InstanceType)" \
  --region us-east-1

🎯 典型使用场景

1. 开发和测试环境

在单个 EC2 实例上测试多个操作系统版本,验证软件包在不同 OS 上的兼容性。对于需要频繁切换测试环境的开发者来说,这比维护一堆 EC2 实例要方便得多。

2. 容器和微虚拟机

这是最激动人心的应用场景:

  • Firecracker:AWS 的轻量级微虚拟机技术,Lambda 和 Fargate 的基础。现在你可以在普通 EC2 实例上跑 Firecracker 了!
  • Kata Containers:提供 VM 级别隔离的容器运行时,安全性更高
  • Docker Desktop:在云端运行完整的 Docker 开发环境

3. CI/CD 流水线

运行需要虚拟化的自动化测试,比如测试容器编排、虚拟机镜像构建等。配合 Spot 实例使用,成本可以控制得非常低。

4. 灾难恢复和迁移

将本地虚拟机快速迁移到 AWS 而无需转换格式,或者运行无法直接迁移到 EC2 的遗留系统。

5. 教育和培训

教授 hypervisor 和虚拟化技术,为学生提供隔离的实验环境。每个学生可以在自己的虚拟机里随便折腾,不会影响其他人。

6. 多租户平台

为每个租户提供隔离的虚拟化环境,构建 SaaS 平台或虚拟机即服务(VMaaS)。

⚡ 性能和限制

性能损耗

即使有硬件辅助虚拟化,嵌套虚拟机仍会有一定的性能损耗:

  • CPU 密集型工作负载:性能下降约 10%
  • I/O 密集型工作负载:性能下降可能超过 10%
  • 网络性能:可能受到额外虚拟化层的影响

不过对于开发测试、CI/CD 等场景来说,这点性能损耗完全可以接受。如果你需要更高的性能,可以选择更大的实例规格来补偿。

技术限制

  • Hypervisor 支持:仅支持 Linux KVM,不支持 Microsoft Hyper-V
  • 操作系统:推荐使用 Amazon Linux 2023、Ubuntu、RHEL 等主流 Linux 发行版
  • 许可证:L2 虚拟机的商业操作系统需要自带许可证(BYOL)
  • 嵌套深度:不支持 L3 及更深层次的嵌套
  • 设备直通:不支持 GPU、FPGA 等设备的直通
  • 网络:L2 虚拟机无法直接获得 AWS 网络功能(VPC、安全组等),需要通过 L1 实例进行 NAT 或桥接

🚀 如何启用嵌套虚拟化

前置要求

首先,确保你的 AWS CLI 版本足够新。CloudShell 默认的 v2.33.6 不支持这个功能,需要更新到 v2.33.21 或更高版本:

# 在 CloudShell 中更新 AWS CLI
curl "https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip" -o "awscliv2.zip"
unzip -o awscliv2.zip
./aws/install -i ~/aws-cli -b ~/bin --update
echo 'export PATH=~/bin:$PATH' >> ~/.bashrc
source ~/.bashrc

# 验证版本
aws --version

方法一:创建新实例时启用

使用 --cpu-options NestedVirtualization=enabled 参数:

aws ec2 run-instances \
  --instance-type m8i.large \
  --image-id ami-xxxxxxxxx \
  --cpu-options NestedVirtualization=enabled \
  --subnet-id subnet-xxxxxxxxx \
  --security-group-ids sg-xxxxxxxxx \
  --tag-specifications 'ResourceType=instance,Tags=[{Key=Name,Value=nested-virt-test}]' \
  --region us-east-1

方法二:修改现有实例

需要先停止实例,然后修改 CPU 选项:

# 停止实例
aws ec2 stop-instances --instance-ids i-xxxxxxxxx
aws ec2 wait instance-stopped --instance-ids i-xxxxxxxxx

# 启用嵌套虚拟化
aws ec2 modify-instance-cpu-options \
  --instance-id i-xxxxxxxxx \
  --nested-virtualization enabled \
  --region us-east-1

# 启动实例
aws ec2 start-instances --instance-ids i-xxxxxxxxx

验证配置

连接到实例后,运行以下命令验证:

# 检查 KVM 设备
ls -la /dev/kvm
# 应该看到:crw-rw-rw-. 1 root kvm 10, 232 ...

# 检查 CPU 标志
grep -E 'vmx|svm' /proc/cpuinfo | head -1
# 应该看到 'vmx' 标志

# 检查 KVM 模块
lsmod | grep kvm
# 应该看到 kvm_intel 和 kvm 模块

安装 KVM 和相关工具

Amazon Linux 2023 / RHEL

sudo dnf install -y qemu-kvm libvirt virt-install
sudo systemctl start libvirtd
sudo systemctl enable libvirtd
sudo usermod -aG kvm $USER
sudo setfacl -m u:${USER}:rw /dev/kvm

Ubuntu / Debian

sudo apt update
sudo apt install -y qemu-kvm libvirt-daemon-system libvirt-clients bridge-utils
sudo systemctl start libvirtd
sudo systemctl enable libvirtd
sudo usermod -aG kvm $USER
sudo setfacl -m u:${USER}:rw /dev/kvm

运行 Firecracker 微虚拟机

这是最酷的部分!Firecracker 是 AWS Lambda 和 Fargate 的基础技术,现在你可以在普通 EC2 实例上玩了:

# 安装 Firecracker
ARCH="$(uname -m)"
release_url="https://github.com/firecracker-microvm/firecracker/releases"
latest=$(basename $(curl -fsSLI -o /dev/null -w %{url_effective} ${release_url}/latest))
curl -L ${release_url}/download/${latest}/firecracker-${latest}-${ARCH}.tgz | tar -xz
sudo mv release-${latest}-${ARCH}/firecracker-${latest}-${ARCH} /usr/local/bin/firecracker

# 下载内核和 rootfs(省略详细步骤,参考官方文档)

# 创建配置文件
cat > vm-config.json <

几秒钟后,你就有一个运行中的微虚拟机了!

💰 定价分析:成本到底降了多少?

这是大家最关心的部分。让我们用数据说话:

裸金属 vs 第8代 Intel 实例(东京区域)

实例类型 vCPU 内存 按需价格(USD/小时) 月成本 节省
裸金属实例(旧方案)
m5.metal 96 384 GB $4.608 $3,364 -
第8代 Intel 实例(新方案)
m8i.large 2 8 GB $0.096 $70 -97.9%
m8i.xlarge 4 16 GB $0.192 $140 -95.8%
m8i.2xlarge 8 32 GB $0.384 $280 -91.7%
m8i.4xlarge 16 64 GB $0.768 $560 -83.3%

看到了吗?即使是 m8i.4xlarge(16 vCPU),成本仍然比裸金属实例低 83%

进一步降低成本:Spot 实例

如果你的工作负载可以容忍中断(比如 CI/CD 流水线),使用 Spot 实例可以再省 70%:

实例类型 按需价格 Spot 价格 节省
m8i.large $0.096 ~$0.029 70%
c8i.large $0.085 ~$0.026 69%
r8i.large $0.252 ~$0.076 70%

这意味着一个 m8i.large Spot 实例每月只需 $21

实际成本计算示例

场景:小型开发环境

  • 需求:运行 3 个嵌套虚拟机用于开发测试
  • 配置:m8i.2xlarge(8 vCPU, 32 GB RAM)
  • 存储:100 GB gp3 EBS
  • 运行时间:每月 730 小时

成本明细

实例成本:$0.384/小时 × 730 小时 = $280.32
存储成本:100 GB × $0.08/GB = $8.00
快照成本:50 GB × $0.05/GB = $2.50
数据传输:50 GB × $0.09/GB = $4.50
-------------------------------------------
月总成本:$295.32

对比裸金属实例的 $3,364,节省了 $3,069(91%)!

☁️ 与其他云厂商对比

AWS 虽然起步晚,但性能和定价都很有竞争力。让我们看看三大云厂商的对比:

特性 AWS Google Cloud (GCP) Microsoft Azure
支持状态 ✅ 2026年2月新增 ✅ 已支持数年 ✅ 已支持数年
支持的 Hypervisor KVM KVM Hyper-V
最小实例规格 large(2 vCPU) n1-standard-1(1 vCPU) Standard_D2s_v3(2 vCPU)
处理器 Intel Xeon 6(3.9 GHz) Intel Cascade/Ice Lake Intel Cascade/Ice Lake
启用方式 API 参数 许可证密钥 默认启用(特定系列)
性能损耗 ~10% ~10% ~10%
定价(2 vCPU, 8 GB) $70/月 $71/月 $70/月

选择建议

选择 AWS 的理由

  • 需要最新的 Intel 处理器性能(Xeon 6)
  • 已深度使用 AWS 生态系统
  • 需要运行 Firecracker、Kata Containers 等 AWS 原生技术
  • 需要灵活控制嵌套虚拟化的启用/禁用

选择 GCP 的理由

  • 需要成熟稳定的嵌套虚拟化支持
  • 需要支持 AMD 处理器(N2D 系列)
  • 偏好 Google Cloud 的网络和全球基础设施

选择 Azure 的理由

  • 需要运行 Windows Server Hyper-V
  • 需要与 Windows 生态系统深度集成
  • 需要运行 Docker Desktop 或 WSL2

💡 最佳实践和注意事项

实例选择建议

  • 开发/测试:m8i.large 或 m8i.xlarge,成本低且足够
  • CI/CD 流水线:c8i.large Spot 实例,性价比最高
  • 生产环境:m8i.2xlarge 或更大,根据实际负载选择
  • 高性能需求:c8i 系列(计算优化)
  • 内存密集型:r8i 系列(内存优化)

成本优化技巧

  • 使用 Spot 实例用于可中断工作负载,节省 70%
  • 使用 预留实例Savings Plans,节省 30-50%
  • 选择成本较低的区域(us-east-1 最便宜)
  • 为 L2 虚拟机使用精简配置,避免过度分配存储
  • 将相关工作负载部署在同一可用区,降低数据传输成本

性能优化建议

  • 为 L2 虚拟机分配足够的内存,避免交换
  • 使用 virtio 驱动以获得更好的 I/O 性能
  • 使用 gp3 EBS 卷以获得更好的性价比
  • 监控 L1 和 L2 的资源使用情况

安全建议

  • 定期更新 L1 实例的操作系统和 hypervisor
  • 为 L2 虚拟机使用独立的安全策略
  • 启用 CloudTrail 记录 API 调用
  • 使用 IAM 角色而非长期凭证

🎬 总结

AWS 的这次更新对于需要嵌套虚拟化的开发者来说,绝对是个重大利好:

  • 成本大幅降低:相比裸金属实例降低 95% 以上
  • 性能领先:第8代 Intel Xeon 6 处理器,3.9 GHz 全核心 Turbo
  • 灵活控制:通过 API 参数轻松启用/禁用
  • 广泛应用:支持 Firecracker、Kata Containers、Docker 等多种技术
  • 简单易用:一行命令即可启用

如果你之前因为成本问题放弃了在 AWS 上使用嵌套虚拟化,现在是时候重新考虑了。从 m8i.large 开始,每月只需 $70,就能获得完整的嵌套虚拟化能力。

对于开发测试、CI/CD、容器隔离等场景,这个功能简直是完美的解决方案。配合 Spot 实例使用,成本可以控制得非常低。

虽然 AWS 在嵌套虚拟化支持上起步较晚(GCP 和 Azure 已经支持多年),但凭借最新的硬件和有竞争力的定价,AWS 的方案依然非常值得考虑。

快速开始

想要立即体验?只需三步:

  1. 更新 AWS CLI 到 v2.33.21 或更高版本
  2. 创建一个 m8i.large 实例并启用嵌套虚拟化
  3. 安装 KVM 并开始创建虚拟机

完整的命令和配置示例都在上面,复制粘贴就能用。

参考资源

Happy virtualizing! 🚀


本文基于 2026年2月16日 的公开信息编写。AWS 服务可能会有更新,建议查阅官方文档获取最新信息。

Previous Post
No Comment
Add Comment
comment url