VPS auf LXC: ein Container auf modernem Kernel und seine Grenzen
LXC sind Container, die direkt im gewöhnlichen Linux-Kernel stecken. Sie bestehen aus Standardmechanismen des Kernels: Namespaces zur Isolierung von Prozessen und Netzwerk sowie cgroups für Limits bei Arbeitsspeicher und CPU. Anbieter stellen sie meist über Proxmox VE bereit, wo sie CT heißen, oder über LXD und Incus. Wie bei OpenVZ laufen alle Kunden eines Servers auf demselben Kernel des Hosts – hier ist das aber ein Standardkernel aus einem aktuellen Zweig und keine Spezialversion auf Basis eines alten RHEL. Daraus ergeben sich sowohl die wichtigsten Vorteile als auch die wichtigsten Einschränkungen.
Worin sich LXC von einer virtuellen Maschine unterscheidet
Ein Container startet in Sekunden, verbraucht kaum Ressourcen für die Virtualisierung und bietet eine gute Festplattengeschwindigkeit: Die Dateien liegen direkt im Speicher des Hosts, ohne Schicht einer emulierten Festplatte. Im Gegenzug haben Sie keine Kontrolle über den Kernel.
- Kernelmodule lassen sich nicht laden. Es funktioniert nur, was auf dem Host geladen ist. Hat der Anbieter das WireGuard-Modul geladen, können Sie die Schnittstelle für ein privates Netz direkt im Container anlegen; falls nicht, bleibt eine Userspace-Implementierung über TUN – und auch das nur mit Erlaubnis des Anbieters.
- Kein eigener Swap. Den Auslagerungsspeicher steuert der Host über cgroups, der Befehl
swaponfunktioniert im Container nicht. - Nur Linux. Windows, FreeBSD und ein eigenes ISO sind nicht verfügbar, die Auswahl beschränkt sich auf die Templates des Anbieters. Verschachtelte Virtualisierung gibt es ebenfalls nicht.
- Ein Teil der Systemeinstellungen ist gesperrt. Systemzeit, viele sysctl-Parameter und den Netzwerkstack des Hosts können Sie nicht ändern, und iptables sowie nftables wirken nur innerhalb des Netzwerk-Namespace des Containers.
Außerdem gibt es einen Unterschied zwischen privilegierten und unprivilegierten Containern. In einem unprivilegierten Container entspricht der Benutzer root im Container einem gewöhnlichen Benutzer auf dem Host: Das ist sicherer für alle Kunden des Knotens, und die meisten Anbieter stellen genau solche Container bereit. Die Kehrseite: Manche Dateisystemoperationen, etwa das Einbinden von NFS oder CIFS aus dem Container heraus, funktionieren ohne Hilfe des Supports nicht.
Docker in LXC
Docker startet in einem LXC-Container, wenn der Anbieter verschachtelte Container aktiviert hat: In Proxmox ist das die Option nesting, manchmal zusammen mit keyctl. Auf aktuellen Kerneln nutzt Docker den Treiber overlay2 und läuft für einen typischen Stack aus Webserver, Datenbank und ein paar Diensten problemlos. Einschränkungen treten auf, wenn der Container Host-Privilegien braucht: Durchreichen von Geräten, eigene Netzwerke mit speziellen Modulen, Änderung von Kernelparametern. Ist Docker die Grundlage Ihres Projekts, ist eine Maschine mit eigenem Kernel zuverlässiger: Die Auswahl VPS für Docker berücksichtigt diese Anforderung.
Wie viele Ressourcen tatsächlich zur Verfügung stehen
Limits werden in LXC über cgroups gesetzt und strikt eingehalten: Mehr Arbeitsspeicher als erlaubt bekommt der Container nicht, und wird er knapp, beendet der Kernel einen Prozess im Container. Überbuchung betrifft hier vor allem CPU und Festplatte – sie werden mit den Nachbarn geteilt. Beachten Sie eine Feinheit bei der Anzeige der Ressourcen. Ohne die Komponente lxcfs zeigen die Befehle free, top und nproc den Arbeitsspeicher und die Kerne des gesamten Hosts, nicht Ihre Limits. Programme, die sich an diesen Zahlen orientieren (JVM, Datenbanken, Build-Tools), können zu große Puffer anlegen und abstürzen. Das tatsächliche Speicherlimit steht auf Systemen mit cgroups v2 in /sys/fs/cgroup/memory.max.
So prüfen Sie, ob der Tarif auf LXC läuft
Führen Sie systemd-detect-virt aus – in einem LXC-Container lautet das Ergebnis lxc (oder lxc-libvirt bei Containern unter libvirt). Der Befehl uname -r zeigt den Kernel des Hosts; das Suffix -pve deutet auf Proxmox hin. Ein weiteres Merkmal: cat /proc/1/environ | tr '\0' '\n' | grep container zeigt die Variable container=lxc. Haben Sie eine vollwertige Maschine erwartet, das System meldet aber einen Container, ist das ein Grund, sich noch innerhalb der Rückerstattungsfrist an den Support zu wenden.
Wofür LXC geeignet ist und wofür nicht
LXC eignet sich gut für leichte Aufgaben mit aktueller Software: eine Website mit nginx und PHP, ein Bot, ein kleiner Dienst in Node.js oder Python, ein Proxy für interne Dienste, ein Monitoring-Server, eine Testumgebung. Im Vergleich zu OpenVZ haben Sie hier einen aktuellen Kernel, sodass moderne Distributionen und Programme laufen, die neue Systemaufrufe benötigen. Ein weiterer Vorteil sind Backups: Ein Snapshot des Containers auf ZFS- oder LVM-Speicher entsteht fast sofort, die Wiederherstellung dauert Minuten, deshalb nehmen viele Anbieter tägliche Sicherungen direkt in den Tarif auf. Klären Sie, ob diese auf einem anderen Server gespeichert werden.
LXC ist nicht die richtige Wahl, wenn Sie Windows, eine eigene Kernelversion, eigene Module, volle Kontrolle über das Netzwerk oder den Betrieb virtueller Maschinen brauchen. Nehmen Sie in diesen Fällen einen VPS auf KVM: Der Preisunterschied ist meist gering, und ein wachsendes Projekt später umzuziehen kostet mehr, als gleich die passende Plattform zu wählen.