В современных условиях даже для небольших организаций или отделов часто требуется наличие как минимум нескольких серверов для организации файловых хранилищ, работы СУБД, информационных и бухгалтерских систем, и т. д. В большинстве случаев оптимальным вариантом является размещение этих серверов в виде виртуальных машин [1].
Существует множество решений для запуска и управления виртуальными машинами, как платных, так и бесплатных. Возможности некоторых этих решений могут ограничиваться запуском виртуальных машин на пользовательском рабочем месте, но также существуют решения, позволяющие управлять большими кластерами, с такой функциональностью, как миграция, оркестрация, управление жизненным циклом и т. п. В статье предлагается проект относительно простой системы на основе одного физического сервера, позволяющий в будущем легкое масштабирование и расширение.
Для работы такой системы необходимо выбрать программное обеспечение, реализующее гипервизор, виртуальные сетевые устройства, управление виртуальными машинами. В таблице 1 представлен выбор программного обеспечения для рассматриваемого проекта.
Таблица 1
Выбор программного обеспечения
|
Программный продукт |
Описание |
|
Linux |
Основа системы. Подходят актуальные LTS дистрибутивы AlmaLinux, Debian, RedHat,Ubuntu |
|
QEMU+KVM |
KVM (Kernel-based Virtual Machine) превращает ядро Linux в гипервизор, QEMU [2] эмулирует оборудование виртуальной машины |
|
libvirt |
Демон и набор инструментов для управления виртуальными машинами [3] |
|
Open vSwitch |
Программная реализация коммутатора [4]. Позволяет обеспечить связь между сетевыми интерфейсами виртуальных машин и сетью организации |
|
OpenNebula |
Платформа для управления частным облаком. Позволяет управлять жизненным циклом виртуальных машин, получать доступ к экрану виртуальной машины |
Для управления виртуальными машинами и организации интерфейса пользователя предлагается использовать платформу OpenNebula [5]. Платформа имеет web-интерфейс и CLI. Для доступа к экранам виртуальных машин web-интерфейс имеет встроенный VNC клиент.
Для развёртывания самой платформы OpenNebula предлагается также использовать виртуальную машину. Для решения проблемы курицы и яйца предлагается управлять виртуальной машиной, содержащей платформу OpenNebula напрямую через libvirt. Диаграмма, демонстрирующая управление виртуальными машинами приведена на рис. 1.
На первом этапе настройки необходимо установить Open vSwitch, создать виртуальные коммутаторы, подключить к ним физические порты сервера, настроить VLAN в соответствии с правилами сети организации. В дальнейшем OpenNebula сможет динамически создавать сетевые порты виртуальных машин на виртуальных коммутаторах Open vSwitch и назначать им нужные номера VLAN. Libvirt также поддерживает использование Open vSwitch, однако не умеет работать с VLAN. Поэтому для виртуальной машины с OpenNebula желательно создать отдельный виртуальный коммутатор и с помощью виртуальных патч-соединений подключить его с правильными настройками VLAN.
Далее необходимо установить пакет opennebula-node-kvm, который в свою очередь установит всё необходимое для виртуализации, включая libvirt.
Рис. 1. Диаграмма «Управление виртуальными машинами»
После этого необходимо создать виртуальную машину для развёртывания OpenNebula. Для создания и управления дисками применяется утилита qemu-img. Для описания параметров виртуальной машины необходимо создать XML файл. Часть XML файла, отвечающая за создание дисков и сетевых интерфейсов приведена на рис. 2. Далее используя утилиту virsh необходимо создать перманентный libvirt домен, настроить параметры автозапуска виртуальной машины. За остановку виртуальных машин при выключении сервера или перезагрузке отвечает libvirt-guests. В Ubuntu для его настройки необходимо изменить файл /etc/default/libvirt-guests. На виртуальную машину необходимо установить пакеты OpenNebula в соответствии с документацией. Для безопасности желательно создать изолированный VLAN для связи между виртуальной машиной OpenNebula и физическим хостом. Доступы к нужным портам можно настроить через NAT или туннель.
Рис. 2. Описание дисков и сетевых интерфейсов для libvirt
Для доступа к файловой системе хоста из виртуальной машины можно использовать подходящий сетевой протокол, например NFS.
Для корректной работы системы необходимо настроить ряд параметров. В таблице 2 описаны важные параметры, которые необходимо настроить в Ubuntu.
Таблица 2
Настройки физического хоста
|
Настройка |
Описание |
|
Параметры ядра для кеша жестких дисков |
В файле /etc/sysctl.conf указать нужные значения для параметров vm.dirty_background_bytes и vm.dirty_bytes [6]. Эти параметры необходимо подобрать таким образом, чтобы при интенсивной записи на жесткие диски в кеше не скапливалось слишком много «грязных» данных, запись которых займёт значительное время |
|
Параметры AppArmor |
В некоторых случаях AppArmor может препятствовать корректному запуску виртуальной машины, например если используется «backing file». В этом случае необходимо внести изменения в настройки в соответствии с политикой безопасности, например добавить строчку «/var/lib/one/datastores/** rwk» |
|
Межсетевой экран |
Для каждой виртуальной машины будет открыт VNC порт с номером 5900+N на физическом хосте. Этот порт нет необходимости делать доступным извне, так как экран виртуальной машины будет доступен через VNC клиент web-интерфейса. Эти порты необходимо закрыть извне с помощью межсетевого экрана |
|
Порядок запуска и остановки служб через systemd |
При остановке виртуальной машины с развёрнутой OpenNebula с помощью libvirt-guests необходимо обеспечить доступность необходимых сетевых служб, например NFS. В этом случае NFS необходимо остановить только после завершения libvirt-guests |
Разработанный проект позволяет относительно просто развернуть систему для управления виртуальными машинами на основе одного физического сервера, используя свободное программное обеспечение. Преимуществом такого проекта является возможность расширения и масштабирования. Существует возможность легко организовать и добавить хранилище, добавить дополнительные узлы, дополнительные VLAN.
Литература:
1. Скрипов С. А. Реализация многопользовательской виртуальной лаборатории на основе облачных технологий //Информационные технологии и системы: Труды Шестой Международной научной конференции. — Издательство Челябинского государственного университета, 2017. — C. 275–276
2. Welcome to QEMU’s documentation! [Электронный ресурс] / Электрон. дан. — Режим доступа: https://www.qemu.org/docs/master/, свободный.
3. Libvirt Documentation [Электронный ресурс] / Электрон. дан. — Режим доступа: https://libvirt.org/docs.html/, свободный.
4. Open vSwitch Manpages [Электронный ресурс] / Электрон. дан. — Режим доступа: http://openvswitch.org/support/dist-docs/, свободный.
5. OpenNebula 6.8 Documentation [Электронный ресурс] / Электрон. дан. — Режим доступа: https://docs.opennebula.io/6.8//, свободный.
6. Documentation for /proc/sys/vm/ [Электронный ресурс] / Электрон. дан. — Режим доступа: https://docs.kernel.org/admin-guide/sysctl/vm.html/, свободный.

