在 proxmox VE 中开启嵌套虚拟nested

  在Intel处理器上,KVM使用Intel的vmx(virtul machine eXtensions)来提高虚拟机性能, 即硬件辅助虚拟化技术。如果我们需要搭建一个 OpenStack、proxmox VE集群的教学实验或测试环境,就需要多台支持vmx的主机。在少量甚至只有一台物理服务器条件下,如果 proxmox VE 上创建的虚拟机也能够和物理机一样支持vmx,即支持嵌套虚拟化,那么问题就解决了。但默认情况下一台虚拟机无法使自己成为一个hypervisors并在其上再次安装虚拟机,因为这些虚拟机并不支持vmx。

  嵌套式虚拟nested是一个可通过内核参数来启用的功能。它能够使一台虚拟机具有物理机CPU特性,支持vmx或者svm(AMD)硬件虚拟化。proxmox VE 是运行于Debian操作系统上的,Debian是著名的Linux版本,也是支持嵌套式虚拟nested的,但默认情况下并未开启。开启nested很容易,我们可以先检验嵌套虚拟化功能是否已被开启:

#cat /sys/module/kvm_intel/parameters/nested
N(如果为Y表示已开启,N表示未开启)

  可见默认状态下是未开启的。下面让我们来打开嵌套虚拟化。先停止所有虚拟机,在宿主机启用kvm_intel模块的嵌套虚拟化功能:
# modprobe -r kvm_intel
# modprobe kvm_intel nested=1

  现在再看看 nested 是否已开启:

#cat /sys/module/kvm_intel/parameters/nested
Y

  可见 nested 已开启。为了使嵌套虚拟化永久生效,编辑配置文件:
#vi /etc/modprobe.d/modprobe.conf
  加入一行内容并保存退出:
options kvm_intel nested=1

  这样系统重启也会自动打开nested。本文所有操作是在proxmox VE 4.4实现的。