Представен е първият выпуск на проекта 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», които сега приемат един аргумент с име и връщат коректен токен. Операциите с сертификата чрез командата «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».
- Устаревшие функции *Container были удалены из API, на смену которым после реализации управления виртуальными машинами пришли функции *Instance (например, вместо CreateContainer следует использовать CreateInstance).
- Добавлена утилита lxd-to-incus для миграции с LXD на Incus (поддерживается автоматическое преобразование файлов конфигурации, начиная с версии 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).
Източник: opennet.ru
