Die erste Ausgabe des Projekts Incus wurde vorgestellt, in dessen Rahmen die Community der Linux-Container einen Fork des Container-Management-Systems LXD entwickelt, das einst von dem ehemaligen Entwicklerteam, das LXD ins Leben gerufen hat, geschaffen wurde. Der Code von Incus ist in der Programmiersprache Go verfasst und wird unter der Lizenz Apache 2.0 verbreitet.
Wir erinnern daran, dass die Community der Linux-Container die Entwicklung von LXD beaufsichtigte, bevor Canonical beschloss, LXD als eigenes Unternehmensprojekt weiterzuentwickeln. Das Ziel des Forks ist es, eine verwaltete, von der Community unabhängige Alternative zu dem von Canonical kontrollierten Projekt LXD bereitzustellen. Im Rahmen des Projekts Incus ist auch geplant, einige konzeptionelle Fehler zu beheben, die bei der Entwicklung von LXD gemacht wurden und die zuvor ohne Kompromittierung der Abwärtskompatibilität nicht behoben werden konnten.
Incus bietet Mittel zur zentralen Verwaltung von Containern und virtuellen Maschinen, die sowohl auf einem einzelnen Host als auch in einem Cluster von mehreren bereitgestellt werden. Server. Das Projekt wird als Hintergrundprozess umgesetzt, der über das Netzwerk Anfragen über die REST-API entgegennimmt und verschiedene Backend-Speicher unterstützt (Verzeichnisbaum, ZFS, Btrfs, LVM). Es ermöglicht Snapshots mit Zustandsausschnitten, Live-Migration laufender Container von einer Maschine zur anderen sowie Tools zur Speicherung von Container-Images. Als Runtime zum Starten von Containern wird das LXC-Toolset verwendet, das die Bibliothek liblxc, eine Reihe von Dienstprogrammen (lxc-create, lxc-start, lxc-stop, lxc-ls usw.), Vorlagen zum Erstellen von Containern und eine Sammlung von Bindungen für verschiedene Programmiersprachen umfasst. Die Isolation erfolgt mithilfe der Standardmechanismen des Linux-Kernels (Namespaces, cgroups, AppArmor, SELinux, Seccomp).
Die erste Version von Incus entspricht in ihrer Funktionalität dem kürzlich veröffentlichten Update LXD 5.18 und konzentriert sich hauptsächlich auf die Umbenennung sowie die Neuorganisation des Codes, während veraltete Funktionen entfernt wurden. In der neuen Version sind zudem spezifische Änderungen für Incus in der Befehlszeilenoberfläche und API zu verzeichnen, die aufgrund von Rückwärtskompatibilitätsanforderungen nicht in LXD integriert werden konnten. Zukünftig planen die Entwickler, nützliche Verbesserungen und Fehlerbehebungen aus der LXD-Codebasis zu übertragen, während sie auch eigene Innovationen hinzufügen, die bei Bedarf von Canonical in LXD portiert werden können.
Die auffälligsten Änderungen:
- Der Wechsel zu der eingebetteten SQL-Engine Cowsql wurde vollzogen – einem Fork von Dqlite, der vom ursprünglichen Autor aus denselben Gründen erstellt wurde wie Incus (um unabhängig von Canonical zu agieren). Cowsql ist mit SQLite kompatibel, unterstützt die Datenreplikation, die automatische Wiederherstellung nach Ausfällen und gewährleistet die Ausfallsicherheit durch die Verteilung von Handlern auf mehrere Knoten.
- Im Befehlszeileninterface wurde der Befehl „incus snapshot“ zur Verwaltung von Snapshots hinzugefügt (ersetzt die einzelnen lxc-Befehle snapshot und restore). Mit „incus snapshot“ können die Operationen zum Erstellen, Löschen, Anzeigen von Listen, Umbenennen und Wiederherstellen von Snapshots gestartet werden.
- Die Logik der Befehle „incus config trust add“ und „incus cluster add“ wurde geändert, sodass sie nun ein Argument mit dem Namen akzeptieren und ein korrektes Token zurückgeben. Die Operationen zur Arbeit mit dem Zertifikat über den Befehl „incus config trust add“ wurden in einen separaten Befehl „incus config trust add-certificate“ verschoben.
- Der Befehl „incus admin“ wurde hinzugefügt, der es dem Administrator ermöglicht, direkt auf die Befehle lxc und lxd zu verzichten. Folgende Unterbefehle sind verfügbar:
- incus admin cluster
- incus admin init
- incus admin recover
- incus admin shutdown
- incus admin waitready
- Veraltete API-Endpunkte /1.0/containers und /1.0/virtual-machines wurden entfernt, ersetzt durch /1.0/instances.
- Das Gerät /dev/lxd wurde durch /dev/incus ersetzt, Erwähnungen im Code von lxd wurden in incus geändert.
- Typ Serverkonfiguration. wurde von „map[string]any“ auf „map[string]string“ geändert. Die veraltete Authentifizierungsmethode core.trust_password (ersetzt durch tokenbasierte Authentifizierung), die die Verwendung des Typs „map[string]string“ erschwerte, wurde entfernt.
- Veraltete Funktionen *Container wurden aus der API entfernt, um nach der Implementierung der Verwaltung von virtuellen Maschinen durch die Funktionen *Instance ersetzt zu werden (z. B. sollte anstelle von CreateContainer nun CreateInstance verwendet werden).
- Ein neues Tool lxd-to-incus wurde hinzugefügt, um von LXD zu Incus zu migrieren (es unterstützt die automatische Konvertierung von Konfigurationsdateien, beginnend mit LXD-Version 4.0 bis 5.18). Der Transfer von Clustern wird derzeit nicht unterstützt.
- Die minimal unterstützte Version der Programmiersprache Go ist nun 1.20.
- Die Unterstützung bestimmter Funktionen, die auf Ubuntu basieren oder von veralteter oder nicht unterstützter Software abhängen, wurde eingestellt:
- Die Unterstützung für die Ubuntu Fan-Bindings (bridge.mode, fan.overlay_subnet, fan.underlay_subnet, fan.type), die von Kernel-Patches abhängen und nur in Ubuntu verwendet werden, wurde entfernt.
- Die Unterstützung für shiftfs, das an Kernel-Pakete für das Ubuntu-virtuelle Dateisystem gebunden ist, das die Zuordnung von Mount-Punkten zu Benutzer-ID-Namensräumen (user namespace) ermöglicht, wurde entfernt.
- Die Unterstützung für das spezifische Authentifizierungssystem Candid, das für Produkte von Canonical entwickelt wurde, wurde eingestellt.
- Die Unterstützung für die proprietäre Implementierung des Authentifizierungsmechanismus RBAC (Role Based Access Control), die von Canonical auf Basis von Macaroons und Candid erstellt wurde, wurde entfernt.
- Die Komponenten zur Integration mit MAAS (Metal-as-a-Service), einem Tool für die schnelle Bereitstellung von Ubuntu-Konfigurationen, wurden entfernt.
- Das Konzept des Zugangs zum Server über ein vertrauenswürdiges Passwort (core.trust_password) wurde abgeschafft.
Quelle: opennet.ru
