python-compute/README.md
2023-09-23 21:24:56 +03:00

81 lines
5.8 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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