Вложенная виртуализация в OpenNebula. Альтернатива Hyper-V под Linux. Часть 3
Сегодня мы рассмотрим настройку вложенной (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
Если вы хотите установить инструментарий через Менеджер сервера, то вот скриншот, на котором показано где теперь находятся компоненты!
Скопируем на сервер ISO образ с Windows 10 и создадим виртуальную машину, установив загрузку с этого образа.
В результате получим:
Вложенная виртуализация прекрасно работает!
Заключение
Сегодня мы рассмотрели настройку вложенной виртуализации в Astra Linux.
Добавили новые параметры в настройки KVM.
Добавили опции в Grub для включения поддержки IOMMU
Проверили результат установив и запустив виртуальную машину на виртуальном Windows Server.
В следующей части мы рассмотрим как подключится к Astra Linux используя протокол RDP и программу Windows - Удаленный рабочий стол!
Добавить комментарий