Die Open-Source-Software Kubernetes kommt überall dort zum Einsatz, wo Containertechnologie produktiv eingesetzt wird. Kubernetes ist ein Container Orchestration Framework mit einer aktiven Experten-Community und zahlreichen großen Unternehmen im Rücken. Dazu gehören Microsoft (Azure), IBM und Red Hat ebenso wie Amazon, Oracle und Google.
Als Programm zur Verwaltung von Container-Clustern gibt es auch Schnittstellen mit der Container-Virtualisierungssoftware Docker, welche bis vor kurzem noch als grundlegende Runtime von Kubernetes eingesetzt wurde. Kubernetes ermöglicht dynamische Lastenverteilung (Load Balancing) und delegiert Ressourcen zwischen Containern. So optimiert Kubernetes die Leistungskapazitäten eines Systems. Containerbasierte Lösungen entfalten nur dann ihr volles Potenzial, wenn mehrere Container in Clustern parallel nebeneinander laufen und aufwandsabhängig skaliert werden können.
Diese Aufgabe zeigt sich auch im Namen der Software: "Kubernetes" kommt aus dem Altgriechischen, wird in der Regel mit K8s abgekürzt und lässt sich mit "Steuermann" übersetzen.
Definition - Was ist Kubernetes
Containertechnologien wie Docker ermöglichen es, dass standardisierte, isolierte Prozesse die Infrastruktur von Systemen bestmöglich ausnutzen. Sie gelten als flexibler, transportabler und ressourcenschonender im Vergleich zu monolithischen Anwendungsstrukturen, also Software-Architekturen, bei denen der komplette Code in einem einzigen, großen Prozess zusammengefasst ist.
Ein Container braucht kein eigenes Betriebssystem, sondern verwendet das Betriebssystem (Operating System, OS) der Hardware (Host-OS), auf dem er läuft. Ein Container teilt sich das Host-OS mit anderen Containern, die parallel nebeneinander ablaufen. Deswegen können auf einer Hardware deutlich mehr Container ausgeführt werden als etwa Virtuelle Maschinen (VM), die nach einem ähnlichen Prinzip arbeiten, aber jeweils ein komplettes OS mitliefern müssen.
Der parallele Betrieb vieler Container bringt allerdings ein Problem mit sich: Jeder einzelne Container muss verwaltet werden. Genau hier schafft Kubernetes Abhilfe.
Kubernetes ist ein Open-Source-Tool, das containerisierte Microservice-Architekturen verwalten und automatisieren kann. Ohne die automatisierte Verwaltung müsste jeder Container im Cluster manuell durch das Entwicklerteam überwacht, ausgerollt, repariert, kopiert und migriert werden.
Kubernetes löst dieses Problem und ermöglicht es, mehrere containerisierte Prozesse parallel zu betreiben. Vor allem bei der Skalierung von Containeranwendungen ist Kubernetes unabdingbar. Dabei muss eine Vielzahl von Containern in Bruchteilen von Sekunden aktiviert werden - für ein manuell arbeitendes Entwicklerteam praktisch unmöglich. Kubernetes erledigt diese Aufgabe automatisch und erlaubt es damit, Cloud-Native-Anwendungen einzusetzen.
Wer hat Kubernetes entwickelt
Entwickelt wurde Kubernetes von ehemaligen Google-Entwicklern, die Googles Container-Verwaltungssoftware Borg frei zugänglich nachbauten. Mittlerweile verwaltet die Cloud Native Computing Foundation (CNCF) K8s. Die CNCF ist ein von der Linux Foundation gegründeter Zusammenschluss von Herstellern, Betreibern und Programmierern von Cloud- und Container-Technologie.
Fun Fact: Das Logo von Kubernetes - ein weißes Steuerrad auf blauem Grund - bezieht sich nicht nur auf die altgriechische Wortbedeutung. Die sieben Speichen des Rades verweisen auf den ursprünglichen Projektnamen während der Entwicklungszeit bei Google, "Seven of Nine". Star Trek-Fans werden sich erinnern: Seven of Nine aus den Star Trek-Serien Voyager und Picard ist ganz so wie Kubernetes eine ehemalige Borg.
Wer verwendet Kubernetes
Die unterschiedlichsten Unternehmen setzen Kubernetes heute bereits ein - oft, ohne dass die Nutzer es überhaupt merken. Etwa der Haushaltsgerätehersteller Vorwerk, der mit dem digitalen Rezept-Ökosystem "Cookidoo" Kunden und Thermomix-Geräte in einer containerbasierten Cloud vernetzt. Den Unterbau der IoT-Cloud (Internet der Dinge, Internet of Things) bildet eine OpenShift-Container-Plattform der Firma Red Hat, die Kubernetes als Verwaltungssoftware nutzt. Vorwerk kann dadurch nicht nur Updates problemlos einspielen, sondern auch neue Funktionen implementieren und die Cloud-Infrastruktur ohne Aufwand verwalten lassen.
Wie ist Kubernetes aufgebaut
Kubernetes verwaltet also Container. Doch was ist ein Container eigentlich? Im Wesentlichen ist ein Container eine unabhängige Ansammlung von Programmcode, Systembibliotheken, Laufzeitumgebung und Systemwerkzeugen - kurz, von all dem, was zum Ablauf eines Prozesses nötig ist. Container greifen dazu auf das Host-Betriebssystem der Hardware oder des Servers zurück, unter dem sie laufen. Sie müssen anders als Virtuelle Maschinen kein eigenes OS mitliefern. Das macht sie flexibler und ressourcenschonender.
Die am häufigsten benutzte Software zur Containerisierung von Anwendungen ist Docker. Container sind die Grundbausteine von Microservice-Architekturen.
Solche Microservice-Architekturen sind ein Ansatz in der Anwendungsentwicklung. Dabei wird Software in einzelne, isolierte Prozesse zerlegt, anstatt sie in einer großen Struktur zu vereinen. Letztlich handelt es sich also um eine Ansammlung von containerisierten Prozessen. Einzelne Microservices können in der Regel unabhängig vom Rest der Anwendung ablaufen.
Kubernetes funktioniert nach einem hierarchischen Verwaltungsmodell. Dessen Herzstück sind die Verwaltungs- oder Master-Knoten (Master Nodes). Sie sind für das Deployment - also die Verteilung auf einem PC oder Server - der Arbeitsknoten (Worker Nodes) verantwortlich. Die Verwaltungsknoten enthalten alle zur Verwaltung und Ausführung der Kubernetes-Prozesse benötigten Programme. Sie können außerdem mit den Arbeitsknoten kommunizieren.
Kubernetes Verwaltungsknoten
Ein Verwaltungsknoten hat fünf wesentliche Bestandteile: den Kube-API-Server, verschiedene Controller, einen Kube-Controller-Manager, einen Scheduler und einen Konfigurationsspeicher namens "etcd".
Etcd ist der wichtigste Teil des Verwaltungsknotens. Hier sind alle Informationen gespeichert, die Kubernetes braucht, um große Systeme zu konfigurieren und Dienste zu erkennen. Weil dieser sogenannte Key-Value-Speicher so wichtig ist, empfiehlt es sich, Backups für Notfälle zu erstellen.
Die Controller sind dafür verantwortlich, dass die einzelnen Pods (dazu später mehr) die jeweils gewünschten Aufgaben ausführen. Der Kube-Controller-Manager kümmert sich um die Verwaltung der einzelnen Controller. Der Kube-API-Server kommuniziert mit der Kubernetes-API.
Kubernetes-API
Die Kubernetes-API, also die Programmierschnittstelle (Application Programming Interface), ist die Schnittstelle zwischen der Kubernetes-Software und dem Entwicklerteam. Über das Befehlszeilenprogramm "kubectl" können Entwickler den Status der Cluster prüfen, Container und Pods erstellen, außer Betrieb nehmen oder aktualisieren. Kubectl hilft im Wesentlichen bei der Kommunikation mit der Kubernetes-API.
Die Kubernetes-API ist außerdem auf beliebige Erweiterbarkeit durch Drittsoftware (in der K8s-Terminologie: Custom Resources) ausgelegt. Dazu zählen beispielsweise Kubernetes-Operators von CoreOS, die Kubernetes die Verwaltung von zustandsbehafteten Applikationen erleichtern.
Kubernetes Arbeitsknoten
Die sogenannten Pods ermöglichen es Kubernetes Container zu verwalten. Ein Pod ist die kleinste definierte Einheit, auf die K8s zugreifen kann. Bei einem Pod handelt es sich um eine Art Hülle um einen oder mehrere Container. K8s sorgt dafür, dass alle Container eines Pods auf demselben Knoten laufen und verbindet die Container so, dass sie miteinander kommunizieren können. Das ist notwendig, weil Container per se von allen anderen Prozessen abgekapselt sind - auch von anderen Containern.
Manchmal kommt es vor, dass verschiedene gekapselte Prozesse zusammen eine Anwendung ergeben, zum Beispiel eine Webanwendung, die eine Datenbank benötigt. Die Webanwendung liegt im ersten Container, die dazugehörige Datenbank im zweiten Container. Ein Pod kann die verschiedenen Container so zusammenfassen, dass K8s sie verarbeiten kann.
In der Entwicklung ist es jedoch in der Regel besser, für jeden Container einen eigenen Pod anzulegen. Grund dafür ist die separate Skalierbarkeit von Containern: Orchestratoren können einzelne Container innerhalb eines Pods nicht separat verwalten. Das bedeutet, dass Kubernetes immer nur den kompletten Inhalt eines Pods skalieren kann, selbst wenn nicht für alle containerisierten Prozesse notwendig ist. Ist jeder Container in einem eigenen Pod, umgeht man dieses Problem.
Das Kubelet kümmert sich darum, dass alle Container innerhalb eines Pods kontinuierlich ablaufen, auch dann, wenn der Prozess in einem der Container beendet wird oder ausfällt. Das Kubelet garantiert damit die hohe Verfügbarkeit (High Availability) von Systemen - einen der größten Vorteile von K8s. Fällt ein Container aus, startet Kubernetes automatisch und ohne merklichen Zeitverlust einen neuen.
Zusammen mit dem Kube-Proxy, der Anfragen verarbeitet, bilden Pods und Kubelet einen Arbeitsknoten.
Kubernetes vs. Docker
Wer sich zu Kubernetes informieren möchte, wird früher oder später auf Artikel mit Titeln wie "Kubernetes vs. Docker" oder "Kubernetes und Docker - Die größten Unterschiede" treffen. Doch hier ist ein Fehlschluss Vater des Gedankens: Kubernetes ist keine Alternative zu Docker, Docker ist kein Ersatz für Kubernetes. Vielmehr gehen beide Programme eine Symbiose ein: mit Docker werden Container erstellt, mit Kubernetes werden sie verwaltet.
Bei Docker und K8s handelt es sich nicht um miteinander vergleichbare Tools. Womit K8s tatsächlich vergleichbar ist, sind andere Orchestrator-Tools wie das von Docker Inc. zur Verfügung gestellte Docker Swarm.
Einer der größten Vorteile von K8s ist, dass viele große Cloudanbieter das Programm standardmäßig verwenden. Außerdem ist es leistungsstärker, anpassbarer und flexibler in der Anwendung. Dadurch erfordert es aber auch eine höhere Lernkurve und gut geschulte Mitarbeiter. Für viele Großunternehmen - etwa den Medienkonzern Bloomberg, der Kubernetes seit der ersten Testphase im Jahr 2015 nutzt - ist ein kompetentes Expertenteam das A und O, um Kubernetes produktiv zu nutzen.
Die Vorteile von Kubernetes
Kubernetes ist kompliziert. Praktisch sind da Unternehmen, die bereits vollständig automatisierte Cluster anbieten.
Ein Hamburger Start-up stellt beispielsweise automatisierte "Container as a Service" an und will Unternehmen damit knapp 18 Monate Arbeit abnehmen. Ähnlich verfährt ein ebenfalls in der Hansestadt ansässiger Anbieter für Content Management Systeme. Dessen Lösung eignet sich besonders für das Retail Management und ist eine Proximity-Plattform für "Location-based content delivery", um Kunden und Angebot unkompliziert und schnell zusammenzubringen.
Das weiteres Beispiel findet sich bei einem südlich von München ansässigen Software-Hersteller: Das Unternehmen bietet ein Tool zur Daten- und Prozessintegration an, mit der Kunden ihre Geschäftsprozesse digitalisieren können.
Diese Lösung stellt Kunden ein eigenes Repository zur Verfügung, eine Art Bibliothek für Container-Images. Ein Image ist der Bauplan eines Containers, den Kubernetes zum Erstellen von Pods verwendet. Sobald also ein Prozess oder ein Teil des Systems gepatched oder repariert werden muss, stellt die Lösung ein aktualisiertes Image ins Repository. Das Kubernetes-System des Kunden greift auf dieses Image zurück und startet darauf aufbauend neue Pods.
Kubernetes bietet also eine Reihe von Vorteilen:
Hochverfügbarkeit
K8s macht Software hochverfügbar. Wenn ein Server ausfällt, können alle Pods problemlos und ohne größeren Zeitaufwand auf einem anderen Knoten gestartet werden. Damit läuft eine Anwendung ohne Ausfall weiter, während das Entwicklerteam das Serverproblem im Hintergrund beheben kann.
Selbstheilung
Mit Kubernetes lassen sich Systeme bauen, die sich selbst heilen können. Sobald in einem Teil der Software ein Fehler auftritt, führt K8s einen automatischen Rollback zur letzten problemlos funktionierenden Version des fehlerhaften Teils durch und startet diese selbstständig neu. Damit verringert K8s die Ausfallzeit des Systems im Falle einer fehlerhaften Anwendung oder Systemfunktion. In der konkreten Entwicklung hat das den Vorteil, dass Entwickler jederzeit ohne großes Risiko Updates einspielen können. Sollte ein Update Probleme verursachen, startet K8s einfach die vorherige Version der Software, ohne dass Teile des Systems nachhaltigen Schaden nehmen.
Automatische Skalierung
K8s erkennt automatisch Muster im Nutzerverhalten und kann Systeme skalieren. Die Software kann beispielsweise analysieren, die die CPU genutzt wird und je nach Bedarf zusätzliche Knoten zu aktivieren oder überzählige Knoten abzuschalten. Sollten Nutzerzahlen auf einer Website unerwartet schnell ansteigen, reagiert die Software darauf und strukturiert die Ressourcen des Systems um oder startet neue Instanzen, um die gestiegene Arbeitslast abzufangen.
Kubernetes bietet auch die Möglichkeit, Regeln für die automatische Skalierung festzulegen. Nutzer können definieren, wie viele Instanzen maximal mit einem Prozess beschäftigt sein dürfen und wie viele es mindestens sein müssen. Kubernetes passt dann im definierten Rahmen die Anzahl an aktiven Instanzen selbstständig an und kann auf Lastspitzen reagieren.
Einfache Wartung
Bei einer Serverwartung verhindert K8s ebenfalls Ausfallzeiten. Stehen Wartungsarbeiten an, zieht Kubernetes Pods einfach auf einen anderen Knoten um. Anders als bei VM-Lösungen muss nicht die komplette Anwendung gestoppt werden, um sie instand zu halten.
Mehr Effizienz durch Load Balancing
Kubernetes erkennt, welche Knoten ausgelastet sind, und welche noch Kapazitäten frei haben. Dann startet die Software neue Container automatisch auf nicht ausgelasteten Knoten, was Ressourcen spart und Anwendungen effizienter macht.