Rein in den Container? – Die Vorteile dieser Virtualisierungstechnologie

Container

In den vergangenen Jahren sind verschiedene Container Technologien und Laufzeitumgebungen auf den Markt gekommen. Jede Technologie versucht einen bestimmten Markt zu adressieren. Neben einer Reihe von populären Laufzeitumgebungen die unter dem Dach der Cloud Native Computing Foundation (CNCF) gebündelt sind existiert noch eine weitere Kategorie, die sogenannten System Container.

Die Hauptaufgabe eines System Containers besteht im Gegensatz zu einem Docker oder Kubernetes Container darin, eine vollständige Linux Installation in einer isolierten Umgebung zu betreiben. Dabei kommt nur ein einziger Linux-Kernel zum Einsatz, welche auf einem Bare Metal System gestartet wird. Die Linux Distribution auf dem Hostsystem kann sich von den verwendeten Distributionen innerhalb der Container unterscheiden. Es wird eine komplette Linux Distribution vom Init-Prozess bis zum Erreichen des Runlevel 3 (Mehrbenutzerbetrieb mit Netzwerk) gestartet. Eines der besonderen Merkmale von System Containern ist der unabhängige Root-Zugriff auf die Container Installation. Jeder Container verfügt über ein eigenes isoliertes Netzwerk mit eigener IP-Adresse.

Anzeige

Welche Vorteile bieten System Container?

Die System Container Technologie ist eine ausgereifte und erprobte Technologie, die weltweit von vielen Unternehmen eingesetzt wird. System Container sind flexibel einsetzbar, in wenigen Schritten provisioniert und bieten aufgrund der dynamischen Ressourcenverwaltung ein Maximum an Skalierbarkeit. Nahezu jede Ressource – wie Anzahl der CPUs, Arbeitsspeicher, Festplattenplatz und die Netzwerkkonfiguration kann zur Laufzeit ohne Neustart des Containers verändert werden. Dies gilt sowohl für das Erweitern als auch verkleinern der Ressourcen.

Ressourcenlimits können in mehreren Varianten verwaltet werden. In einem einfachen Verfahren, das sich an den verfügbaren Ressourcen eines Bare Metal Systems orientiert. In dieser Variante wird Arbeitsspeicher, virtueller Arbeitsspeicher (Swap), Anzahl der CPUs und die Größe der virtuellen Festplatte konfiguriert. Mithilfe einer sehr granularen Ressourcenverwaltung UBC (User Beancounters) lassen sich sehr spezifische Limits setzen. So können System Container zum Beispiel die maximale Anzahl der verfügbaren Netfilter (iptables) Einträge begrenzen. Die Anzahl der maximal offenen File Handles lässt sich ebenso limitieren, wie die Anzahl der maximal erlaubten TCP oder Unix Sockets. Ebenso ist es möglich System Container Zugriff auf bestimmte Kernelmodule zu gewähren, damit lässt sich steuern, ob ein System Container Stateless-, Stateful- und/ oder NAT-Regeln setzen kann. Ebenso ist es möglich einem System Container Zugriff auf TUN/TAP Geräte zu erlauben, um etwa VPNs zu betreiben.

Anzeige

1349 Bild 1
Live-Migrationsprozess eines System Containers zwischen zwei physikalischen Systemen. Bildquelle: Virtuozzo

Einmal eingerichtet, laufen System Container ohne Unterbrechung über mehrere Jahre. Im Gegensatz zu Applikationscontainern setzt dies ein dauerhaften (nicht flüchtigen) Datenspeicher voraus. System Container überstehen problemlos einen Neustart des Containers oder des gesamten Hostsystems. Im Zusammenspiel mit einem verteilten Storage, wie zum Beispiel Virtuozzo Storage, werden die Containerdaten hochverfügbar und im Falle eines Ausfalls eines Storage-Servers läuft der Container weiter. Läuft ein Container in einem Cluster, werden diese im Falle eines Ausfalls des Hostsystems automatisch auf einem anderen Knoten im Cluster neugestartet.

System Container unterstützten weiterhin das Einfrieren und Fortsetzen aller laufenden Prozesse innerhalb der eigenen Umgebung, damit lassen sich ganze Container pausieren und zu einem späteren Zeitpunkt weiterbetreiben. Dies wird durch CRIU (Checkpoint and Restore in Userspace) ermöglicht. Ein pausierter Container lässt sich damit auch zur Laufzeit von einem Server auf einen anderen mittels P.Haul migrieren. Die Live-Migration ist in zwei unterschiedlichen Verfahren möglich.

Pre-Copy-Modus: Vor der Live-Migration wird auf dem ursprünglichen Server die Speicherverfolgung aktiviert, um Änderungen parallel während des Migrationsprozesses zu verfolgen. In diesem iterativen Prozess werden die Änderungen immer kleiner, bis die Speichermigration abgeschlossen ist. Nachdem kopieren des Arbeitsspeichers wird der Container eingefroren und der restliche Containerstatus migriert. Diese Art der Migration ist sehr sicher, ihre Laufzeit kann aufgrund unvorhersagbarer Speicheränderungen
aber nicht berechnet werden.

Post-Copy-Modus: Der Container wird zum Beginn der Live-Migration direkt eingefroren. Dann wird die Speicherverfolgung aktiviert und die sich am häufigsten
ändernden Speicherseiten werden migriert. Dann wird direkt der Containerstatus migriert. Der Container wird dann auf dem Zielserver wieder fortgesetzt und dann im Hintergrund die restlichen Änderungen migriert. Dies wird auch Lazy Migration genannt. Diese Art der Migration ist unsicher, da beim Verlust des ursprünglichen Servers während der Migration der Container nicht weiterlaufen kann, die Laufzeit der Migration kann im Voraus berechnet werden.

Mithilfe von Virtuozzo Storage wird die Live-Migration beschleunigt und die I/OBelastung des darunterliegenden Systems drastisch reduziert, da die Daten verteilt im Storage Cluster liegen und somit nicht mehr von einem Server auf einen anderen transferiert werden müssen. In diesem Fall muss nur noch ein Abbild des genutzten Speichers migriert werden.

Außerdem unterstützen System Container in Virtuozzo Hybrid Server Live Kernel Security Updates ohne Neustart des Containers oder Bare Metal Servers. Security Fixes und kleinere Bug-Fixes im Linux Kernel oder Kernelmodulen werden zur Laufzeit ohne Containerausfall installiert. Die Quelltext Patches werden dabei analysiert und es wird für den Linux Kernel ein passender Binärpatch erstellt und als passendes Kernelmodul mithilfe von ReadyKernel ausgeliefert.

1349 Bild 2 1000
Live-Patching Schema um im laufenden Betrieb kritische Sicherheitslücken im LinuxKernel oder Treibermodulen zu schließen. Bildquelle: Virtuozzo

Warum sollte ich System Container einsetzen?

Neben den oben erwähnten technischen Merkmalen werden System Container besonders häufig aufgrund ihrer Sicherheit und Isolierung eingesetzt. Idealerweise sind System Container speziell auf den Anwendungsfall der Überprovisionierung von Ressourcen ausgelegt und getestet. Aufgrund verschiedener Optimierungen, wie zum Beispiel Speicherund IOPS-Deduplizierung, erreichen diese eine doppelte Packungsdichte gegenüber virtuellen Maschinen und eine bis zu 30 Prozent höhere Packungsdichte als System Container unter OpenVZ. Im Gegensatz zu OpenVZ bieten Virtuozzo System Container ein integriertes blockbasiertes Backup inklusive CBT (Change Block Tracking). Backups können sowohl lokal als auch remote gesichert werden. Insbesondere Hosting Service Provider setzen aufgrund der Packungsdichte auf System Container.


Außerdem eröffnen System Container einen weiteren einzigartigen Einsatzzweck. Sie erlauben das Ausführen von Kubernetes oder Docker Applikationscontainern innerhalb eines System Containers (Nested Containerization). Die Vorteile für Applikationscontainern sind eine sehr granulare Ressourcenzuweisung, Unterstützung für persistente Datenspeicher, Live Kernel Security Updates, Live-Migration und Backup und Restore der darüberliegenden System Container.

Maik

Brömme

Senior Produktmanager

Virtuozzo International GmbH

Anzeige

Weitere Artikel

Newsletter
Newsletter Box

Mit Klick auf den Button "Jetzt Anmelden" stimme ich der Datenschutzerklärung zu.