Das Wort zum Sonntag: Kubernetes

Kubernetes (auch als „K8s“ oder einfach „K8“ bezeichnet, deutsche Aussprache: [ˌkuːbɛɐ̯ˈneːtəs] ist ein Open-Source-System zur Automatisierung der Bereitstellung, Skalierung und Verwaltung von Container-Anwendungen.

Es wurde ursprünglich von Google entworfen und an die Cloud Native Computing Foundation gespendet wurde. Es zielt darauf ab, eine “Plattform für das automatisierte Bereitstellen, Verteilen, Skalieren und Warten von Anwendungscontainern auf verteilten Hosts” zu liefern. Es unterstützt eine Reihe von Container-Tools, einschliesslich Docker.

Die Orchestrierung mittels Kubernetes wird von heute allen Cloud-Plattformen unterstützt.

Seit dem Erscheinen von Docker vor über vier Jahren haben Container basierte Systeme die DevOps revolutioniert.  Selbst die Konkurrenten folgen Kubernetes nun und liefern Beiträge, von denen es inzwischen über 3000 auf Github gibt, zum Ökosystem.

Aus Sicht des Linux-Betriebssystems sind Container ja nichts anderes als Prozesse, eingeschränkt auf Namespaces. Wichtig an den Namespaces ist, dass ein Prozess in einem Namespace eine völlig andere Umgebung sieht als ausserhalb, andere Netzwerkrouten, Control Group Limits, DNS-Einstellungen, sogar eine andere Prozess-ID etc.

Damit können sich Prozesse, die einen Namespace teilen, gemeinsame Ressourcen teilen und sind trotzdem von anderen Prozessen und dem Hostsystem isoliert.

Zusätzlich hat Docker noch ein CoW (Copy on Write)-Filesystem, das Images in Schichten organisiert. Im Idealfall werden nur wenige große Basis-Images durch kleine Unterschiede in verschiedenen Containern modifiziert. Standard ist das Linux Aufs (Advanced multi layered unification filesystem) wobei die Images  übereinander gelegt werden.

Docker hat – und das ist Segen und Fluch zugleich – alle zum Bauen, Transportieren und Starten von Containern notwendigen Tools in einem Kommando integriert.

Auf der einen Seite wird so die Schwelle für den Einstieg in die Containerwelt gesenkt, auf der anderen Seite kann keine Rede von einer Trennung der Aufgaben im Sinne der “Separation of Concerns” sein. Das widerspricht der Unix-Philosophie, die für eine Aufgabe ein Tool vorsieht.