2023-09-23 21:24:56 +03:00
# Compute Node Agent library
2023-06-17 20:07:50 +03:00
2023-09-23 21:24:56 +03:00
В этом репозитории развивается базовая библиотека для взаимодействия с libvirt и выполнения операций с виртуальными машинами. Фокус на QEMU/KVM.
2023-06-17 20:07:50 +03:00
2023-09-23 21:24:56 +03:00
# Зависимости (версии из APT репозитория Debian 12):
2023-07-22 23:59:49 +03:00
- `python3-lxml` 4.9.2
- `python3-docopt` 0.6.2
2023-09-02 00:52:28 +03:00
- `python3-libvirt` 9.0.0
2023-07-22 23:59:49 +03:00
2023-08-27 23:42:56 +03:00
Минимальная поддерживаемая версия Python — `3.11` , потому, что можем.
2023-07-22 23:59:49 +03:00
2023-09-23 21:24:56 +03:00
# Утилиты
- `na-vmctl` virsh на минималках. Выполняет базовые операции с VM, установку и миграцию и т.п.
- `na-vmexec` . Обёртка для вызова QEMU guest agent на машинах, больше нчего уметь не должна.
- `na-volctl` . Предполагается здесь оставить всю работу с дисками. Н е реализована.
2023-08-27 23:42:56 +03:00
# API
2023-07-22 23:59:49 +03:00
2023-09-02 00:52:28 +03:00
Кодовая база растёт, необходимо автоматически генерировать документацию, в README её больше не будет.
2023-06-17 20:07:50 +03:00
2023-08-27 23:42:56 +03:00
В структуре проекта сейчас бардак, многое будет переосмыслено и переделано позже. Основная цель на текущем этапе — получить минимально работающий код, с помощью которого возможно выполнить установку виртуальной машины и как-то управлять ею.
2023-07-22 23:59:49 +03:00
2023-09-23 21:24:56 +03:00
Есть набор классов, предоставляющих собой интерфейсы для взаимодействия с виртуальными машинами, стораджами, дисками и т.п. Датаклассы описывают сущности и имеют метод `to_xml()` для получения XML конфига для `libvirt` . Смысл датакласса в том, чтобы иметь один объект, содержащий в с е б е нормальные легкочитаемые аттрибуты и XML описание сущности одновременно.
2023-07-28 01:01:32 +03:00
2023-06-17 20:07:50 +03:00
# TODO
2023-09-02 00:52:28 +03:00
- [x] Установка В М (всратый вариант)
2023-07-28 01:01:32 +03:00
- [x] Конструктор XML (базовый)
2023-08-27 23:42:56 +03:00
- [x] Автоматический выбор модели процессора
2023-09-02 00:52:28 +03:00
- [x] Метод создания дисков
2023-08-27 23:42:56 +03:00
- [x] Дефайн, запуск и автостарт В М
2023-09-02 00:52:28 +03:00
- [x] Работа с о StoragePool
- [x] Создание блочных устройств
- [x] Подключение/отключение устройств
2023-09-23 21:24:56 +03:00
- [x] Метод install()
- [ ] Выбор между SeaBIOS/UEFI
- [ ] Выбор модели процессора
2023-09-02 00:52:28 +03:00
- [ ] Установка В М (нормальный вариант)
2023-09-23 21:24:56 +03:00
- [x] Управление дисками
- [x] Локальные qcow2
- [ ] ZVOL
- [ ] Сетевые диски
- [ ] Живой ресайз файловой системы (?)
2023-09-02 00:52:28 +03:00
- [x] Удаление В М
2023-08-27 23:42:56 +03:00
- [x] Изменение CPU
2023-09-23 21:24:56 +03:00
- [ ] Полноценный hotplug
2023-08-27 23:42:56 +03:00
- [x] Изменение RAM
2023-09-23 21:24:56 +03:00
- [ ] Полноценный hotplug
2023-07-22 23:59:49 +03:00
- [ ] Миграция В М между нодами
- [x] Работа с qemu-ga
- [x] Управление питанием
2023-08-24 22:36:12 +03:00
- [x] Вкл/выкл автостарт В М
2023-07-22 23:59:49 +03:00
- [ ] Статистика потребления ресурсов
- [ ] Получение инфомрации из/о В М
- [ ] SSH-ключи
- [ ] Сеть
2023-08-24 22:36:12 +03:00
- [ ] Создание снапшотов
2023-08-27 23:42:56 +03:00
- [ ] Поддержка выделения гарантированной доли CPU
2023-06-17 20:07:50 +03:00
2023-07-22 23:59:49 +03:00
# Заметки
2023-09-23 21:24:56 +03:00
### Что там с LXC?
2023-09-02 00:52:28 +03:00
Можно добавить поддержку LXC, но только после реализации основного функционала для QEMU/KVM.
2023-09-23 21:24:56 +03:00
### Будущее этой библиотеки
2023-08-27 23:42:56 +03:00
2023-09-23 21:24:56 +03:00
Нужно задействовать билиотеку [libosinfo ](https://libosinfo.org/ ) для получения информации о б операционных системах. См. [How to populate Libosinfo DataBase ](https://wiki.libvirt.org/HowToPopulateLibosinfoDB.html ).
2023-08-27 23:42:56 +03:00
2023-09-23 21:24:56 +03:00
### Failover
2023-07-22 23:59:49 +03:00
2023-08-27 23:42:56 +03:00
В перспективе для В М с сетевыми дисками возможно организовать Failover решение — В М будет автоматически запускаться на другой ноде из пула при отключении оригинальной ноды. Технически это можно реализовать как создание В М с аналогичными характеристиками на другой ноде с подключением к тому же самому сетевому диску. Сразу нужно отметить, что для реализации:
2023-06-17 20:07:50 +03:00
2023-08-27 23:42:56 +03:00
- Нужно где-то хранить и регулярно обновлять информацию о конфигурации В М для воссоздания В М
- Нужно иметь "плавающие адреса", чтобы переключить трафик на новую ноду
- Необходимо выполнять failover по чётким критериям: нода полностью недоступна более X времени, маунт сетевого диска отвалился и т.п.
- Как быть с целостностью данных на сетевом диске? При аварии на ноде, данные могли быть повреждены, тогда failover на тот же диск ничего не даст.
- Сетевой диск должен быть зарезервирован средствами распределённой ФС