Представлен третий выпуск проекта Incus, в рамках которого сообществом Linux Containers развивается форк системы управления контейнерами LXD, созданный старой командой разработчиков, когда-то создавшей LXD. Код Incus написан на языке Go и распространяется под лицензией Apache 2.0.
Напомним, что сообщество Linux Containers курировало разработку LXD до того, как компания Canonical решила развивать LXD отдельно как корпоративный проект. Целью форка называется предоставление управляемой независимым сообществом альтернативы проекту LXD, подконтрольному компании Canonical. В рамках проекта Incus также планируется устранить некоторые концептуальные ошибки, допущенные при разработке LXD, которые ранее невозможно было исправить без нарушения обратной совместимости.
Incus предоставляет средства для централизованного управления контейнерами и виртуальными машинами, развёрнутыми как на одном хосте, так и в кластере из нескольких серверов. Проект реализован в виде фонового процесса, принимающего запросы по сети через REST API и поддерживающего различные бэкенды хранилищ (дерево директорий, ZFS, Btrfs, LVM), снапшоты со срезом состояния, live-миграцию работающих контейнеров с одной машины на другую и средства для хранения образов контейнеров. В качестве runtime для запуска контейнеров используется инструментарий LXC, в состав которого входит библиотека liblxc, набор утилит (lxc-create, lxc-start, lxc-stop, lxc-ls и т.п.), шаблоны для построения контейнеров и набор привязок для различных языков программирования. Изоляция осуществляется при помощи штатных механизмов ядра Linux (пространства имён, cgroups, Apparmor, SELinux, Seccomp).
Наиболее заметные изменения:
- Добавлена поддержка управления авторизацией пользователей на базе модели Relationship-Based Access Control, реализованной при помощи фонового процесса OpenFGA, отвечающего за принятие решений по предоставлению пользователям тех или иных полномочий. В сочетании с провайдером
OpenID Connect поддержка OpenFGA позволяет сформировать открытый стек идентификации и авторизации, позволяющий использовать Incus в качестве полной замены конфигураций LXD с Canonical RBAC. Для настройки доступа к OpenFGA предложены параметры openfga.api.token, openfga.api.url, openfga.store.id и openfga.store.model_id. - Улучшена утилита lxd-to-incus, автоматизирующая миграцию с LXD на Incus. В новой версии добавлена поддержка дистрибутивов с системой инициализации OpenRC, реализована возможность переноса хранилищ Ceph и сетей OVN, обеспечено ведение лога миграции и создание резервных копий.
- В виртуальных машинах добавлена поддержка горячего подключения и горячего удаления (hot-plug/hot-remove) файловых путей или отдельных разделов, проброшенных из хост-окружения. Ранее подобный проброс при помощи драйвера virtio-fs или ФС 9p требовал остановки виртуальной машины. Для обхода этого ограничения задействована возможность QEMU по горячему подключению PCI-устройств и монтирование пути внутри гостевой системы через incus-agent.