Unser MetaKube-Team erklärt auf internationalen Konferenzen und in Workshops, wie sich Kubernetes am besten nutzen lässt. Für diesen Beitrag haben wir das Team um die nächste Herausforderung gebeten: Kubernetes für Nicht-Techniker zu erklären. Herausgekommen ist ein kompaktes Kubernetes-Basiswissen, inklusive Partywissen für Star-Trek-Fans (Stichwort „Seven of Nine“).

Kubernetes: was ist das?

Kubernetes kommt aus dem Griechischen und bedeutet Steuermann, im Englischen Helmsman. Der Name ist Programm, denn die Open-Source-Plattform orchestriert die Container in einem Kubernetes-Cluster wie ein Steuermann. Das bedeutet: Sie sorgt dafür, dass alle Container bestmöglich platziert werden. Fällt ein Container aus, erstellt Kubernetes sofort einen neuen Container als Ersatz. Häufig wird die Kurzschreibweise „k8s“ verwendet. Das „k“ steht dabei für den ersten Buchstaben, die Zahl 8 für die acht dazwischenliegenden Zeichen und das „s“ für den letzten Buchstaben des Wortes.

Die Idee zu Kubernetes stammt von Google-Entwicklern. Google setzte als eines der ersten Unternehmen auf die zugrundeliegende Linux-Container-Technologie und entwickelte diese weiter. Der Grund für diese Entscheidung erklärt zugleich einen Hauptvorteil von Containern und Kubernetes: Services können in Containern automatisch und intelligent auf den kompletten Cluster verteilt werden, um 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 Rechenleistung auf Vorrat bereitstehen. Mit Containern lässt sich die vorhandene Rechenleistung optimal nutzen, indem je nach Bedarf zusätzliche Container mit dem Such-Service gestartet oder gestoppt werden und Kubernetes ihnen den idealen Platz in der jeweiligen Region zuweist. Dafür sucht Kubernetes den Server mit freien Kapazitäten und gibt diese Rechenleistung nach Beendigung der Aufgaben automatisch wieder frei. Auch beim Ausfall eines Servers werden die darauf laufenden Container automatisch auf andere Server im Cluster verteilt, die sogenannten Compute Nodes.

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

Kubernetes-Glossar

Jede Technologie hat ihre eigenen Begriffe, so auch Kubernetes. Die wichtigsten haben wir hier aufgelistet und erklärt.

ConfigMap und Secret

In ConfigMaps und Secrets lässt sich die Anwendungskonfiguration für einen Service speichern, zum Beispiel Datenbankpasswörter oder E-Mail-Einstellungen. Diese Konfiguration kann einem Container entweder als Umgebungsvariable oder über ein Volume zur Verfügung gestellt werden.

CronJob

Kubernetes vereinfacht die Erstellung hochverfügbarer, wiederkehrender CronJobs. Ähnlich wie bei einem Deployment definiert man in einem CronJob einen Pod sowie das Intervall, in dem dieser Pod im Cluster gestartet werden soll. Die Prozesse in den Containern innerhalb des Pods sollten sich dabei nach einer gewissen Zeit selbst beenden und nicht dauerhaft laufen. Kubernetes entscheidet selbst, wann ein Job gestartet und auf welchem Server im Cluster er ausgeführt wird.

DaemonSet

Mit einem DaemonSet wird ein bestimmter Pod auf jedem Worker Node gestartet. Kommt ein neuer Worker Node hinzu, erhält auch dieser automatisch einen Pod aus dem DaemonSet. Das ist beispielsweise nützlich, wenn auf jedem Server ein Logging-Daemon laufen soll, 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, zum Beispiel die Anzahl der Pods. Der Deployment Controller stellt sicher, dass der aktuelle Zustand in den gewünschten Zustand überführt wird. Auch die Update-Strategie lässt sich in einem Deployment definieren. Mit einem Rolling Update wird sichergestellt, dass ein Upgrade ohne Downtime durchgeführt wird.

Docker Image

Ein Docker Image enthält den kompletten Code eines Services sowie alle Abhängigkeiten, etwa einen Webserver oder eine Laufzeitumgebung. Ausgenommen ist die Konfiguration des Services, da diese vom Environment abhängt.

Ingress-Ressource

Ein Ingress veröffentlicht einen Service über eine öffentliche URL. Auf seiner Grundlage wird ein Ingress Controller (zum Beispiel nginx) automatisch so konfiguriert, dass von außen eingehender Traffic korrekt zum Service und damit zu den Pods dieses Services verteilt wird. Über einen Ingress lassen sich zudem automatisch ein TLS-Zertifikat über Let’s Encrypt ausstellen und ein DNS-Eintrag anlegen.

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 ein neues aus dem Docker Image erstellt. Um Daten dauerhaft und sicher zu speichern, etwa für den Betrieb von Datenbanken, lassen sich in Kubernetes Persistent Volumes erstellen und in einen Container mounten.

Pod

Eine Gruppe von Containern, die auf derselben Node laufen und über localhost miteinander kommunizieren können. Jeder Container hat sein eigenes Dateisystem, Dateien lassen sich jedoch über geteilte Volumes austauschen. Die Container eines Pods werden von Kubernetes kontinuierlich überwacht. Funktioniert ein Container nicht mehr korrekt, wird er automatisch neu gestartet.

ReplicaSet

Definiert und verwaltet, wie viele Pod-Instanzen im Cluster laufen sollen. Die Verteilung der Pods übernimmt Kubernetes selbstständig.

Service

Macht einen definierten Port eines Pods innerhalb des Clusters für andere Pods erreichbar und übernimmt die automatische Lastverteilung eingehender Anfragen auf alle verfügbaren Pods eines Services.

StatefulSet

Ein StatefulSet erlaubt es, mehrere Instanzen eines Pods in einer festgelegten Reihenfolge zu starten. So lässt sich beispielsweise sicherstellen, dass ein primärer Datenbankserver immer vor seinen sekundären Replicas gestartet wird.

Kubernetes-Architektur

Wer mit Kubernetes arbeitet, betreibt einen sogenannten Cluster. Der Cluster ist das Herzstück von Kubernetes und besteht aus zwei Hauptkomponenten:

  1. der Control Plane
  2. den Compute Nodes, auf denen die Container beziehungsweise Pods gestartet werden

Die Control Plane sorgt für den gewünschten Zustand des Clusters und legt zum Beispiel fest, welche Anwendungen ausgeführt werden. Sie besteht aus folgenden Komponenten:

  • 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, die wiederum aus Containern bestehen. Nodes bestehen aus folgenden Komponenten:

  • Container Runtime Engine
  • Kubelet
  • Kube Proxy

Quelle: kubernetes.io

Kubernetes, Docker und Docker Swarm

Wenn von Kubernetes die Rede ist, fallen meist auch die Begriffe Docker und Docker Swarm. Was haben diese Tools mit Kubernetes zu tun?

  • Docker ist eine Open-Source-Plattform, mit der sich Container erstellen, bereitstellen, ausführen, aktualisieren und verwalten lassen.
  • Docker Swarm ist ein in Docker integriertes Tool auf Basis von SwarmKit. Mit Swarm lässt sich ein Cluster aus Docker-Knoten als einzelnes virtuelles System einrichten und verwalten.

Docker und Kubernetes ergänzen sich also: Docker dient der Erstellung von Container-Images, Kubernetes der Container-Orchestrierung. Docker Swarm ist dagegen eine Alternative zu Kubernetes. Als Container-Runtime innerhalb von Kubernetes wird Docker seit Version 1.24 nicht mehr unterstützt; stattdessen kommen Runtimes wie containerd oder CRI-O zum Einsatz. Mit Docker erstellte Images laufen weiterhin unverändert, da sie dem OCI-Standard entsprechen.

Einsatzfelder, Vorteile und Herausforderungen von Kubernetes

Für die Container-Orchestrierung ist Kubernetes der Standard. Sehr viele Unternehmen, die containerbasiert arbeiten, setzen auf diese Technologie.

Die Vorteile:

  • Kubernetes lässt sich vollständig in die Entwicklungs-, CI- und Deployment-Umgebung integrieren. Das spart zahlreiche manuelle Schritte, da Kubernetes viele dieser Aufgaben selbst abdeckt und die standardisierten Kubernetes-APIs gut in andere Tools wie GitLab oder Argo CD integriert sind.
  • Kubernetes skaliert Pods automatisch. Die Anfragen werden über alle verfügbaren Pods verteilt, was Auslastung und Verfügbarkeit verbessert.
  • Kubernetes ermöglicht flexible Anpassung in Echtzeit. Unabhängig von der Last sucht Kubernetes die freien Ressourcen und stellt sie bereit. Am Beispiel eines Autos: Einkaufen geht besser mit einem Kleinwagen, ein Umzug mit einem 30-Tonner. Kubernetes ist beides in einem und weiß, was es sein muss, sobald Sie den Schlüssel holen.

Die größte Herausforderung liegt in der Komplexität des Erstellens, Betreibens und Aktualisierens eines Kubernetes-Clusters. Die verschiedenen Komponenten, die im Betrieb für Flexibilität und Arbeitserleichterung sorgen, müssen selbst hochverfügbar betrieben und skaliert werden. Dafür braucht es erfahrene Fachleute. Die Komponenten benötigen jederzeit die richtigen Ressourcen und sinnvoll gesetzte Grenzen. Dieses Wissen aufzubauen, ist langwierig und kostspielig, und Expertinnen und Experten für den Betrieb sind weltweit schwer zu finden.

Kubernetes ist komplex, MetaKube macht es 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 Aktualisierens eines Kubernetes-Clusters übernehmen unsere Expertinnen und Experten vollständig.

Zusätzlich sind eine Reihe von Features wie Loadbalancing, Backup und Verschlüsselung bereits integriert, die Ihre Teams weiter entlasten.

Der Blogbeitrag wurde erstmalig am 14.02.2019 veröffentlicht.

Häufige Fragen

Was ist Kubernetes?

Kubernetes ist eine Open-Source-Plattform. Sie orchestriert und automatisiert das Einrichten, Betreiben und Skalieren von Container-Anwendungen. Kubernetes übernimmt damit einen Großteil der Arbeiten, die mit der Bereitstellung und Verwaltung von Applikationen verbunden sind, und reduziert Zeit-, Ressourcen- und Kostenaufwand.

Was bedeutet Kubernetes?

Das Wort Kubernetes kommt aus dem Griechischen und bedeutet übersetzt „Steuermann“. Häufig sieht man auch die Schreibweise k8s: Das „k“ steht für den ersten Buchstaben, die Zahl 8 für die acht dazwischenliegenden Zeichen und das „s“ für den letzten Buchstaben des Wortes.

Wann benötige ich Kubernetes?

Kubernetes ist ein geeignetes Werkzeug, um Software für verteilte Systeme produktiv zu betreiben. Die Technologie befähigt DevOps-Teams, effektiver zu arbeiten und den Entwicklungsprozess zu beschleunigen. Kurzum: Kubernetes eignet sich für Unternehmen, die Applikationen schnell und zuverlässig entwickeln, bereitstellen und anpassen wollen.

Was ist der Unterschied zwischen Docker und Kubernetes?

Docker ist für die Erstellung und Ausführung von Containern zuständig, Kubernetes für die Container-Orchestrierung. Beide Technologien basieren auf Open Source und werden in der Praxis gemeinsam eingesetzt: Images werden mit Docker gebaut und anschließend von Kubernetes über eine kompatible Container-Runtime ausgeführt.