Рубрика:
Спецпроект «Базальт СПО». Развитие Open Source в России
|
Facebook
Мой мир
Вконтакте
Одноклассники
Google+
|
ВИЗИТКА
Арина Захарова, лаборант-исследователь РУНЦ «Безопасность»
Управление пулами виртуальных машин с использованием свободного ПО в университете
В статье рассмотрен процесс разработки решения для импортозамещения продуктов VMware в сфере управления рабочими местами, а именно пулами виртуальных машинами.
 Рисунок 1. Схема взаимодействия компонентов
|
В МГТУ им. Баумана для управления виртуальными машинами применялось решение VMware Horizon. Оно успешно выполняло все функции, но было довольно сложным в администрировании. Студенты, работающие на кафедре, не всегда справлялись с управлением, теряли интерес и увольнялись.
В 2022 году возникли сложности с дальнейшим использованием VMware Horizon. Тогда работники кафедры создали собственное решение, систему управления (СУ) на основе свободного ПО, которая:
- обеспечивает создание пула виртуальных машин размером от 10 до 30 экземпляров,
- позволяет проводить мониторинг состояния пула,
- обеспечивает минимально необходимые функции управления: развертывание, остановку, запуск, удаление пула.
Новое решение гораздо проще администрировать. Студенты легко справляются с задачами начального уровня, а затем постепенно втягиваются в работу.
Решение не может расцениваться как промышленный аналог Horizon, но успешно используется как стенд для обучения и практики студентов в сфере администрирования виртуальной инфраструктуры. В отличие от зарубежного аналога, СУ поддерживает любые операционные системы и дистрибутивы Linux (в случае Horizon это были только ОС Windows и Ubuntu до версии 20.04), с возможностью подключения к ним по протоколу SSH, RDP или любому иному, сконфигурированному на золотом образе.
Расскажем подробно о реализации.
Структура проекта
СУ состоит из трех основных блоков:
- База данных, хранящая информацию о пользователях.
- API – основной координационный элемент системы.
- WEB-интерфейс – панель управления и мониторинга существующих ПВМ.
База данных
В базе данных хранится информация о пулах виртуальных машин (ПВМ) и о разграничении доступа к ним.
Для инфраструктуры учебного класса мы выбрали операционную систему «Альт Виртуализация» и СУБД SQLite. SQLite удобна для нашего относительно небольшого проекта, но она подходит не всем.
Чтобы дать пользователям нашего решения возможность использовать другие СУБД, применяется обертка для баз данных, реализуемая при помощи библиотеки sqlalchemy. Она позволяет не зависеть от разных диалектов SQL и унифицировать способы создания соединения с БД. Для подключения к новой СУБД пользователю нужно поменять значения в conn_str. При дальнейшей работе СУ не формулирует SQL-запросы напрямую, а обращается к полям классов, описывающих эти сущности.
 Рисунок 2. Функция подключения к БД
СУ оперирует четырьмя основными сущностями:
- Пользователь – администратор системы, создающий пулы.
- Узел – сервер с развернутым гипервизором.
- Виртуальная машина – управляемая единица.
- Пул – совокупность одинаковых виртуальных машин, развернутых по примеру золотого образа.
Первые три сущности заложены в логике работы Proxmox (входит в ОС «Альт Виртуализация»), последнюю мы определили при помощи БД.
Для работы с ПВМ необходимо объявить:
- имя пула (title),
- количество ВМ, которые будут в нем содержаться (count),
- золотой образ – ВМ для клонировния (golden_image),
- паттерн именования клонов (naming).
Помимо этого, чтобы реализовать управление, необходимо хранить служебную информацию:
- узел, на котором развернут пул (node),
- id клонов (vmids),
- а также id пользователя (user_id), который правомерно может управлять пулом.
 Рисунок 3. Объявление пула
Объявим сущность пользователя, чтобы реализовать разделение доступа к пулам. Проинициализируем её с помощью трех параметров: имя пользователя, пароль, адрес узла (ip).
 Рисунок 4. Объявление пользователя
Графическая оболочка
Для управления пулами мы создали web-приложение. Так как одна из целей СУ – вовлечение студентов в процесс разработки, был выбран один из самых простых фреймворков – Flask. Он позволяет быстро добавлять новые функции в графическую оболочку даже неопытным администраторам.
Страница авторизации принимает на вход IP-адрес гипервизора, имя пользователя и пароль.
 Рисунок 5. Авторизация
 Рисунок 6. Главная страница
После авторизации пользователь попадает на главную страницу, содержащую описание состояния узлов. Также ему становятся доступны кнопки «Список пулов» и «Создать пул».
Кнопка «Список пулов» переводит на страницу, содержащую перечень пулов. Здесь можно просмотреть их параметры, удалить, отправить на редактирование кнопкой «Редактировать» или же, нажав на имя пула, перейти к более подробной информации о нем.
На странице просмотра подробной информации о пуле перечисляются виртуальные машины, его составляющие, их статус и загруженность. На этой же странице можно остановить, запустить, перезапустить или удалить пул, нажав соответствующую кнопку.
В режиме редактирования можно поменять имя пула и количество виртуальных машин, которые его составляют.
 Рисунок 7. Список пулов
 Рисунок 8. Страница пула
 Рисунок 9. Редактирование пула
При создании пула пользователь вводит его название, выбирает из списков узел, на котором он должен быть развернут, золотой образ и количество ВМ, вводит паттерн именования ВМ (смена имени ВМ находится в разработке).
 Рисунок 10. Создание пула
API
Основным элементом СУ является API, выполняющий роль координационного центра между графической оболочкой, базой данных и гипервизором. Приняв пользовательский запрос, API получает информацию из БД, после чего, используя Proxmox API, выполняет задачу.
Всего минимальный необходимый для функционирования пула набор команд включает:
- создание ПВМ,
- удаление ПВМ,
- остановку ПВМ,
- запуск ПВМ,
- перезагрузку ПВМ.
Рассмотрим реализацию процесса создания и запуска пула. Функция создания пула позволяет инициализировать объект пула конкретными значениями и создать заданное количество клонов ВМ, которые и будут составлять пул. Всю процедуру можно разделить на несколько этапов:
- Установление соединения с гипервизором (строки 2-4).
- Предварительная обработка информации: определение свободных id виртуальных машин (строка 6) и получение золотого образа (строка 7).
- Создание пула: многоразовое клонирование золотого образа и добавление id новой ВМ в БД.
 Рисунок 11. Функция создания пула
Запуск пула реализуется функцией start, включающей в себя соединение с пулом при помощи функции connect (строка 2) и последующее обращение к API Proxmox для каждой ВМ, принадлежащей пулу (3-7).
 Рисунок 12. Функция запуска пула
Отдельного внимания заслуживает функция connect, так как она является необходимым элементом всех остальных функций и выполняет следующие действия:
- принимает на вход все параметры, которые нужны для установления соединения с узлом посредством API Proxmox (строки 3-5),
- определяет нужный узел (строка 7),
- формирует список id виртуальных машин, принадлежащих пулу, на основании переданного параметра vmids, после чего из общего перечня на основании id выбираются только те ВМ узла, которые принадлежат пулу.
После получения списка всех ВМ узла, они передаются обратно в функцию, которая вызвала connect().
 Рисунок 13. Функция взаимодействия API и БД
Функции остановки, запуска, перезагрузки и удаления похожи в реализации: в них после установления соединения вызывается соответствующий метод API Proxmox.
Помимо уже перечисленных функций, реализованы еще несколько, позволяющих отслеживать состояние виртуальных машин в пуле и на узле, подробнее с их реализацией можно ознакомиться в репозитории проекта.
Ключевые слова: виртуальная машина, пул, система управления, репозиторий проекта, управление рабочими местами, свободное ПО, университет
Подпишитесь на журнал
Facebook
Мой мир
Вконтакте
Одноклассники
Google+
|