开启嵌套虚拟化
嵌套虚拟化允许在虚机里再运行虚机:宿主把 CPU 虚拟化能力暴露给 guest,guest 内因此能加载 KVM 模块并使用 /dev/kvm。它默认关闭,需要在加载 kvm 模块时通过参数启用,Intel 与 AMD 平台的参数名不同。适合演示、测试与 CI 场景,性能敏感的生产负载要谨慎评估。
基本信息
| 查看状态 | cat /sys/module/kvm_intel/parameters/nested(AMD 平台换成 kvm_amd) |
|---|---|
| 配置方式 | 在 /etc/modprobe.d/ 下写 options 配置,如 options kvm_intel nested=1 |
| 生效方式 | 卸载后重载模块,或重启宿主 |
| 验证方式 | guest 内查看 /dev/kvm 是否存在、能否加载 KVM 模块 |
| 云主机场景 | 需选择支持嵌套虚拟化的实例类型,并在镜像层面确认已启用 |
典型使用场景
- 演示与培训:在一台虚机里演示完整虚拟化环境
- CI 流水线:需要在内核或虚拟化相关项目中跑虚机测试
- 开发验证:测试依赖虚拟化的软件,如容器运行时与编排组件
- 实验环境:验证嵌套对性能的实际影响
- 云上测试:在支持嵌套的实例上搭建临时虚拟化环境
Intel 平台示例
Intel 平台示例
cat /sys/module/kvm_intel/parameters/nested # 先看当前状态
echo 'options kvm_intel nested=1' > /etc/modprobe.d/kvm-nested.conf
modprobe -r kvm_intel && modprobe kvm_intel # 重载模块
cat /sys/module/kvm_intel/parameters/nested # 期望 Y 或 1
# AMD 平台把 kvm_intel 换成 kvm_amd,参数名与用法一致检查点
| 检查项 | 位置或命令 | 期望结果 |
|---|---|---|
| 模块参数 | /sys/module/kvm_intel/parameters/nested | Y 或 1 |
| 宿主模块 | lsmod | grep kvm | kvm 与 kvm_intel 已加载 |
| guest 内设备 | ls /dev/kvm | 设备节点存在 |
| guest 内能力 | kvm-ok 或尝试加载模块 | 可正常使用虚拟化 |
嵌套带来额外虚拟化开销:性能敏感场景谨慎使用,演示与测试类负载更合适,生产虚机里再跑生产虚机要单独评估,并把性能底线写进验收标准。
在云主机上开启嵌套的前提是实例类型本身支持:有些实例类型在平台层面就不暴露虚拟化能力,改配置也不会生效。
嵌套环境与下层平台强绑定:宿主内核与虚拟化组件升级后嵌套行为可能变化,测试环境使用的版本组合要记录下来,升级前先在非关键虚机上验证功能是否仍然可用。