Подано перший випуск проекту 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.
- З API видалено застарілі функції *Container, на зміну яким після реалізації управління віртуальними машинами прийшли функції *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
