Kubernetes
Abkürzung: K8s
Kubernetes verwaltet Container in einem Verbund aus vielen Servern, einem Cluster. Man beschreibt, welche Anwendungen in welcher Zahl laufen sollen, und Kubernetes sorgt dafür, dass dieser Zustand eintritt und bleibt: Es verteilt Container auf die Server, startet abgestürzte neu, verlegt sie bei einem Serverausfall auf andere und verteilt die Last. Diese Aufgabe heißt Container-Orchestrierung.
Kubernetes stammt von Google, das im Jahr 2014 ein internes System zur Verwaltung seiner Rechenzentren als Vorbild nahm und eine offene Neuentwicklung vorstellte. Version 1.0 erschien 2015, zugleich ging das Projekt an die neu gegründete Cloud Native Computing Foundation. Der Name ist griechisch und bedeutet Steuermann. Die Abkürzung K8s steht für K, acht weitere Buchstaben, s.
Grundprinzip
Kubernetes arbeitet deklarativ: Man beschreibt den gewünschten Zustand, nicht die Schritte dorthin. Eine Beschreibung sagt etwa „drei Instanzen dieses Webservers, erreichbar unter diesem Namen“. Kubernetes vergleicht laufend den gewünschten mit dem tatsächlichen Zustand und gleicht Abweichungen aus. Fällt ein Server mit einer Instanz aus, startet es eine neue auf einem anderen.
Bausteine
| Baustein | Bedeutung |
|---|---|
| Cluster | der Verbund aller Server, die Kubernetes verwaltet |
| Node | ein einzelner Server im Cluster, physisch oder als virtuelle Maschine |
| Control Plane | die Steuerung des Clusters: Schnittstelle, Datenspeicher, Verteilung der Arbeit |
| Pod | kleinste Einheit: ein oder mehrere Container, die zusammen auf einem Node laufen und sich Netz und Speicher teilen |
| Deployment | beschreibt eine Anwendung: welches Image, wie viele Pods, wie aktualisiert wird |
| Service | fester Name und feste Adresse für eine Gruppe von Pods, deren Adressen sich ständig ändern |
| Ingress | leitet Anfragen von außen an die richtigen Services weiter |
| Namespace | Unterteilung eines Clusters, etwa nach Team oder Umgebung |
| Persistent Volume | dauerhafter Speicher, der einen Pod überlebt |
Die Beschreibungen werden in YAML-Dateien abgelegt und mit dem Befehlszeilenwerkzeug kubectl an den Cluster übergeben.
Was Kubernetes übernimmt
| Aufgabe | Wie |
|---|---|
| Verteilung | Pods werden auf Nodes mit freien Ressourcen gelegt |
| Selbstheilung | abgestürzte Container werden neu gestartet, Pods ausgefallener Nodes anderswo neu angelegt |
| Skalierung | mehr oder weniger Pods, von Hand oder automatisch nach Last |
| Aktualisierung | neue Versionen werden schrittweise ausgerollt, bei Fehlern zurückgerollt |
| Lastverteilung | Anfragen an einen Service verteilen sich auf alle passenden Pods |
| Konfiguration | Einstellungen und Zugangsdaten werden getrennt vom Image verwaltet |
Docker und Kubernetes
Docker baut Container und startet sie auf einem Rechner. Kubernetes verteilt und überwacht sie auf vielen. Für einen einzelnen Server reicht Docker mit Compose meist aus; Kubernetes lohnt sich, wenn Anwendungen auf mehreren Servern laufen und Ausfälle ohne Eingriff überstehen sollen.
Kubernetes startet Container nicht selbst, sondern über eine Laufzeitumgebung wie containerd oder CRI-O. Die direkte Anbindung an Docker wurde mit Version 1.24 im Mai 2022 entfernt. Images aus Docker laufen weiterhin.
Varianten und Distributionen
Kubernetes selbst ist ein Baukasten. Für den Betrieb gibt es fertige Zusammenstellungen:
| Art | Beispiele | Einsatz |
|---|---|---|
| Leichtgewichtige Distributionen | k3s, MicroK8s | kleine Cluster, Edge, Test, Einplatinenrechner |
| Unternehmensplattformen | OpenShift von Red Hat, Rancher | eigener Betrieb mit Verwaltung, Sicherheit und Unterstützung durch den Hersteller |
| Verwaltete Dienste | Angebote großer Cloud-Anbieter und vieler Hoster | Control Plane betreibt der Anbieter, der Kunde nur seine Anwendungen |
Anwendungen für Kubernetes werden oft als Helm-Charts verteilt: Pakete, die alle nötigen Beschreibungen bündeln und sich mit Parametern anpassen lassen.
Aufwand
Kubernetes ist mächtig, aber anspruchsvoll. Netz, Speicher, Zugriffsrechte, Zertifikate, Überwachung und Aktualisierungen des Clusters selbst wollen beherrscht werden. Für kleine Umgebungen ist der Betrieb eines eigenen Clusters oft mehr Aufwand als Nutzen. Ein verwalteter Dienst nimmt einen Teil davon ab.
Im Rechenzentrum
Kubernetes verändert, was ein Rechenzentrum liefern muss, kaum: Es läuft auf gewöhnlichen Servern oder virtuellen Maschinen. Die Anwendungen werden aber unabhängiger von einzelnen Servern. Fällt ein Server aus, laufen die Dienste auf den anderen weiter — vorausgesetzt, der Cluster ist über genug Server und idealerweise über mehrere Brandabschnitte oder Standorte verteilt. Für Daten in Datenbanken gilt das nicht automatisch; sie brauchen weiterhin Replikation und Sicherung.