Kapitel 1. Einführung
Diese Arbeit wurde mithilfe von KI übersetzt. Wir freuen uns über dein Feedback und deine Kommentare: translation-feedback@oreilly.com
Kubernetes ist ein Open-Source-Orchestrator für die Bereitstellung von containerisierten Anwendungen. Das System wurde von Google als Open Source zur Verfügung gestellt, inspiriert durch ein Jahrzehnt Erfahrung in der Bereitstellung von skalierbaren, zuverlässigen Systemen in Containern über anwendungsorientierte APIs,1 und wurde in den letzten vier Jahren von einer lebhaften Gemeinschaft von Open-Source-Mitwirkenden entwickelt.
Es wird von einer großen und wachsenden Zahl von Entwicklern genutzt, um zuverlässige verteilte Systeme bereitzustellen und maschinelles Lernen, Big Data und andere Batch-Workloads auszuführen. Ein Kubernetes-Cluster bietet eine Orchestrierungs-API, mit der Anwendungen mit einer einfachen deklarativen Syntax definiert und bereitgestellt werden können. Darüber hinaus bietet der Kubernetes-Cluster selbst zahlreiche selbstheilende Online-Kontrollalgorithmen, die Anwendungen im Falle von Ausfällen reparieren. Schließlich stellt die Kubernetes-API Konzepte wie Deployments zur Verfügung, mit denen du deine Software ohne Ausfallzeiten aktualisieren kannst, und Service-Loadbalancer, mit denen du den Datenverkehr auf mehrere Replikate deines Dienstes verteilen kannst. Außerdem bietet Kubernetes Tools für die Benennung und Erkennung von Diensten, mit denen du lose gekoppelte Microservice-Architekturen aufbauen kannst. Kubernetes wird häufig in öffentlichen und privaten Clouds sowie in physischen Infrastrukturen eingesetzt.
Dieses Buch ist dem Thema der Verwaltung eines Kubernetes-Clusters gewidmet. Vielleicht verwaltest du deinen eigenen Cluster auf deiner eigenen Hardware, bist Teil eines Teams, das einen Cluster für eine größere Organisation verwaltet, oder du bist ein Kubernetes-Benutzer, der über die APIs hinausgehen und mehr über die Interna des Systems erfahren möchte. Egal, wo du dich gerade befindest, wenn du dein Wissen über die Verwaltung des Systems vertiefst, kannst du alle Aufgaben, die du mit Kubernetes erledigen musst, besser bewältigen.
Hinweis
Wenn wir von einem Cluster sprechen, meinen wir eine Sammlung von Maschinen, die zusammenarbeiten, um die gesamte Rechenleistung bereitzustellen, die Kubernetes seinen Endnutzern zur Verfügung stellt. Ein Kubernetes-Cluster ist eine Ansammlung von Maschinen, die alle von einer einzigen API gesteuert werden und von den Nutzern dieser API verwendet werden können.
Es gibt eine Vielzahl von Themen, die die notwendigen Fähigkeiten für die Verwaltung eines Kubernetes-Clusters ausmachen:
-
Wie der Cluster funktioniert
-
Wie man den Cluster einstellt, sichert und abstimmt
-
Wie du dein Cluster verstehst und reagierst, wenn etwas schief läuft
-
Wie du deinen Cluster mit neuen und benutzerdefinierten Funktionen erweiterst
Wie der Cluster funktioniert
Wenn du ein System verwalten willst, musst du verstehen, wie dieses System funktioniert. Aus welchen Bestandteilen besteht es und wie passen sie zusammen? Ohne zumindest ein grobes Verständnis der Komponenten und ihres Zusammenspiels wirst du kaum ein System erfolgreich managen können. Eine Software zu verwalten, vor allem eine so komplexe wie Kubernetes, ohne dieses Verständnis ist wie der Versuch, ein Auto zu reparieren, ohne zu wissen, wie das Auspuffrohr mit dem Motor zusammenhängt. Das ist eine schlechte Idee.
Es ist jedoch nicht nur wichtig zu verstehen, wie alle Teile zusammenpassen, sondern auch, wie der Nutzer den Kubernetes-Cluster nutzt. Nur wenn du weißt, wie ein Tool wie Kubernetes genutzt werden sollte, kannst du die Bedürfnisse und Anforderungen, die für eine erfolgreiche Verwaltung erforderlich sind, wirklich verstehen. Um noch einmal auf unser Beispiel mit dem Auto zurückzukommen: Wenn du nicht verstehst, wie der Fahrer im Fahrzeug sitzt und es auf die Straße lenkt, kannst du das Fahrzeug nicht erfolgreich managen. Das Gleiche gilt für einen Kubernetes-Cluster.
Schließlich ist es wichtig, dass du die Rolle verstehst, die der Kubernetes-Cluster im Alltag eines Nutzers spielt. Was leistet der Cluster für den Endnutzer? Welche Anwendungen setzen sie darauf ein? Welche Komplexität und Erschwernisse beseitigt der Cluster? Welche Komplexität fügt die Kubernetes-API hinzu? Um die Analogie mit dem Auto zu vervollständigen: Um zu verstehen, wie wichtig ein Auto für den Endnutzer ist, muss man wissen, dass es dafür sorgt, dass jemand pünktlich zur Arbeit erscheint. Ähnlich verhält es sich mit Kubernetes: Wenn du nicht verstehst, dass der Cluster der Ort ist, an dem die geschäftskritische Anwendung eines Nutzers läuft, und dass die Kubernetes-API das ist, worauf sich ein Entwickler verlässt, um ein Problem zu beheben, wenn nachts um 3 Uhr etwas schief läuft, wirst du nicht wirklich verstehen, was nötig ist, um diesen Cluster erfolgreich zu verwalten.
Einstellen, Sichern und Abstimmen des Clusters
Du musst nicht nur wissen, wie die Teile des Clusters zusammenpassen und wie die Kubernetes-API von den Entwicklern zum Erstellen und Bereitstellen von Anwendungen genutzt wird, sondern auch die verschiedenen APIs und Konfigurationsoptionen verstehen, um deinen Cluster anzupassen, zu sichern und zu optimieren. Ein Kubernetes-Cluster - oder eigentlich jede andere wichtige Software - ist nichts, was man einfach aufstellt, in Betrieb nimmt und wieder verlässt.
Der Cluster und seine Nutzung haben einen Lebenszyklus. Entwickler treten Teams bei und verlassen sie. Neue Teams werden gebildet und alte Teams sterben. Der Cluster wächst mit dem Wachstum des Unternehmens. Neue Kubernetes-Versionen werden veröffentlicht, um Fehler zu beheben, neue Funktionen hinzuzufügen und die Stabilität zu verbessern. Die steigende Nachfrage nach dem Cluster deckt Leistungsprobleme auf, die zuvor ignoriert wurden. Um auf all diese Veränderungen während der Lebensdauer deines Clusters reagieren zu können, musst du wissen, wie Kubernetes über Befehlszeilenflags, Bereitstellungsoptionen und API-Konfigurationen konfiguriert werden kann.
Außerdem ist dein Cluster nicht nur ein Ziel für die Anwendungsbereitstellung, sondern kann auch ein Angriffsvektor für die Sicherheit deiner Anwendungen sein. Er kann auch ein Angriffsziel für die Sicherheit deiner Anwendungen sein. Die Konfiguration deines Clusters zum Schutz vor vielen verschiedenen Angriffen - von der Kompromittierung von Anwendungen bis hin zur Verweigerung von Diensten - ist eine wichtige Komponente für die erfolgreiche Verwaltung eines Clusters. In den meisten Fällen geht es bei dieser Härtung nur darum, Fehler zu vermeiden. In vielen Fällen besteht der Wert von Härtung und Sicherheit darin, dass sie verhindern, dass ein Team oder ein/e Benutzer/in versehentlich den Dienst eines anderen Teams "angreift". Aktive Angriffe kommen jedoch manchmal vor, und die Konfiguration des Clusters ist entscheidend, um Angriffe zu erkennen, wenn sie auftreten, und um sie von vornherein zu verhindern.
Je nach Verwendung des Clusters musst du eventuell die Einhaltung verschiedener Sicherheitsstandards nachweisen, die für Anwendungsentwickler in vielen Branchen wie dem Gesundheitswesen, dem Finanzwesen oder der Regierung vorgeschrieben sind. Wenn du weißt, wie du einen konformen Cluster aufbaust, kannst du Kubernetes in diesen Umgebungen einsetzen.
Reagieren, wenn etwas schief läuft
Wenn nie etwas schiefgehen würde, wäre es eine tolle Welt. Leider ist das natürlich nicht so, vor allem nicht bei allen Computersystemen, an deren Verwaltung ich je mitgearbeitet habe. Wenn etwas schief geht, ist es wichtig, dass du schnell davon erfährst, dass du es durch Automatisierung und Warnungen herausfindest (und nicht durch einen Benutzer) und dass du in der Lage bist, zu reagieren und das System so schnell wie möglich wiederherzustellen.
Der erste Schritt, um zu erkennen, wenn etwas kaputt geht, und um zu verstehen, warum es kaputt geht, ist, die richtigen Metriken zu haben. Zum Glück gibt es zwei Technologien im Kubernetes-Cluster, die diese Aufgabe erleichtern. Die erste ist, dass Kubernetes in der Regel in Containern bereitgestellt wird. Neben der zuverlässigen Verpackung und Bereitstellung bildet der Container selbst eine Grenze, an der grundlegende Metriken wie CPU-, Speicher-, Netzwerk- und Festplattennutzung beobachtet werden können. Diese Metriken können dann in einem Überwachungssystem aufgezeichnet werden, das sowohl Warnungen ausgibt als auch Einblicke gewährt.
Zusätzlich zu diesen containergenerierten Metriken wurde die Kubernetes-Codebasis selbst mit einer großen Anzahl von Anwendungsmetriken instrumentiert. Dazu gehören z. B. die Anzahl der von verschiedenen Komponenten gesendeten oder empfangenen Anfragen sowie die Latenzzeit dieser Anfragen. Diese Metriken werden in einem Format ausgedrückt, das vomOpen-Source-Projekt Prometheus entwickelt wurde. Sie lassen sich leicht sammeln und in Prometheus einspeisen, das direkt oder mit anderen Tools wie Grafana zur Visualisierung und Einsicht verwendet werden kann.
Die Basismetriken der Betriebssystemcontainer und die Anwendungsmetriken von Kubernetes selbst liefern zusammen eine Fülle von Daten, die zur Generierung von Alarmen genutzt werden können, die dir mitteilen, wenn das System nicht richtig funktioniert, sowie die historischen Daten, die zur Fehlersuche und zur Ermittlung des Fehlers erforderlich sind.
Natürlich ist das Verstehen des Problems nur die erste Hälfte der Schlacht. Der nächste Schritt besteht darin, auf die Probleme mit dem System zu reagieren und sie zu beheben. Glücklicherweise wurde Kubernetes auf eine entkoppelte, modulare Art und Weise mit einem minimalen Status im System aufgebaut. Das bedeutet, dass es im Allgemeinen zu jedem Zeitpunkt sicher ist, jede Komponente des Systems, die überlastet ist oder sich falsch verhält, neu zu starten. Diese Modularität und Idempotenz bedeutet, dass die Entwicklung einer Lösung oft so einfach ist wie der Neustart einiger Anwendungen, sobald man das Problem erkannt hat.
Natürlich kann es vorkommen, dass etwas wirklich Schreckliches passiert und deine einzige Möglichkeit darin besteht, den Cluster von einem Disaster Recovery Backup wiederherzustellen. Das setzt voraus, dass du solche Backups überhaupt erst einmal aktiviert hast. Zusätzlich zur Überwachung, die dir zeigt, was passiert, zu den Warnungen, die dich informieren, wenn etwas kaputt geht, und zu den Playbooks, die dir sagen, wie du es reparieren kannst, musst du für die erfolgreiche Verwaltung eines Clusters auch ein Verfahren für die Notfallreaktion und -wiederherstellung entwickeln und anwenden. Es ist wichtig, sich daran zu erinnern, dass es nicht ausreicht, diesen Plan zu entwickeln. Du musst ihn regelmäßig üben, sonst bist du bei einem echten Problem nicht bereit (und der Plan selbst könnte fehlerhaft sein).
Erweiterung des Systems um neue und benutzerdefinierte Funktionen
Eine der wichtigsten Stärken des Open-Source-Projekts Kubernetes ist die explosionsartige Zunahme von Bibliotheken, Tools und Plattformen, die auf einem Kubernetes-Cluster aufbauen, ihn erweitern oder auf andere Weise seine Nutzung verbessern.
Es gibt Tools wie Spinnaker oder Jenkins für die kontinuierliche Bereitstellung und Tools wie Helm, mit denen sich komplette Anwendungen einfach verpacken und bereitstellen lassen. Plattformen wie Deis bieten Entwickler-Workflows im Git-Push-Stil, und zahlreiche "Functions as a Service"-Plattformen (FaaS) bauen auf Kubernetes auf und ermöglichen es Nutzern, es über einfache Funktionen zu nutzen. Es gibt sogar Tools, mit denen sich die Erstellung und Rotation von Zertifikaten automatisieren lässt, sowie Service-Mesh-Technologien, mit denen sich eine Vielzahl von Microservices einfach verknüpfen und einsehen lassen.
Alle diese Tools im Ökosystem können verwendet werden, um den Kubernetes-Cluster, den du verwaltest, zu erweitern und zu verbessern. Sie können neue Funktionen bereitstellen, die deinen Nutzern das Leben erleichtern und die Software, die sie einsetzen, robuster und besser verwaltbar machen.
Allerdings können diese Tools deinen Cluster auch instabiler, unsicherer und fehleranfälliger machen. Sie können deine Nutzer/innen einer unausgereiften, schlecht unterstützten Software aussetzen, die sich wie ein "offizieller" Teil des Clusters anfühlt, aber in Wirklichkeit dazu dient, den Nutzer/innen das Leben schwer zu machen.
Ein Teil der Verwaltung eines Kubernetes-Clusters besteht darin, zu wissen, wie und wann man diese Tools, Plattformen und Projekte in den Cluster einfügt. Dazu muss man nicht nur wissen, was ein bestimmtes Projekt erreichen will, sondern auch, welche anderen Lösungen es im Ökosystem gibt. Oft kommen Nutzer/innen mit der Bitte um ein bestimmtes Tool zu dir, weil sie auf ein Video oder einen Blog gestoßen sind. In Wirklichkeit fragen sie oft nach einer Funktion wie Continuous Integration and Continuous Delivery (CI/CD) oder Certificate Rotation.
Deine Aufgabe als Clustermanager/in ist es, als Kurator/in für solche Projekte zu fungieren. Du bist auch ein Redakteur und ein Berater, der alternative Lösungen empfehlen kann oder feststellt, ob ein bestimmtes Projekt gut zu deinem Cluster passt oder ob es einen besseren Weg gibt, dasselbe Ziel für den Endnutzer zu erreichen.
Außerdem enthält die Kubernetes-API selbst zahlreiche Tools zur Erweiterung und Verbesserung der API. Ein Kubernetes-Cluster ist nicht nur auf die APIs beschränkt, die in ihm eingebaut sind. Stattdessen können neue APIs dynamisch hinzugefügt und entfernt werden. Neben den bereits vorhandenen Erweiterungen, die gerade erwähnt wurden, geht es bei der Verwaltung eines Kubernetes-Clusters manchmal auch darum, neuen Code und neue Erweiterungen zu entwickeln, die deinen Cluster auf eine Weise verbessern, die vorher nicht möglich war. Ein Teil der Verwaltung eines Clusters kann durchaus auch die Entwicklung neuer Werkzeuge sein. Wenn du diese Tools mit dem wachsenden Kubernetes-Ökosystem teilst, ist das natürlich eine großartige Möglichkeit, der Community etwas zurückzugeben, die dir die Kubernetes-Software überhaupt erst beschert hat.
Zusammenfassung
Die Verwaltung eines Kubernetes-Clusters ist mehr als nur die Installation einer Software auf einer Reihe von Maschinen. Ein erfolgreiches Management erfordert ein solides Verständnis dafür, wie Kubernetes aufgebaut ist und wie es von den Entwicklern, die Kubernetes-Nutzer sind, genutzt wird. Du musst wissen, wie du den Cluster im Laufe der Zeit warten, anpassen und verbessern kannst, wenn sich die Nutzungsmuster ändern. Außerdem musst du wissen, wie du die Informationen, die der Cluster im Betrieb ausgibt, überwachen kannst und wie du Warnmeldungen und Dashboards entwickelst, die dir sagen, wann der Cluster krank ist und wie du ihn wieder gesund machen kannst. Schließlich musst du wissen, wann und wie du den Kubernetes-Cluster mit anderen Tools erweitern kannst, um ihn für deine Nutzer/innen noch nützlicher zu machen. Wir hoffen, dass du in diesem Buch Antworten auf all diese Themen findest und dass du am Ende des Buches über die nötigen Fähigkeiten verfügst, um Kubernetes erfolgreich zu verwalten.
1 Brendan Burns et al., Borg, Omega, and Kubernetes: Lessons Learned from Three Container-Management Systems over a Decade", ACM Queue 14 (2016): 70-93.
Get Kubernetes verwalten now with the O’Reilly learning platform.
O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.