Ab wann "lohnen" sich LXC-Container?

antimon

Member
Mar 21, 2021
45
4
13
43
Hallo zusammen,

ich habe relativ lange Zeit meine Dienste in VMs im Proxmox betrieben. Aber irgendwann hat sich mir die Frage gestellt, warum ich nicht einzelne Dienste in LXC-Container auslagere. Dabei kam aber unweigerlich die Frage nach der Performance, die ich bei meinen Recherchen bisher nicht beantwortet bekommen habe - könnt Ihr mir da ein paar Tips geben?
Nehmen wir als Beispiel-Dienst den Unifi-WLAN-Controller an. Würde sich es da rentieren, diesen innerhalb eines LXCs zu betreiben? Einerseits wäre es dann sauber vom Rest getrennt, andererseits frage ich mich dann z.B. wie viele Ressourcen er zugewiesen bekommen soll? Da es ja kein komplettes OS ist, brauche ich ja keine 4 GB zuzuweisen - aber sind dann 512 MB in Ordnung oder ist das zu viel/zu wenig?
Gibts eine grobe Faustregel, die sagt wie viel Overhead ein LXC-Container braucht gegenüber Bare Metal? Also ist es egal, ob ich einfach jeden Dienst in einen Container packe oder macht es evtl. Sinn gewisse Dienste zusammen in eine VM zu packen? Mal die Abhängigkeit von den Diensten außer Acht gelassen, einfach rein zwecks Performance?
Oder gibt es eine andere Entscheidungsgrundlage, wann man Container und wann VM verwendet?
 
Am sichersten und stabilsten ist es, wenn du jeden Dienst in einer eigenen VM laufen lässt. Da musst du ja auch nicht jeder VM 4GB geben. Eine Linux VM kann auch wunderbar mit nur 256MB oder 512MB RAM laufen. Hängt halt immer vom Dienst ab. Wirklich Overhead ist dann ja vorallem der Kernel der da mehrfach parallel laufen muss, wenn du VMs nimmst, aber wenn du immer das selbe Linux als Basis nutzt, dann kann dir KSM ja z.B. im RAM auch wieder den mehrfachen Kernel deduplizieren, dass das dann auch nicht mehr so wild ist.

Wegen der Sicherheit würde ich zu mindestens für alles, was vom Internet aus ansprechbar ist, eine eigene VM nehmen, damit man die beste Isolation hat, wenn doch mal was passiert. Das gleiche für Dienste die dir wirklich wichtig sind. Da sind VMs halt wegen der vollen Isolation zuverlässiger, da sie völlig autark laufen können und da nicht ein ganzes kompliziertes Geflecht von externen Abhängigkeiten mit dranhängt.

Und bei Windows oder Unix ist man ja eh gezwungen VMs zu nehmen. Das gleiche wenn man Sachen wie PCI Passthrough nutzen möchte. Und Dinge wie NFS/SMB Shares kannst du in einem unprivilegierten LXC z.B. auch nicht direkt mounten. Da müsste man dann schon zu noch weniger sicheren und noch weniger isolierten privilegierten LXC greifen.

Zu mindestens bei mir ist da die Nutzungsmöglichkeit für LXCs schon sehr eingegrenzt. Wenn alles wegfällt was im Internet hängt oder sehr wichtig ist oder durchgereichte Hardware braucht oder Netzwerk-Shares braucht oder kein Linux ist, dann fallen da bei mir 23 von 26 Gästen weg. Da bleiben dann nur noch ganz wenige Einsatzzwecke über wie z.B. die Logging- und Monitoring-Tools.
 
Last edited:
LXC sind super für interne Web Services.

Also einfache Web Services wie Nextcloud, E-Mail Server, Media Wiki, DNS, LDAP, IOBroker, Plex, InfluxDB, Redmine, Git, Build Server fühlen wohl in einem LXC.
 
Bei mir läuft auch 95% in Containern. Skaliert wunderbar und hat kein overhead.


Sind dann 512 MB in Ordnung oder ist das zu viel/zu wenig?

Hängt allein von den Diensten im Container ab. Fang ohne limit an und setz es später, wenn du weißt, wie viel der Container braucht.

Habe diverse Container die weniger als 100MB brauchen. Andere brauchen auch gerne 4GB.


Gibts eine grobe Faustregel, die sagt wie viel Overhead ein LXC-Container braucht gegenüber Bare Metal?

Overhead durch namespaces ist nicht relevant, liegt unter 1%. Container sind wie bare metal, deswegen auch so viel besser als VM's.


Also ist es egal, ob ich einfach jeden Dienst in einen Container packe oder macht es evtl. Sinn gewisse Dienste zusammen in eine VM zu packen? Mal die Abhängigkeit von den Diensten außer Acht gelassen, einfach rein zwecks Performance?

Oder gibt es eine andere Entscheidungsgrundlage, wann man Container und wann VM verwendet?

Wenn du den Dienst als Container realisieren kannst, nimm Container, ansonsten z.B. bei ganzen Betriebsystemen wie Windows mach eine VM.
 
Erst mal danke für eure Antworten!
Ich bin mir aber noch nicht ganz sicher, ob ich alles richtig verstanden habe. Ich versuche mal zusammenzufassen, korrigiert mich bitte, wenn ich falsch liege.
Also, ein Container der nicht privilegiert läuft, ist sicherer als ein unprivilegierter (klar ;) ), aber nicht so sicher wie eine eigene VM. Bei manchen Diensten ists klar, da gehts nicht in einem unprivilegierten Container. Wäre es in diesem Fall dann trotzdem eine Überlegung wert, diesen in einem Container laufen zu lassen?

Macht es dann auch Sinn, Dienste zusammenzufassen, wie z.B. Apache und MySQL oder wählt man dann idealerweise für jeden Dienst einen Container, um diese auch mal rumschieben zu können?

RAM stellt man ein, nachdem man den Bedarf festgestellt hat.

Was ist der Overhead bei einem Container? Software, die ich im Container nachinstalliere, der Rest wird vom Hauptsystem verwendet? Bei einer VM habe ich ja Kernel, Libs und die ganze Software drum rum immer mit dabei, den Kernel und die Libs spare ich mir beim Container, weil ich die vom Hauptsystem mitnutze?
Inwieweit unterscheidet sich da ein Container von Docker?

Unterm Strich merke ich, dass ich den Containern bisher zu wenig Bedeutung beigemessen habe und die durchaus mal mehr nutzen könnte ;) Ich glaub grad sowas wie ioBroker wäre da sicher ein guter Kandidat, wie 0xd149e38e schon gesagt hat.
 
Erst mal danke für eure Antworten!
Ich bin mir aber noch nicht ganz sicher, ob ich alles richtig verstanden habe. Ich versuche mal zusammenzufassen, korrigiert mich bitte, wenn ich falsch liege.
Also, ein Container der nicht privilegiert läuft, ist sicherer als ein unprivilegierter (klar ;) ), aber nicht so sicher wie eine eigene VM. Bei manchen Diensten ists klar, da gehts nicht in einem unprivilegierten Container. Wäre es in diesem Fall dann trotzdem eine Überlegung wert, diesen in einem Container laufen zu lassen?
privilegierter LXC: ganz wenig Isolation zum Host. Root im Gast ist z.B. auch root auf dem Host. Holt sich da wer Root-Privilegien im LXC ist er auch Root auf dem Host.
unprivilegierter LXC: teilt sich immer noch den Kernel mit dem Host aber wenigstens sind die User im LXC nicht die gleichen wie auf dem Host. Root im LXC ist da z.B. auf dem Host nur ein unprivilegierter User.
VM: hat seinen eigenen Kernel und ist komplett vom Host getrennt

Geht bei der Sicherheit also vorallem darum, was da möglich ist, wenn mal eine VM oder ein LXC gehackt wird. Da muss ja auch nicht wirklich ein Mensch hinter sitzen um da Unfug anzustellen. Gibt ja genug Botnetze die das Web nach Servern mit bekannten Sicherheitslücken abgrasen und die dann auch selbstständig ausnutzen können um neue Zombie-Rechner für das Botnetz zu "rekrutieren". Hast du 20 privilegierte LXCs und da wird eine gehackt, dann wird man wegen mangelnder Isolation auch viel schneller zum Root des ganzen Hostes und kann dann mit allen LXCs und VMs anstellen was man will. Oder von da aus dann sogar noch andere Rechner im Heimnetz angreifen, auf dein NAS zugreifen, wo du das Passwort ja irgendwo auf dem Server hinterlegen musst etc.
Wird dir da eine VM gehackt, dann ist es nur ganz schwer aus der VM ausbrechen zu können und alle anderen VMs und der Host selbst bleiben sicher. Und wenn du die Proxmox-Firewall benutzt, dann kann man auch von innerhalb der VM nichts an der Firewall ändern um z.B. Zugriff auf andere Rechner zu bekommen. So kann man dann wenigstens den Schaden in Grenzen halten.
Macht es dann auch Sinn, Dienste zusammenzufassen, wie z.B. Apache und MySQL oder wählt man dann idealerweise für jeden Dienst einen Container, um diese auch mal rumschieben zu können?
Da kannst du dann auch alle Dienste in einen eigenen Container packen. Overhead ist da wie gesagt nicht nennenswert.
Inwieweit unterscheidet sich da ein Container von Docker?
Docker ist ja auch ein Container. Der großer Unterschied ist finde ich, dass du beim Docker-Container quasi nichts selbst machen kannst. Da lädst du dir etwas runter was wer anderes bereitstellt und kannst dann nur das einstellen, was der Ersteller eingeplant und einprogrammiert hat. Du bist da also sehr beschränkt was du mit Docker-Container machen kannst, wenn du dir nicht selbst Docker-Images programmieren und pflegen magst. Beim LXC kannst du auch einfach ein leeres Debian nehmen und da dann frei alles nach deinen Wünschen installieren und konfigurieren.
Und LXCs sind keine Wegwerf-Container wie bei Docker, wo man statt etwas zu aktualisieren einfach das ganze OS mit allem drum und dran wegwirft und nur die Nutzerdaten behält.
 
Last edited:

About

The Proxmox community has been around for many years and offers help and support for Proxmox VE, Proxmox Backup Server, and Proxmox Mail Gateway.
We think our community is one of the best thanks to people like you!

Get your subscription!

The Proxmox team works very hard to make sure you are running the best software and getting stable updates and security enhancements, as well as quick enterprise support. Tens of thousands of happy customers have a Proxmox subscription. Get yours easily in our online shop.

Buy now!