Das passende Training Kubernetes Helm Training – Charts, Deployments & Praxis (2 Tage)
Helm hat meinen Schreibfehler installiert. Vier Stunden später wusste ich’s.
Ganz ehrlich: Helm prüft deine values.yaml nicht. Es nimmt, was du hinschreibst, rendert die Templates und sagt “deployed”. Ein Schreibfehler fällt erst irgendwo in Kubernetes auf, und zwar an einer Stelle, die mit dem Fehler nichts zu tun hat.
Geprüft wird nur mit einem values.schema.json im Chart. Und selbst dann nur dort, wo das Schema streng ist. Wie ich das gelernt habe, hat mich vier Stunden gekostet.
Sechs Stunden, sonst kostenlos
Ein Kunde ruft nach der Schulung an: Helm geht nicht mehr. Nichts geht mehr. Ich habe gesagt: Ich brauche maximal sechs Stunden, und wenn ich es in der Zeit nicht finde, kostet es nichts. Mutig, ich weiß.
Vier Stunden später hatte ich ihn. Keine kaputte Version, kein Netzwerk, kein Cluster-Problem. Ein Schreibfehler in einem Parameter für den NFS-Mount. Ein einzelner Buchstabe, irgendwo in einer values.yaml, und Helm hat ihn ohne Murren installiert.
Das ist der Punkt, an dem ich keinen Spaß mehr verstehe. Nicht wegen des Fehlers. Den macht jeder, ich auch. Sondern weil Helm vier Stunden lang so getan hat, als wäre alles in Ordnung. Ein Schema mit der richtigen Regel an dieser Stelle hätte beim helm upgrade gemeckert. Nach einer Sekunde, nicht nach vier Stunden.
Warum Helm nichts sagt
Helm kennt keine erlaubten Schlüssel. Es kennt nur Templates, und die fragen Werte ab. Schreibst du nfs.sever statt nfs.server, fragt kein Template nach sever, also stört es niemanden. Und weil server jetzt fehlt, greift stillschweigend der Default aus dem Chart. Vertippst du den Wert selbst, landet er genau so im Manifest. Helm ist hier wie ein Praktikant, der alles abnickt: freundlich, schnell, und am Ende hast du trotzdem die Arbeit.
Dabei kann Helm das längst. Du musst es nur anknipsen. Leg ein values.schema.json neben die values.yaml, und ab sofort steht einer mit Klemmbrett an der Tür: Jeder Wert wird gegen das Schema gehalten, bei install, upgrade, lint und template. Passt etwas nicht, ist Schluss, bevor ein einziges Template gerendert wird. Eine Ausnahme gibt es: die CRDs im crds/-Ordner. Die legt Helm beim allerersten Install schon vor der Prüfung an, das ist eine eigene Geschichte. Für den Tippfehler ist jedenfalls Feierabend, nicht für dich.
Was das Traefik-Chart dazu sagt
Reden ist billig, also habe ich es ausprobiert: Helm 3.17, Traefik-Chart 41.6.1, viermal helm template. Das Chart bringt ein Schema mit, und an der obersten Ebene steht additionalProperties: false.
| Was ich gesetzt habe | Was Helm sagt |
|---|---|
replicas=2, oberste Ebene, falscher Ort | abgelehnt: Additional property replicas is not allowed |
deployment.replicas=2, richtiger Ort | gerendert |
deployment.replicas=zwei, falscher Typ | abgelehnt: Expected: [integer,null], given: string |
deployment.replcas=2, Tippfehler eine Ebene tiefer | gerendert, kein Wort |
Die ersten drei Zeilen sind das, was du dir von einem Schema wünschst. Die vierte ist die, die dich den Nachmittag kostet. Unter deployment hat Traefik das additionalProperties: false schlicht nicht gesetzt. Also ist dort jeder Schlüssel erlaubt, auch ein vertippter. Der Default greift, aus den zwei Replicas wird nie etwas.
Und glaub nicht, das wäre die eine vergessene Tür. Ich habe mir das Schema danach komplett vorgenommen, Tür für Tür. Ergebnis: Nur gut jede vierte ist abgeschlossen. An den anderen hängt zwar ein Schild mit den erlaubten Schlüsseln, aber wer sich vertippt, geht einfach daneben durch. Und das bei Traefik, einem der gepflegteren Charts überhaupt, mit Schema, mit Kommentaren in der values.yaml, mit allem. Wenn es dort so aussieht, wie sieht es dann in deinem Chart aus?
Mein Satz dazu, den ich seitdem in jedem Training sage: Ein Schema ist nur so streng wie seine lockerste Ebene. Wenn du eins schreibst, dann auf jeder Ebene mit additionalProperties: false, nicht nur oben. Die Fehlertexte in der Tabelle stammen übrigens aus Helm bis 3.18.4. Seit 3.18.5 und in Helm 4 lauten sie etwas anders, die Sache dahinter ist dieselbe.
Was ein Schema nicht kann
Ein Schema ist wie die Rechtschreibprüfung: Die meckert bei “Serverr”, aber nicht bei einem Server, den es nicht gibt. Ob mein NFS-Fehler im Schlüssel oder im Wert saß, weiß ich heute ehrlich nicht mehr. Den Schlüssel hätte ein strenges Schema sofort gefangen. Den Wert nur, wenn ihm jemand ein Muster vorgegeben hätte, das genau diesen Buchstabendreher ausschließt. Für JSON Schema ist ein falscher Hostname ein ganz normaler String. Und es prüft nur, was in den Values steht. Was jemand von Hand in eine ConfigMap tippt, prüft niemand.
| Fakt | Wert | Quelle |
|---|---|---|
Wann Helm gegen values.schema.json prüft | bei install, upgrade, lint und template, gegen die fertig gemergten Values; beim ersten install legt Helm CRDs aus crds/ schon vor der Prüfung an | Helm-Doku, Charts, Abschnitt Schema Files; pkg/action/install.go |
| Fehlertexte | Helm bis 3.18.4: (root): Additional property replicas is not allowed; ab 3.18.5 und Helm 4: at '': additional properties 'replicas' not allowed (Wechsel der JSON-Schema-Bibliothek, Security-Fix) | Helm 3.18.5 Release Notes; eigene Tests mit 3.17.3, 3.18.5, 3.22.0, 4.3.0 |
| Traefik-Chart 41.6.1, Stand 01.10.2026 | Wurzel additionalProperties: false, deployment ohne; 140 Objekt-Knoten mit festen Unterschlüsseln, 38 davon streng (eigene Zählung; 62 weitere Freitext-Maps wie labels oder annotations nicht mitgezählt) | Schema im Chart, viermal helm template mit Helm 3.17.3 |
Meine klare Ansage
Helm macht, was du sagst. Es sagt dir nicht, wenn du Unsinn sagst, solange du ihm nicht erklärst, was Unsinn ist. Das ist die Aufgabe des Schemas. Die machst du einmal richtig, auf jeder Ebene, oder du machst sie nachts um drei beim Kunden.
Also: Werte lesen, bevor du installierst, das hatten wir beim Bitnami-Chart. Und beim eigenen Chart das Schema schreiben, bevor es jemand anderes braucht. Von Hand tippen musst du es nicht, dafür gibt es Werkzeuge, streng machen musst du es selbst. Beides üben wir in meinem Kubernetes Helm Training, mit dem Traefik-Chart aus der Tabelle und mit einem eigenen Chart, dem du am Ende nicht mehr vertrauen musst, weil du es prüfen kannst.