5 Linux Basics

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.

5.1 Kernel-Funktionen und die Rolle von Namespaces und cgroups

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.

5.1.1 Bedeutung für die IT-Branche

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.

5.2 Control groups

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.

5.2.1 Funktionalität von cgroups

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.

5.2.2 Auswirkungen auf die Containerisierung

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.

5.3 Anwendung

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.

5.3.1 Beispielhafte Nutzung von Namespaces

5.3.2 Beispielhafte Nutzung von cgroups mit cgcreate und cgexec

5.3.3 Monitoring von cgroups mit cgstat