LXC: Merkmale, Vor- und Nachteile von Linux-Containern
Linux-Container erfreuen sich dank ihrer Benutzerfreundlichkeit einer hohen Beliebtheit und sind mittlerweile ein wichtiger Bestandteil der IT-Sicherheit. Die namensgebende Container-Plattform LXC (Linux-Container) wird eingesetzt, um gleich mehrere Prozesse voneinander und vom Rest des Systems zu isolieren. Dabei wird durch Virtualisierung ein Image erzeugt, das jeden Container von der Entwicklung über die Testphase bis hin zum Betrieb durchgehend portierbar und konsistent bleiben lässt. So besitzen die einzelnen Anwendungen zwar eine virtuelle Umgebung, nutzen aber trotzdem gemeinschaftlich den Kernel des Hostsystems.
Was leisten LXC bzw. Linux-Container, ist Einfachheit immer ein Vorteil und wie viel virtuelle Maschinen steckt in einem Linux-Container?
Was ist LXC (Linux-Container)?
Der Begriff Linux-Container (LXC) steht sowohl für virtualisierte Anwendungen auf Linux-Basis, als auch für die zugrundeliegende Container-Plattform bzw. -Technologie. Dies ist insbesondere dann im Hinterkopf zu behalten, wenn von alternativen Container-Plattformen gesprochen wird, die ebenfalls Linux-Container als Technologie verwenden.
LXC ist eine Open-Source-Container-Plattform, die eine einfache Bedienung und – für Container-Systeme eher untypisch – ein intuitives, modernes Benutzererlebnis verspricht. Dafür bietet die Plattform verschiedene Tools, Sprachen, Templates und Bibliotheken an. Zudem lässt sich die Virtualisierungsumgebung auf allen gängigen Linux-Distributionen installieren und nutzen.
Container sind ein einzigartiges Werkzeug, das beim Verwalten und Entwickeln von Anwendungen auf eine Weise behilflich ist, die lange Zeit undenkbar war: Sie ermöglichen es, Anwendungen zwar vom System zu isolieren, dabei aber nicht in Isolationshaft zu befördern. Sie können weiterhin Informationen austauschen und mit der Außenwelt kommunizieren. Ihre Etablierung kam einer Revolution gleich, mittlerweile boomt die Container-Technologie und es konkurrieren unzählige Anbieter auf dem Markt. Zu den größten Container-as-a-Service-Anbietern zählen Amazon, Microsoft und Google. Die bekannteste Plattform ist Docker, eine Weiterentwicklung des Linux-Container-Projekts (LXC), das von allen CaaS-Anbietern unterstützt wird.
Die Idee für die Linux-Container-Technologie stammt bereits aus dem Jahr 2001. Im Rahmen des VServer-Projekts wurde erstmals eine isolierte Umgebung implementiert. Das war die Grundlage für die Einrichtung von mehreren kontrollierten Namensräumen (Namespaces) in Linux und für das, was man heute Linux-Container nennt. Weitere Technologien wie die cgroups (Control Groups), die die Ressourcenverwendung für einen Prozess oder ganze Gruppen von Prozessen steuern und beschränken können, folgten. Mit systemd kam ein Initialisierungssystem für die Verwaltung von Namensräumen und deren Prozesse hinzu.
In der Praxis sorgt LXC dafür, dass Anwendungen schneller entwickelt werden können. Die Container-Technik hilft u. a. bei der Portierung, Konfigurierung und Isolierung. Auch beim Daten-Streaming in Echtzeit spielen die Container ihre Stärke aus, indem sie die notwendige Skalierbarkeit für Anwendungen bereitstellen. Linux-Container passen sich der Infrastruktur an, was sie in hohem Maße unabhängig macht, sodass sie sowohl lokal, in der Cloud als auch in einer Hybrid-Umgebung eingesetzt werden können.
Dass Container-Technologien so gefragt sind, ist folgendermaßen zu begründen: Jede Anwendung auf dem Betriebssystem hat ihre Aufgaben und erledigt sie in genau dieser Umgebung. Sie stützt sich auf die vorhandenen Konfigurationen des Programmierers, ist damit also abhängig von bestimmten Bibliotheken, Zusammenhängen und Dateien. Um jedoch einfach, schnell und sicher eine neue Anwendung zu testen, kommen Container zum Einsatz: Dadurch kann eine neu entwickelte Anwendung ohne Umschreibung, Fehlerbeseitigung und Probleme in einer virtuellen Umgebung eingesetzt werden. Der Inhalt eines Containers ist einer Installation einer Linux-Distribution nachempfunden, enthält alle Konfigurationsdateien, ist aber viel leichter eingerichtet als das tatsächliche Betriebssystem.
Was sind die Ziele und Features von LXC?
Das Prinzip von LXC scheint sich auf den ersten Blick nicht von dem Prinzip klassischer Virtualisierung zu unterscheiden. Erst im Gesamtzusammenhang werden die Unterschiede deutlicher. Ein einfacher Grundsatz lautet folgendermaßen: Container arbeiten auf der Ebene des Betriebssystems, virtuelle Maschinen auf der Ebene der Hardware. Container teilen sich also ein Betriebssystem und isolieren Anwendungsprozesse vom Rest des Systems, während klassische Virtualisierung die gleichzeitige Ausführung mehrerer Betriebssysteme auf einem einzigen System ermöglicht.
Damit in einer virtualisierten Umgebung mehrere Betriebssysteme gleichzeitig ausgeführt werden können, wird ein Hypervisor zur Emulation des Hardware-Systems eingesetzt, was allerdings auch hohe Ressourcen erfordert. Wesentlich kompakter ist hier der Einsatz von Server-Containern, die nativ auf dem Betriebssystem, also ohne Emulation, ausgeführt werden.
Linux-Container verbrauchen standardmäßig weniger Ressourcen als eine virtuelle Maschine und besitzen eine Standardoberfläche, wodurch sich gleichzeitig mehrere Container einfach und unkompliziert verwalten lassen. Eine Plattform mit LXC kann sogar über mehrere Clouds hinweg organisiert werden – das bietet Portabilität und gewährleistet, dass Anwendungen, die auf dem System des Entwicklers korrekt laufen, auch auf jedem anderen System funktionieren. Über die Oberfläche der Linux-Container lassen sich selbst große Anwendung starten, stoppen oder deren Umgebungsvariablen ändern.
Zusammengefasst ist das Ziel von LXC, eine Umgebung zu schaffen, die einer Standard-Linux-Installation so nahe wie möglich kommt, ohne einen separaten Kernel zu benötigen.
Die aktuelle Linux-Container-Plattform verwendet folgende Kernel-Features, um Anwendungen und Prozesse in Container „einzuschließen“:
- Kernel-Namensräume (ipc, uts, mount, pid, Netzwerk und Benutzer)
- Apparmor und SELinux-Profile
- Seccomp-Richtlinien
- Chroots (unter Verwendung von pivot_root)
- Kernel-Fähigkeiten
- cgroups (Kontrollgruppen)
Linux-Container sollen kompakt bleiben. Deshalb bestehen sie aus wenigen separaten Komponenten:
Wie funktioniert LXC?
Isolation und Virtualisierung sind deshalb so wichtig, weil sie dabei helfen, Ressourcen und Sicherheitsaspekte möglichst effizient zu verwalten. Sie erleichtern das Monitoring, um beispielsweise Fehler im System zu finden, die oft nichts mit neu entwickelten Anwendungen zu tun haben. Doch wie läuft das bei LXC? Oder anders gefragt: Wie funktionierten Linux-Container?
Der einfachste und sinnvollste Weg, Linux-Container einzusetzen, besteht darin, jeden Container mit einem Prozess zu verbinden – so behält man die komplette Kontrolle. Bei jedem Prozess sind dabei insbesondere die Namensräume wichtig, die Ressourcen für einen oder mehrere Prozesse verfügbar machen, die denselben Namensraum verwenden. Nebenbei dienen die Prozesse als Zugriffskontrolle, um die Container abzusichern.
Für die Nutzung einer LXC-Umgebung müssen die Features und ihre Funktionen klar sein. Die cgroups (Kernel-Kontrollgruppen) begrenzen und isolieren Ressourcen von Prozessen, etwa CPU, I/O, Arbeitsspeicher und Netzwerkressourcen. Außerdem kann der Inhalt einer Kontrollgruppe verwaltet, überwacht, priorisiert und bearbeitet werden.
Bei Linux ist alles eine Datei. Aus diesem Grund ist auch jede cgroup letztlich eine Ansammlung von Dateien (/sys/fs/cgroup). Um diese Art von Dateien zu verwalten, gibt es verschiedene Tools wie den cgmnager.
Die Funktionen sind überschaubar, was den großen Vorteil hat, dass eine LXC-Plattform sehr einsteigerfreundlich ist. Welche Nachteile das jedoch mit sich bringt, soll im Folgenden gezeigt werden.
Die Vorteile und Nachteile von Linux-Containern im Überblick
Die Benutzerfreundlichkeit von Linux-Containern sind ihr größter Pluspunkt im Vergleich zu klassischen Virtualisierungstechniken. Die enorme Verbreitung von LXC, ein nahezu allumfassendes Ökosystem sowie innovative Tools sind allerdings in erster Linie der Plattform Docker zu verdanken, die die Linux-Container etabliert hat. Im direkten Vergleich mit anderen Container-Systemen wie rkt, OpenVZ, Cloud Foundry Garden, die in ihrem Einsatz wesentlich begrenzter sind, profitiert LXC von der engen Bindung zu dem Vorreiter der Container-Plattformen.
Ein Systemadministrator, der zuvor mit einer hypervisorbasierten Virtualisierung wie Hyper-V gearbeitet hat, wird keine Probleme damit haben, LXC zu bedienen. Die gesamte Einrichtung, von der Erstellung der Container-Templates und ihrer Bereitstellung, der Konfiguration des Betriebssystems und der Vernetzung bis hin zur Bereitstellung von Anwendungen, bleibt gleich. Alle Skripte und Workflows, die für virtuelle Maschinen geschrieben wurden, lassen sich auch für Linux-Container verwenden. Entwickler bekommen damit keine neuen, maßgeschneiderten Lösungen und Tools an die Hand, sondern können nahtlos in einer gewohnten Umgebung und mit ihren eigenen Skripten und Automatisierungs-Workflows weiterarbeiten.
Ein entscheidender Nachteil von LXC wird deutlich, wenn man auf die Speicherverwaltung schaut: Es werden zwar verschiedene Speicher-Backends (Ivm, overlayfs, zfs und btrfs) unterstützt, allerdings wird standardmäßig direkt auf die Rootfs gespeichert. Eine Registrierungsmöglichkeit von Images fehlt. Andere Container-Plattformen bieten hier smartere und flexiblere Lösungen, sowohl für die Speicherung von Containern als auch für das Management der Images.
Wann kommt LXC zum Einsatz?
LXC ist ein Open-Source-Projekt, das von canonical, dem Unternehmen hinter der Linux-Distribution Ubuntu, finanziell unterstützt wird. Der größte Support kommt jedoch aus der eigenen Community, die gemeinsam stabile Versionen und Sicherheitsupdates entwickelt und das Projekt vorantreibt. Verschiedene Editionen von LXC genießen sogar bereits einen dauerhaften Support und regelmäßige Sicherheitsupdates. Andere Versionen werden nach bestem Bemühen gewartet, in der Regel so lange, bis eine neuere, stabilere Version erscheint.
Linux-Container kommen in den meisten Fällen als unterstützende, zusätzliche Container-Technologie zum Einsatz. Das ist in diesem Feld allerdings nicht ungewöhnlich, denn im Gegensatz zu virtuellen Maschinen zählen Container noch immer als recht junge Technologie. Es ist aber festzuhalten, dass die Anbieter von Container-Lösungen kontinuierlich wachsen und damit auch das Ökosystem rund um die Technologie.
LXC ist aktuell eine absolut sinnvolle Alternative für bestehende traditionelle Anwendungen, die sich besonders an VM-Admins richtet. Der Übergang von einer virtuellen Maschine zu einer Container-Technologie ist mit Linux-Containern einfacher als bei jeder anderen Container-Technik.
Welche Alternativen zu Linux-Containern gibt es?
Die populärste LXC-Alternative ist Docker. Die Plattform, die auf Linux-Containern aufbaut, wurde in den vergangenen Jahren kontinuierlich weiterentwickelt, sodass sie inzwischen auch auf Windows-Systemen läuft. Dadurch können auch die größten Cloud-Anbieter wie Google, IBM, AWS und Azure native Docker-Unterstützung anbieten.
Eine bekannte Container-Alternative (Linux) für die Virtualisierung kompletter Server ist OpenVZ. Wie LXC nutzt OpenVZ den Kernel des Host-Betriebssystems und stellt Usern die virtuellen Server in isolierter Umgebung zur Verfügung.
KVM ist eine Open-Source-Virtualisierungstechnologie, die in Linux bereits eingebaut ist – KVM steht für „Kernelbasierte virtuelle Maschine“. Damit kann Linux in einen Hypervisor umgewandelt werden, wodurch es dem Host-Rechner möglich ist, mehrere isolierte Umgebungen auszuführen.
Kubernetes kommt ursprünglich von Google, die einer der ersten Unterstützer von Linux-Container-Technologien waren. Diese Open-Source-Plattform automatisiert den Betrieb von Linux-Containern. Ganze Gruppen von Hosts, auf denen die Container laufen, werden in Clustern zusammengefasst und können so einfach verwaltet werden.
Wer sich mit LXC auseinandersetzt, kommt an dem eng verwandten LXD nicht vorbei. Beide Begriffe bzw. Technologien sind nur schwer voneinander zu unterscheiden. Bei LXD handelt es sich um eine Weiterentwicklung von LXC, die u. a. einen System-Daemon enthält.