Von Team
Donnerstag, 16. November 2023

Kubernetes einfach erklärt

Kubernetes ist Griechisch und bedeutet Steuermann oder im englischen Helmsman. Der Name ist deshalb Programm, weil die Open-Source-Platform wie ein Steuermann automatisch die Containern in einem Kubernetes Cluster orchestriert.

Kubernetes – was ist das?

Kubernetes ist Griechisch und bedeutet Steuermann oder im englischen Helmsman. Der Name ist deshalb Programm, weil die Open-Source-Platform wie ein Steuermann automatisch die Containern in einem Kubernetes Cluster orchestriert. Das bedeutet: Der Steuermann sorgt dafür, dass alle Container bestmöglich platziert werden. Sollte ein Container ausfallen, dann erstellt der Steuermann sofort einen neuen Container, um den anderen zu ersetzen. Kubernetes wird auch häufig mit der Kurzschreibweise „k8s“ beschrieben. Das „k“ steht dabei für „Kubernetes“, die Zahl 8 für acht Zeichen und das „s“ kennzeichnet den letzten Buchstaben des Wortes.

Auf die Idee von Kubernetes sind Google-Entwickler gekommen. Google setzte als eines der ersten Unternehmen auf die zugrundeliegende Linux-Container-Technologie und entwickelte diese dann weiter. Der Grund für diese Entscheidung erklärt gleichzeitig einen Hauptvorteil von Containern und Kubernetes: Services können in Containern automatisch intelligent auf den kompletten Kubernetes Cluster verteilt werden um so die vorhandenen Ressourcen optimal auszunutzen.

Jeder Container enthält die komplette Software inklusive aller Abhängigkeiten eines Services. Verdeutlicht am Beispiel von Google: Die Suchfunktion, auf die weltweit Milliarden von Menschen zugreifen. Ohne Container müssten dafür Unmengen an Rechenleistungen auf Vorrat zur Verfügung stehen. Mit Containern kann die vorhandene Rechenleistung optimal genutzt werden, indem je nach Bedarf zusätzliche Container mit dem Such-Service gestartet oder gestoppt werden, um durch Kubernetes ihren idealen Platz in der jeweiligen Region zu finden. Dafür sucht Kubernetes den Server, der freie Kapazitäten hat und gibt diese Rechenleistung nach Beendigung der Aufgaben wieder automatisch frei. Auch beim Ausfall eines Servers werden die darauf laufenden Container automatisch auf andere Server, sogenannte Compute Nodes, im Cluster verteilt.

Fun Fact am Rande: Das offizielle Logo von Kubernetes ist ein Steuerrad – wegen des Steuermannes. Und dieses Steuerrad hat sieben Speichen. Grund dafür ist einer der vielen Kubernetes-Vorgänger, dessen interner Projektname Borg“ war. Und weil der hübscheste Borg „Seven of Nine“ hieß, hat das Steuerrad sieben Speichen. Nerd-Logik eben ?

Kubernetes Architektur

Wenn Du mit Kubernetes arbeitest, dann führst Du dabei einen sog. Cluster aus. Der Kubernetes Cluster ist das Herzstück von Kubernetes und besteht aus zwei Hauptkomponenten:

  1. Die Control Plane
  2. Die Compute Nodes auf denen die Container / Pods gestartet werden

Die Control Plane sorgt für den gewünschten Zustand des Clusters und stellt z.B. fest, welche Anwendungen ausgeführt werden. Die Komponenten der Control Plane bestehen aus

  • Kubernetes API server
  • Kubernetes Scheduler
  • Kubernetes Cloud Controller (optional)
  • Kubernetes Controller Manager
  • ETCD (Key Value Store)

Compute Nodes sind physische oder virtuelle Maschinen und für die Ausführung von Anwendungen und Workloads zuständig. Auf den Nodes werden Pods ausgeführt, diese bestehen wiederum aus Containern. Kubernetes Nodes bestehen aus

  • Container Runtime Engine
  • Kubelet
  • Kube Proxy

Quelle: https://kubernetes.io/docs/concepts/overview/components/

Kubernetes, Docker & Docker Swarm

Wenn von Kubernetes die Rede ist, dann tauchen meist auch die Begriffe Docker und Docker Swarm auf. Was haben die beiden Tools mit Kubernetes zu tun und wann werden sie eingesetzt?

  • Docker ist eine Open-Source-Plattform, die es Entwicklern ermöglicht, Container zu erstellen, bereitzustellen, auszuführen, zu aktualisieren und zu verwalten. 
  • Docker Swarm ist ein integriertes Tool für Docker-Container basierend auf Swarmkit. Mit Swarm können IT-Teams einen Cluster von Docker-Knoten als ein einziges virtuelles System einrichten und verwalten.

Kubernetes und Docker werden folglich parallel eingesetzt – Docker für die Erstellung und Ausführung von Containern und Kubernetes für die Container-Orchestrierung – während es sich bei Docker Swarm um eine Alternative zu Kubernetes handelt. Inzwischen wird Docker nicht mehr als Container-Runtime in Kubernetes unterstützt.

Einsatzfelder, Vorteile und Herausforderungen von Kubernetes

Für die Container-Orchestrierung ist Kubernetes mittlerweile der Standard. Das bedeutet: Sehr viele Unternehmen, die container-basiert arbeiten, setzen auf diese Technologie.

Die Vorteile sind klar:

  • Der Entwickler kann Kubernetes komplett in seine Entwicklungs-, CI- und Deployment Umgebung integrieren und spart eine Menge manueller Schritte, da Kubernetes viele dieser Aufgaben selbst abdeckt oder die standardisierten Kubernetes APIs sehr gut in anderen Tools, wie z.B. Gitlab oder Argo CD integriert sind.
  • Kubernetes skaliert automatisch Pods. Die Anfragen werden über alle verfügbaren Pods verteilt – für eine bessere Auslastung und Verfügbarkeit.
  • Kubernetes sorgt für flexible Anpassbarkeit in Echtzeit. Egal wie hoch die Last ist – Kubernetes sucht sich die freien Ressourcen und stellt sie zur Verfügung. Am Beispiel eines Autos: Einkaufen geht besser mit einem Kleinwagen. Ein Umzug hingegen mit einem 30-Tonner. Kubernetes ist beides in einem und weiß, was es sein muss, wenn Du den Schlüssel holst.

Die größte Herausforderung von Kubernetes liegt aber in der Komplexität des Erstellens, Betreibens und Updatens eines Kubernetes Clusters. Die unterschiedlichen Komponenten, die Flexibilität und Arbeitserleichterung durch Kubernetes in der Benutzung ermöglichen, müssen auch hochverfügbar betrieben und skaliert werden. Dafür braucht es fähige Köpfe und viel Erfahrung. Die Komponenten brauchen immer die richtigen Ressourcen zur richtigen Zeit und sinnvoll gesetzte Grenzen. Dieses Wissen aufzubauen, ist extrem langwierig und kostspielig. Und Experten für den Betrieb sind weltweit schwer zu finden.

Kubernetes ist Komplex – SysEleven MetaKube macht das einfach

MetaKube ist einer der ersten Kubernetes-Dienste aus Deutschland. Ein Service, der alle Vorteile von Kubernetes für Unternehmen sofort nutzbar macht: Den „komplizierten“ Teil des Erstellens, Betreibens und Updatens eines Kubernetes Clusters nehmen die SysEleven Expert:innen dem Kunden komplett ab. 

Zusätzlich gibt es eine Reihe von Features wie z. B. Loadbalancing, Backup und Verschlüsselung, die bereits integriert sind und die Techniker zusätzlich entlasten. 

Kubernetes Glossar

Jede Technologie hat spezielle Begriffe – so ist es auch bei Kubernetes. Wir haben die Wichtigsten hier für Dich aufgelistet und erklärt:

ConfigMap und Secret

In ConfigMaps und Secrets kann die Anwendungs-Konfiguration für einen Service gespeichert werden, z. B. Datenbank Passwörter oder E-Mail Einstellungen. Diese Konfiguration kann dann entweder als Umgebungsvariable oder über ein Volume einem Container zur Verfügung gestellt werden

CronJob

Kubernetes macht die Erstellung von hoch verfügbaren, wiederkehrenden CronJobs sehr einfach. Ähnlich zu einem Deployment definiert man in einem CronJob einen Pod, und in welchem Interval dieser Pod im Kubernetes Cluster gestartet werden soll. Die Prozesse in den Containern innerhalb des Pods sollten sich dabei natürlich nach einer Zeit selbst beenden und nicht ewig laufen. Kubernetes entscheidet dann selbst, wenn es Zeit ist einen Job zu starten und auf welchem Server im Cluster dieser Job ausgeführt wird.

DaemonSet

Mit einem DaemonSet wird ein bestimmter Pod auf jedem Worker Node gestartet.Fügt man in dem Cluster einen neuen Worker hinzu. Dann erhält auch dieser Worker automatisch einen Pod aus dem Daemonset. Das ist z.B. nützlich, wenn man auf jedem Server einen Logging Daemon starten möchte, der die Log Messages aller Container einsammelt und an einen zentralen Log-Server sendet.

Deployment

Deployments verwalten ReplicaSets. Ein Deployment beschreibt einen gewünschten Zustand. Z.b. die Anzahl der Pods. Der Deployment Controller stellt sicher, dass der aktuelle Zustand in den gewünschten Zustand überführt wird. Die Update Stratege kann ebenfalls in einem Deployment definiert werden. Mit einem Rolling Update kann man sicherstellen dass ein Upgrade ohne Downtime durchgeführt wird.

Docker Image

Ein Docker Image enthält den kompletten Code des Services sowie alle seine Abhängigkeiten wie z. B. einen Web-Server oder eine Laufzeitumgebung. Ausgenommen ist hier die Konfiguration des Services, da diese abhängig vom Environment ist.

Ingress Ressource

Veröffentlicht einen Service über eine öffentliche URL. Aufgrund des Ingresses wird ein Ingress Controller (z. B. ein nginx) automatisch so konfiguriert, dass von Außen eingehender Traffic korrekt zum Service und so auch zu den Pods dieses Services verteilt wird. Über einen Ingress kann auch automatisch ein TLS Zertifikat über Let’sEncrypt ausgestellt werden sowie ein DNS Eintrag angelegt werden.

Node

Der physische oder virtuelle Server. Container werden automatisch auf diese Server verteilt.

Persistent Volume

Das Dateisystem eines Containers ist nicht persistent. Sobald ein Container neu gestartet wird, wird das bestehende Dateisystem gelöscht und eine neues aus dem Docker Image erstellt. Um nun Daten persistent und langfristig sicher zu speichern, z.B. zum Betrieb von Datenbanken, kann man in Kubernetes Persistent Volumes erstellen, die man in einen Container mounten kann.

Pod

Eine Gruppe von Containern, die alle auf derselben Node laufen und über localhost miteinander kommunizieren können. Jeder Container hat allerdings sein eigenes Dateisystem, es können aber Dateien über geteilte Volumes ausgetauscht werden. Die Container eines Pods werden zudem von Kubernetes kontinuierlich überwacht. Sollte ein Container nicht mehr korrekt funktionieren, wird er automatisch neu gestartet.

ReplicaSet

Definiert und managed wie viele Pod Instanzen im Cluster laufen sollen. Kubernetes übernimmt die Verteilung der Pods selbständig.

Service

Macht einen definierten Port eines Pods innerhalb des Kubernetes Cluster für andere Pods erreichbar und übernimmt die automatische Lastenverteilung eingehender Anfragen zu allen verfügbaren Pods eines Services.

StatefulSet

Ein StatefulSet erlaubt es, mehrere Instanzen eines Pods in einer festgelegten Reihenfolge zu starten. So kann man z. B. sicherstellen, dass ein primärer Datenbank-Server immer vor seinen sekundären Replicas gestartet wird.

Fotos: (Oben): SysEleven