Container-Virtualisierung mit Proxmox
0Je nach Einsatzgebiet eignet sich entweder Container-Virtualisierung oder der Einsatz von virtuellen Maschinen (VMs) ist sinnvoller. Im Bereich Container lässt sich neben Docker bspw. Proxmox auf Linux Container Basis nutzen, mit dem sich komplette Applikationen bereitstellen lassen. In diesem Artikel erfahren Sie, welche Vor- und Nachteile die Container-Virtualisierung mit Proxmox LXC Container bietet.
Container vs. VMs
Container sind eine leichtgewichtige Art der Virtualisierung, die bei Cloud-Anbietern und auch bei der Entwicklung moderner modularer Software wie Microservices äußerst beliebt ist. Der Erfolg etwa von Docker und darauf aufsetzender Frameworks wie Kubernetes sind der beste Beweis dafür. Im Gegensatz zu virtuellen Maschinen werden Container nativ auf dem Host-Betriebssystem eingesetzt. Dieses sorgt dafür, dass für jeden Container eine isolierte Umgebung zur Verfügung steht, es sperrt also die Prozesse ein. Da dabei so gut wie kein Overhead durch separate Gast-Kernel oder Hardware-Emulation entsteht, sind problemlos hunderte Container auf einem Host möglich. Die Isolation der Gastsysteme ist jedoch nicht so vollständig wie bei virtuellen Maschinen, denn alle Gastsysteme nutzen den Betriebssystem-Kern des Hosts. Das heißt, Container-Virtualisierung ist immer ein größeres Sicherheitsrisiko als Hardware-Virtualisierung mit VMs.
Unterscheidung Docker und Container
Obwohl Docker fast zum Synonym für Container geworden ist, gibt es auch andere Technologien, die sich für bestimmte Zwecke sogar besser eignen. Docker ist eher auf sehr leichtgewichtige Container ausgelegt, die jeweils nur einen einzigen Dienst zur Verfügung stellen. Für komplexe Anwendungen braucht man also sehr viele Container und deshalb wiederum Orchestrierungs-Plattformen wie Kubernetes, um die Menge und Vielfalt der Container zu bändigen.
Proxmox auf Linux Container Basis (LXC)
Bei der Container-Virtualisierung geht Proxmox VE einen anderen Weg und stellt das Schwergewicht unter den Leichtgewichten dar. Seine Container basieren auf LXC (Linux Container), einer Container-Technologie, die bereits in jeder Linux-Distribution vorhanden ist. Proxmox LXC Container sind eher „schwergewichtig“, also dafür ausgelegt, mehrere Dienste oder komplette Applikationen bereitzustellen. Die Proxmox-Entwickler bezeichnen sie als „System Container“, im Gegensatz zu „Micro Containern“ wie bei Docker. Bei Proxmox lassen sich Container sehr ähnlich zu virtuellen Maschinen (VMs) verwalten. Netzwerk- und vor allem Storage-Anbindung ist flexibler und mittels der Proxmox-Tools weitaus einfacher zu konfigurieren als bei LXC-Containern in „normalen“ Distributionen. Natürlich ist es auch möglich, in Proxmox eine virtuelle Maschine (VM) einzurichten und dort Docker inklusive Kubernetes oder einer andere Container-Management-Plattform zu installieren. Dann lassen sich die Vorteile von Proxmox wie skalierbares Storage und Hochverfügbarkeit auch für andere Container-Plattformen nutzen.
Für die Verwaltung der nativen Proxmox-Container ist das Proxmox Container Toolkit (pct) verantwortlich. Wie immer bei Proxmox VE sind dessen grundlegende Funktionen auch über das Web Interface erreichbar. Für komplexere Management-Aufgaben kann der Administrator auf gut dokumentierte Kommandozeilenwerkzeuge zurückgreifen.
Mehr Sicherheit durch weniger Privilegien
Proxmox bietet eine Reihe von Möglichkeiten, die Sicherheit der Gastsysteme zu erhöhen. So können LXC-Container wahlweise im privilegierten oder unprivilegierten Modus angelegt werden. Bei letzterem sorgt das Betriebssystem dafür, dass alle Prozesse des Gastes mit weniger Rechten als denen des Host-Systems ausgeführt werden. Dafür werden User Namespaces genutzt. Das ist ein Feature des Linux-Kernels, das privilegierte User IDs innerhalb des Containers auf unprivilegierte User IDs außerhalb abbildet. Damit lassen sich „Ausbruchsversuche“ bösartiger Software verhindern. Zusätzlich sorgt das standardmäßig aktivierte Kernel-Sicherheitsmodul AppArmor mit sinnvollen Voreinstellungen dafür, dass auch in privilegierten Containern die Ausführungsrechte beschränkt werden, ohne die Funktionalität allzu zu stark einzuschränken.
Container erlauben immer nur Gastsysteme vom gleichen Typ wie das Hostsystem, bei Proxmox VE also Linux. Jedoch sind sie nicht auf die jeweilige Linux-Distribution des Host-Systems beschränkt. Außer Debian-Varianten und Ubuntu können also auch Red-Hat-, SUSE- oder Archlinux-basierte Systeme betrieben werden.
Flexibles Storage-Konzept auch für Container
Das Storage-Konzept der Proxmox-Container macht es besonders einfach, all die verschiedenen Storage-Arten zu nutzen, die Proxmox VE bietet. Jeder Container kann mehrere Mount Points haben – anwendungsspezifisch lassen sich damit je nach Bedarf lokaler Speicher, Shared Storage wie iSCSI oder NFS und auch verteilte Systeme mit Ceph einbinden. Bei den eher minimalistischen Container-Ansätzen a la Docker ist das oft nur mit großem Aufwand möglich. Wie bei virtuellen Maschinen (VMs) sind auch bei Containern Snapshots mit einer breiten Palette von Optionen sowie Migrationen auf andere physische Hosts innerhalb eines Clusters möglich. Im Gegensatz zu VMs müssen sie dafür aber kurz heruntergefahren werden. Live-Migrationen von Containern unterstützt Proxmox nicht.
Templates für schnelles Deployment
Um Container schnell zu installieren, stehen zwei Arten von Images zur Verfügung: Die vom Proxmox-Team selbst gepflegten Templates für alle gängigen Linux-Distributionen und die Templates vom Turnkey Linux Projekt, das Linux-Images für über 100 vorkonfigurierten Stacks und Web-Applikationen zur Verfügung stellt. Letztere sind vor allem interessant, um in wenigen Schritten eine komplexe, mehrstufige Anwendung bereitzustellen und sich die Details der Datenbank- und Webserverkonfiguration zu ersparen. Einige Beispiele für Turnkey-Templates:
- Nextcloud
- WordPress
- Mattermost
- Moodle
- OpenVPN
Im Gegensatz zu den generischen Proxmox-Templates sind Turnkey Linux Templates nicht speziell auf Proxmox VE abgestimmt. In der Praxis kann es deshalb manchmal notwendig sein, bei der Installation manuell nachzuarbeiten. Das betrifft vor allem den Betrieb in unprivilegierten Containern, weil manche Dienste mit den eingeschränkten User IDs nicht korrekt starten. Meist findet sich im Proxmox-Userforum oder auf den Github-Seiten des LXC-Projekts eine Lösung. Wer selbst Templates erstellen will, kann dazu die Werkzeuge der jeweiligen Linux-Distribution nutzen, etwa den Debian Appliance Builder.
Proxmox Container Fazit
Hinsichtlich Handhabung und Verwendungszweck stellt Container-Virtualisierung mit Proxmox einen Kompromiss zwischen virtuellen Maschinen (VMs) und den aktuell sehr populären leichtgewichtigen Microcontainern dar. Dank nahtloser Einbindung in GUI und Tools von Proxmox VE braucht ein Administrator weder tiefgreifende Kenntnisse von Linux Container (LXC) selbst, noch benötigt er ein Orchestrierungs-Framework wie Kubernetes. Zur Bereitstellung von Microservices, bei denen die Gleichung „Ein Container – ein Dienst“ gilt, eignen sich Proxmox Container hingegen weniger. Für die schnelle und dennoch skalierbare Bereitstellung kompletter Web-Applikationen oder Test- und Entwicklungssystemen auf Linux-Basis sind sie jedoch perfekt.