Publiziert am 17. Juni 2021 von unter:

Kubernetes – Alles, was Sie darüber wissen müssen.

Titelbild: Muradi auf Unsplash

Wer seine Software Cloud-native entwickeln lässt, wird bei der Planung der Cloud-Architektur früher oder später auf Kubernetes stoßen. Sie planen den Bau einer neuen Anwendung oder möchten eine vorhandene Anwendung modernisieren? Hier erfahren Sie, was Kubernetes ist und wie es Ihnen dabei helfen kann.


Das nehmen Sie aus dem Artikel mit:

  1. Wann ist Kubernetes sinnvoll? Die richtige Cloud-Architektur planen

Inhaltsverzeichnis

  1. Das nehmen Sie aus dem Artikel mit:
  2. Wann ist Kubernetes sinnvoll? Die richtige Cloud-Architektur planen
  3. Was sind Container?
  4. Was sind Microservices?
  5. Was ist Kubernetes?
  6. Von Servern und Containern – Eine kurze Geschichte zur Entstehung von Kubernetes
  7. Cluster, Nodes, Pods und mehr – Die Funktionsweise von Kubernetes im Detail
  8. Docker vs. Kubernetes – Was ist der Unterschied?
  9. Kubernetes und AWS – Ein unschlagbares Team
  10. Die Vorteile von Kubernetes im Projektmanagement und in der Softwareentwicklung
  11. Software modernisieren mit Containern und Kubernetes
  12. Fazit

Wann ist Kubernetes sinnvoll? Die richtige Cloud-Architektur planen

Um die Vorteile einer Cloud wirklich auszuschöpfen, ist eine cloud-native Architektur gefragt – also eine Architektur, welche explizit für den Einsatz in der Cloud konzipiert ist.

Wenn Sie eine Cloud-Architektur konzipieren, werden Ihnen Container als wichtiger Bestandteil der Architektur begegnen. Sie sorgen dafür, dass die Anwendung unabhängig vom Betriebssystem oder bestimmten Programmen läuft.

Kubernetes kann hervorragend zum Betrieb von container-basierten Cloud-Anwendungen eingesetzt werden.

Was sind Container?

Ein Container, oder auch Software-Container, ist eine Art „Behälter“ für eine Applikation und alle Komponenten (z.B. Bibliotheken und Frameworks), die für die Ausführung der Applikation benötigt werden. Sie können sich so einen Container wie eine Art ZIP-Datei vorstellen, welche alle, zum Erfüllen einer gewissen Aufgabe benötigten Dateien beinhaltet.

Auf diese Weise können zum Beispiel jederzeit Änderungen an einem Container und der darin enthaltenen Software vorgenommen werden, ohne dass dadurch die anderen Bestandteile der Applikation beeinflusst werden. Container besitzen außerdem den großen Vorteil, schnell und unkompliziert von einer Rechnerumgebung in eine andere übergeben werden zu können. Zum Beispiel vom Laptop eines Entwicklers auf ein Gerät zum Testen oder beim Wechsel des Cloud-Anbieters zwischen den kompletten Clouds.

Der Einsatz von Containern ermöglicht es Entwicklern, große Cloud-Anwendungen in mehrere kleine Microservices zu unterteilen, welche allerdings untereinander kommunizieren können. Das erleichtert den Entwicklungsalltag ungemein.

Was sind Microservices?

Moderne Cloud-Anwendungen bestehen aus vielen verschiedenen Teilkomponenten: Beispielsweise kann eine Cloud-Anwendung eine Benutzerverwaltung enthalten, eine Komponente, die Graphen berechnet und zeichnet und eine weitere Komponente für das Sammeln von Daten. Jeder dieser Aufgabenbereiche wird dabei als ein Service bezeichnet.

Noch bis vor wenigen Jahren war es üblich, riesige monolithische Software-Systeme zu konstruieren, wobei alle Funktionen und Services einer Anwendung zu einem einzigen, großen Paket zusammengeschnürt wurden. Je größer diese Pakete wurden, desto schwieriger ließen sie sich managen und warten. Deshalb hat man begonnen, die einzelnen, für eine gewisse Funktion zuständigen Teilbereiche zu identifizieren und als eigenständiges System agieren zu lassen. Diese autonomen und voneinander separierten Services wurden immer kleiner, um sich auf eine ganz klar definierte Aufgabe zu konzentrieren und diese dann in Perfektion und mit höchster Zuverlässigkeit auszuführen. So entstand der Begriff Microservice.

Was ist Kubernetes?

Kommen wir nun zu der Frage, was Kubernetes eigentlich ist. Kubernetes wird in Entwicklerkreisen auch als k8s bezeichnet. Diese Abkürzung kommt durch den Austausch der mittleren acht Buchstaben (ubernete) mit der Zahl „8“ zustande. Der Begriff kommt ursprünglich aus dem griechischen und bedeutet so viel wie „Steuermann“. Konzipiert und entwickelt, wurde Kubernetes von Google Ingenieuren und ist seit 2014 als Open-Source-Software unter dem Dach der Cloud Native Computing Foundation (CNCF) verfügbar.

Doch wofür braucht man dieses Kubernetes eigentlich? Stellen Sie sich vor, Sie wollen eine Cloud-Anwendung betreiben, die aus mehreren Containern besteht. Nun ist es jedoch so, dass die Verwaltung, Überwachung und die Kommunikation zwischen diesen einzelnen Containern, sehr schnell komplex und unübersichtlich werden kann. Erst recht, wenn Ihr Entwicklungsteam eine neue Version einer Anwendung veröffentlichen will und es daher jeden einzelnen aus dieser Masse an Containern, mit der neuen Softwareversion bespielen muss. Wenn Sie sich dazu noch keine langen Downtimes erlauben können oder wollen, brauchen Sie eine schlaue und nachhaltige Lösung, wie zum Beispiel Kubernetes.

Kubernetes wird als ein System zur Orchestrierung von Software-Containern bezeichnet. Das bedeutet, es automatisiert die Verwaltung und die Steuerung der Container. Im Detail heißt das: anstatt jeden einzelnen Container manuell starten, stoppen, überwachen und aktualisieren zu müssen, übernimmt Kubernetes diese Aufgaben. Dazu benötigt es „nur“ eine genaue Beschreibung, welche Container in welcher Anzahl benötigt werden – der Rest geschieht automatisch. Das Ganze hat den großen Vorteil, dass Entwickler mit der tatsächlichen Hardware oder den Servern weniger interagieren müssen.

Kubernetes

Sie wollen wissen, ob sich Kubernetes auch für Ihr Cloud-Projekt eignet?

Laden Sie sich jetzt die Kubernetes Checkliste herunter und erfahren Sie, ob sich der Einsatz von Kubernetes für Ihr Projekt lohnt.

Jetzt kostenlos downloaden


Von Servern und Containern – Eine kurze Geschichte zur Entstehung von Kubernetes

In diesem Abschnitt geben wir Ihnen einen kurzen Überblick zur Entstehungsgeschichte von Kubernetes.

In der Vergangenheit war es zwingend notwendig, physische Server zum Betreiben und Bereitstellen einer Anwendung anzuschaffen. So ein Bare-Metal-Server konnte in einem Rechenzentrum eines Hosting-Anbieters gemietet werden und man musste alle Tools und Services manuell aufspielen. Wenn man seine Anwendung allerdings vergrößern und skalieren lassen wollte, musste man neue physische Server hinzufügen oder die bereits vorhandene Hardware upgraden. So etwas konnte allerdings sehr aufwändig und kostspielig werden. Glücklicherweise wurden Servercomputer immer kleiner und potenter und man begann, auf einem realen, physischen Server mehrere virtuelle Server einzurichten.

Je nach Projektanforderung hatte man also eine bestimmte Menge virtueller Server, auf denen die Anwendungen und alle ihre Komponenten gehostet wurden. Häufig war es allerdings so, dass der Managementaufwand für diese ganzen virtuellen Server sehr komplex wurde und es nach Serverupdates oft zu Problemen wie z.B. Inkompatibilitäten zwischen den Anwendungen und ihren Abhängigkeiten kam. Solchen Problemen wirkte man entgegen, indem man jede Anwendung und ihre benötigten Komponenten in die bereits erwähnten Software-Container packte. Für eine umfangreichere Kontrolle, bekam jeder dieser Container eine eigene Software-Version und konnte unabhängig vom Gesamt-System aktualisiert werden.

Nun stand man vor der Herausforderung, diese ganze Flut an Containern zu managen und zu steuern. Glücklicherweise erkannten schlaue Google Ingenieure dieses Problem frühzeitig und entwickelten das Grundgerüst des heutigen Kubernetes.

Cluster, Nodes, Pods und mehr – Die Funktionsweise von Kubernetes im Detail

So! Da nun alle Grundlagen erklärt wurden, kommen wir zur genauen Funktionsweise von Kubernetes. Das System zur Container-Orchestrierung besteht aus vielen einzelnen Teilbereichen. Im folgenden Abschnitt zeigen wir Ihnen die Grundelemente von Kubernetes und erklären, wie diese untereinander in Beziehung stehen.

Zum besseren Verständnis der nächsten Zeilen, haben wir Ihnen die Funktionsweise von Kubernetes in dieser Grafik zusammengefasst:

Bevor Kubernetes zur Tat schreiten kann, muss dem System unser desired state mitgeteilt werden. Wir müssen also genau definieren, „was das System machen soll. Um das „wie“ kümmert es sich dagegen von selbst. Dazu wird eine spezielle Konfigurationsdatei hochgeladen, die Kubernetes unseren gewünschten Zustand mitteilt.

Ein Kubernetes Cluster besteht im Prinzip aus zwei Teilen: Master und Nodes. Bei den Mastern handelt es sich um Servereinheiten, welche dafür zuständig sind alle anderen Elemente innerhalb des Clusters zu kontrollieren und zu steuern. Ähnlich wie unser Kopf für die Steuerung unserer Arme und Beine zuständig ist, sorgen die Master dafür, dass im Kubernetes Cluster alles seinen Gang geht. Dazu übernehmen die Master zum einen die Steuerung der Nodes. Bei den Nodes handelt es sich um erbsenschotenartige Konstrukte, welche eine beliebige Anzahl an Pods beinhalten können.

Ein Pod stellt die kleinste in Kubernetes verwaltbare Einheit dar. Innerhalb der Pods werden die Container gestartet, in welchen sich die Software befindet, um die bereits eingangs erwähnten Services bzw. Microservices bereitzustellen. Das starten und stoppen eines Containers innerhalb eines Pods geschieht dabei vollkommen automatisch.

Stellen Sie sich die Funktion und das Verhältnis der Nodes, Pods und Services doch einmal so vor: Ein Kubernetes Pod ist wie eine Art Arbeitsroboter. Beispielsweise müssen drei dieser Arbeitsroboter hinter einer Ladentheke stehen, um alle Bestellungen der Kundschaft zu bearbeiten und Kaffee verkaufen zu können. Jeder Pod für sich hat die benötigten Informationen und die Fähigkeiten um Kaffee zu kochen und alle zusammen stellen den Service „Kaffee verkaufen“ bereit. Kubernetes wäre in diesem Bild der Shop-Manager, der dafür sorgt, das immer und zu jedem Zeitpunkt drei Arbeitsroboter hinter der Theke stehen.

Bleiben wir noch einmal bei dieser Darstellung, um das Konzept der Replicas und der ReplicaSets zu erklären. Ein ReplicaSet ist ist ein Set von Klonen (Replicas) eines Pods, welche dieselbe Konfiguration und dieselbe Anzahl gleicher Container enthalten. Das ReplicaSet bekommt genau gesagt, wie viele Replicas zur Ausführung eines Services benötigt werden und zu jeder Zeit dafür bereit stehen sollen. Sollte ein Pod ausfallen, erzeugt Kubernetes automatisch ein neues Replica, also in unserem Bild einen neuen Arbeitsroboter, nach den genauen Vorgaben des ReplicaSets, um den Service ohne Unterbrechungen bereitstellen zu können.

Neben den Nodes, kontrollieren die Master den Kubernetes Ingress. Einen Ingress kann man sich wie eine Art Eingangstür zum Kubernetes Cluster vorstellen. Möchte ein Client auf einen bestimmten, von Kubernetes verwalteten Service zugreifen, muss dieser zuallererst durch den Ingress gelangen. Die Master wissen genau, auf welchen Nodes bzw. Pods die einzelnen Services laufen und können so die Anfrage eines Clients an den richtigen Zielort schicken und die Lastverteilung optimal managen.

Zur Kommunikation zwischen Kubernetes und Entwickler, wird das Kommandozeilen-Tool kubectl oder alternativ, die Kubernetes-Weboberfläche verwendet. In der Weboberfläche lässt sich mit Hilfe des Kubernetes-Dashboards (siehe Bild unten) der Zustand des gesamten Kubernetes Clusters überwachen.



Docker vs. Kubernetes – Was ist der Unterschied?

Wer Kubernetes sagt, muss oft im gleichen Satz auch Docker sagen. Doch was ist Docker und wie unterscheidet es sich von Kubernetes? Wie bereits erwähnt, verwaltet k8s Software-Container. Doch diese Container stellt nicht Kubernetes bereit, sondern eine Container-Engine, wie zum Beispiel Docker. Mithilfe von Docker kann man sich Linux-Container erstellen lassen, welche dann durch Kubernetes gesteuert werden.

Das ganze kann man sich so vorstellen: Eine Cloud-Anwendung ist wie ein riesiges Containerschiff, die darauf befindlichen Container werden von Docker bereitgestellt und gefüllt und Kubernetes ist dafür zuständig diese Container zur richtigen Zeit an die richtige Stelle zu befördern.

Kubernetes und AWS – Ein unschlagbares Team

AWS ist die Kurzform für den Cloud-Plattform-Anbieter Amazon Web Services. Mithilfe von Cloud-Plattformen lassen sich container-basierte Anwendungen hervorragend betreiben. Neben Amazon gibt es noch andere Anbieter, wie zum Beispiel die Google Cloud Plattform (GCP). Bei so einem Cloud-Anbieter kann man schnell und unkompliziert Servereinheiten anmieten.

Hierbei bekommt man virtuelle Server bereitgestellt, welche wiederum auf physischen Servern in gigantischen Rechenzentren liegen. Diese Server können ohne feste Vertragslaufzeit gemietet werden und die Abrechnung kann pro betriebener Stunde oder, in der kleinsten Abrechnungsweise, pro Sekunde erfolgen. Das bietet den großen Vorteil, dass man für den Gebrauch dieser virtuellen Server auch wirklich nur so viel bezahlt, wie man auch verbraucht und man ohne Probleme auch kurzfristig neue Servereinheiten dazu buchen kann.

Diese Abrechnungs- und Bereitstellungsmethode harmoniert hervorragend mit dem Einsatz von Kubernetes. Der große Synergieeffekt ergibt sich sobald eine Skalierung der Cloud-Anwendung gewünscht ist. Möchte man nun die Serverkapazitäten vergrößern um neue Rechenpower bereitzustellen, bucht man einfach neue Servereinheiten dazu. Ob dabei alles seinen Gang geht und alle Server funktionieren wie sie sollen, kann z.B. mithilfe von Cloudwatch eingesehen werden. Cloudwatch ist ein von Amazon entwickelter Monitoring-Dienst, mit dessen Hilfe sich verschiedenste Metriken aus den Amazon Web Services ablesen und überwachen lassen.

Die Vorteile von Kubernetes im Projektmanagement und in der Softwareentwicklung

Die Entwicklung von Software, wie zum Beispiel Cloud-Anwendungen, besteht aus vielen verschiedenen Teilbereichen, welche im Entwicklungsalltag eng miteinander verzahnt werden. Kubernetes wird im Bereich des Deployments, also der Verteilung und Konfiguration von Softwarepaketen auf Servern und Endgeräten, eingesetzt.

Das System zur Container-Orchestrierung lohnt sich besonders, wenn eine Anwendung und alle ihre Komponenten jederzeit und ohne Unterbrechungen verfügbar sein müssen. Die wichtigsten Vorteile, die Sie durch den Einsatz von Kubernetes erhalten und was dies für Software Projekte im Allgemeinen und für die Arbeit eines Entwickler bedeutet, erfahren Sie jetzt.

Vorteil 1: Hohe Ausfallsicherheit und Stabilität

Sobald Kubernetes den desired state übermittelt bekommen hat, sorgt das System eigenständig dafür, dass dieser auch immer eingehalten wird. Wenn beispielsweise als gewünschter Zustand angegeben wurde, dass für einen bestimmten Service, immer drei Replicas (Pods) vorhanden sein müssen, sorgt Kubernetes dafür, dass das auch immer so ist. Wenn ein Replica aus technischen Gründen ausfällt oder versehentlich beschädigt wird, generiert Kubernetes sofort ein neues Replica, inklusive Container, um den desired state einzuhalten. Das bedeutet:

  • Für eine Cloud-Anwendung im Allgemeinen: Cloud-Anwendungen, welche auf Container-Ebene von Kubernetes gemanaged werden, sind in der Regel, ausfallsicherer und stabiler.
  • Für den Alltag eines Entwicklers: Es muss nicht mehr manuell kontrolliert werden, ob auch jedem Service die benötigte Anzahl an Containern zur Verfügung steht.

Vorteil 2: Schnelle und einfache Skalierung

Sobald eine Anwendung größer wird und die Anzahl der Anfragen an die einzelnen Services steigt, muss man auf Software-Seite eine Skalierung vornehmen. Wie bereits im vorangegangenen Punkt erklärt, nutzt Kubernetes das Konzept der Replicas. Nun ist es so, dass die Anzahl der Replicas, die für einen gewissen Dienst zuständig sind, frei wählbar ist. Benötigt ein Service also mehr „Arbeitsroboter“ wird ganz einfach der desired state angepasst. Vorausgesetzt man hat das nötige Kleingeld, um seine Serverstrukturen zu vergrößern. Das bedeutet:

  • Für eine Cloud-Anwendung im Allgemeinen: Rechenkapazitäten können, je nach Bedarf, angepasst werden um die Cloud-Anwendung reibungslos betreiben zu können.
  • Für den Alltag eines Entwicklers: Entwickler müssen sich weniger Gedanken über Hardwareanpassungen machen und neue Server nicht mehr manuell aufsetzen.

Vorteil 3: Verbesserte Updateprozesse (Rolling Updates)

Unter Rolling Updates versteht man eine durch Kubernetes umsetzbare Updatestrategie, bei welcher alle Pods mit alten Softwareversionen, Stück für Stück ausgetauscht werden. So ist ein Service immer für die Benutzer verfügbar – entweder in der alten oder der neuen Version. Dadurch sind Verfügbarkeitsquoten nahe an der 100%, trotz häufiger Softwareupdates realisierbar. An solch einen Grad der Hochverfügbarkeit war früher nicht zu denken. In einem konkreten Beispiel bedeutet das, wenn für einen gewissen Service drei Pods zur Verfügung stehen, wird beispielsweise einer aktualisiert, während die anderen zwei weiterlaufen. Das bedeutet:

  • Für eine Cloud-Anwendung im Allgemeinen: Auf die einzelnen Services einer Cloud-Anwendung kann ohne Unterbrechungen zugegriffen werden, was zur Erhöhung der gesamten Stabilität beiträgt.
  • Für den Alltag eines Entwicklers: Manuelles Updaten von Software-Containern kann, je nach Menge, sehr viel Aufwand bedeuten. Durch Rolling Updates sparen Entwickler viel Zeit… und Nerven!

Vorteil 4: Hohe Reproduzierbarkeit

Häufig gibt es bei der Entwicklung von Cloud-Anwendungen das Phänomen, dass ein gewisser Software-Teil auf dem Computer des einen Entwicklers funktionierte, nach dem Transfer auf eine andere Umgebung allerdings nicht mehr. Diesem Problem wird durch den Einsatz von Software-Containern und einem Container-Management-System wie Kubernetes entgegengewirkt. Das bedeutet:

  • Für eine Cloud-Anwendung im Allgemeinen: Es wird sicher gestellt, das alle Teile einer Anwendung plattformunabhängig laufen. Das spart Entwicklungszeiten.
  • Für den Alltag eines Entwicklers: Egal ob die Software auf einem Linux oder Windows-Server entwickelt wurde, ein gestarteter Container läuft überall. Außerdem wird die Behauptung: „Bei mir ging es noch…“ womöglich etwas weniger häufig verwendet werden.

Software modernisieren mit Containern und Kubernetes

Container (und unter Umständen Kubernetes) können sich auch für die Modernisierung bereits bestehender Software eignen: Bei älteren Anwendungen kommt es häufig vor, dass die Anwendung für bestimmte Betriebssysteme entwickelt wurde und nur in einer speziellen Umgebung funktioniert. Das Betriebssystem muss stimmen, gewisse Programme müssen installiert sein. Heutzutage und insbesondere in der Cloud werden Anwendungen so gestaltet, dass sie unabhängig von der Plattform sind. Die Anwendungen laufen dabei in den Containern. Damit eröffnen sich mehr Möglichkeiten und Sie sind flexibler in der Auswahl der verwendeten Cloud und Services. Die Pflege der Anwendung wird auch vereinfacht, da die Umgebung in Containern einfacher zu kontrollieren ist. Diese Cloud-optimale Veränderung der Anwendung wird Re-platform oder auch „Lift & Reshape“ genannt und kann die Kosten und den Aufwand für Ihre Infrastruktur verringern. Dabei entsteht häufig eine Vielzahl an kleineren Containern. Insbesondere bei großen monolithischen Systemen kann es vorkommen, dass diese Stück für Stück in solch kleinere Module umgewandelt werden. Da Kubernetes vor allem für den Betrieb vieler Container geeignet ist, kann es hier eine sinnvolle Wahl sein.

Fazit

Genau wie ein Dirigent ein Orchester von mehreren Musikern leitet, dirigiert auch Kubernetes den Betrieb von Software-Containern. Es stellt dabei ein ausgeklügeltes und intelligentes System dar, um die Prozesse in der Entwicklung und dem Betrieb von anspruchsvollen Software-Projekten zu unterstützen. Beim Betreiben von umfangreichen Cloud-Anwendugen leistet es einen erheblichen Mehrwert für das gesamte Projekt und die Arbeitsprozesse der Entwickler. Doch auch Kubernetes muss gelernt sein! Um das System optimal zu nutzen, benötigt man erfahrene Programmierer, die mit der Technologie vertraut sind.

Wenn Sie jetzt gleich erfahren möchten, ob Kubernetes auch für Ihr Cloud-Projekt geeignet ist, können Sie sich ganz einfach unsere Kubernetes Checkliste runterladen. Einfach ausfüllen, Punkte zusammenzählen und direkt auswerten!

Wenn Sie mehr über Kubernetes und dessen Einsatz im Bereich der Cloud-Anwendungen erfahren möchten, können sie sich natürlich auch jederzeit direkt an uns wenden. Wir beraten Sie gern.

Kubernetes

Sie wollen wissen, ob sich Kubernetes auch für Ihr Cloud-Projekt eignet?

Laden Sie sich jetzt die Kubernetes Checkliste herunter und erfahren Sie, ob sich der Einsatz von Kubernetes für Ihr Projekt lohnt.

Jetzt kostenlos downloaden
Drucken

Schreibe einen Kommentar

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

*

Um die Diskussionsqualität zu wahren, veröffentlichen wir nur noch Kommentare mit nachvollziehbarem Vor- und Nachnamen sowie authentischer E-Mail-Adresse.