如何在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模式。

如何在CentOS 7 / RHEL 7上的KVM中启用嵌套虚拟化

现在登录到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

如何在CentOS 7 / RHEL 7上的KVM中启用嵌套虚拟化

让我们尝试从虚拟管理器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

………………………………………………

如何在CentOS 7 / RHEL 7上的KVM中启用嵌套虚拟化

这证实了嵌套虚拟化已成功启用,因为我们能够在虚拟机内部创建虚拟机。

总结本文,请分享您的反馈和评论。