Viele Unternehmen kämpfen mit der Herausforderung, ihre IT-Infrastruktur effizient zu warten, ohne den täglichen Betrieb zu stören. In diesem Blog erfahrt ihr, wie wir es geschafft haben, unsere Kubernetes-Server voll automatisiert während der Nachtstunden zu aktualisieren und damit die Betriebseffizienz zu maximieren. Egal ob ihr IT-Manager, DevOps-Spezialisten oder technikbegeisterte Leser seid, diese Tipps werden euch helfen, eure IT-Wartungsprozesse zu revolutionieren. Lernt, wie ihr durch automatisierte Prozesse nicht nur Zeit und Geld sparen, sondern auch die Zufriedenheit eurer Teams steigern könnt. Wir werden zuerst die Herausforderungen der bisherigen Wartung beleuchten, gefolgt von unserer Analyse und den Vorteilen der Automatisierung mit Kured. Abschließend teilen wir unsere besten Praktiken für eine störungsfreie Wartung.
Als DevOps-Engineer ist einer meiner Grundsätze: „Es ist viel zu schade, die Zeit für Dinge zu verschwenden, die man auch automatisiert durchführen kann…“
Herausforderungen der bisherigen Wartung
Wir betreiben einen Kubernetes-Cluster (Rancher), den unsere gesamten Entwicklungsteams für die Softwareentwicklung nutzen. Neben zahlreichen Testumgebungen hosten wir dort auch Anwendungen wie Argo-CD, Jenkins und verschiedene Testframeworks. Da der Cluster für uns ein wichtiger Teil unserer Infrastruktur ist, stellt jeder Ausfall oder jede Nichtverfügbarkeit eine erhebliche Störung für unsere Teams dar.
Für die bisherige Wartung war es notwendig, dass zwei bis drei Kollegen (teamübergreifend DevOps-Engineer und System-Admin) mindestens einen ganzen Tag mit dieser Aufgabe beschäftigt waren. Während der Wartung wurden Prozesse überwacht, Anwendungen im Cluster neu gestartet, und Kollegen wurden bei ihrer Arbeit und vor allem auch bei Testdurchführungen behindert. Somit stand der Cluster an diesem Tag nur mit Einschränkungen zur Verfügung. Entsprechend mussten sich alle Kollegen auf diese Situation einstellen und lernen, damit umzugehen, was natürlich auch zu Unmut und zusätzlichem Abstimmungsaufwand geführt hat.
Analyse und Entscheidung zum Vorgehen
Diese nicht zufriedenstellende Situation hat uns dazu gebracht, die Prozesse zu analysieren. Wir kamen zu dem Ergebnis, dass wir den kompletten Wartungsprozess voll automatisiert in die Nachtstunden verlegen können. Dazu war es notwendig, die einzelnen Prozesse zu automatisieren. Die Aktualisierung des Betriebssystems mit (Sicherheits-)Updates in der Nacht und das automatische Installieren der Firmware-Updates während eines Neustarts der jeweiligen Server waren problemlos einzurichten. Die Herausforderung bestand allerdings darin, dass die Neustarts der Server nicht einfach so durchgeführt werden können. Wir müssen auch während der Wartung jederzeit einen funktionierenden Cluster im Betrieb haben und dieser muss sicherstellen, dass wichtige Prozesse/Jobs nicht einfach abgebrochen werden.
Unsere Lösung – Kured
Nach eingehender Recherche haben wir uns für Kured entschieden. Kured, der „Kubernetes Reboot Daemon“, bietet spezifische Funktionen, die für unsere Anforderungen ideal sind.
- Nahtlose Integration in einen Kubernetes-Cluster als DeamonSet.
- Überwachung von Signalen vom Paket-Management-System auf den Servern durch eine Neustart-Sentinel-Datei (z. B. /var/run/reboot-required) oder den erfolgreichen Abschluss eines Sentinel-Befehls.
- Überwachung laufender Pods (Prozessen) und ggf. Alarm-Meldungen im Cluster, sodass nur Server neu gestartet werden, auf denen keine Prozesse laufen, die nicht abgebrochen werden dürfen.
- Durchführung des Neustarts von Kubernetes-Nodes (Server) im laufenden Betrieb des Clusters.
- Sicherstellung, dass nur ein Server zur Zeit neu gestartet wird und damit der Cluster zu jeder Zeit voll funktionsfähig bleibt. Sollte ein Server bei einem Update-Vorgang hängen bleiben, wird gewartet, bis das Problem behoben ist.
- Sperren und Leeren von Worker-Nodes vor dem jeweiligen Neustart sowie entsperren, sobald der Server wieder verfügbar ist.
Info: Dieser Text basiert auf der README-Datei des [kured-Projekts] (https://github.com/kubereboot/kured), das unter der Apache 2.0-Lizenz steht. Der ursprüngliche Text wurde übersetzt, in unserem Kontext angepasst und erweitert.Lizenz: Der ursprüngliche Text stammt aus dem [kured-Projekt] (https://github.com/kubereboot/kured) und steht unter der [Apache 2.0-Lizenz](http://www.apache.org/licenses/LICENSE-2.0). Copyright 2017 Weaveworks Ltd.
Sicherheit und Verlässlichkeit
Wir haben das System so konfiguriert, dass es jeden Tag zwischen 0:00 Uhr und 4:00 Uhr überprüft, ob Server neu gestartet werden müssen, um die anstehenden Updatevorgänge automatisiert und vollständig einzuspielen. Sollte über die Zeitspanne hinaus ein Prozess nicht abgeschlossen werden, wird der Neustart des jeweiligen Servers um einen weiteren Tag verschoben.
Während der Aktualisierungen und Neustarts sorgt Kured dafür, dass die Verfügbarkeit des Clusters und der dort laufenden Anwendungen jederzeit gewährleistet bleibt. Zusätzlich Mechanismen stellen sicher, dass kritische Prozesse (Pods) nicht unterbrochen werden.
Ergebnisse und Erfahrungsberichte
Unsere Kubernetes-Infrastruktur-Server werden nun regelmäßig mit (Sicherheits-)Updates und neuer Firmware voll automatisiert versorgt. Dieser Prozess erfolgt während der Nachtstunden, sodass unsere Kollegen und der Betrieb des Clusters nicht mehr gestört werden. Aufwendige Wartungsarbeiten, Wartungstermine und eingeschränkte Nutzung des Clusters gehören damit der Vergangenheit an.
Die fehlenden Störungen durch Wartungsarbeiten sind zwar nicht mehr in den Teams präsent, aber genau das zeigt den Erfolg der Umstellung. In der dadurch gewonnenen Zeit können die Teams nun ungestört weiterarbeiten und wir als Team können uns auf weitere Verbesserungen unserer Systeme konzentrieren, um der gesamten Entwicklungsabteilung zusätzliche Optimierungen bereitzustellen.
Was erfahrt ihr im nächsten Blog?
Schaut euch gerne die Dokumentation von kured (https://github.com/kubereboot/kured) an. Wollt ihr wissen, wie wir die technische Umsetzung mit Kured durchgeführt haben? Dann seid gespannt, denn in ein paar Wochen wird ein technischer Blog zu diesem Thema veröffentlicht. Dort werdet ihr erfahren, wie wir das System aufgesetzt und konfiguriert haben.
Ü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.