Manche Dinge muss man auf die harte Tour lernen - und manche wiederum nicht. Ich habe heute wohl einer dieser harten Lektionen durchmachen müssen. Das hätte natürlich nicht sein müssen, wenn ich ein paar grundlegende, in der breiten IT-Gemeinschaft jahrelang etablierte Regeln beachtet hätte:
- Mache keine tiefgreifenden Änderungen kurz bevor du Feierabend machst!
- Lies und verinnerliche die Dokumentation richtig und verlasse dich nicht auf StackOverflow!
- Think before you press Enter!
Ich habe diese Regeln alle sträflich missachtet und meinen Blutdruck in schwindelerregende Höhen katapultiert. So ging es mir früher oft. Zu meiner Anfangszeit als Informatiker habe ich mich mit Stolz geschwellter Brust gerne übernommen und musste viele Fehler im Nachgang wieder ausbügeln - ohne Rücksichtnahme auf etwaige Folgeschäden durch Schlafmangel, Bluthochdruck und Stress. Habe ich nichts daraus gelernt? Jetzt brannte Rom wieder und ich fühlte mich wieder wie ein blutiger Anfänger.
Nun gut.
Was ist passiert und wie ist es ausgegangen?
Neben der nativen Cloud-Entwicklung verfolgen auch wir bei manchen Produkten den "Lift&Shift" Ansatz und heben diese in die Cloud. Im Zuge diese Aufgabe muss ich immer wieder Deployments und alle verbundenen Artefakte in einem Kubernetes Cluster löschen und neu instanziieren. Wir verwenden zur Abgrenzung der verschiedenen Deployments das Konzept der Namespaces. Wenn man Kommandozeilenbefehle immer und immer wieder eintippt, schleift sich das nicht ein, sondern man wird unvorsichtig und denkt nicht mehr richtig nach. This guy! Yay...
kubectl delete --all pv -n target-namespace
Wem fällt etwas auf? Ja...
Dieser Befehl löscht alle PersistentVolumes (PVs). Und zwar OHNE Namespace-Einschränkung. Und prompt wurden mehr als 50 Volumes unserer Entwicklung gelöscht: alle Entwicklerspeicher für die Remote-Dev-Arbeitsplätze inkl. Code für neue Features und etliche Personentage Arbeit, alle Speicher für CI/CD Werkzeuge, alle Speicher für Repos und Object Storages und viele mehr.
Puls.
Und jetzt kommt etwas Wunderbares. Stell dir vor es ist Apokalypse und keiner geht hin. Ich habe einen Kollegen. Den Marc. Er ist unser Cloud Architekt und in seiner Freizeit wohl irgendetwas Zauberhaftes wie ein Einhorn - anders kann ich mir das nicht vorstellen. Er hat direkt reagiert und ist auf eine geniale, simple und schnelle Lösung gestoßen. Dabei nutzt er aus, dass Kubernetes PVs erst löscht, wenn die Pods, die sie gebunden haben neu gestartet oder gelöscht werden. Solange befinden sich die Volumes im Status "Terminating" und können wieder in den Zustand "Bound" (gebunden) überführt werden.
Und dieses Problem hatten wohl schon einige:
Ich konnte also wieder durchatmen nachdem alle Volumes gerettet wurden und spendiere von Herzen gern einen Kasten Bier an meinen persönlichen Helden! Ich hätte mir sonst wohl meine Kündigung abholen dürfen ;) Und vielleicht rettet dieser Artikel dem ein oder anderen den Tag!
Und damit verabschiede ich mich entspannt und wünsche euch allen einen Kollegen wie Marc!
Macht's gut!
P.S.: @Marc: Was trinkst du so?! ;)
P.P.S.: Sorry für den Clickbait-Titel!