Container sind keine eigenständige Technologie, sondern basieren auf etablierten Linux-Mechanismen wie Namespaces und cgroups. Wer Kubernetes verstehen will, muss diese Grundlagen beherrschen – insbesondere die Konzepte zur Ressourcenisolation und -kontrolle, die tief im Linux-Kernel verankert sind.
Linux ist ein UNIX-Derivat, dessen Kernel zentrale Aufgaben wie Prozess- und Ressourcenmanagement sowie Hardwareinteraktion übernimmt. Ein entscheidender Fortschritt war die Einführung von Namespaces und cgroups, die es ermöglichen, Ressourcen voneinander zu isolieren und gezielt zu steuern – zentrale Voraussetzungen für die Containerisierung.
Namespaces trennen Systemressourcen wie Prozess-IDs, Netzwerke, Mount-Punkte oder Benutzerdaten voneinander. Sie schaffen abgeschottete Kontexte, in denen sich Prozesse bewegen, als wären sie allein im System. Der erste Namespace – der Mount Namespace – wurde mit Kernel 2.4.19 im Jahr 2002 eingeführt. Weitere Namespaces folgten über die Jahre. Der User Namespace in Kernel 3.8 (Februar 2013) stellte einen Meilenstein dar, da er nicht privilegierten Prozessen erlaubte, eigene isolierte Benutzerkontexte zu verwenden – ein Schlüsselelement für sichere Container.
Parallel dazu ermöglichen cgroups (Control Groups) die präzise Steuerung und Begrenzung von Ressourcen wie CPU, RAM und I/O. Gemeinsam bilden Namespaces und cgroups die technische Basis für Container-Laufzeitumgebungen wie LXC, runc oder Docker – wobei Letzteres im März 2013 erschien und den Begriff „Container“ populär machte.

Die Einführung von Namespaces hatte einen entscheidenden Einfluss auf die IT-Branche. Sie sind das Fundament von Containerisierungstechnologien wie Docker und Kubernetes, welche die Entwicklung und den Betrieb von Anwendungen revolutioniert haben. Die Technologie hat nicht nur das Linux-Ökosystem erweitert, sondern auch weitreichende Auswirkungen auf die gesamte IT-Landschaft gehabt.
cgroups, kurz für Control Groups, sind ein Feature des Linux-Kernels, das erstmals im Jahr 2007 mit dem Kernel-Release 2.6.24 eingeführt wurde.
Mit cgroups können Systemressourcen wie CPU-Zeit, Systemspeicher, Netzwerkbandbreite und I/O-Ressourcen überwacht und begrenzt werden. Es ermöglicht die Isolierung, Priorisierung und Buchführung der Ressourcennutzung für Prozessgruppen.
cgroups haben gemeinsam mit Namespaces die Grundlagen für die moderne Containerisierung geschaffen. Sie ermöglichen die Isolierung und Ressourcenbegrenzung für Container, was für Technologien wie Docker und Kubernetes entscheidend ist. Durch diese Kombination können Container effizient Ressourcen teilen, während sie dennoch isoliert voneinander arbeiten.
Sowohl Namespaces als auch cgroups bieten eine Reihe von Werkzeugen und Befehlen, die für ihre Verwaltung und Überwachung nützlich sind. Diese Beispiele illustrieren grundlegende Möglichkeiten, wie man diese Kernfunktionen des Linux-Systems nutzen kann. Sie sind entscheidend für die fortschrittliche Ressourcenverwaltung und Isolierung in modernen IT-Systemen.
lsns ist ein Befehl zur Auflistung der Namespaces
auf einem Linux-System. Es ermöglicht die Darstellung verschiedener
Typen von Namespaces wie PID, NET, USER und mehr.
lsnsunshare: Dieses Kommando erlaubt das Ausführen eines
Programms in einem neuen Namespace.
unshare -p -f some_commandnsenter: Ermöglicht das Wechseln zu vorhandenen
Namespaces.
nsenter -t [target_pid] -n command_to_runip netns: Speziell für Netzwerk-Namespaces, um diese
zu erstellen, zu löschen oder anzuzeigen.
ip netns add mynetnssetns: Ein systemeigener Aufruf, der allerdings auch
in manchen Tools verwendet wird, um einem Namespace beizutreten.
setns(fd, flags)clone: Ein systemeigener Aufruf zum Erstellen eines
neuen Prozesses, wobei spezifiziert werden kann, welche Ressourcen
(einschließlich Namespaces) geteilt oder isoliert werden sollen.
clone(flags, child_stack)cgcreate und cgexec sind Werkzeuge aus
dem libcgroup-Paket, die zur Verwaltung von cgroups
verwendet werden können. Mit diesen Befehlen wird eine neue cgroup im
CPU-Subsystem erstellt und anschließend ein Prozess innerhalb dieser
cgroup ausgeführt.
# Erstelle eine neue cgroup im CPU-Subsystem
cgcreate -g cpu:/mycgroup# Führe einen Prozess in der erstellten cgroup aus
cgexec -g cpu:mycgroup /some/commandcgstat ist ein weiteres nützliches Werkzeug zur
Überwachung der Ressourcennutzung von cgroups. Dieser Befehl zeigt
Statistiken zur CPU-Nutzung der cgroup mycgroup.
cgstat -g cpu:/mycgroup