YamlBox

Artículo guía · 5 min de lectura

Convirtiendo Kubernetes YAML a JSON de forma segura

La conversión de Kubernetes YAML a JSON ocurre en el límite API: Kubernetes habla JSON y YAML es una capa conveniente que kubectl y sus bibliotecas cliente convierten por usted, razón por la cual comprender la conversión es importante cuando algo sale mal.

Actualizado

Kubernetes YAML a JSON: ¿por qué convertir?

  • Depuración con la forma API real: cuando se rechaza un campo, JSON le muestra exactamente lo que ve el servidor, sin ambigüedad al escribir YAML.
  • Canalizaciones de alimentación: muchas herramientas (motores de políticas, scripts de CI, canalizaciones jq) consumen JSON más cómodamente que YAML.
  • Diferenciar la salida renderizada: comparar dos versiones Helm como JSON hace que los cambios de tipo sean visibles: el clásico error "verdadero no es "verdadero"".
  • Documentación y enseñanza: Las llaves JSON hacen que el anidamiento de spec.template.spec.containers sea inconfundible.

El problema de los múltiples documentos

Un archivo de manifiesto normalmente contiene muchos recursos separados por ---: espacio de nombres, ConfigMap, implementación, servicio, ingreso, HPA. Un ingenuo conversor de YAML a JSON lee el primer documento y silenciosamente descarta el resto: un modo de falla genuinamente peligroso para el trabajo de infraestructura. Los buenos conversores producen una matriz JSON, un elemento por documento, y le dicen cuántos encontraron.

Helm, anclajes y "¿por qué no hay anclajes en mi salida?"

YAML anclajes y alias pueden deduplicar bloques dentro de un archivo. Las plantillas Helm van más allá: no son YAML en absoluto hasta que se renderizan. Convierta solo la salida renderizada (plantilla de helm/manifiesto de helm get), nunca un archivo de plantilla sin formato. Consolidar anclajes en sus valores es el comportamiento correcto: JSON no tiene alias, por lo que el convertidor debe eliminar la referencia a ellos.

Las trampas de escribir

  • Booleanos: versiones y nombres como "y", "yes", "on" son booleanos en YAML 1.1. En Kubernetes, una etiqueta de imagen como "on" o una versión como "1.10" es un caso clásico de corrupción silenciosa; cité siemprelas en la fuente.
  • Puertos y recursos: containerPort: 8080 es un int; "8080" como cadena será rechazado por el API para los campos escritos. JSON mantiene la distinción explícita.
  • Cantidades de memoria: 128Mi es una cadena en ambos formatos; correcto, porque se analiza por Kubernetes, no por YAML.
  • Valores ambientales: los valores env son cadenas por especificación; valor: 3000 en YAML se convierte en el número 3000, que el API rechaza. Este es uno de los errores de manifiesto más comunes y el resultado de JSON lo hace evidente al instante.

Un flujo de trabajo práctico

  1. Renderizar primero (si Helm): plantilla de timón mychart > rendered.yaml.
  2. Convierta con soporte para múltiples documentos a una matriz JSON, para que no se pierda ningún recurso.
  3. Diferencia con lo que tiene el clúster: kubectl get implementar web-app -o json, en comparación con una herramienta de diferenciación JSON: los cambios importantes se destacan de inmediato.
  4. Parchee con confianza: los parches JSON (RFC 6902) y los parches de fusión estratégicos son más fáciles de escribir frente a JSON inequívocos.

Ambos pasos están cubiertos por las herramientas de este sitio: YAML a JSON para la conversión y JSON Diff para comparar el resultado con la salida kubectl: ningún dato del clúster sale de su máquina.