Kubernetes einfach erklärt: Antworten vom Techie für den Noobie

Containerschiff auf See

Kubernetes einfach erklärt: Antworten vom Techie für den Noobie

Bastian ist Senior System Engineer Kubernetes bei SysEleven und erklärt auf internationalen Konferenzen oder bei unseren Kubernetes Dive-In Workshops Techies, wie Sie am besten Kubernetes benutzen können. Jetzt haben wir ihn um die nächste große Herausforderung gebeten: Kubernetes für Nicht-Techniker zu erklären. Und er hat es geschafft! Rausgekommen ist ein kleines Kubernetes Basis-Wiki – inklusive Partywissen für StarTrek Fans (Stichwort “Seven of Nine”). Danke Basti!

Kubernetes – was ist das?

Kubernetes ist Griechisch und bedeutet Steuermann. Der Name ist deshalb Programm, weil das Open-Source-System wie ein Steuermann automatisch den Weg in Punkto Bereitstellung, Skalierung und Verwaltung von Containern vorgibt. Das bedeutet: Du sagst dem Steuermann “Ich will einen skalierbaren Shop” und er steuert alles, was für die Infrastruktur auf dem Weg dorthin nötig ist.

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 den kompletten Quellcode und alle 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 und durch Kubernetes ihren Platz im idealen Rechenzentrum finden. Dafür sucht Kubernetes den Server, der noch Kapazitäten übrig hat und gibt diese Rechenleistung nach erfüllter Aufgabe sogar automatisch wieder frei. Auch beim Ausfall eines Servers werden die darauf laufenden Container automatisch auf andere Server im Rechencenter verschoben.

Fun Fact am Rande: Das offizielle Logo von Kubernetes ist ein Steuerrad – wegen dem Steuermann. 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 🙂

Begriffe und Aufbau von Kubernetes.

Jede Technologie hat spezielle Begriffe – so ist es auch bei Kubernetes. Wir haben die Wichtigsten aufgegriffen und erklären Dir mit ihnen gleichzeitig den groben Aufbau eines Kubernetes Clusters.

  • Image: Ein Docker Image enthält den kompletten Code des Services sowie all seine Abhängigkeiten wie z.B. ein Web-Server oder eine Laufzeitumgebung. Ausgenommen ist hier die Konfiguration des Services, da diese abhängig vom Environment ist.
  • Container: In einem Container wird von einer spezifischen Version eines Docker Images der Prozess des Services gestartet. Der Prozess läuft nativ auf dem Host-System, hat aber sein eigenes Dateisystem und sieht keine anderen laufenden Prozesse.
  • Pod: Eine Gruppe von Containern, die alle auf der selben 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.
  • Deployment: Steuert Rolling Updates und Rollbacks der Replica Sets. Dies ermöglicht es eine neue Version eines Services ohne Down-Time zu deployen.
  • 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.
  • 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 virtueller Server. Container werden automatisch auf diese Server verteilt.
  • 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.
  • Persistent Volume: Das Datei System eines Containers ist nicht persistent. Sobald ein Container neugestartet 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.
  • 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: Durch ein DaemonSet sagt man Kubernetes, dass ein bestimmter Pod auf jedem Server exakt einmal gestartet werden soll. 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.
  • 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.

Einsatzfelder, Vorteile und Herausforderungen von Kubernetes

Um Container im Betrieb zu halten, ist Kubernetes ein mittlerweile weltweit anerkannter Standard. Das bedeutet: Sehr viele Firmen, die Container-basiert arbeiteten 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, integriert sind.
  • Kubernetes skaliert manuell, oder sogar automatisch, Pods (siehe “Replica Set” in Kubernetes Schaubilder). 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 die Flexibilität und Arbeitserleichterung durch Kubernetes in der Benutzung ermöglichen, müssen auch hoch verfü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 as a Service Dienst aus Deutschland. Ein Service, der alle Vorteile von Kubernetes für Unternehmen sofort nutzbar macht: Den “komplizierte” Teil des Erstellens, Betreibens und Updatens eines Kubernetes Clusters nehmen die SysEleven Experten 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.

Share this post

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.