Как включить Nested virtualization в KVM на CentOS 7 / RHEL 7

Как включить Nested virtualization в KVM на CentOS 7 / RHEL 7

 

Nested virtualization (Вложенная виртуализация) означает настройку среды виртуализации внутри виртуальной машины. Другими словами, мы можем сказать, что вложенная виртуализация — это функция гипервизора, которая позволяет нам устанавливать и запускать виртуальную машину внутри виртуального сервера с помощью аппаратного ускорения от гипервизора (хоста).

В этой статье мы обсудим, как включить вложенную виртуализацию в KVM на CentOS 7 / RHEL 7. Я предполагаю, что вы уже настроили гипервизор KVM. Если вы не знаете, как установить и настроить гипервизор KVM , обратитесь к следующей статье.

Давайте перейдем к гипервизору и проверим, включена ли вложенная виртуализация на вашем KVM-хосте.

Для процессоров на базе Intel выполните команду,

[root@kvm-hypervisor ~]# cat /sys/module/kvm_intel/parameters/nested
N
[root@kvm-hypervisor ~]#

Для процессоров на базе AMD выполните команду,

[root@kvm-hypervisor ~]# cat /sys/module/kvm_amd/parameters/nested
N
[root@kvm-hypervisor ~]#

В выходных данных приведенной выше команды «N» указывает, что вложенная виртуализация отключена. Если мы получим вывод как «Y», это означает, что на вашем хосте включена вложенная виртуализация.

Теперь, чтобы включить вложенную виртуализацию, создайте файл с именем « /etc/modprobe.d/kvm-nested.conf » со следующим содержимым.

[root@kvm-hypervisor ~]# 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. Перед удалением модуля убедитесь, что виртуальные машины выключены, иначе мы получим сообщение об ошибке типа « modprobe: FATAL: модуль kvm_intel используется »

[root@kvm-hypervisor ~]# modprobe -r kvm_intel
[root@kvm-hypervisor ~]# modprobe -a kvm_intel
[root@kvm-hypervisor ~]#

Теперь проверьте, включена ли функция вложенной виртуализации.

[root@kvm-hypervisor ~]# cat /sys/module/kvm_intel/parameters/nested
Y
[root@kvm-hypervisor ~]#

Для систем на базе AMD выполните следующие команды:

[root@kvm-hypervisor ~]# rmmod kvm-amd
[root@kvm-hypervisor ~]# echo 'options kvm-amd nested=1'>>/etc/modprobe.d/dist.conf
[root@kvm-hypervisor ~]# modprobe kvm-amd

Тестовая вложенная виртуализация

Предположим, у нас есть виртуальная машина с именем «директор» на гипервизоре KVM, на которой я включил вложенную виртуализацию. Перед тестированием убедитесь, что режим ЦП для виртуальной машины либо « host-model », либо « host-passthrough », чтобы проверить режим cpu виртуальной машины, используйте либо Virt-Manager GUI, либо команду virsh edit.

Как включить Nested virtualization в KVM на CentOS 7

Теперь войдите в виртуальную машину директора и запустите команду lscpu и lsmod.

[root@kvm-hypervisor ~]# ssh 192.168.126.1 -l root
root@192.168.126.1's password:
Last login: Sun Dec 10 07:05:59 2017 from 192.168.126.254
[root@director~]# lsmod | grep kvm
kvm_intel             170200  0
kvm                   566604  1 kvm_intel
irqbypass              13503  1 kvm
[root@director ~]#
[root@director ~]# lscpu

Как включить Nested virtualization в KVM на CentOS 7

Давайте попробуем создать виртуальную машину либо из графического интерфейса виртуального менеджера, либо из virt-install внутри директории vm, в моем случае я использую команду virt-install

[root@director ~]# 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 
………………………………………………

Как включить Nested virtualization в KVM на CentOS 7

Это подтверждает, что вложенная виртуализация была успешно включена, поскольку мы можем создавать виртуальную машину внутри виртуальной машины.

На этом статья завершается, пожалуйста, поделитесь своими отзывами и комментариями.