Пятница, 29 октября 2021 19:00

Вложенная виртуализация в OpenNebula. Альтернатива Hyper-V под Linux. Часть 3.

Россия
Оцените материал
(0 голосов)

Сегодня мы рассмотрим настройку вложенной (nested) виртуализации для KVM на Astra Linux.

Так как OpenNebula использует KVM в качестве гипервизора, то настройки повлияют в том числе и на OpenNebula.

Проверка поддержки виртуализации процессором

Проверим поддержку виртуализации 

lscpu | grep vmx

Флаги:            fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe syscall nx pdpe1gb rdtscp lm constant_tsc arch_perfmon pebs bts rep_good nopl xtopology nonstop_tsc cpuid aperfmperf pni pclmulqdq dtes64 monitor ds_cpl vmx smx est tm2 ssse3 sdbg fma cx16 xtpr pdcm pcid sse4_1 sse4_2 x2apic movbe popcnt aes xsave avx f16c rdrand lahf_lm abm cpuid_fault epb invpcid_single pti tpr_shadow vnmi flexpriority ept vpid ept_ad fsgsbase tsc_adjust bmi1 avx2 smep bmi2 erms invpcid xsaveopt dtherm ida arat pln pts

Если результат не пустой, то поддержка присутствует!

Если результат пустой, вам нужно проверить включена ли поддержка виртуализации в BIOS ПК или сервера!

Вы должны включить поддержку Intel VT-d или AMD-Vi. В некоторых BIOS пункт может называться просто - Поддержка виртуализации.

Создадим файл

sudo mcedit /etc/modprobe.d/kvm-intel.conf

и добавим в него строки

options kvm-intel nested=1
options kvm-intel enable_shadow_vmcs=1

Перезагрузим сервер

sudo reboot

После запуска проверим поддержку:

sudo virt-host-validate

 

  QEMU: Checking for hardware virtualization                                 : PASS
  QEMU: Checking if device /dev/kvm exists                                   : PASS
  QEMU: Checking if device /dev/kvm is accessible                            : PASS
  QEMU: Checking if device /dev/vhost-net exists                             : PASS
  QEMU: Checking if device /dev/net/tun exists                               : PASS
  QEMU: Checking for cgroup 'memory' controller support                      : PASS
  QEMU: Checking for cgroup 'memory' controller mount-point                  : PASS
  QEMU: Checking for cgroup 'cpu' controller support                         : PASS
  QEMU: Checking for cgroup 'cpu' controller mount-point                     : PASS
  QEMU: Checking for cgroup 'cpuacct' controller support                     : PASS
  QEMU: Checking for cgroup 'cpuacct' controller mount-point                 : PASS
  QEMU: Checking for cgroup 'cpuset' controller support                      : PASS
  QEMU: Checking for cgroup 'cpuset' controller mount-point                  : PASS
  QEMU: Checking for cgroup 'devices' controller support                     : PASS
  QEMU: Checking for cgroup 'devices' controller mount-point                 : PASS
  QEMU: Checking for cgroup 'blkio' controller support                       : PASS
  QEMU: Checking for cgroup 'blkio' controller mount-point                   : PASS
  QEMU: Checking for device assignment IOMMU support                         : PASS
  QEMU: Checking if IOMMU is enabled by kernel                               : WARN (IOMMU appears to be disabled in kernel. Add intel_iommu=on to kernel cmdline arguments)
   LXC: Checking for Linux >= 2.6.26                                         : PASS
   LXC: Checking for namespace ipc                                           : PASS
   LXC: Checking for namespace mnt                                           : PASS
   LXC: Checking for namespace pid                                           : PASS
   LXC: Checking for namespace uts                                           : PASS
   LXC: Checking for namespace net                                           : PASS
   LXC: Checking for namespace user                                          : WARN (User namespace support is recommended)
   LXC: Checking for cgroup 'memory' controller support                      : PASS
   LXC: Checking for cgroup 'memory' controller mount-point                  : PASS
   LXC: Checking for cgroup 'cpu' controller support                         : PASS
   LXC: Checking for cgroup 'cpu' controller mount-point                     : PASS
   LXC: Checking for cgroup 'cpuacct' controller support                     : PASS
   LXC: Checking for cgroup 'cpuacct' controller mount-point                 : PASS
   LXC: Checking for cgroup 'cpuset' controller support                      : PASS
   LXC: Checking for cgroup 'cpuset' controller mount-point                  : PASS
   LXC: Checking for cgroup 'devices' controller support                     : PASS
   LXC: Checking for cgroup 'devices' controller mount-point                 : PASS
   LXC: Checking for cgroup 'blkio' controller support                       : PASS
   LXC: Checking for cgroup 'blkio' controller mount-point                   : PASS

Поддержка IOMMU отключена в ядре, давайте её включим, так как она поможет нам сильно повысить производительность!

IOMMU позволяет виртуальным машинам напрямую обращаться к оборудованию хоста, что повышает безопасность и производительность виртуальных машин!

Включаем поддержку IOMMU

Откроем файл:

sudo mcedit /etc/default/grub

Изменим строку:

GRUB_CMDLINE_LINUX=""

Для процессоров Intel:

GRUB_CMDLINE_LINUX="intel_iommu=on iommu=pt"

Для процессоров AMD:

GRUB_CMDLINE_LINUX="amd_iommu=pt"

Обновим конфигурацию

update-grub

 

Генерируется файл настройки grub …
Найден образ linux: /boot/vmlinuz-5.4.0-71-hardened
Найден образ initrd: /boot/initrd.img-5.4.0-71-hardened
Найден образ linux: /boot/vmlinuz-5.4.0-71-generic
Найден образ initrd: /boot/initrd.img-5.4.0-71-generic
Найден образ linux: /boot/vmlinuz-5.4.0-54-hardened
Найден образ initrd: /boot/initrd.img-5.4.0-54-hardened
Найден образ linux: /boot/vmlinuz-5.4.0-54-generic
Найден образ initrd: /boot/initrd.img-5.4.0-54-generic

Перезагрузим сервер 

sudo reboot

После перезагрузки еще раз проверяем поддержку: 

sudo virt-host-validate

 

  QEMU: Checking for hardware virtualization                                 : PASS
  QEMU: Checking if device /dev/kvm exists                                   : PASS
  QEMU: Checking if device /dev/kvm is accessible                            : PASS
  QEMU: Checking if device /dev/vhost-net exists                             : PASS
  QEMU: Checking if device /dev/net/tun exists                               : PASS
  QEMU: Checking for cgroup 'memory' controller support                      : PASS
  QEMU: Checking for cgroup 'memory' controller mount-point                  : PASS
  QEMU: Checking for cgroup 'cpu' controller support                         : PASS
  QEMU: Checking for cgroup 'cpu' controller mount-point                     : PASS
  QEMU: Checking for cgroup 'cpuacct' controller support                     : PASS
  QEMU: Checking for cgroup 'cpuacct' controller mount-point                 : PASS
  QEMU: Checking for cgroup 'cpuset' controller support                      : PASS
  QEMU: Checking for cgroup 'cpuset' controller mount-point                  : PASS
  QEMU: Checking for cgroup 'devices' controller support                     : PASS
  QEMU: Checking for cgroup 'devices' controller mount-point                 : PASS
  QEMU: Checking for cgroup 'blkio' controller support                       : PASS
  QEMU: Checking for cgroup 'blkio' controller mount-point                   : PASS
  QEMU: Checking for device assignment IOMMU support                         : PASS
  QEMU: Checking if IOMMU is enabled by kernel                               : PASS
   LXC: Checking for Linux >= 2.6.26                                         : PASS
   LXC: Checking for namespace ipc                                           : PASS
   LXC: Checking for namespace mnt                                           : PASS
   LXC: Checking for namespace pid                                           : PASS
   LXC: Checking for namespace uts                                           : PASS
   LXC: Checking for namespace net                                           : PASS
   LXC: Checking for namespace user                                          : WARN (User namespace support is recommended)
   LXC: Checking for cgroup 'memory' controller support                      : PASS
   LXC: Checking for cgroup 'memory' controller mount-point                  : PASS
   LXC: Checking for cgroup 'cpu' controller support                         : PASS
   LXC: Checking for cgroup 'cpu' controller mount-point                     : PASS
   LXC: Checking for cgroup 'cpuacct' controller support                     : PASS
   LXC: Checking for cgroup 'cpuacct' controller mount-point                 : PASS
   LXC: Checking for cgroup 'cpuset' controller support                      : PASS
   LXC: Checking for cgroup 'cpuset' controller mount-point                  : PASS
   LXC: Checking for cgroup 'devices' controller support                     : PASS
   LXC: Checking for cgroup 'devices' controller mount-point                 : PASS
   LXC: Checking for cgroup 'blkio' controller support                       : PASS
   LXC: Checking for cgroup 'blkio' controller mount-point                   : PASS

На этот раз, все что нам нужно активно.

Проверяем вложенную виртуализацию в Windows Server

В предыдущей статье мы установили Windows Server на виртуальную машину внутри OpenNebula.

Перезагрузим её. 

К сожалению изнутри виртуальной машины невозможно узнать поддерживает она или нет вложенную виртуализацию. Поэтому мы просто установим роль Hyper-V на виртуальный сервер:

Откроем PowerShell от имени Администратора и введем: 

Enable-WindowsOptionalFeature -Online -FeatureName Microsoft-Hyper-V -All

Дождемся окончания установки и перезагрузим виртуальный сервер.

 Microsoft в очередной раз, зачем то, поменяла расположение и логику установки Ролей в Windows Server c версии 2019.

Теперь нам придется ставить инструменты администрирования отдельно:

Install-WindowsFeature -Name RSAT-Hyper-V-Tools

Если вы хотите установить инструментарий через Менеджер сервера, то вот скриншот, на котором показано где теперь находятся компоненты!

2021-10-29_12-32-46.png

Скопируем на сервер ISO образ с Windows 10 и создадим виртуальную машину, установив загрузку с этого образа.

В результате получим:

 2021-10-29_12-37-52.png

Вложенная виртуализация прекрасно работает!

Заключение

Сегодня мы рассмотрели настройку вложенной виртуализации в Astra Linux.

Добавили новые параметры в настройки KVM.

Добавили опции в Grub для включения поддержки IOMMU 

Проверили результат установив и запустив виртуальную машину на виртуальном Windows Server.

В следующей части мы рассмотрим как подключится к Astra Linux используя протокол RDP и программу Windows - Удаленный рабочий стол!

Прочитано 207 раз Последнее изменение Пятница, 29 октября 2021 16:29