2.3.7 Стек виртуализации

Вычислительный узел представляет из себя хост с запущенным QEMU/KVM под управлением libvirt, последний в свою очередь управляется драйвером Nova Compute Driver, либо Tionix Compute Driver, реализующем дополнительный функционал.

Получая информацию от кластера управления, драйвер Compute, опираясь в том числе на данные различных ключей метаданных, запрашивая порт у сетевой службы Neutron, диск – у службы блочного хранения Cinder, генерирует файл конфигурации виртуальной машины libvirt (в формате XML) и запускает ВМ (Рис. 2.14).

../_images/libvirt_domain1.png

Рис. 2.14 Взаимодействие с виртуальной машиной (libvirt, VirtIO)

Фундаментальное отличие в том, что сетью, дисками и конфигурацией ВМ управляет непосредственно службы и драйверы, а не libvirt. Это позволяет избежать тех недостатков использования, например – пулов libvirt, не позволяющих выполнять операцию resize для LUN.

2.3.7.1 VCPU

Количество виртуальных ядер (VCPU) на гипервизоре определяется количеством физических потоков процессоров (threads).

Режимы подачи CPU могут быть:

  • разделяемые vcpu (между всеми физическими процессорами) – shared;
  • выделенные – NUMA.

Данные режимы определяются с помощью ключей метаданных; по умолчанию используется режим shared.

Виртуальные процессоры подаются в свою очередь в ВМ в виде sockets, то есть как отдельные процессоры. Это может быть важно, в частности – некоторые настольные системы не могут распознавать более двух процессоров. Вы можете подать CPU в виде cores и threads с помощью применения ключей метаданных к типу инстанса.

2.3.7.2 Вложенная виртуализация

Можно включить вложенную виртуализацию с помощью параметров модуля ядра:

sudo rmmod kvm-intel
sudo sh -c "echo 'options kvm-intel nested=y' >> /etc/modprobe.d/dist.conf"
sudo modprobe kvm-intel

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

2.3.7.3 Оперативная память (RAM)

Для доступа к оперативной памяти (RAM) используется режим ballooning, то есть для ВМ выделяется столько физической памяти, сколько используется в настоящий момент.

Для данного режима необходимо установить драйверы – внутрь ВМ (в гостевую ОС). В официальных образах данные драйверы присутствуют.

Примечание.

Также можно включить на гипервизорах разделяемый режим дедупликации памяти (KSM).

2.3.7.4 KSM (дедупликация памяти)

Данный режим включается на уровне ОС и является экспериментальным.

Технология Kernel SamePage Merging позволяет сэкономить оперативную память на гипервизоре, позволяя нескольким машинам использовать одни блоки памяти; имеет смысл использования при большом количестве однотипных виртуальных машин.

echo 1 > /sys/kernel/mm/ksm/run

2.3.7.5 Виртуальный чипсет

Для архитектур amd64 (x86_64) доступны два виртуальных чипсета i440fx и q35; по умолчанию используется i440fx (поддержка устаревших процессорных систем).

Использование чипсета q35 является предпочтительным при использовании различного функционала, например – для проброса сетевых карт.

Примечание.

Чипсет может быть задан с помощью ключей метаданных или в конфигурации nova-compute.conf.

2.3.7.6 Подача виртуального накопителя внутрь ВМ

Осуществляется mapping LUN (на хост), с помощью службы блочных устройств. Затем, вычислительный драйвер прописывает данный диск внутрь ВМ как диск VirtIO-SCSI, добавляя в XML-конфигурацию ВМ контроллер VirtIO-SCSI (Рис. 2.15).

Диски RBD будут прописаны напрямую в XML-конфигурацию ВМ как сетевой диск (net disk), используя libvirt RBD [1].

../_images/Cinder_RBD_SCSI.png

Рис. 2.15 Пример XML-конфигурации (libvirt RBD)

2.3.7.7 Виртуальный блочный адаптер

Диск может быть подан внутрь ВМ следующими шинами: VirtIO, VirtIO-SCSI, SATA, IDE (последняя доступна только для чипсета i440fx).

VirtIO-SCSI является наиболее производительным виртуальным интерфейсом. Для использования VirtIO-SCSI на всех образах должны быть применены ключи:

openstack image set \\
--property hw_scsi_model=virtio-scsi \\
--property hw_disk_bus=scsi \\
ID_образа

Внимание.

По умолчанию, будет использоваться устаревший VirtIO.

Проверить наличие адаптера VirtIO-SCSI можно средствами гостевой ОС, либо из конфигурации виртуальной машины (libvirt), выводимой с помощью команды:

virsh dumpxml
../_images/VirtIO-SCSI_controller.png

Рис. 2.16 Пример описания контроллера VirtIO-SCSI

2.3.7.8 Подача виртуального интерфейса внутрь ВМ

Порт будет выделен сетевой службой Neutron, создан TAP интерфейс в OVS, а затем порт будет подан в ВМ – как виртуальное сетевое устройство (VirtIO-Net).

При несовместимости каких-либо специфических ОС, возможно с помощью ключей метаданных подать сетевой интерфейс как устройство e1000 или rtl8139.

Сноски

[1]https://blog.easter-eggs.org/index.php/post/2013/09/27/%5BLibvirt%5D-Migrating-from-on-disk-raw-images-to-RBD-storage