b'nerd GmbH b'nerd GmbH
de | en

Kubernetes Kubernetes für Einsteiger

In diesem Artikel geben wir Dir einen kurzen und verständlichen Einblick in Funktionsweise von Kubernetes.

Kubernetes hat die IT-Welt nahezu im Sturm erobert. Es gibt viele Gründe, warum IT Unternehmen und Entwicklungsteams ihre Applikationen und Infrastrukturen auf Container-Technologien und Kubernetes umstellen. Mit Containern und Kubernetes vereinfachen und beschleunigen viele Unternehmen bereits nach kurzer Zeit Ihre gesamte IT. Gleichzeitig erhöhen sie die Stabilität und Verfügbarkeit von Workloads und Applikationen.

Was ist Kubernetes

Kubernetes ist eine Open-Source-Plattform für die automatisierte Bereitstellung von Container-Anwendungen. Ursprünglich von Google für den Betrieb der eigenen Systeme entwickelt, wird das Projekt seit 2014 als Teil der Cloud Native Computing Foundation (CNCF) verwaltet. Das markante weiße Steuerrad vor blauem Hintergrund im Logo und der dem griechischen entnommene Name (~ für Steuermann/Helmsman) sind nicht ohne Grund gewählt worden. Kubernetes soll uns dabei helfen, unsere Anwendungen sicher durch die Gewässer von Cloud-Computing und Containerisierung zu steuern.

Container kommen schon seit über 10 Jahren bei der Bereitstellung von Anwendungen und in der Softwareentwicklung zum Einsatz. Die Verwaltung dieser leichtgewichtigen, eigenständigen und vor allem standardisierten Softwarepakete wird ab einer gewissen Größenordnung aber anspruchsvoll und hier kommt Kubernetes ins Spiel.

Der Zweck von Kubernetes ist es, Anwendungen flexibel, skalierbar und hochverfügbar bereitzustellen. Dafür werden die Anwendungs-Workloads über ein Kubernetes-Cluster verteilt und die Kommunikation zwischen den einzelnen Services automatisiert. Um das zu ermöglichen, braucht es eine Vielzahl von Konzepten und Prozessen, die wir im Folgenden kurz und einfach erklären möchten.

Was sind Container

Bei Containern handelt es sich um eine Virtualisierungstechnologie, die nicht die Hardware vom Betriebssystem abstrahiert, sondern einen oder mehrere Prozesse in einer leichtgewichtigen und standardisierten Umgebung isoliert. Auf diese Weise können mehrere Anwendungen parallel zueinander auf demselben Kernel und derselben Hardware ausgeführt und schnell bereitgestellt werden, wobei die Isolierung zwischen den einzelnen Workloads erhalten bleibt. Container sind in diesem Sinne leichtgewichtiger als virtuelle Maschinen.

Die Kubernetes Architektur

Master- und Worker-Nodes

Ein Kubernetes Cluster besteht aus mehreren einzelnen Servern, genannt Nodes. Diese Nodes können sowohl physische als auch virtuelle Maschinen sein. Kubernetes hostet Container nicht direkt auf den Nodes, sondern nutzt dafür das Objekt Pod. Ferner unterscheidet man in Worker-Nodes und Master-Nodes. Ein Cluster besteht aus einem Master-Node und mehreren Worker-Nodes. Die Worker-Nodes verrichten den Großteil der Workloads. Der Master Node überwacht und steuert die Vorgänge im Cluster. Dazu gehört das Scheduling und die Verteilung von Workloads auf die einzelne Nodes, sowie die Reaktion auf Events innerhalb des Clusters. Zum Beispiel der Neustart von fehlerhaften Pods. Um diese Aufgaben zu verrichten, bedient sich der Master-Node einer Reihe von Komponenten, die man unter dem Namen Controlplane zusammenfasst und auf die wir im Folgenden etwas genauer eingehen.

Kubernetes Architecture
https://kubernetes.io/docs/concepts/overview/components/

Control Plane

Die Control Plane ist Kraftwerk und Steuerhaus zugleich. Hier wird dafür gesorgt, dass sich alle Komponenten des Clusters im gewünschten Zustand befinden. Deployments werden von der Control Plane konfiguriert, verwaltet und umgesetzt. Es werden Daten über interne Cluster-Ereignisse, externe Systeme und Anwendungen von Drittanbietern verarbeitet und darauf basierend Entscheidungen getroffen und Maßnahmen ausgeführt.

etcd

etcd ist ein integraler Bestandteil von Kubernetes. Der ("reliable and distributed") Key-Value-Store ist für Service Discovery, die Koordination verteilter Systeme und ganz allgemein die dauerhafte Speicherung aller Cluster-Daten, wie Cluster-Zustand und Cluster-Konfiguration verantwortlich. Weil es sich bei allen diesen Informationen um hochsensible Daten handelt, ist der Zugriff auf etcd nur über den kube-apiserver möglich. Die Funktionen von etcd machen es überhaupt erst möglich, Anwendungen ausfallsicher und konsistent bereitzustellen.

kube-apiserver

Der API-Server ist das Tor zum Kubernetes-Cluster, da er die Endpunkte der Kubernetes API via REST exponiert. Eine zentrale Schnittstelle, auf die alle Benutzer und Komponenten zugreifen und über die, die Control Plane mit den Worker-Nodes und anderen externen Systemen interagiert. Der API-Server ist stateless und lässt beliebig replizieren, um höheren Anfragelasten zu begegnen. In einem hochverfügbaren Cluster sind drei API-Server Instanzen üblich.

controller-manager

Alle Ressourcen in Kubernetes werden über YAML Manifeste definiert. In diesen Manifesten wird der gewünschte Zustand eines Clusters und seiner Objekte deklariert. Als Teil der Control Plane ist der kube-controller-manager wiederum für weitere Controller-Manager verantwortlich, die laufend den Zustand des Kubernetes-Clusters überwachen, indem sie Anfragen gegen die API stellen. Diese kontinuierlichen Abfragen (control loops) erfolgen in festgelegten Zeiträumen. Weicht der Ist-Zustand des Clusters vom Soll-Zustand ab, ergreift der zuständige Controller unter Berücksichtigung der vorhandenen Ressourcen, Nodes und definierten Verhaltens-Richtlinien, entsprechende Maßnahmen.

Die wichtigsten Ressourcen im Überblick

Pod

Ein Pod besteht zumindest aus einem, meist aber einer Gruppe von Containern und ist zugleich die kleinste, bereitstellbare Einheit in Kubernetes. Innerhalb des Pod können die Container über localhost miteinander kommunizieren. Die Container teilen sich die Ressourcen des Pods (Volumes, Ip-Adresse, Ports).

Ingress

Ingress-Objekte ermöglichen den Zugriff auf Kubernetes-Dienste von außerhalb des Clusters. Dafür werden eine Reihe von Routing-Regeln erstellt, die festlegen, über welche eingehenden Verbindungen welche Dienste erreichbar sind. In der Regel werden dafür https- und http-Protokolle verwendet. Die Ingress-Ressource setzt sich aus der Ingress API und dem Ingress Controller zusammen.

Service

Jedem Pod wird beim Start eine eigene IP-Adresse zugewiesen. Allerdings sind Pods in Kubernetes vergänglich ("ephemeral") und bei jedem Neustart werden neue IP-Adressen vergeben. Die internen IP-Adressen für die Kommunikation im Cluster zu nutzen, ist somit nicht praktikabel. Diesem Problem begegnet Kubernetes mit der Service Komponente, die jeden Pod innerhalb des Clusters für die anderen Ressourcen erreichbar macht. Die Service-Komponente übernimmt außerdem die Lastenverteilung eingehender Anfragen.

Deployment

Das Deployment beschreibt mittels einer deklarativen Anweisung – meist als YAML-Datei – den gewünschten Zustand des Systems. Nutzer geben nicht vor, wie ein Update ausgeführt wird, sondern deklarieren einen Endpoint, woraufhin der Kubernetes-Controller den Ist-Zustand dem Soll-Zustand anpasst. Über Deployments wird der Lifecycle von Pod-Instanzen und Clustern automatisiert. Sie ermöglichen eine schnellere Bereitstellung und helfen dabei, Fehler zu vermeiden.

ReplicaSet

Replicasets gehören zur Gruppe der Kubernetes-Controller und sorgen dafür, dass Pods in definierter Anzahl, zu jedem Zeitpunkt im Cluster ausgeführt werden. Wird ein Pod entfernt oder er fällt aus, startet das Replicaset automatisch neue Instanzen, bis der gewünschte Cluster-Zustand erreicht ist.

DaemonSet

Ein DaemonSet sorgen dafür, dass eine oder mehrere Instanzen eines Pods auf jedem Node des Clusters ausgeführt werden. Wird dem Cluster ein neuer Node hinzugefügt, startet das DaemonSet die gewünschten Instanzen. Das macht Daemonsets besonders hilfreich für Wartungs-Aufgaben oder z. B. das Sammeln von Cluster-Metriken.

StatefulSet

Zustandsabhängige Anwendungen (stateful apps) arbeiten mit veränderlichen Daten bzw. nichtflüchtigem Speicher. Für die Arbeit mit zustandsabhängigen Anwendungen in Kubernetes sind Statefulsets zuständig. Ein StatefulSet behält für jeden Pod, den es verwaltet, eine eindeutige und dauerhafte Identität und verwendet dieselbe Identität, wenn Pods neu gestartet werden.

Job & Cronjob

Anders, als Controller-Objekte, wie ReplicaSet und DaemonSet, sind Jobs dafür zuständig einen Pod mit einer bestimmten Aufgabe zu starten und dann zu terminieren, wenn die Aufgabe erledigt ist. Cronjobs führen diese Aufgaben zu festgelegten Zeitpunkten oder regelmäßig auf unbestimmte Zeit aus.

Vor- und Nachteile von Kubernetes

Kubernetes ist eine leistungsstarke Open Source-Plattform für die Verwaltung von Container-Anwendungen. Sie bietet eine Vielzahl von Vorteilen gegenüber herkömmlichen Verwaltungsmethoden, wie zum Beispiel Docker Swarm und ist seit Jahren auf dem Vormarsch. Kubernetes macht die horizontale und vertikale Skalierung von Anwendungen und Workloads einfacher und kann die Produktivität von Entwickler- und Operations-Teams verbessern. Anwendungen können schneller, stabiler und vor allem dezentral bereitgestellt werden. Kubernetes unterstützt eine Vielzahl von Container-Laufzeitumgebungen, die wiederum auf fast allen Infrastrukturen betrieben werden können. Das macht Kubernetes so interessant für Unternehmen mit komplexen und variablen Infrastrukturen und zu einem interessanten Tool für den Betrieb von Multicloud-Umgebungen.

Ein wesentlicher Vorteil von Kubernetes ist die allgemeingültige API – ganz gleich bei welchem Cloud-Provider oder in welcher Infrastruktur die Cluster betrieben werden. Das heißt, ein Cluster bei einem Anbieter sollte – zumindest in der Basis-Funktionalität – genauso bei einem anderen Anbietern funktionieren. In diesem Zusammenhang wird Kubernetes teils auch als die lingua franca der IT-Infrastruktur bezeichnet (Vermeidung von Vendor Lock-Ins).

Die vielen Optionen und möglichen Konfigurationen machen den Betrieb von Kubernetes aber auch zu einer Herausforderung. So erfordert die Integration von Storage, Load Balancing und Infrastruktur besonderes bei größeren und verteilten Projekten einiges an Know-how.

Für kleinere Anwendungen ist Kubernetes nur mit Vorbehalt die beste Lösung. Aber für schnell-wachsende, mittelgroße und große Anwendungen kommen die Vorteiler fast immer zur Geltung. In jedem Fall ist es ratsam, die Einführung von Kubernetes-Infrastrukturen frühzeitig und mit allen beteiligten Teams zu planen, um teure Fehler zu vermeiden.

Sie haben Fragen oder wünschen ein individuelles Angebot? Wir beraten Sie gerne.

Kontakt

Unsere Cloud Experten beraten Sie gerne und individuell.

Unser Büro

Sartoriusstraße 22

20257 Hamburg, Deutschland


Mo - Fr: 09.00 - 18.00 Uhr

Telefon
+49 40 239 69 754 0
Email
hello@bnerd.com