Leigh Prather - stock.adobe.com
Selbstheilende Kubernetes-Cluster: das sollten Admins wissen
Die Selbstheilungsfunktion von Kubernetes trägt zur Zuverlässigkeit von Kubernetes-Clustern und den Anwendungen auf ihnen bei. Wir erklären, wie Sie die Funktion einrichten.
Verfügbarkeit und Nutzererfahrung sind wichtige Attribute moderner Unternehmens-Workloads. Wenn die Verfügbarkeit aufgrund von Software- oder Infrastrukturproblemen instabil ist, leiden Kunden und Unternehmen darunter.
Herkömmliche Verfahren zur Fehlerbehebung können jedoch mit den dynamischen und kurzlebigen Anwendungsumgebungen von heute nicht mithalten. Microservices und andere containerisierte Anwendungen sind oft komplex, skalierbar und hochgradig verteilt; einige Container sind nur wenige Sekunden aktiv – viel kürzer, als ein IT-Administrator braucht, um ein Trouble Ticket zu sehen.
Plattformen wie Kubernetes nutzen Containerorchestrierung und Automatisierungsfunktionen, um Selbstheilung für containerisierte Umgebungen zu implementieren und Containerausfälle bei Bedarf zu beheben.
Was ist selbstheilendes Kubernetes?
Die Grundidee der Selbstheilung ist folgende: Wenn ein Container ausfällt, setzt Kubernetes den betroffenen Container automatisch in den gewünschten Zustand zurück, um den Betrieb wiederherzustellen.
Selbstheilendes Kubernetes hat vier Fähigkeiten:
- Neustart ausgefallener Container;
- Ersetzen von Containern, die aktualisiert werden müssen, zum Beispiel durch eine neue Softwareversion;
- Deaktivieren von Containern, die nicht auf vordefinierte Gesundheitsprüfungen reagieren; und
- verhindern, dass Container für Benutzer oder andere Container sichtbar werden, bis sie bereit sind.
Im Idealfall sollte das Erkennen und Wiederherstellen von Containern nahtlos und sofort erfolgen, um die Unterbrechung der Anwendung zu minimieren und die negativen Auswirkungen auf die UX zu verringern. Sie können festlegen, wie Kubernetes Zustandsprüfungen durchführt und welche Maßnahmen ergriffen werden sollen, nachdem ein Problem erkannt wurde.
Wie funktioniert die Selbstheilung mit Kubernetes?
Kubernetes-Cluster bestehen aus Pods – logischen Einheiten, in denen Container bereitgestellt werden. Ein Pod hat fünf mögliche Zustände:
- Ausstehend. Der Pod wurde erstellt, wird aber nicht ausgeführt.
- Läuft. Der Pod und seine Container werden ohne Probleme ausgeführt.
- Erfolgreich. Der Pod schließt seinen Container-Lebenszyklus ordnungsgemäß ab, das heißt er läuft und stoppt normal.
- Fehlgeschlagen. Mindestens ein Container innerhalb des Pods ist ausgefallen, und der Pod wurde beendet.
- Unbekannt. Der Zustand des Pods kann nicht bestimmt werden.
Mit Kubectl-Befehlen ermitteln Sie die Pods und ihr Status für eine bestimmte Anwendung.
Kubernetes verwendet zwei Arten von Tests, um den Zustand der einzelnen Pods zu ermitteln:
- Eine Liveness-Probe ermittelt den Betriebsstatus jedes Containers. Wenn ein Container die Liveness-Probe nicht besteht, beendet Kubernetes ihn und erstellt einen neuen Container gemäß den zuvor festgelegten Richtlinien.
- Eine Readiness-Probe prüft, ob ein Container in der Lage ist, Anfragen zu bedienen oder Datenverkehr zu verarbeiten. Wenn ein Container die Readiness-Probe nicht besteht, entfernt Kubernetes seine IP-Adresse aus dem entsprechenden Pod. Damit ist er nicht mehr verfügbar, bis er beendet und neu gestartet wird.
Die Kombination aus Tests und Ergebnissen ermöglicht die Selbstheilung, da Kubernetes den deklarierte Zustand des Container-Clusters wiederherstellen kann.
Kubernetes überprüft regelmäßig den Status von Pods und ihren Containern. Wenn es dabei feststellt, dass ein Container ausgefallen ist oder nicht mehr reagiert, beendet es den Pod so schnell wie möglich und startet oder plant ihn neu – vorausgesetzt, es gibt genug Infrastrukturressourcen. Das Erkennen einer ausgefallenen Container-Anwendung oder -Komponente kann bis zu fünf Minuten dauern.
Vor- und Nachteile der Selbstheilung von Kubernetes
Schon seit den frühesten Stadien der IT träumen Ingenieure von selbstheilungsfähigen Systemen. Die Selbstheilung von Kubernetes verspricht ein zuverlässigeres Anwendungsmanagement für containerbasierte Anwendungen und Komponenten – allerdings sollten Sie dabei die Nachteile sorgfältig abwägen.
Mit selbstheilendem Kubernetes betreiben Sie im Idealfall Containerinfrastrukturen Tag und Nacht mit minimalem händischem Aufwand. Containerprobleme werden umgehend erkannt und anhand Ihrer Vorgaben behoben. Dies erhöht die Zuverlässigkeit und beschleunigt die Problemlösung in ephemeren Containerumgebungen, was wiederum die Geschäftsergebnisse verbessern kann.
Auch wenn die Selbstheilung eine Standardfunktion der Kubernetes-Plattform ist, müssen Sie sie überwachen. Die Selbstheilung hält eine Containerumgebung in einem gewünschten Zustand, aber das Management muss diesen gewünschten Zustand zunächst definieren, indem es zum Beispiel eine Pod-Vorlage erstellt und diese aktualisiert, wenn sich Konfigurationen und Anforderungen im Laufe der Zeit ändern.
Darüber hinaus arbeitet die Selbstheilung von Kubernetes auf der Anwendungsebene, was ihre Leistungsfähigkeit einschränkt. Folglich benötigen Sie zusätzliche Tools, um Probleme in der unteren Anwendungsschicht zu überwachen und zu beheben.
Bewährte Verfahren für die Selbstheilung von Kubernetes
Da die Selbstheilung eine unkomplizierte, in den normalen Betrieb von Kubernetes integrierte Funktion ist, gibt es nur wenige direkte Best Practices für ihre Optimierung.
Die Selbstheilung erkennt Abweichungen von einem deklarierten Sollzustand und stellt diesen wieder her. Sie sollten daher Richtlinien und Prozesse implementieren, um diesen Zustand zu dokumentieren. Dazu gehört der Einsatz von Versionskontrolle in verschiedenen Kontexten:
- Entwickeln und Freigeben von Containern;
- Pod-Vorlagen und andere Konfigurationsdateien; und
- Anwendungs- und Infrastrukturdokumentation.
Definieren Sie klar den Konfigurationsstatus, den das Unternehmen von Kubernetes erwartet, und behandeln Sie diesen Konfigurationsstatus als eine versionsbasierte Instanz. Jede Änderung des Konfigurationszustands sollte eine Versionsaktualisierung auslösen.
Eine sorgfältige Versionskontrolle gewährleistet nicht nur das Einhalten aktueller Konfigurationen, sondern ermöglicht bei Bedarf auch präzise Rollbacks oder die Wiederherstellung früherer Konfigurationszustände – beispielsweise im Falle eines unvorhergesehenen Fehlers in einer aktualisierten Container-Anwendung.
Grenzen der Selbstheilung von Kubernetes
Kubernetes bietet zwar wertvolle Selbstheilungsfunktionen für containerbasierte Anwendungen, hat aber auch seine Grenzen.
Eine typische Containerumgebung besteht aus drei Hauptebenen:
- Die Anwendungsschicht beherbergt die Containerentität zusammen mit ihrem Code und ihren Abhängigkeiten.
- Die Kubernetes-Komponentenschicht ist das Betriebssystem für Container. Diese Schicht umfasst die Kubelet-, Kube-Proxy- und Containerlaufzeitkomponenten, die Kubernetes zum Laufen bringen.
- Auf der Infrastrukturebene befinden sich Server, Festplatten mit Container-Image-Dateien und Netzwerkverbindungen.
Die Selbstheilung erfolgt auf der obersten Anwendungsschicht, auf der Kubernetes die Container bereitstellt und verwaltet. Wenn ein Pod abstürzt, plant Kubernetes ihn neu.
Leider gibt es in Kubernetes jedoch keine Vorkehrungen oder Mechanismen, die eine Selbstheilung der Infrastruktur ermöglichen. Ein Problem mit Kubernetes selbst oder mit der Infrastruktur, zum Beispiel eine defekte Festplatte oder ein ausgefallener Netzwerk-Switch, könnte daher eine containerisierte Anwendung so stark beeinträchtigen, dass Kubernetes sie nicht mehr reparieren kann.
Unternehmen, die selbstheilende Kubernetes implementieren, sollten auch eine Form der Überwachung der Anwendungsleistung integrieren, um Kubernetes zu überwachen, sowie eine umfassende Infrastrukturüberwachung, um IT-Administratoren auf Probleme in den Komponenten- und Infrastrukturebenen hinzuweisen.