In diesem Blog möchte ich detailliert erläutern, wie wir Kured in Verbindung mit Argo CD und Slack installiert haben und auf weitere technische Details eingehen. Bereits im August habe ich erklärt, warum wir Kured nutzen und einen groben Überblick über dessen Funktionen gegeben. Wer den Beitrag noch nicht gelesen hat, kann das gern nachholen.

Ich hoffe, dass die Anwendungsbeispiele in diesem Blog euch dabei helfen, Kured einfach zu konfigurieren und neue Ideen für den Einsatz in eurer eigenen Umgebung zu entwickeln.

Marcelo Castro Beltrán, DevOps Engineer, intersoft AG

Bild KI generiert mit Shutterstock am ‎27. September ‎2024

Dieser Beitrag richtet sich sowohl an DevOps-Spezialisten als auch an technisch interessierte Leser, die sich mit Kubernetes und der Automatisierung von Prozessen beschäftigen. Daher möchte ich gern auf folgende Themen im Detail eingehen:

  1. Installation über Argo CD
  2. Schutz von Pods vor Node-Neustarts
  3. Benachrichtigungen über Node-Neustarts mit Slack
  4. Überwachung und Neustarts auch von ControlPlane/Etcd-Nodes

Diese Aspekte waren für uns entscheidend, um Kured effizient zu nutzen und die Verfügbarkeit unserer kritischen Anwendungen jederzeit sicherzustellen.

Was ist Kured noch mal?

Kured steht für Kubernetes Reboot Daemon und ist ein Tool, das speziell dafür entwickelt wurde, Nodes in einem Kubernetes-Cluster zu überwachen und sicherzustellen, dass sie bei Bedarf neu gestartet werden – und zwar so, dass der laufende Betrieb nicht beeinträchtigt wird.

Ausgangslage

Wir betreiben einen Kubernetes-Cluster mit insgesamt 14 Nodes: drei Control Plane/Etcd-Nodes und elf Worker-Nodes. Für die Verwaltung und Konfiguration der eingesetzten Systeme setzen wir auf das GitOps-System Argo CD. Dieses ermöglicht es uns, die komplette Clusterkonfiguration als Code zu speichern. Bei Änderungen an dieser Konfiguration werden die neuen Einstellungen automatisch und sofort auf die betroffenen Systeme ausgerollt. Das stellt sicher, dass unser Cluster immer den aktuellsten Stand der Konfiguration nutzt und Änderungen effizient umgesetzt werden können.

1. Installation über Argo CD

Die Installation von Kured haben wir gemäß unserem Standardvorgehen über Argo CD vorgenommen. Natürlich könnte man Kured auch mit anderen Tools wie Helm installieren und nutzen, aber in diesem Beitrag gehe ich nur auf die Installation mit Argo CD ein.

Um Kured über Argo CD zu installieren, haben wir eine sogenannte Application im Cluster definiert. Diese Application dient Argo CD dazu, die Anwendung im Cluster zu installieren und sicherzustellen, dass eventuelle Änderungen an der Konfiguration automatisch übernommen und aktualisiert werden.

Für die Installation kann folgende YAML-Datei verwendet werden. In diesem Beispiel wurde der Aktivitätszeitraum des Tools auf jede Nacht zwischen 0 Uhr und 4 Uhr gesetzt.

Copy to Clipboard

Nach der Installation dieser Applikation über Argo CD steht das System sofort zur Verfügung und führt bei Bedarf nächtliche Neustarts der Cluster-Nodes durch. Dabei überwacht Kured je nach Betriebssystem das Dateisystem und erkennt automatisch, wann ein Neustart erforderlich ist.

Herausfordernd wird es jedoch, wenn eine Node neu gestartet werden soll, während dort ein Pod läuft, der nicht beendet werden darf.

2. Schutz von Pods vor Node-Neustarts

Kured bietet die Möglichkeit, den Neustart einer Node zu verschieben, falls erkannt wird, dass kritische Pods darauf laufen, die nicht unterbrochen werden dürfen. In der Praxis gibt es häufig Pods, die nicht einfach unterbrochen werden dürfen. Gründe wie Datenintegrität, lang laufende Jobs oder kritische Geschäftsprozesse spielen dabei eine große Rolle.

Um diese Funktion zu nutzen, müssen die betroffenen Pods mit einem speziellen Label versehen werden. Kured verhindert daraufhin den Neustart der Node, bis diese Pods ordnungsgemäß beendet sind. Aus diesem Grund haben wir beschlossen, die entsprechenden Pods mit dem Label "kured-prevent-reboot=true" zu kennzeichnen. Die Konfiguration erfolgt mit dem Eintrag "blockingPodSelector"in der Helm-Konfiguration von Kured.

Copy to Clipboard

Ein solcher Pod, der nicht unterbrochen werden darf, könnte folgendermaßen im Kubernetes-Cluster konfiguriert sein:

Copy to Clipboard

Code-Beispiel generiert mit ChatGPT am 26.09.2024

3. Benachrichtigungen über Neustarts mit Slack

Die Neustarts erfolgen nun immer dann, wenn die Betriebssysteme einen Neustart benötigen, und dieser wird, sofern möglich, durchgeführt. Als Systemverantwortlicher möchte ich jedoch auch wissen, wann ein solcher Neustart durchgeführt wurde.

Kured bietet die Möglichkeit, über verschiedene Messaging-Systeme über die Neustarts zu informieren. Wir nutzen dafür einen eigenen Slack-Channel, in dem wir über die Neustarts informiert werden. Die Konfiguration ist ebenfalls sehr einfach und erfolgt durch Anpassung der Helm-Values, insbesondere des Wertes notifyUrl.

Copy to Clipboard

Entsprechend sieht dann die Ausgabe in Slack folgendermaßen aus:

Somit lässt sich klar nachvollziehen, wann die Nodes neugestartet und welche Aktionen jeweils auf den einzelnen Nodes durchgeführt wurden.

4. Überwachung und Neustarts auch von ControlPlane/Etc-Nodes

Das Überwachen und Neustarten von ControlPlane- und Etcd-Nodes funktioniert nicht direkt mit der Installation von Kured, da auf diesen Nodes normalerweise keine Pods installiert werden dürfen. Kured bietet jedoch einen cleveren Trick: Durch die Verwendung von sogenannten Tolerations können die Kured-Pods auf diesen Nodes ausgerollt werden, wodurch Kured in der Lage ist, auch diese Nodes zu verwalten.

Tolerations ermöglichen es Pods, auf Nodes zu laufen, die mit bestimmten Taints versehen sind, die normalerweise die Ausführung von Pods verhindern würden. Durch das Hinzufügen entsprechender Tolerations zu den Kured-Pods kann sichergestellt werden, dass sie auf den ControlPlane- und Etcd-Nodes bereitgestellt werden können.

Diese Tolerations können ebenfalls über die Helm-Values konfiguriert werden.

Copy to Clipboard
Einsatz mit Mehrwert

Durch den Einsatz von Kured in Kombination mit Argo CD und Slack haben wir einen echten Mehrwert für unser Unternehmen geschaffen. Die Zeiten manueller Wartungen sind vorbei. Dank der Konfiguration durch Configuration-as-Code über Argo CD können wir Änderungen am System jederzeit schnell und einfach durchführen. Kritische Pods werden vor Neustarts geschützt und über Slack erhalten wir zeitnahe Benachrichtigungen über Wartungen. Zudem werden die ControlPlane- und Etcd-Nodes automatisch gewartet, was zur Stabilität und Verfügbarkeit unserer Anwendungen beiträgt.

Wenn ihr mehr über unsere Erfahrungen mit Kured erfahren möchtet, scheut euch nicht, mich direkt anzusprechen.

Über den Autor:

Ich bin ein begeisterter DevOps-Engineer mit einer Leidenschaft für neue Technologien, insbesondere im Kubernetes-Umfeld. Seit 26 Jahren bin ich bei intersoft tätig und habe in vielen Bereichen zur Entwicklung unserer Kernkomponenten beigetragen. Ich bringe umfangreiche Erfahrung in der Softwareentwicklung, Prozessoptimierung und im Bereich Testmanagement ein und treibe gerne Prozesse und den Einsatz neuer Technologien voran.

In meinem Team DPE (Developer Productivity Engineering) arbeite ich kontinuierlich an der Verbesserung der Prozesse rund um die gesamte Entwicklung unserer Software im Hause und bei der WWK. Mein Ziel ist es, die Prozesse immer wieder zu prüfen und zu verbessern, um den Entwicklungsteams die besten Möglichkeiten zu bieten, optimal bis hin zur Produktionsreife zu entwickeln.

Ich wohne im Landkreis Stade, bin verheiratet und habe zwei Kinder. Meine Freizeit verbringe ich gerne am Meer, bin Handball-Trainer und liebe es, verschiedene Sportarten wie Tennis, Handball und gelegentlich auch Golf zu spielen.

Lasst uns gern auf Social Media in Austausch gehen.