如何在CentOS 7 / RHEL 7上的KVM中启用嵌套虚拟化
如何在CentOS 7 / RHEL 7上的KVM中启用嵌套虚拟化
由Pradeep Kumar ·发布 2017年12月12日 · 更新 2018年3月31日
嵌套虚拟化意味着在虚拟机内部配置虚拟化环境。换句话说,我们可以说嵌套虚拟化是虚拟机管理程序中的一项功能,它允许我们通过虚拟机管理程序(主机)的硬件加速在虚拟服务器中安装和运行虚拟机。
在本文中,我们将讨论如何在CentOS 7 / RHEL 7的KVM中启用嵌套虚拟化。我假设您已经配置了KVM虚拟机管理程序。如果您不熟悉如何安装和配置KVM虚拟机管理程序,请参考以下文章
在CentOS 7.x和RHEL 7.x上安装KVM Hypervisor
让我们跳入管理程序,并验证是否在KVM主机上启用了嵌套虚拟化
对于基于Intel的处理器,请运行以下命令:
[[email protected] ~]# cat /sys/module/kvm_intel/parameters/nested
N
[[email protected] ~]#
对于基于AMD的处理器,请运行以下命令:
[[email protected] ~]# cat /sys/module/kvm_amd/parameters/nested
N
[[email protected] ~]#
在上面的命令输出中,“ N”表示已禁用嵌套虚拟化。如果我们得到的输出为“ Y”,则表明您的主机上启用了嵌套虚拟化。
现在要启用嵌套虚拟化,请创建一个名为“ /etc/modprobe.d/kvm-nested.conf ” 的文件,其中包含以下内容。
[[email protected] ~]# vi /etc/modprobe.d/kvm-nested.conf
options kvm-intel nested=1
options kvm-intel enable_shadow_vmcs=1
options kvm-intel enable_apicv=1
options kvm-intel ept=1
保存并退出文件
现在删除“ kvm_intel ”模块,然后使用modprobe命令添加相同的模块。在卸下模块之前,请确保VM已关闭,否则我们将收到错误消息,例如“ modprobe:FATAL:模块kvm_intel正在使用中 ”
[[email protected] ~]# modprobe -r kvm_intel
[[email protected] ~]# modprobe -a kvm_intel
[[email protected] ~]#
现在,验证是否启用了嵌套虚拟化功能。
[[email protected] ~]# cat /sys/module/kvm_intel/parameters/nested
Y
[[email protected] ~]#
对于基于AMD的系统,请运行以下命令,
[[email protected] ~]# rmmod kvm-amd
[[email protected] ~]# echo 'options kvm-amd nested=1' >> /etc/modprobe.d/dist.conf
[[email protected] ~]# modprobe kvm-amd
测试嵌套虚拟化
假设我们在KVM虚拟机管理程序上有一台名为“ director”的虚拟机,在该虚拟机上启用了嵌套虚拟化。在测试之前,请确保VM的CPU模式为“ host-model ”或“ host-passthrough ”,以使用Virt-Manager GUI或virsh edit命令检查虚拟机的cpu模式。
现在登录到Director VM并运行lscpu和lsmod命令
[[email protected] ~]# ssh 192.168.126.1 -l root
[email protected]'s password:
Last login: Sun Dec 10 07:05:59 2017 from 192.168.126.254
[[email protected] ~]# lsmod | grep kvm
kvm_intel 170200 0
kvm 566604 1 kvm_intel
irqbypass 13503 1 kvm
[[email protected] ~]#
[[email protected] ~]# lscpu
让我们尝试从虚拟管理器GUI或director vm内的virt-install创建虚拟机,在我的情况下,我正在使用virt-install命令
[[email protected] ~]# virt-install -n Nested-VM --description "Test Nested VM" --os-type=Linux --os-variant=rhel7 --ram=2048 --vcpus=2 --disk path=/var/lib/libvirt/images/nestedvm.img,bus=virtio,size=10 --graphics none --location /var/lib/libvirt/images/CentOS-7-x86_64-DVD-1511.iso --extra-args console=ttyS0
Starting install...
Retrieving file .treeinfo... | 1.1 kB 00:00:00
Retrieving file vmlinuz... | 4.9 MB 00:00:00
Retrieving file initrd.img... | 37 MB 00:00:00
Allocating 'nestedvm.img' | 10 GB 00:00:00
Connected to domain Nested-VM
Escape character is ^]
[ 0.000000] Initializing cgroup subsys cpuset
[ 0.000000] Initializing cgroup subsys cpu
[ 0.000000] Initializing cgroup subsys cpuacct
[ 0.000000] Linux version 3.10.0-327.el7.x86_64 ([email protected]) (gcc version 4.8.3 20140911 (Red Hat 4.8.3-9) (GCC) ) #1 SMP Thu Nov 19 22:10:57 UTC 2015
………………………………………………
这证实了嵌套虚拟化已成功启用,因为我们能够在虚拟机内部创建虚拟机。
总结本文,请分享您的反馈和评论。