LXD & LXC: System Container Management (Artikel 040)
Verwaltung von System-Containern mit LXD und LXC. Erfahren Sie, wie Sie leichtgewichtige virtuelle Umgebungen schaffen, die sich wie echte Server verhalten, aber Container-Performance bieten.
# LXD & LXC: Die Brücke zwischen Container und VM
TL;DR / Management Summary Während Docker/Podman darauf ausgelegt sind, einzelne Applikationen zu isolieren (Application Containers), bieten LXC/LXD komplette Betriebssystem-Umgebungen (System Containers). Ein LXC-Container verhält sich wie ein virtueller Server: Er hat ein Init-System (systemd), einen SSH-Dienst und eigene Log-Files, nutzt aber den Kernel des Hosts. Das Ergebnis: Fast die Performance von Bare-Metal bei der Flexibilität einer VM.
# 1. Einführung & Architektur
System vs. Application Containers.
- Application Container (Docker): Nur der Prozess (z.B. Nginx) läuft. Ephemer, kein SSH, kein systemd.
- System Container (LXC): Das gesamte OS läuft. Persistent, hat systemd, ideal für komplexe Workloads oder Legacy-Migrationen.
LXD ist die moderne Management-Ebene (REST API) über der rohen LXC Library.
graph TD
A[LXD CLI / API] --> B[LXD Daemon]
B --> C[LXC Library]
C --> D[Linux Kernel Namespaces/Cgroups]
D --> E[Container: Ubuntu 22.04]
D --> F[Container: Debian 12]
B --- G[Images: Remote Registry]
# 2. Erstes Setup & Init
Den Dämon vorbereiten.
LXD wird unter Ubuntu meist als Snap verteilt.
# Installation (falls nicht vorhanden)
sudo snap install lxd
# Initialisierung (Netzwerk, Storage, etc.)
sudo lxd init
# Tipp: Wählen Sie 'dir' oder 'zfs' als Storage Backend.
# 3. Container-Management
Starten und Stoppen.
# Container starten
# Startet ein aktuelles Debian 12 Image unter dem Namen 'my-server'
lxc launch images:debian/12 my-server
# Liste aller Container
lxc list
# In den Container “einloggen”
# Direkte Shell
lxc exec my-server -- bash
# Datei-Transfer
# Datei vom Host in den Container kopieren
lxc file push config.json my-server/root/
# 4. Day-2 Operations: Profile & Snapshots
Struktur in die Masse bringen.
# LXD Profile
Profile erlauben es, Konfigurationen (z.B. RAM-Limits, Netzwerk-Bridges) auf mehrere Container anzuwenden.
# Profil bearbeiten
lxc profile edit default
# Snapshots & Backups
# Snapshot erstellen
lxc snapshot my-server backup-v1
# Restore
lxc restore my-server backup-v1
# 5. Troubleshooting & “War Stories”
Wenn die Isolation klemmt.
# Story 1: “Der Kernel-Mismatch”
Symptom: Ein Dienst innerhalb des LXC-Containers (z.B. WireGuard oder Docker) startet nicht mit einer Fehlermeldung über fehlende Kernel-Module.
Ursache: LXC-Container haben keinen eigenen Kernel. Wenn das Modul auf dem Host-System nicht geladen ist, kann der Container es nicht nutzen.
Lösung: Modul auf dem Host laden (modprobe wireguard) oder den Container in den Modus security.nesting=true versetzen, wenn Docker darin laufen soll.
# Story 2: “Das volle Storage Backend”
Symptom: LXD meldet “Disk quota exceeded”, obwohl im Container noch Platz ist.
Ursache: Das LXD Storage-Pool-File (oft ein Loop-Device unter /var/snap/lxd/common/lxd/disks/) ist voll.
Lösung: Vergrößern Sie den Pool mit lxc storage set <pool_name> size <neue_groesse>G. Nutzen Sie wenn möglich immer ein direktes ZFS-Dataset statt Loop-Files!
# 6. Fazit & Empfehlung
- Einsatzgebiet: LXC ist ideal, um mehrere kleine Linux-Server auf einem Proxmox-Node zu konsolidieren, ohne den Overhead von Voll-Virtualisierung (KVM).
- Proxmox Integration: Proxmox VE nutzt LXC nativ. Sie können Container direkt in der Web-GUI verwalten – LXD ist dort meist nicht nötig, bietet aber für Standalone-Server eine bessere CLI-Erfahrung.
- Performance: Fast 0% CPU-Overhead im Vergleich zu Bare-Metal.
# Anhang: Cheatsheet
| Aufgabe | Befehl |
|---|---|
| Container stoppen | lxc stop <name> |
| Container löschen | lxc delete <name> --force |
| Ressourcen limitieren | lxc config set <name> limits.memory 2GB |
| Images suchen | `lxc image list images: |
| Container exportieren | lxc export <name> backup.tar.gz |
| Host-Verzeichnis mounten | lxc config device add <name> share disk source=/data path=/mnt |