Mittwald Inside: Kubernetes

  1. Was ist Kubernetes?
    1. Containerisierte Anwendungen ... was soll das denn sein?
  2. Die Architektur und das Konzept hinter Kubernetes
  3. Welche Features machen Kubernetes für uns so attraktiv?

Was ist Kubernetes?

Kubernetes (kurz: K8s) ist eine von Google entwickelte Open Source Software, die es dem Anwender ermöglicht automatisiert containerisierte Anwendungen zu steuern und zu verwalten. 

Im folgenden Szenario möchte ich kurz verdeutlichen, worum es sich hierbei handelt und inwiefern Containerisierung eine immense Hilfe im Alltag eines Software-Entwicklers darstellt.

Kubernetes Visualisierung

Containerisierte Anwendungen ... was soll das denn sein?

Ein Freelancer wird von einer Firma beauftragt, eine Software zu entwickeln, die Daten verarbeitet und das Ergebnis in einer Datenbank absichert. Die Software wird in Python entwickelt und die Daten werden in einer MongoDB abgelegt. Die Entwicklung findet auf dem lokalen Computer des Entwicklers statt und wird nach zweiwöchiger Entwicklungszeit getestet an den Kunden übergeben. Der Kunde startet die Software und wird mit Laufzeitfehlermeldungen und einem unbrauchbaren Programm überrascht. Wie kann das sein? Die Software wurde doch vom Entwickler getestet und für lauffähig befunden. Nun, die Software besitzt Abhängigkeiten (Versionen, Plattform, Libraries,...) und wenn diese nicht erfüllt sind, kommt es zu Problemen. Genau dieses Problem wird mit Containerisierung angegangen. Software, wie z.B. Docker ermöglicht die Erstellung eines Plattformunabhängigen und portablen Container-Images. Darin enthalten sind alle Erfordernisse wie Quellcode, Runtime, Tools, Libraries und Einstellungen. Dieses Image kann nun dem Kunden bereit gestellt werden und bringt die gleiche Umgebung mit, für die sie auch entwickelt wurde.

Nach diesem kurzen Exkurs kommen wir nun zurück zum eigentlichen Thema: Kubernetes. In meinem Artikel über BPMN Workflow Engines habe ich davon berichtet, dass wir zukünftig auf Microservices setzen. Diese entwickeln wir auf Basis von Containertechnik.

Container Orchestration

 In unserem Servicekosmos übernimmt jeder Service dann eine mehr oder weniger wichtige Funktion - viele sind kritisch für das Gesamtsystem und manche nehmen eine weniger wichtige Rolle ein. Zu diesem Zeitpunkt ist es schwer abzuschätzen, wie viele Dienste wir irgendwann zu verwalten haben, aber Herr der Lage zu bleiben, wird mit Skripten oder selbst geschriebener Software sehr schwer – das steht fest. Der Einsatz von Kubernetes soll uns dabei helfen, diese Aufgabe zu bewerkstelligen.

Die Architektur und das Konzept hinter Kubernetes

Wie kann uns diese Lösung also dabei helfen unsere Services unter Kontrolle zu behalten?

Kubernetes besteht aus mindestens einer Master- und einer Worker-Komponente. Der Master betreibt alle notwendigen Prozesse (API Server, Controller Manager und Scheduler) und sollte unbedingt redundant ausgelegt sein, sodass die Betriebsfähigkeit erhalten bleibt, wenn ein Server ausfällt. Auf den Workern werden schlussendlich die verschiedenen Services in Form von Containern betrieben. Genau wie Software auf einem üblichen Computer, benötigen diese Services Ressourcen in Form von CPU-Leistung, Arbeitsspeicher und Speicherplatz. Im bisherigen Verlauf wurde viel von Services und Containern gesprochen, aber im Kubernetes-Kosmos nennt man dieses Konstrukt Pods (Pod = Wrapper um einen Container) und arbeitet mit diesem Terminus. Üblicherweise läuft eine Applikation in einem Pod, der seine eigene IP-Adresse besitzt und prinzipiell einen eigenständigen Server darstellt. Ein Pod kann mehrere Container besitzen – z.B. einen Webserver und die dazugehörige Datenbank.

Während die eigentliche Betriebslast auf den Workern liegt, kümmern sich die Dienste auf dem Master darum, abgestürzte Pods neu zu starten und zu entscheiden, auf welcher Worker Node das nächste Deployment erfolgen kann. Eine Funktion zum Wiederherstellen des Clusters bringt Kubernetes ebenfalls gleich mit, sodass die Backup-Frage für diese kritische Komponente bereits beantwortet ist.

Welche Features machen Kubernetes für uns so attraktiv?

Wir setzen Kubernetes zur Orchestrierung unserer Services aus mehreren Gründen ein. Wenn ein Pod abstürzt oder nicht mehr reagiert (das passiert zwischendurch und kann mehrere Gründe haben), kümmert sich K8s selbstständig darum, dass dieser wieder funktionsfähig wird. Dafür wird der bestehende Pod verworfen und direkt ein neuer gestartet – das Tolle ist, dass dieser im aktuellsten Zustand wieder lauffähig gemacht wird. Kubernetes entscheidet, unter Berücksichtigung der verfügbaren und geforderten Ressourcen, selbstständig auf welcher Worker Node der neue Pod erstellt wird. Dadurch sind wir in der Lage, unsere Services hochverfügbar anzubieten und genießen zusätzlich erhöhte Performance und Skalierbarkeit unserer Systeme. Die Rechenleistung der Worker Nodes ergänzt sich und wirkt nach Außen wie eine Einheit, sodass man auf diese gebündelte Leistung zugreifen kann. Wenn die Anzahl an Usern steigt und die Instanz (Pod) einer Anwendung diese Last nicht mehr ausreichend bedienen kann, ermöglicht Kubernetes ein automatisiertes Deployment weiterer Instanzen (Pods), welche die Lastspitze auffangen können. Bestenfalls kommt es dann gar nicht erst zu Einschränkungen hinsichtlich Performance und User Experience.

Kommentar hinzufügen