Definition

LXD (Linux Container Hypervisor)

Was ist LXD (Linux Container Hypervisor)?

LXD ist eine einheitliche Plattform für die Verwaltung von Systemcontainern und virtuellen Maschinen (VMs). Die Plattform kann als einzelne Instanz auf einem einzelnen Computer oder als mehrere Instanzen in einem großen Cluster implementiert werden. Ein Cluster kann Tausende von Instanzen unterstützen und Container, VMs oder beides ausführen. Die LXD-Plattform, die auf Linux Containers (LXC) aufbaut und dieses erweitert, hat direkten Zugriff auf die zugrunde liegende Hardware, um maximale Effizienz und Leistung zu erzielen.

LXD ist ein Open-Source-Projekt, das kostenlos heruntergeladen und bereitgestellt werden kann. Canonical hat das Projekt im Jahr 2014 ins Leben gerufen und ist nach wie vor der wichtigste Mitwirkende. Ursprünglich wurde LXD von der Linux Containers Community verwaltet. Doch im Juli 2023 übernahm Canonical die Kontrolle über das Projekt in Version 5.15. LXD und ist jetzt bei Version 5.21 (Stand Februar 2025) angelangt.

Benutzer können LXD aus einem der vielen verfügbaren Pakete oder aus dem Quellcode installieren. Sie können auch die neuesten Dateien von GitHub herunterladen und sie selbst bauen.

Sollten Sie LXC oder LXD verwenden?

Sowohl LXC als auch LXD bieten die erforderlichen Tools für die Implementierung und Verwaltung von Linux-Containern. Obwohl die Plattformen einige Funktionen gemeinsam haben, verfolgen sie unterschiedliche Ansätze bei der Bereitstellung von Containern. LXD bietet im Vergleich zu LXC robustere Verwaltungsfunktionen und umfasst VM-Unterstützung.

LXC ist eine Linux-Container-Technologie, die eine Benutzerschnittstelle für Linux-Kernel-Eingrenzungsfunktionen wie Namespaces, Kontrollgruppen (cgroups), Change Roots (chroots), Richtlinien für sicheres Computing (seccomp) und andere Kernel-Funktionen bietet. Die LXC-Plattform umfasst mehrere Komponenten, darunter die Liblxc-Bibliothek, Sprachbindungen wie Go und Ruby, Container-Vorlagen für die Distribution und eine Reihe von Standardwerkzeugen.

Ein LXC-Container liegt irgendwo zwischen einer VM und einem Anwendungscontainer, wie der von Docker unterstützte Typ. Ein LXC-Container, der auch als Systemcontainer bezeichnet wird, simuliert eine virtuelle Version des vollständigen Betriebssystems. Der Container nutzt die Kernel-Funktionalität des Host-Systems und stellt die Bibliotheken, Datenbanken und andere Komponenten bereit, die für ein vollständiges Betriebssystem (OS) typisch sind. Aufgrund dieser Architektur kann ein LXC-Container mehrere Prozesse gleichzeitig ausführen, während ein Anwendungscontainer auf einen einzigen Prozess oder eine einzige Anwendung beschränkt ist. Darüber hinaus kann ein Systemcontainer mehrere Benutzerbereiche mit isolierten Prozessen innerhalb jedes Bereichs implementieren. Ein Anwendungscontainer kann das nicht.

Wie LXC unterstützt auch die LXD-Plattform Systemcontainer. Sie bietet umfassendere Tools und Methoden für die Implementierung und Verwaltung von Containern, mit Funktionen und Möglichkeiten, die LXC nicht zur Verfügung stehen, wie zum Beispiel eine bessere Benutzerfreundlichkeit. Die LXD-Plattform verwendet jedoch weiterhin LXC, um die Container selbst zu erstellen und zu verwalten, so dass LXD untrennbar mit der LXC-Technologie verbunden bleibt.

LXD enthält eine weitere wichtige Funktion: native Unterstützung für virtuelle Maschinen, die in Version 4.0 hinzugefügt wurde. Eine LXD-VM emuliert den physischen Host-Rechner und bietet gleichzeitig eine Umgebung mit einem vollständig isolierten Betriebssystem. Im Gegensatz dazu teilen sich Systemcontainer den Host-Kernel, anstatt eine eigene Umgebung zu schaffen. Dadurch sind die Container schneller und schlanker als VMs, bieten aber nicht das gleiche Maß an Isolation.

Mit LXD können Benutzer Container, VMs oder beides implementieren, während LXC auf Container beschränkt ist. LXC bietet weniger Funktionen und Möglichkeiten als LXD und ist nicht so einfach zu verwalten. Beide Plattformen sind kostenlos und quelloffen.

Laut Canonical sollte LXC als Alternative für erfahrene Benutzer angesehen werden, die Linux-Container auf Distributionen ausführen wollen, die LXD nicht unterstützen.

Vereinheitlichte Verwaltung von Containern und VMs
Abbildung 1: LXD vereinheitlicht die Verwaltung von Containern und virtuellen Maschinen.

Einsatz der LXD-Plattform

LXD ist ein Image-basiertes Produkt, für das Images für viele Linux-Distributionen verfügbar sind, darunter Fedora, Debian, OpenSUSE, Ubuntu, Alpine Linux, Arch Linux und Gentoo. Die zentrale Komponente einer LXD-Implementierung ist der LXD-Daemon, der nur auf Linux-Systemen laufen kann. Der LXD-Client, der mit diesem Daemon kommuniziert, ist jedoch für mehrere Plattformen verfügbar, darunter Windows und macOS.

Um den LXD-Daemon zu installieren, können Administratoren eines der verfügbaren Pakete verwenden oder ihn aus dem Quellcode installieren. Die Installation aus einem Paket ist der einfachste Ansatz, insbesondere wenn der Snap-Paketmanager verwendet wird, da LXD-Snap-Pakete für viele Linux-Distributionen getestet und veröffentlicht wurden.

Ein Benutzer kann LXD auch manuell aus dem Quellcode installieren. Dieser Ansatz erfordert normalerweise die neuste Version von Liblxc und eine moderne Version von Golang. Wenn beides vorhanden ist, lädt der Benutzer den LXC-Client und -Server in die gewünschten Verzeichnisse herunter und fügt sie dann dem Kernel hinzu, um die LXD-Daemon-Binärdatei und den LXC-Kommandozeilen-Client zu erstellen.

LXD ist entweder als Long-Term-Support-Release (LTS) oder als Feature-Release verfügbar. LTS-Releases sind die produktionsreifen Versionen, die über einen bestimmten Zeitraum fortlaufend Fehlerbehebungen und Sicherheits-Updates enthalten. Sie erhalten jedoch in der Regel keine neuen Hauptfunktionen. Feature-Releases stellen die experimentelleren LXD-Zweige dar und erscheinen monatlich mit neuen Funktionen, die die Benutzer ausprobieren können.

Verwaltung der LXD-Plattform

LXD bietet eine sichere und benutzerfreundliche Plattform für die Verwaltung und den Betrieb von Containern und virtuellen Maschinen. Die Plattform basiert auf einer umfassenden Programmierschnittstelle (API) für die Übertragung von Darstellungszuständen, die die Kommunikation zwischen dem LXD-Daemon und seinen Clients erleichtert. Die API läuft über HTTP und kann sowohl für den lokalen als auch für den Fernzugriff verwendet werden. Für lokale Operationen verwendet die API einen Unix-Socket und für Remote-Operationen ist sie in das Transport-Layer-Security-Protokoll gekapselt.

Administratoren können die API nutzen, um Skripte zu erstellen und Verwaltungsaufgaben zu automatisieren sowie Tools von Drittanbietern in die LXD-Plattform zu integrieren. Ein DevOps-Team könnte beispielsweise LXD-Container in seine kontinuierliche Integrations- und Deployment-Pipeline einbinden und dabei Infrastructure as Code für die Bereitstellung der Container verwenden. Mehrere externe Tools lassen sich bereits in LXD integrieren, darunter Ansible, Terraform, Bolt und Packer sowie Canonicals Juju und Maas oder Metal as a Service.

Integration für kontinuierliche Integration und Bereitstellung
Abbildung 2: DevOps-Teams können LXD-Container in ihre Pipeline für kontinuierliche Integration und kontinuierliche Bereitstellung integrieren.

Neben der API umfasst die LXD-Plattform auch eine Befehlszeilenschnittstelle (CLI) zur Steuerung der LXD-Umgebung. Die beiden wichtigsten Befehle, die der CLI zur Verfügung stehen, sind die folgenden:

  • lxd: Dieser Befehl steuert den LXD-Daemon. Administratoren müssen diesen Befehl nicht oft verwenden, da der Daemon normalerweise automatisch startet. Dennoch können Administratoren ihn für die Initialisierung, Verwaltung und Fehlersuche des Daemons verwenden. Diese Operationen sollten nur von erfahrenen Benutzern durchgeführt werden.
  • lxc: Der Befehl dient als Befehlszeilen-Client, der mit dem LXD-Daemon interagieren kann. Administratoren können diesen Befehl verwenden, um auf LXD-Instanzen und -Images zuzugreifen und diese zu verwalten. Mit diesem Befehl kann ein Administrator beispielsweise Profile verwalten, Instanzen neu starten, Server überwachen, Snapshots erstellen und Instanzen zwischen Servern verschieben.

Seit der LXD-Version 5.21.0 enthält die LXD-Plattform auch ein webbasiertes Tool, mit dem Administratoren viele der mit der Verwaltung von LXD-Instanzen verbundenen Aufgaben durchführen können.

Wichtige Merkmale von LXD

Die LXD-Plattform baut auf LXC auf und erweitert dessen Fähigkeiten auf verschiedene Weise. Im Folgenden sind einige der wichtigsten Funktionen von LXD aufgeführt:

  • eine hoch skalierbare Plattform, die Tausende von Instanzen unterstützt
  • eine sichere Umgebung, die standardmäßig unprivilegierte Container einsetzt, moderne virtuelle Hardware (VirtIO) für VMs verwendet und den Zugriff auf Ressourcen einschränkt
  • hochverfügbares Clustering mit Storage- und Netzwerkredundanz
  • Geräte-Passthrough-Funktionen für USBs, NICs, Festplatten, Grafikprozessoren und andere Hardware
  • flexible Kontrolle über Rechenressourcen mit erweiterter Netzwerkunterstützung und Storage-Management
  • erweiterte Stateful-Snapshotting-Funktionen
  • Live-Migration von laufenden Containern zwischen Hosts
  • OpenStack-Integration, wobei OpenStack-Images als Linux-Container geplant werden
  • Möglichkeit, Docker-Container innerhalb von LXD-Containern auszuführen
  • Möglichkeit der Integration mit Plattformen zur Anwendungscontainerisierung

Was ist der Unterschied zwischen Docker und LXD?

Obwohl Docker und LXD beides Container-Plattformen sind, dienen sie normalerweise unterschiedlichen Zwecken. Der Hauptunterschied ist die Art des Containers, den beide Plattformen erstellen.

Interaktion zwischen LXC und LXD und Docker
Abbildung 3: LXC und LXD containerisieren Systeme und können mit Anwendungscontainerisierungsplattformen wie Docker interagieren.

Die Docker-Plattform implementiert Anwendungscontainer, bei denen es sich um ephemere, zustandslose Container handelt, die nur wenige Ressourcen benötigen. Docker kann Anwendungscontainerinstanzen herunterladen, kryptografisch verifizieren und ausführen. Obwohl Docker in seinen Anfängen auf LXC basierte, hat es inzwischen seine Codebasis  geändert, um eine völlig andere Plattform für Container zu schaffen.

LXD-Systemcontainer sind wie leichtgewichtige VMs, wobei jeder Container eine virtuelle Version des vollständigen Linux-Betriebssystems ausführt. Wie Docker-Container nutzen auch LXD-Container auf demselben Host denselben Betriebssystem-Kernel. In einem Docker-Container kann jedoch jeweils nur eine Anwendung oder ein Prozess ausgeführt werden, während ein LXD-Container wie eine virtuelle oder physische Maschine fast alle Arten von Arbeitslasten unterstützen kann.

System- und Anwendungscontainerplattformen schließen sich nicht gegenseitig aus und können nebeneinander existieren, um verschiedene Arten von Arbeitslasten zu unterstützen. Systemcontainer eignen sich in der Regel besser für Workloads, die eine dauerhafte Umgebung erfordern, während Anwendungscontainer in der Regel besser für Prozesse oder Dienste geeignet sind, die nur vorübergehend ausgeführt werden. Ein Docker-Container kann sich sogar in einem LXD-Container einnisten.

Diese Definition wurde zuletzt im Februar 2025 aktualisiert

Erfahren Sie mehr über Containervirtualisierung