Представлен первый выпуск проекта 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).
По функциональности первый выпуск Incus, соответствующий недавно выпущенному обновлению LXD 5.18 и сфокусированный прежде всего на переименовании и реорганизации кодовой базы, а также на удалении устаревших возможностей. При этом в новой версии отмечаются и специфичные для Incus изменения в интерфейсе командной строки и API, которые невозможности было включить в LXD из-за требований по обеспечению обратной совместимости. В дальнейшем разработчики планируют переносить из кодовой базы LXD полезные улучшения и исправления, добавляя также и свои оригинальные новшества, которые при желании компании Canonical смогут быть портированы в LXD.
Наиболее заметные изменения:
- Осуществлён переход на встраиваемый SQL-движок Cowsql – форк Dqlite, созданный изначальным автором Dqlite по тем же причинам, что и Incus (вывод из под влияния Canonical). Cowsql совместим с SQLite, поддерживает репликацию данных, автоматическое восстановление после сбоев и обеспечение отказоустойчивости через разнесение обработчиков на несколько узлов.
- В интерфейс командной строки добавлена команда “incus snapshot” для управления снапшотами (заменяет отдельные lxc-команды snapshot и restore). Через “incus snapshot” можно запускать операции создания, удаления, показа списка, переименования и восстановления снапшота.
- Изменена логика обработки команд “incus config trust add” и “incus cluster add” которые теперь принимают один аргумент c именем и возвращают корректный токен. Операции работы с сертификатом через команду “incus config trust add” перенесены в отдельную команду “incus config trust add-certificate”.
- Добавлена команда “incus admin”, избавившая администратора от необходимости прямого обращения к командам lxc и lxd. Доступны следующие подкоманды:
- incus admin cluster
- incus admin init
- incus admin recover
- incus admin shutdown
- incus admin waitready
- Удалены устаревшие точки обращения к API /1.0/containers и /1.0/virtual-machines, на смену которым пришёл /1.0/instances.
- Устройство /dev/lxd замещено на /dev/incus, упоминания в коде lxd заменены на incus.
- Тип конфигурации сервера заменён с “map[string]any” на “map[string]string”. Уделён устаревший метод аутентификации core.trust_password (на смену пришла аутентификация на базе токенов), мешавший использованию типа “map[string]string”.
- Из API удалены устаревшие функции *Container, на смену которым после реализации управления виртуальными машинами пришли функции *Instance (например, вместо CreateContainer следует использовать CreateInstance).
- Добавлена утилита lxd-to-incus для миграции с LXD на Incus (поддерживается автоматическое преобразование файлов конфигурации, начиная c версии LXD 4.0 и заканчивая 5.18). Перенос кластеров пока не поддерживается.
- В качестве минимально поддерживаемой версии языка Go заявлен выпуск 1.20.
- Прекращена поддержка некоторых возможностей, завязанных на Ubuntu или зависящих от устаревшего или неподдерживаемого ПО:
- Удалена поддержка обвязок Ubuntu Fan (bridge.mode, fan.overlay_subnet, fan.underlay_subnet, fan.type), зависящих от патчей к ядру, используемых только в Ubuntu.
- Удалена поддержка shiftfs, привязанной к пакетам с ядром для Ubuntu виртуальной ФС для сопоставления точек монтирования с пространствами имён идентификаторов пользователей (user namespace).
- Удалена поддержка системы аутентификации Candid, специфичной для продуктов Canonical.
- Удалена поддержка проприетарной реализации механизма аутентификации RBAC (Role Based Access Control), созданной Canonical на базе Macaroons и Candid.
- Удалены компоненты для интеграции с MAAS (Metal-as-a-Service), инструментарием для быстрого развертывания конфигураций Ubuntu.
- Удалена концепция доступа к серверу при помощи заслуживающего доверия пароля (core.trust_password).