Сообщество Linux Containers опубликовало релиз инструментария для организации работы изолированных контейнеров LXC 6.0, предоставляющий runtime, подходящий как для запуска контейнеров с полным системным окружением, близких к виртуальным машинам, так и для выполнения непривилегированных контейнеров отдельных приложений (OCI). LXC относится к низкоуровневым инструментариям, работающим на уровне отдельных контейнеров. Для централизованного управления контейнерами, развёрнутыми в кластере из нескольких серверов, на базе LXC развиваются системы Incus и LXD. Ветка LXC 6.0 отнесена к выпускам с длительной поддержкой, обновления для которых формируются в течение 5 лет (до 2029 года). Код LXC написан на языке Си и распространяется под лицензией GPLv2.
В состав LXC входит библиотека liblxc, набор утилит (lxc-create, lxc-start, lxc-stop, lxc-ls и т.п.), шаблоны для построения контейнеров и набор биндингов для различных языков программирования. Изоляция осуществляется при помощи штатных механизмов ядра Linux. Для изоляции процессов, сетевого стека ipc, uts, идентификаторов пользователей и точек монтирования используется механизм пространств имён (namespaces). Для ограничения ресурсов применяются cgroups. Для понижения привилегий и ограничения доступа задействованы такие возможности ядра, как профили Apparmor и SELinux, политики Seccomp, Chroots (pivot_root) и capabilities.
Основные изменения:
- Предоставлена возможность сборки универсального исполняемого файла
lxc, сочетающего в одной утилите все команды, ранее распространяемые в виде отдельных утилит "lxc-*". Для сборки сводного исполняемого файла предложена опция "tools-multicall=true", при выставлении которой все старые отдельные утилиты создаются как символические ссылки на утилиту lxc. Сборка в форме одного исполняемого файла позволяет существенно снизить потребление инструментарием дискового пространства, что актуально для встраиваемых систем.
- В библиотеку liblxc добавлена функция set_timeout, позволяющая выставить таймаут для любых операций взаимодействия с LXC monitor.
- В интерфейсе сетевых мостов lxcbr0 по умолчанию активирована поддержка IPv6 с выставлением адресов из подсети IPv6 ULA (Unique Local Address).
- В утилите lxc-usernsexec добавлены опции "-u" и "-g" для изменения идентификаторов пользователя и группы (UID и GID).
- В утилите lxc-checkconfig обеспечен показ версии только при наличии команды lxc-start и добавлено информирование о максимально допустимом числе каждого типа пространств имён.
- Добавлена поддержка образов контейнеров в формате OCI, в которых для сжатия информации задействована ФС Squashfs.
- Для взаимодействия с systemd через D-Bus задействована отдельная библиотека libdbus-1 вместо libsystemd.
- Прекращена поддержка системы инициализации Upstart.
Одновременно опубликован выпуск проекта Incus, в рамках которого сообществом Linux Containers развивается форк системы управления контейнерами LXD, созданный старой командой разработчиков, когда-то создавшей LXD. Код Incus написан на языке Go и распространяется под лицензией Apache 2.0. Incus 6.0 позиционируется первая как стабильная ветка для которой будет обеспечен длительный цикл формирования обновлений (LTS). Из изменений в Incus 6.0 выделяется возможность создания сетевых интерфейсов через API bridge.external_interfaces, улучшение поддержки аутентификации через JWT (JSON Web Token), поддержка USB и показ детальной системной информации в команде "incus info --resources", поддержка выпуска LXD 5.21 в утилите lxd-to-incus.
Incus и LXD предоставляют средства для централизованного управления контейнерами и виртуальными машинами, развёрнутыми как на одном хосте, так и в кластере из нескольких серверов. Проект реализован в виде фонового процесса, принимающего запросы по сети через REST API и поддерживающего различные бэкенды хранилищ (дерево директорий, ZFS, Btrfs, LVM), снапшоты со срезом состояния, live-миграцию работающих контейнеров с одной машины на другую и средства для хранения образов контейнеров. В качестве runtime для запуска контейнеров используется инструментарий LXC. Изоляция осуществляется при помощи штатных механизмов ядра Linux (пространства имён, cgroups, Apparmor, SELinux, Seccomp).
Сообщество Linux Containers курировало разработку LXD до того, как компания Canonical решила трансформировать LXD в корпоративный проект. Целью форка называется предоставление управляемой независимым сообществом альтернативы проекту LXD, подконтрольному компании Canonical. Создание Incus также дало возможность провести работу по устранению некоторых концептуальных ошибок, допущенные при разработке LXD, которые ранее невозможно было исправить без нарушения обратной совместимости.
Компания Canonical опубликовала новую версию системы управления контейнерами LXD 5.21.1. Ветка LXD 5.21 помечена как LTS и будет поддерживаться до июня 2029 года. Код, добавленный в LXD сотрудниками Canonical, поставляется под лицензией AGPLv3, но код сторонних участников, на который у Canonical нет имущественных прав, остаётся под Apache 2.0.
Из функциональных изменений в LXD 5.21.1 можно отметить перевод snap-пакета с LXD на ветки LXC 6.0 и LXCFS 6.0. В API добавлено расширение storage_volumes_all и связанный с ним обработчик /1.0/storage_volumes для вывода списка со всеми разделами хранения. Добавлено расширение instances_files_modify_permissions для изменения через API прав доступа к существующим файлам.
Доступен выпуск виртуальной ФС LXCFS 6.0, используемой для симуляции в контейнерах псевдо-фС /proc и /sys, а также для виртуализированного представления cgroupfs для дистрибутивов без поддержи пространств имён cgroup. В новой версии добавлена опция "--enable-cgroup", позволяющая управлять включением встроенной функциональности для создания виртуального дерева croupfs для контейнеров, используя cgroupv1 (в настоящее время большинство дистрибутивов поддерживают предоставляемые ядром пространства имён для croup, поэтому включение по умолчанию встроенной альтернативной реализации потеряло смысл и теперь является опциональным). Кроме того, в LXCFS 6.0 прекращена фильтрация CPU при формировании файла /sys/devices/system/cpu, в зависимости от состояния
online/offline.
|