Представен е първият выпуск на проекта Incus, в рамките на който общността Linux Containers развива fork на системата за управление на контейнери LXD, създадена от старата група разработчици, изградили LXD. Кодът на Incus е написан на езика Go и се разпространява под лицензия Apache 2.0.
Напомняме, че общността Linux Containers е курирала разработката на LXD, преди компанията Canonical да реши да развива LXD независимо като корпоративен проект. Целта на fork-а е да предостави управляемо и независимо от общността алтернатива на проекта LXD, който е под контрола на компанията Canonical. В рамките на проекта Incus също така се планира да бъдат отстранени някои концептуални грешки, допуснати при разработката на LXD, които преди не можеха да бъдат коригирани без нарушаване на обратната съвместимост.
Incus предоставя средства за централизирано управление на контейнери и виртуални машини, разположени както на един хост, така и в клъстер от няколко. сървъри. Проектът е реализиран под формата на фонов процес, приемащ заявки през мрежата чрез REST API и поддържащ различни бекенди за съхранение (дърво от директории, ZFS, Btrfs, LVM), snapshot-и със срез на състоянието, 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). Прехвърлянето на клъстери все още не се поддържа.
- Обявена е версия 1.20 на езика Go като минимално поддържана версия.
- Поддръжката на определени функции, свързани с 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
