Cattle vs. Cat

Von Michael Gisbers 2. April 2025

Das Monitoring (mit Prometheus) springt an und meldet, dass einige meiner Websites nicht erreichbar sind. Schnell mal die wichtigsten aufgerufen (gisbers.de, linux-schmie.de, lugor.de) und leider zeigen alle das gleiche Bild.

Was kann passiert sein? Die Seiten werden über ein Kubernetes auf Cloud Servern bei meinem Provider Hetzner gehostet.

Die Adminoberfläche des zur Verwaltung eingesetzten Rancher funktioniert und ich kann die Fehlermeldungen einsehen. Anscheinend fehlen dem Storage (über Longhorn) die benötigten Blockdevices auf den Nodes. Ein Blick auf die Nodes selber bestätigt das. Die Storages sind nicht mehr sauber verbunden.

Laut Webinterface meines Providers sind sie aber eingebunden und zeigen volle Funktionalität an. Frei dem Motto “Boot tut gut” starte ich die erste Node neu und nach dem Boot ist der Storage wieder verbunden. Longhorn beruhigt sich, da er nun wenigstens eine Replik der Daten sieht.

Also auch die nächste Node rebooten. Folgt man Murphy’s Law müsste dabei etwas schief gehen. Und natürlich ging etwas schief.

Die Node konnte sich nach dem Neustart nicht wieder an den Cluster etcd verbinden, der die Daten des Clusters beinhaltet, und hatte somit keine Chance hochzufahren.

Also ging ich an die Reparatur und versuchte auf den verschiedensten Wegen den etcd dazu zu bewegen wieder normal mit dem Cluster zu reden. Leider blieb es bei dem Versuch. Die Node weigerte sich hartnäckig einen normalen Betrieb aufzunehmen.

Der Frust machte sich nach und nach breiter und breiter und ich hatte langsam keine Idee mehr was ich tun konnte.

Aber mir kam ein Vortrag in den Kopf den ich vor einigen Jahren mal gesehen hatte über das Thema ‘Cattle vs. Cat’.

Dabei ging des darum, dass wir unsere Server meist wie Haustiere (z. B. Katzen) behandeln und sie hegen und pflegen bis ins hohe Alter. Wenn es dann irgenwann nicht mehr möglich ist schicken wir sie in Rente und lassen sie vielleicht noch kleine Tätigkeiten durchführen bis sie wirklich nicht mehr zu gebrauchen sind.

Mit dem Aufkommen der Cloud Technologien und der Automatisierung haben wir für diese Art der Pflege meist keine Zeit und können es uns nicht leisten Server, die nicht mehr vernünftig funktionieren zu reparieren und weiter zu betreiben.

Wenn sie ihren Zweck erfüllt haben oder nicht mehr in der Lage sind ihn zu erfüllen schmeissen wir sie raus. Genau wie in der Rinderzucht die Tiere nur so lang wie sinnvoll in der Herde bleiben.

Was hat das nun mit meinem Problem zu tun?

Nunja, ich musste lernen, dass es viel einfacher gewesen wäre statt lange nach einer Möglichkeit für die Reparatur zu suchen die Node abzuschalten und durch eine neue zu ersetzen.

Kubernetes ist genau für eine solche Situation gedacht.

Also habe ich die Node abgeschaltet, über die Rancher Adminoberfläche aus dem Cluster entfernt und beim Provider eine neue Node erstellt. Nach der Konfiguration der Node mit Ansible fehlte nur noch die Einbindung in Cluster.

Bei Rancher ist das einfach. Ich musste nur eine Zeile aus der Adminoberfläche kopieren und auf der neuen Node ausgeführen.

Wenige Minuten später war die Node oben und der Cluster stand wieder vollständig zur Verfügung.

Offen bleibt die Frage warum der Storage kurzzeitig nicht vorhanden war und warum das Problem auftrat. Aber diese Frage versuche ich noch zu klären.