Was ist Kubernetes?

Pods Blitz

| Autor / Redakteur: Thomas Drilling / Ludger Schmitz

Kubernetes ist schnell zum wichtigen Element in Container-Umgebungen geworden.
Kubernetes ist schnell zum wichtigen Element in Container-Umgebungen geworden. (Bild: Kubernetes)

Kubernetes ist neben Docker Swarm und Apache Mesos eine der drei führenden Plattformen zum „Orchestrieren“ von Containern, worunter man nicht nur das Ausrollen, sondern auch das „Bewegen“ von Containern zur Laufzeit versteht. Dieses Feature sieht Docker selbst nicht vor, ist aber maßgeblich für den Aufbau von Container-Clustern.

In Anbetracht des Hypes, der seit nunmehr seit zwei Jahren das Thema Docker umgibt, kann der Eindruck entstehen, dass virtuelle Maschinen ausgedient haben. Neben Docker selbst und konkurrierenden Container-Formaten erfordert der Aufbau Container-basierten PaaS-Plattformen beziehungsweise der Betrieb von Microservice-Architekturen einen Container-Cluster. Unter den drei führenden Lösungen hierfür, Docker Swarm, Mesos und Kubernetes, weist Letzteres die längste Entwicklungsgeschichte – initial erschienen ist Kubernetes 2015 – und Verbreitung auf. Populäre PaaS-Plattformen wie Red Hat OpenShift setzen auf Kubernetes als Cluster-Manager.

Aller Anfang: Docker

Zweifelsohne hat Docker den Hype in Sachen Container-Technologie begründet. Aus der Nutzer/Entwickler-Perspektive verbindet ein Docker-Container eine Applikation mit einem kompletten Dateisystem, das alles beinhaltet, was diese Software zum Laufen braucht. Neben dem Sourcecode, sind das zum Beispiel eine Laufzeitumgebung, Systembibliotheken und Verwaltungswerkzeuge. Der Container stellt damit sicher, dass die Applikation überall funktioniert, auf welcher Umgebung sie auch immer ausgeführt wird.

Da die Virtualisierungsschicht bei der Containervirtualisierung als Anwendung auf Basis eines gemeinsamen Betriebssystems ausgeführt wird, kann die Maschine, auf welcher der Hypervisor, läuft, sowohl einer physische als auch virtuelle Maschine sein. Dieser Ansatz wird gerade bei Container-Clustern wegen der besseren Isolation der Container untereinander aus Sicherheitsgründen meist bevorzugt. Somit sind Container äußerst portabel, in On-Premise- wie auch in Cloud-Umgebungen, und damit für alle Applikationen attraktiv, die auf unterschiedlichsten Infrastrukturen ausgeführt werden müssen, beispielsweise Microservices.

Die Weiterentwicklung von Docker

Docker selbst ist dem Status als Werkzeug zum Erstellen von Containern längst entwachsen. Innerhalb weniger Jahre hat sich ein großes Ökosystem um Docker entwickelt. Hierbei ist unter anderem die Docker Registry hervorzuheben, eine Repository zum Aufbewahren und Verteilen von Docker-Images. Inzwischen trachten sogar die Docker-Entwickler danach, die Universalisierung von Containern voranzutreiben.

Dazu haben sie sogar die ursprüngliche Docker-Engine soweit überarbeitet, dass man nun auch Docker-Container bauen und laufen lassen kann, die den Spezifikationen der Open Container Initiative (OCI) folgen. Ein Container-Host mit einer Reihe von Containern ist zwar für einzelne Entwickler im Unternehmen ganz nett, der wahre Treiber des Container-Hype ist jedoch der Betrieb von Container-Cluster, zum Beispiel als Basis für Microservices.

Microservices

Microservices sind neben klassischen Technologien wie JARs, Klassen oder Packages bei Java- und Web-Anwendungen eigentlich nur ein weiterer Ansatz zum Modularisieren von Software. Während diese Ansätze vorrangig dazu gedacht sind, Projekte in gut wartbare und erweiterbare Einheiten aufzuteilen, haben Microservices primär ein unabhängiges Deployment zum Ziel. So lässt sich ein Microservice in Produktion bringen, ohne dass andere im Rahmen der gesamten Applikation verknüpfte Microservices ebenfalls neu ausgerollt werden müssten. Bei einem klassischen monolithischen Deployment funktioniert das nicht, auch wenn eine monolithische Anwendung für sich durchaus sauber modularisiert sein kann.

Microservices lassen sich nicht ausschließlich, aber doch besonders elegant mit Containern realisieren. Dabei kann jeder einzelne Microservice durchaus auf Basis einer anderen Plattform und mit Hilfe einer anderen Programmiersprache realisiert sein, da Docker-Container wie erwähnt auf nahezu jeder Architektur laufen. Zudem kann jeder Microservice für sich allein – unabhängig von anderen verknüpften Microservices – skalieren.

Cluster Manager

Zum Betreiben eines Container-Clusters benötigt man in erster Linie einen Cluster-Manager. Hier kommt Kubernetes ins Spiel, eine von Google initiierte Open-Source-Lösung für das Orchestrieren von Containern über Private-, Public- und Hybrid-Cloud-Umgebungen hinweg. Initial entwickelt wurde Kubernetes von Joe Beda, Brendan Burns und Graig McLuckie. Kurz nach Veröffentlichung der ersten Codezeilen Ende 2014 stießen zahlreiche Google-Entwickler hinzu, darunter Brian Grant.

Die Version 1.0 wurde im Juli 2015 veröffentlicht, wobei Google mehr oder weniger zeitgleich die Gründung der Cloud Native Computing Foundation (CNCF) unter dem Dach der Linux Foundation ankündigte. Dabei übergab Google-Entwickler das Kubernetes-Projekt der Stiftung, bei der seit dem auch die Sourcen von Kubernetes gehostet sind.

Allgemein ist Kubernetes eine Plattform zum automatisierten Ausrollen, Skalieren und Warten von Applikations-Containern auf verteilten Container-Hosts in einem oder mehreren (verschiedenen) Container-Clustern und Nodes. Kubernetes unterstützt nicht nur Docker, sondern auch andere Container-Engines wie Rocket/rtk und kommt bei fast allen führenden Cloud-Plattformen zum Orchestrieren von Containern zum Einsatz, so bei Microsofts Azure, IBMs Bluemix und Red Hats OpenShift.

Die Rolle von Kubernetes

Kubernetes wird heute vielfach als Konkurrenz oder Alternative zu Docker wahrgenommen, was aber falsch ist. Eine gewisse Konkurrenz besteht allenfalls zu Docker Swarm, der Container-Orchestrierungs-Software von Docker selbst. Diese ist aber zuerst im November 2011 erschienen und daher momentan noch nicht so verbreitet wie Kubernetes.

Weil aber schon weit vorher ein offensichtlicher Bedarf am Betrieb von Container-Clustern bestand, bot Kubernetes anfangs Lösungen für viele Probleme, die Docker allein seinerzeit nicht zu lösen vermochte. So war Kubernetes erstmals in der Lage, Container ohne Datenverlust zu bewegen oder logische Netzwerke „zwischen“ Containern zu erstellen. Auch der Betrieb eines Load-Balancers über den gesamten Container-Cluster hinweg war eine Erfindung von Kubernetes.

Vor- und Nachteile

Die Vorteile von Kubernetes erkauft man sich allerdings mit dem Nachteil, dass Kubernetes ein komplett eigenes CLI beziehungsweise eine eigene APIs und gänzlich andere YAML-Definitionen benutzt als Docker. Daher ist es mit Kubernetes zum Beispiel nicht möglich, das Docker-CLI zu verwenden. Auch die Nutzung mit Docker Compose für Container-Definitionen scheidet mit Kubernetes aus. Allerdings ist offenbar auch Docker inzwischen daran interessiert, eine native Integration mit externen Tools wie Kubernetes zu realisieren, auch wenn dies in Konkurrenz zu Docker Swam steht.

Kubernetes bietet übrigens nicht nur Werkzeuge für das Orchestrieren von Containern, sondern auch für die Service-Bereitstellung und das erwähnte Load-Balancing. So lassen sich Container-Workloads, falls sich die Anforderungen an die Container-Umgebung ändern, mit Kubernetes nahtlos zu einem anderen Cloud-Anbieter verschieben, ohne dazu Code an den betroffenen Applikation anzupassen.

Auf den Pod setzen

Kubernetes führt Container stets in sogenannten Pods aus. Das oder der Pod ist also die Basiseinheit für die Container-Orchestrierung mit Kubernetes. Ein Pod kann einen oder mehrere Container hosten, welche sich dann die Ressourcen teilen, da die Container eines Pods immer auf der gleichen physischen oder virtuellen Maschine ausgeführt werden.

Aufbau eines Kubernetes-Clusters
Aufbau eines Kubernetes-Clusters (Bild: Red Hat)

Kubernetes „findet“ dabei für jeden Pod automatisch Container-Hosts beziehungsweise VMs mit ausreichender Compute-Kapazität, um sämtliche Container des Pods laufen lassen zu können. Verwaltet werden Pods gemeinsam mit ihren Containern und Images von einem Node-Agent, der bei Kubernetes „Kubelet“ heißt. Er ist auch für den automatischen Neustart eines Containers bei einem Ausfall verantwortlich.

Weitere Kernkomponenten einer Kubernetes-Umgebung sind zum Beispiel der Kubernetes-Master, der die Kubernetes-API ausführt beziehungsweise bereitstellt und den Cluster kontrolliert. Für das Service-Management wird dabei jedem Container ein „Label“ (Schlüssel-/Wert-Paar) angefügt, mit deren Hilfe Container zu Gruppen zusammengefasst werden. Schließlich gibt es in Kubernetes einen „Replication Controller“, der Kubernetes eine horizontale Skalierung ermöglich. Er stellt also sicher, dass der gewünschten Skalierungs-Vorgabe gemäß jeweils ausreichend Pods ausgeführt werden und je nach Anforderung mehr oder weniger Container zur Verfügung stehen.

* Thomas Drilling ist IT-Consultant, -Trainer und Freier Journalist.

copyright

Dieser Beitrag ist urheberrechtlich geschützt. Sie wollen ihn für Ihre Zwecke verwenden? Infos finden Sie unter www.mycontentfactory.de (ID: 44829293 / Definitionen)