Zum Inhalt springen

Kubernetes für DevOps: Optimiere Deinen Workflow

  • Daten

Kubernetes ist ein Container-Orchestrierungssystem. Damit lassen sich also Anwendungen auf verschiedene Container aufteilen, wodurch sie schneller und effizienter laufen. Es ist ein Open-Source-Projekt und wurde erstmals im Jahr 2014 veröffentlicht. Kubernetes ist sehr leistungsfähig und kann viele Rechner in verteilten Systemen verwalten.

Warum heißt Kubernetes auch k8s?

Das griechische Wort Kubernetes bedeutet auf Deutsch Steuermann und beschreibt genau das, was das Programm tut, es steuert. In diesem Beitrag werden wir vor allem die Abkürzung von Kubernetes k8s nutzen. Diese kommt daher, dass das Wort Kubernetes mit k beginnt, mit s endet und sich dazwischen 8 Buchstaben befinden.

Was sind Container und warum brauchen wir sie?

Eines der bestimmenden Merkmale von Big Data oder Machine Learning ist, dass ein einzelner Computer in vielen Fällen nicht ausreicht, um die gewaltigen Rechenlasten zu bewältigen. Deshalb ist es notwendig, mehrere Computer zu verwenden, die sich die Arbeit teilen können. Zusätzlich können durch ein sogenanntes Cluster auch Ausfälle von einzelnen Computern kompensiert werden, wodurch wiederum sichergestellt ist, dass die Anwendung durchgehend erreichbar ist. Wir bezeichnen eine solche Anordnung von Computern als Computing-Cluster oder verteiltes System für paralleles Rechnen.

Jetzt wissen wir zwar, was Cluster sind, jedoch haben wir noch nicht verstanden, was es mit den Containern auf sich hat.

Die Container kommen aus dem Softwareumfeld von Docker. Für den Moment nur so viel: Docker-Container können wir uns tatsächlich relativ praktisch vorstellen, wie einen Schiffscontainer. Angenommen, in diesem Container arbeiten drei Menschen an einer bestimmten Aufgabe (Ich weiß, dass dies wahrscheinlich gegen jedes geltende Arbeitsschutzgesetz verstößt, aber es passt nun mal sehr gut in unser Beispiel).

In diesem Container finden sie alle Ressourcen und Maschinen, die sie für ihre Aufgabe benötigen. Über eine bestimmte Lucke im Container bekommen sie die Rohstoffe geliefert, die sie benötigen, und über eine andere Lucke geben sie das fertige Produkt raus. Unser Schiffscontainer kann dadurch relativ ungestört und weitestgehend autark arbeiten. Den Menschen darin wird es nicht auffallen, ob sich das Schiff inklusive Container gerade im Hamburger Hafen, in Brasilien oder irgendwo bei ruhigem Seegang auf offenem Meer befindet. Solange sie kontinuierlich Rohstoffe geliefert bekommen, führen sie ihre Aufgabe aus, egal wo sie sind.

Genauso verhält es sich mit Docker Containern im Softwareumfeld. Es handelt sich dabei um genau definierte, abgeschlossene Applikationen, die auf verschiedenen Maschinen laufen können. Solange sie die festgelegten Inputs kontinuierlich erhalten, können sie auch kontinuierlich weiterarbeiten.

Was macht Kubernetes?

Was wir bis hierhin besprochen haben: Wir nutzen Computing-Cluster, um rechenintensive Projekte, wie Machine Learning Modelle, auf mehreren Rechnern zuverlässig und effizient laufen lassen zu können. In Containern wiederum programmieren wir Unteraufgaben, die in sich abgeschlossen sind und die immer gleich ablaufen, egal ob auf Rechner 1 oder Rechner 2. Das klingt doch eigentlich ausreichend oder?

Verteilte Systeme bieten gegenüber Einzelrechnern neben Vorteilen auch zusätzliche Herausforderungen, beispielsweise bei der gemeinsamen Nutzung von Daten oder der Kommunikation zwischen den Rechnern innerhalb des Clusters. Kubernetes übernimmt die Arbeit die Container auf die Cluster zu verteilen und sorgt für den reibungslosen Ablauf des Programmes. Dadurch können wir uns auf das eigentliche Problem, also unseren konkreten Anwendungsfall, konzentrieren.

Wie ist ein Kubernetes Cluster aufgebaut?

K8s wird normalerweise auf einem Cluster von Computern installiert. Jeder Computer in diesem Cluster wird als Node bezeichnet. Auf einem Computer bzw. Node wiederum laufen mehrere sogenannte Pods. Auf den Pods dann laufen schlussendlich die Container mit den kleineren Applikationen und können in einem lokalen System kommunizieren.

Damit die Pods und die Container darin ohne Komplikationen laufen können, gibt es einige Hilfsfunktionen und -komponenten im Kubernetes Cluster, die dafür sorgen, dass alle Systeme laufen.

Das Bild zeigt den beispielhaften Aufbau eines Kubernetes Clusters, inklusive Nodes und Control Plane.
Aufbau Kubernetes Cluster | Foto: Kubernetes
  • Control Plane: Das ist der Rechner, welcher das komplette Cluster überwacht. Auf diesem laufen keine Pods für die Anwendung. Stattdessen werden den einzelnen Pods die Container zugewiesen, die auf ihnen laufen sollen.
  • Sched: Der Scheduler hält innerhalb des Clusters Ausschau nach neu erstellen Pods und teilt diese zu bestehenden Nodes zu.
  • ETCD: Ein Speicher für alle Informationen die im Cluster anfallen und aufbewahrt werden müssen, bspw. Metadaten zur Konfiguration.
  • Cloud Controller Manager (CCM): Wenn ein Teil des Systems auf Cloud Ressourcen läuft, kommt diese Komponente zum Einsatz und übernimmt die Kommunikation und Koordination mit der Cloud.
  • Controller Manager (CM): Die wichtigste Komponente im Kubernetes Cluster überwacht das Cluster und sucht nach ausgefallenen Nodes, um dann die Container und Pods neu zu verteilen.
  • API: Diese Schnittstelle ermöglicht die Kommunikation zwischen den Nodes und dem Control Plane.

Die Nodes sind deutlich schlanker aufgebaut als das Control Plane und enthalten neben den Pods zwei wesentliche Komponenten zur Überwachung:

  • Kubelet: Es ist das Control Plane innerhalb eines Nodes und sorgt dafür, dass alle Pods einwandfrei laufen.
  • Kube-Proxy (k-proxy): Diese Komponente verteilt den eingehenden Node Traffic an die Pods, indem es das Netzwerk innerhalb des Nodes erstellt.

Was sind die Kubernetes Objekte?

Kubernetes-Objekte sind dauerhafte Einheiten im Kubernetes-System, die den Zustand des Clusters darstellen. Sie werden verwendet, um Komponenten einer Kubernetes-Anwendung zu definieren, zu erstellen, zu ändern und zu löschen, z. B. Pods, Dienste, Bereitstellungen und Konfigurationskarten.

Jedes Kubernetes-Objekt wird mithilfe einer YAML– oder JSON-Datei definiert, in der die Eigenschaften des Objekts, wie Name, Bezeichnungen und gewünschter Zustand, festgelegt sind. Kubernetes-Objekte haben einen eindeutigen Namen innerhalb eines Namensraums und können über die API manipuliert werden.

Die Objekte werden in verschiedene Kategorien unterteilt, darunter:

  • Pods: Ein Pod ist die kleinste Bereitstellungseinheit in Kubernetes und besteht aus einem oder mehreren Containern, die sich denselben Netzwerk-Namensraum und dasselbe Speichervolumen teilen.
  • Dienste: Ein Dienst ist eine Möglichkeit, eine Gruppe von Pods als Netzwerkdienst bereitzustellen, so dass sie innerhalb des Clusters miteinander kommunizieren können.
  • Deployment: Ein Deployment ist eine Möglichkeit, den Lebenszyklus einer Gruppe von Pods zu verwalten und ermöglicht rollierende Updates und Rollbacks.
  • ConfigMaps: Eine ConfigMap ist eine Möglichkeit, Konfigurationsdaten als Schlüssel-Wert-Paare zu speichern, so dass Pods auf sie als Umgebungsvariablen oder Dateien zugreifen können.
  • Secrets: Ein Geheimnis ist eine Möglichkeit, sensible Daten wie Passwörter und API-Schlüssel als Schlüssel-Wert-Paare zu speichern, die im Ruhezustand verschlüsselt sind.
  • Ingress: Ein Ingress ist eine Möglichkeit, HTTP- und HTTPS-Routen zu Diensten innerhalb des Clusters freizugeben, so dass externer Datenverkehr zu bestimmten Pods geleitet werden kann.

Diese Objekte bieten eine leistungsstarke Möglichkeit, die Komponenten einer verteilten Anwendung zu definieren und zu verwalten, so dass sich die Entwickler auf das Schreiben von Code und nicht auf die Verwaltung der Infrastruktur konzentrieren können.

Welche Vorteile bietet die Nutzung von k8s?

Das Prinzip der Computer Cluster war ein echter Durchbruch in der Informatik, da er es erlaubt intensive Rechenaufgaben zu bewältigen und diese durch die Skalierung auch verhältnismäßig kostengünstiger anzubieten als mit einer leistungsstarken Maschine. Bis zur Einführung von k8 war jedoch die Verwaltung solcher Cluster sehr aufwändig und eigentlich nicht zu bewältigen. Auch deshalb hat sich Kubernetes mittlerweile zu einem echten Industriestandard entwickelt.

Zu den weiteren Vorteilen zählen:

  • Automatische Skalierung: Je nach Bedarf können (Cloud-)Ressourcen hoch- oder runtergefahren werden. Das spart Kosten, indem vermieden wird, dass Infrastrukturen so aufgebaut werden, dass sie die Peaks bewältigen können und aber in der restlichen Zeit ungenutzt bleiben. Eine Ticketplattform beispielsweise kann so auf Anstürme reagieren, wenn bekannte Künstler Konzerttickets verkaufen. Da diese Releases jedoch die Ausnahme sind können sie anschließend ihre Infrastruktur wieder runterskalieren.
  • Ausgleich von Belastungen: Der Controller Manager ermöglicht es die Last von einzelnen Rechnern wegzunehmen und auf andere Maschinen zu verteilen. Dadurch werden Systemausfälle vorgebeugt und Komponenten entlastet.
  • Entwicklerfreundlichkeit: Für den Anwendungsentwickler bietet Kubernetes den Vorteil, dass es in bereits in viele Tools integrierbar ist und der Programmierende sich ganz auf die tatsächliche Aufgabe konzentrieren kann.
  • Vereinbarkeit von On-Premise und Cloud: Kubernetes wird auch dafür genutzt, um hybride Infrastrukturen aufzubauen, die teilweise in der Cloud laufen und teilweise auf lokalen Servern. Die Kommunikation und Zusammenarbeit zwischen diesen Komponenten kann durch Kubernetes einfach gestaltet werden.
  • Übersichtlichkeit: K8s bietet ein übersichtliches Dashboard für das gesamte Cluster an, welches einen ersten Überblick verschafft und die Problemstellen sehr schnell ersichtlich werden lässt.
Dashboard Ausschnitt | Foto: Kubernetes

Welche Anwendungen arbeiten mit Kubernetes?

Heutzutage kommt Kubernetes überall zum Einsatz, wo verteilte Systeme genutzt werden. Zusätzlich vereinfacht es die Arbeit in der Entwicklung wenn in verschiedenen Stufen bis zur Live-Schaltung gearbeitet wird. Zu den Anwendungsbereichen von Kubernetes zählen unter anderem:

  • Websites: Die Last auf Websites ist nicht immer gleich hoch. Zu Stoßzeiten befinden sich mehr User auf der Seite, als in den Abendstunden. Mithilfe von Kubernetes lassen sich die Lasten gezielt steuern.
  • Microservice Architektur: Viele Anwendungen arbeiten heutzutage mit einer sogenannten Microservice Architektur. Das bedeutet, dass komplexe Anwendungen, wie beispielsweise eine Website, in kleine, überschaubare Microservices aufgeteilt werden. Diese lassen sich dann einfacher verbessern oder aktualisieren, als wenn sie in einer einzigen, großen Anwendungen “gefangen” wären. In einer solchen Anordnung lassen sich die Microservices in einzelnen Container deployen, welche dann wiederum von Kubernetes orchestriert werden.
  • Software as a Service – Produkte: In diesem Bereich bietet ein Unternehmen eine bestimmte Software an, die von den Kunden genutzt wird. Dadurch dass die Kunden eine Bandbreite an Anwendungsszenarien abbildet, musst die Last auf dem Cluster entsprechend verteilt und ausgeglichen werden.

Das solltest Du mitnehmen

  • Ein Netzwerk aus verschiedenen Computern wird als Cluster bezeichnet. Ein Container wiederum kann autark eine gewisse Aufgabe erledigen, egal auf welchem System er das tut.
  • Kubernetes übernimmt für uns das Management von Containern innerhalb eines Computing Clusters.
  • Das k8s Cluster hat verschiedene Komponente die dafür sorgen, dass alle Pods laufen und das System weiterhin funktioniert.
Outlier Detection / Ausreißererkennung

Was ist Ausreißererkennung?

Entdecken Sie Anomalien in Daten mit Verfahren zur Ausreißererkennung. Verbessern Sie ihre Entscheidungsfindung!

Bivariate Analysis / Bivariate Analyse

Was ist die Bivariate Analyse?

Nutzen Sie die Bivariate Analyse: Erforschen Sie Typen und Streudiagramme und nutzen Sie Korrelation und Regression.

RESTful API

Was ist eine RESTful API?

Erfahren Sie alles über RESTful APIs und wie sie Ihre Webentwicklungsprojekte effizienter und skalierbarer machen können.

Time Series Data / Zeitreihendaten

Was sind Zeitreihendaten?

Gewinnen Sie mithilfe von Analyse- und Prognosetechniken Erkenntnisse aus Zeitreihendaten. Entdecken Sie Trends und Muster!

Balkendiagramm / Bar Chart

Was ist ein Balkendiagramm?

Entdecken Balkendiagramme bei der Datenvisualisierung. Lernen Sie, wie man sie für aufschlussreiche Datenanalyse erstellt und anpasst.

Liniendiagramm / Line Chart

Was ist ein Liniendiagramm?

Meistern Sie die Kunst der Liniendiagramme: Lernen Sie in unserem Leitfaden, wie Sie Trends und Muster visualisieren können.

Andere Beiträge zum Thema Kubernetes

  • Hier findest Du die Dokumentation von Kubernetes mit vielen interessanten Beiträgen.
  • Und hier das Verzeichnis von Docker und den entsprechenden Docker Containern.
Das Logo zeigt einen weißen Hintergrund den Namen "Data Basecamp" mit blauer Schrift. Im rechten unteren Eck wird eine Bergsilhouette in Blau gezeigt.

Verpass keine neuen Beiträge!

Wir versenden keinen Spam! Lies die Details gerne in unserer Datenschutzrichtlinie nach.

Niklas Lang

Seit 2020 bin ich als Machine Learning Engineer und Softwareentwickler tätig und beschäftige mich leidenschaftlich mit der Welt der Daten, Algorithmen und Softwareentwicklung. Neben meiner Arbeit in der Praxis unterrichte ich an mehreren deutschen Hochschulen, darunter die IU International University of Applied Sciences und die Duale Hochschule Baden-Württemberg, in den Bereichen Data Science, Mathematik und Business Analytics.

Mein Ziel ist es, komplexe Themen wie Statistik und maschinelles Lernen so aufzubereiten, dass sie nicht nur verständlich, sondern auch spannend und greifbar werden. Dabei kombiniere ich praktische Erfahrungen aus der Industrie mit fundierten theoretischen Grundlagen, um meine Studierenden bestmöglich auf die Herausforderungen der Datenwelt vorzubereiten.

Cookie Consent mit Real Cookie Banner