Release des Container-Management-Systems LXD 5.0

Die Firma Canonical hat die Version 5.0 des Container-Managers LXD und des virtuellen Dateisystems LXCFS 5.0 veröffentlicht. Der LXD-Code ist in Go geschrieben und wird unter der Apache 2.0-Lizenz veröffentlicht. Die Version 5.0 gehört zu den LTS-Release-Versionen – Updates werden bis Juni 2027 bereitgestellt.

Als Runtime für die Ausführung von Containern wird das LXC-Toolkit verwendet, das aus der liblxc-Bibliothek, einer Sammlung von Dienstprogrammen (lxc-create, lxc-start, lxc-stop, lxc-ls usw.), Vorlagen zum Erstellen von Containern und einem Set von Bindings für verschiedene Programmiersprachen besteht. Die Isolation erfolgt durch die nativen Mechanismen des Linux-Kernels. Zur Isolation von Prozessen, Netzwerk-Stacks, ipc, uts, Benutzer-IDs und Mount-Punkten wird der Mechanismus der Namespaces verwendet. Cgroups werden zur Ressourcenbegrenzung eingesetzt. Zur Herabsetzung von Berechtigungen und zur Zugangsbeschränkung werden Kernelfunktionen wie Apparmor-Profile, SELinux, Seccomp-Richtlinien, Chroots (pivot_root) und Fähigkeiten genutzt.

Neben LXC nutzt LXD auch Komponenten aus den Projekten CRIU und QEMU. Während LXC ein Low-Level-Werkzeug zur Manipulation von einzelnen Containern ist, bietet LXD Mittel zur zentralen Verwaltung von in einem Cluster aus mehreren Containern bereitgestellten Containern. ServerLXD wird als Hintergrundprozess implementiert, der Anfragen über das Netzwerk über eine REST-API entgegennimmt und verschiedene Speicher-Backends (Verzeichnisbaum, ZFS, Btrfs, LVM) unterstützt, Snapshots des Systemzustands, Live-Migration von laufenden Containern von einer Maschine zur anderen und Mittel zur Speicherung von Container-Images bietet. LXCFS wird verwendet, um in Containern ein Pseudo-Dateisystem /proc und /sys zu simulieren sowie eine virtualisierte Darstellung von cgroupfs zur Erzeugung des Anscheins eines gewöhnlichen, unabhängigen Systems in den Containern.

Wesentliche Verbesserungen:

  • Die Möglichkeit, Festplatten und USB-Geräte im laufenden Betrieb anzuschließen und zu trennen. In der virtuellen Maschine wird eine neue Festplatte durch das Erscheinen eines neuen Geräts auf dem SCSI-Bus und ein USB-Gerät durch das Generieren eines USB-Hotplug-Ereignisses erkannt.
  • Die Möglichkeit, LXD auch unter Bedingungen ohne Netzwerkverbindung zu starten, wurde bereitgestellt, z. B. aufgrund fehlender erforderlicher Netzwerkgeräte. Anstelle eines Fehlers beim Start von LXD werden jetzt so viele Umgebungen wie möglich unter den aktuellen Bedingungen gestartet, während die anderen Umgebungen starten, sobald die Netzwerkverbindung hergestellt ist.
  • Eine neue Rolle für Cluster-Mitglieder wurde hinzugefügt — ovn-chassis, die für Cluster bestimmt ist, die OVN (Open Virtual Network) für die Netzwerkkommunikation verwenden (durch Zuweisung der Rolle ovn-chassis können Server hervorgehoben werden, die als OVN-Router fungieren).
  • Ein optimierter Modus zum Aktualisieren des Inhalts von Speicherbereichen wurde vorgeschlagen. In früheren Versionen bestand die Aktualisierung darin, dass zunächst eine Instanz des Containers oder der Partition kopiert wurde, z. B. durch die Anwendung von send/receive in zfs oder btrfs, gefolgt von der Synchronisierung der erstellten Kopie durch das Starten des Programms rsync. Um die Effizienz der Aktualisierung zu erhöhen, virtuelle Maschinen wurde in der neuen Version eine fortschrittliche Migrationslogik implementiert, bei der, wenn der Quell- und Zielserver denselben Speicherpool verwenden, anstelle von rsync automatisch Snapshots und die Operationen send/receive angewendet werden.
  • Die Logik zur Identifizierung von Umgebungen in cloud-init wurde überarbeitet: Anstelle von Umgebungsnamen wird jetzt die UUID als instance-id verwendet.
  • Die Unterstützung für den Systemaufruf sched_setscheduler wurde hinzugefügt, der es nicht privilegierten Containern ermöglicht, die Priorität von Prozessen zu ändern.
  • Die Option lvm.thinpool_metadata_size wurde implementiert, die die Größe der Metadaten im thinpool steuert.
  • Das Dateiformat für Netzwerkinformationen für lxc wurde überarbeitet. Die Unterstützung für die Bindung von Schnittstellen, Netzwerkbrücken, VLANs und OVN-Netzen wurde hinzugefügt.
  • Die Anforderungen an die minimalen Versionen der Komponenten wurden erhöht: Linux-Kernel 5.4, Go 1.18, LXC 4.0.x und QEMU 6.0.
  • In LXCFS 5 wurde die Unterstützung für eine einheitliche cgroup-Hierarchie (cgroup2) hinzugefügt, /proc/slabinfo und /sys/devices/system/cpu wurden implementiert, für den Aufbau wurde das Meson-Toolset verwendet.

Quelle: opennet.ru

60GB SSD 8Gb DDR4