python-compute/README.md

95 lines
5.8 KiB
Markdown
Raw Normal View History

2023-08-27 23:42:56 +03:00
# Compute Node Agent
2023-06-17 20:07:50 +03:00
2023-08-27 23:42:56 +03:00
Агент для работы на ворк-нодах. В этом репозитории развивается базовая библиотека для взаимодействия с libvirt и выполнения основных операций.
2023-06-17 20:07:50 +03:00
2023-07-22 23:59:49 +03:00
# Как это должно выглядеть
`node-agent` должен стать обычным DEB-пакетом. Вместе с самим приложением пойдут вспомагательные утилиты:
2023-07-28 01:01:32 +03:00
- `na-vmctl` virsh на минималках, который дёргает код из Node Agent. Выполняет базовые операции с VM, установку и миграцию и т.п. Реализована частично.
- `na-vmexec`. Обёртка для вызова QEMU guest agent на машинах, больше нчего уметь не должна. Реализована целиком.
- `na-volctl`. Предполагается здесь оставить всю работу с дисками. Не реализована.
2023-07-22 23:59:49 +03:00
2023-07-28 01:01:32 +03:00
Этими утилитами нет цели заменять virsh, бцдет реализован только специфичный для Node Agent функционал.
2023-07-22 23:59:49 +03:00
Зависимости (версии из APT репозитория Debian 12):
- `python3-lxml` 4.9.2
- `python3-docopt` 0.6.2
- `python3-libvirt` 9.0.0 (актуальная новее)
2023-08-27 23:42:56 +03:00
`docopt` скорее всего будет выброшен в будущем, так как интерфейс CLI сильно усложнится.
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-08-27 23:42:56 +03:00
# API
2023-07-22 23:59:49 +03:00
2023-08-27 23:42:56 +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-08-27 23:42:56 +03:00
Базовые сущности:
2023-07-22 23:59:49 +03:00
2023-08-27 23:42:56 +03:00
- `LivbirtSession` - обёртка над объектом `libvirt.virConnect`.
- `VirtualMachine` - класс для работы с доменами, через него выполняется большинство действий.
- `VirtualMachineInstaller` - класс для установки ВМ, выполняет кучу проверок, генерирует XML конфиг и т.п.
- `QemuAgent` - понятно что это.
- `ConfigLoader` - загрузчик TOML-конфига, возможно будет выброшен на мороз.
2023-07-22 23:59:49 +03:00
```python
2023-08-27 23:42:56 +03:00
from na import LibvirtSession
from na.vm import VirtualMachineInstaller
2023-06-17 20:07:50 +03:00
2023-07-22 23:59:49 +03:00
2023-08-27 23:42:56 +03:00
session = LibvirtSession('config.toml')
compute = VirtualMachineInstaller(session).install(
name='devuan',
vcpus=4,
vcpu_mode='host-model',
2023-07-28 01:01:32 +03:00
memory=2048,
)
2023-08-27 23:42:56 +03:00
print(compute)
session.close()
2023-07-28 01:01:32 +03:00
```
2023-06-17 20:07:50 +03:00
# TODO
2023-07-22 23:59:49 +03:00
- [ ] Установка ВМ
2023-07-28 01:01:32 +03:00
- [x] Конструктор XML (базовый)
2023-08-27 23:42:56 +03:00
- [x] Автоматический выбор модели процессора
2023-08-24 22:36:12 +03:00
- [ ] Метод создания дисков
2023-08-27 23:42:56 +03:00
- [x] Дефайн, запуск и автостарт ВМ
- [ ] Работа со StoragePool
- [ ] Создание блочных устройств
- [ ] Подключение/отключение устройств
2023-07-22 23:59:49 +03:00
- [ ] Управление дисками
- [ ] Удаление ВМ
2023-08-27 23:42:56 +03:00
- [x] Изменение CPU
- [x] Изменение RAM
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-08-27 23:42: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 на тот же диск ничего не даст.
- Сетевой диск должен быть зарезервирован средствами распределённой ФС