linux-ubuntu-debian container lxc lxd virtualization

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