YamlBox

Leitartikel · 5 Min. Lektüre

Sichere Umwandlung von Kubernetes YAML in JSON

Die Konvertierung von Kubernetes YAML zu JSON erfolgt an der API-Grenze: Kubernetes spricht JSON, und YAML ist eine praktische Ebene, die kubectl und seine Client-Bibliotheken für Sie konvertieren – weshalb es wichtig ist, die Konvertierung zu verstehen, wenn etwas schief geht.

Aktualisiert

Kubernetes YAML bis JSON: Warum überhaupt umrechnen?

  • Debuggen mit der tatsächlichen API-Form: Wenn ein Feld abgelehnt wird, zeigt JSON genau das an, was der Server sieht, ohne Mehrdeutigkeit bei der Eingabe von YAML.
  • Feeding-Pipelines: Viele Tools (Policy Engines, CI-Skripte, JQ-Pipelines) verbrauchen JSON bequemer als YAML.
  • Unterschiedliche gerenderte Ausgabe: Vergleich zweier Helm-Releases, da JSON Typänderungen sichtbar macht – der klassische „wahr ist nicht „wahr““-Fehler.
  • Dokumentation und Lehre: JSON geschweifte Klammern machen die Verschachtelung von spec.template.spec.containern unverwechselbar.

Das Problem mehrerer Dokumente

Eine Manifestdatei enthält üblicherweise viele durch --- getrennte Ressourcen: Namespace, ConfigMap, Deployment, Service, Ingress, HPA. Ein naiver YAML-zu-JSON-Konverter liest das erste Dokument und lässt den Rest stillschweigend fallen – ein wirklich gefährlicher Fehlermodus für Infrastrukturarbeiten. Gute Konverter erzeugen ein JSON-Array, ein Element pro Dokument, und sagen Ihnen, wie viele sie gefunden haben.

Helm, Anker und „Warum gibt es in meiner Ausgabe keine Anker?“

YAML Anker und Aliase können Blöcke innerhalb einer Datei deduplizieren. Helm-Vorlagen gehen noch weiter – sie sind überhaupt nicht YAML, bis sie gerendert werden. Konvertieren Sie nur die gerenderte Ausgabe (Helm-Vorlage / Helm-Get-Manifest), niemals eine Rohvorlagendatei. Das Konsolidieren von Ankern in ihren Werten ist das richtige Verhalten: JSON hat keine Aliase, daher muss der Konverter sie dereferenzieren.

Die Tippfallen

  • Boolesche Werte: Versionen und Namen wie „y“, „yes“, „on“ sind boolesche Werte in YAML 1.1. In Kubernetes ist ein Bild-Tag wie „on“ oder eine Version wie „1.10“ ein klassischer Fall stiller Korruption – geben Sie sie immer in der Quelle an.
  • Ports und Ressourcen: ContainerPort: 8080 ist ein int; „8080“ als String wird vom API für typisierte Felder abgelehnt. JSON hält die Unterscheidung explizit.
  • Speichermengen: 128Mi ist in beiden Formaten eine Zeichenfolge – korrekt, da sie von Kubernetes und nicht von YAML geparst wird.
  • Umgebungswerte: Umgebungswerte sind Zeichenfolgen gemäß Spezifikation; Wert: 3000 in YAML wird zur Zahl 3000, die der API ablehnt. Dies ist einer der häufigsten offensichtlichen Fehler, und die Ausgabe von JSON macht ihn sofort offensichtlich.

Ein praktischer Workflow

  1. Zuerst rendern (wenn Helm): Helm-Vorlage MyChart > rendered.yaml.
  2. Konvertieren Sie mit Multi-Dokument-Unterstützung in ein JSON-Array, sodass keine Ressource verloren geht.
  3. Vergleichen Sie mit dem, was der Cluster hat: kubectl Get Deploy Web-App -o JSON, verglichen mit einem JSON Diff-Tool – die wichtigen Änderungen fallen sofort auf.
  4. Patchen Sie mit Zuversicht: JSON-Patches (RFC 6902) und strategische Merge-Patches lassen sich einfacher gegen eindeutige JSON schreiben.

Beide Schritte werden von den Tools auf dieser Website abgedeckt: YAML bis JSON für die Konvertierung und JSON Diff zum Vergleich des Ergebnisses mit der kubectl-Ausgabe – keine Clusterdaten verlassen Ihren Computer.