Представлен второй выпуск проекта 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).
Наиболее заметные изменения:
- В утилиту lxd-to-incus, автоматизирующую переход с LXD на Incus, добавлена поддержка выпуска LXD 5.19 и обеспечена возможность миграции, не только отдельных хостов, но и кластеров LXD.
- В виртуальных машинах добавлена поддержка создания хранилищ на базе технологии NVME. Для указания типа диска добавлен новый параметр конфигурации “io.bus”, который по умолчанию выставлен в значение “virtio-scsi”. При изменении значения на “nvme”, накопитель в виртуальной машине будет виден как NVME SSD.
- Для образов контейнеров реализован параметр “requirements.privileged”, который может быть выставлен в значение “false” для запрета использования образа в привилегированных контейнерах. Настройка, например, может применяться для образов с дистрибутивом NixOS, которые в настоящее время несовместимы с привилегированными контейнерами.
- Из LXD перенесена реализация режима создания копий разделов на стороне сервера, который значительно ускоряет операции копирования разделов, благодаря исключению перенаправления данных через клиента.
- Предоставлены статически скомпонованные сборки для систем ARM64.