Wir haben Ressourcen über Helm angelegt und diese Ressourcendefinitionen seit längerem nicht mehr aktualisiert. Dadurch kamen wir in die Situation, dass nun der Versuch eines Helm Upgrades fehlschlägt.

Die Ausgangssituation

Die Fehlermeldung dazu ist etwas kryptisch und sieht ungefähr so aus:

Was uns Helm hier mitteilt ist, dass die Ingress Komponenten mit dem Namen „private“ in der Version „extensions/v1beta1“ vorliegt. Diese Version der API ist mittlerweile veraltet und in einem der letzten Cluster Upgrades entfernt worden.

Das Problem

Helm verweigert hier die weitere Arbeit mit dem deployten Release, da im Kubernetes Cluster die angegebenen Ressourcen nicht mehr existieren. Im Detail beschreiben die Entwickler*innen von Helm das Problem auch hier noch einmal: https://helm.sh/docs/topics/kubernetes_apis/

Auf dieser Seite wird auch die theoretische Lösung beschrieben: Man kann das bestehende Release über Kubectl Befehle exportieren und dann die API Versionen anpassen, bevor man das Deployment wieder importiert. Die Herausforderung bei dieser Variante ist, das man per Hand das gesamte Chart kontrollieren und anpassen muss. Diese Textdokumente können allerdings sehr lang werden mit mehreren 100.000 Zeichen, was die Bearbeitung mühselig macht.

So kann man das aktuelle Secret zum Release in Erfahrung bringen und in einer release.data.decoded Datei sichern:

Die Datei muss nun bearbeitet werden und im Anschluss wieder verschlüsselt und im Cluster hinterlegt werden:

Im Anschluss sollte dringend ein Helm Upgrade erfolgen, indem die angepassten API’s verwendet wurden.

Die Lösung

Findige Entwickler*innen bei Helm haben das Problem auch erkannt und die Helm-Extension mapkubeapis entwickelt, um diese Anpassungen automatisiert durchzuführen. Das Plugin ist soweit konfigurierbar, dass man sogar seine eigenen Mappings definieren kann, diese hinterlegt man einfach in der Map.yaml.

An dieser Stelle muss darauf hingewiesen werden, das mapkubeapis nur die API Versionen anpasst. Sofern in den Helm Ressourcen eine Funktion der alten API’s verwendet wurde, welche in den aktuellen Versionen nicht existiert, dann muss die Konfig, wie weiter oben beschrieben, per Hand angepasst werden.

Wie verhindere ich dieses Problem?

Viel besser wäre es natürlich, gar nicht erst in diese Situation zu geraten. Dazu würde ich auf zwei Tools vom Team bei Fairwind verweisen. Zum einem gibt es Pluto, welches veraltete Kubernetes Objekte im Cluster erkennt. Die zweite Empfehlung ist Nova, dieses Tool prüft, ob die im Cluster verwendeten Helm Charts aktuell sind.


Du teilst dein Wissen auch gern mit anderen?
Dann bewirb dich bei der Telekom MMS als DevOps oder Cloud Engineer:

>Zur Stellenbörse


Philip Penquitt

Mit über 10 Jahren Erfahrung als System Engineer im klassischen Betrieb, widme ich mich nun seit einigen Jahren mit Freude den Cloud-Technologien. Dabei versuche ich die Erfahrungen und das neu Gelernte auch im traditionellen On-Premises Umfeld anzuwenden.