Unser SysEleven MetaKube-Team erklärt auf internationalen Konferenzen oder bei unseren Kubernetes Dive In Workshops Techies, wie sie am besten Kubernetes nutzen können. Jetzt haben wir sie um die nächste große Herausforderung gebeten: Kubernetes für Nicht-Techniker zu erklären. Und sie haben es geschafft! Rausgekommen ist ein kleines Kubernetes Basis-Wiki – inklusive Partywissen für StarTrek Fans (Stichwort „Seven of Nine“). Danke!
Inhaltsverzeichnis
Kubernetes – was ist das?
Kubernetes ist Griechisch und bedeutet Steuermann oder im englischen Helmsman. Der Name ist deshalb Programm, weil die Open-Source-Plattform 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 Glossar
Jede Technologie hat spezielle Begriffe – so ist es auch bei Kubernetes. Wir haben die Wichtigsten hier für Dich aufgelistet und erklärt:
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
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.
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.
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.
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.
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.
Der physische oder virtueller Server. Container werden automatisch auf diese Server verteilt.
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.
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.
Definiert und managed wie viele Pod Instanzen im Cluster laufen sollen. Kubernetes übernimmt die Verteilung der Pods selbständig.
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.
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.
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:
- Die Control Plane
- 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
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.
Docker vs. Kubernetes
In unserer Infografik zum Thema Docker vs. Kubernetes stellen wir dir alle Gemeinsamkeiten und Unterschiede beider Technologien gegenüber.
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. Überzeuge Dich selbst von den Vorteilen und teste MetaKube 30 Tage lang kostenlos!
In unserer Blog Serie „Managed Kubernetes 101“ erfährst Du außerdem, welche Basis Komponenten Du benötigst, um einen lauffähigen Cluster zu erstellen. Erfahre mehr über Runtime, Service Proxy, Service Mesh & Message Streaming, Datenbanken und CI/CD.
Wir freuen uns über Dein Feedback!
Der Blogbeitrag wurde erstmalig am 14.02.2019 veröffentlicht
Frequently Asked Questions
Kubernetes ist eine Open-Source-Plattform. Sie orchestriert und automatisiert das Einrichten, Betreiben und auch Skalieren von Container-Anwendungen. Kubernetes nimmt folglich einen Großteil der Arbeiten ab, die mit der Bereitstellung und Verwaltung von Applikationen verbunden sind und reduziert den Zeit-, Ressourcen- und Kostenaufwand.
Das Wort Kubernetes [ˌkuːbɐˈneːtəs] kommt aus dem Griechischen und bedeutet übersetzt “Steuermann”. Oft sieht man auch die Schreibweise k8s: Das „k“ steht dabei für „Kubernetes“, die Zahl 8 für acht Zeichen und das „s“ kennzeichnet den letzten Buchstaben des Wortes
Kubernetes ist das ideale Werkzeug, um Software für verteilte Systeme in einem produktiven Szenario zu betreiben. Die Technologie befähigt DevOps-Teams effektiver zu arbeiten und so den Entwicklungsprozess zu beschleunigen.
Kurzum: Kubernetes eignet sich für jedes Unternehmen, welches schnell und zuverlässig Applikationen entwickeln, bereitstellen und anpassen möchte und so von einem Wettbewerbsvorteil profitieren kann.
Zu den beliebtesten Container-Technologien zählen Docker und Kubernetes: Docker ist für die Erstellung und Ausführung von Containern zuständig und Kubernetes zur Container-Orchestrierung. Beide Tools werden also miteinander eingesetzt und basieren auf Open Source Technologie.
Zu den beliebtesten Container-Technologien zählen Docker und Kubernetes: Docker ist für die Erstellung und Ausführung von Containern zuständig und Kubernetes zur Container-Orchestrierung. Beide Tools werden also miteinander eingesetzt und basieren auf Open Source Technologie.