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
- Renderizar primero (si Helm): plantilla de timón mychart > rendered.yaml.
- Convierta con soporte para múltiples documentos a una matriz JSON, para que no se pierda ningún recurso.
- 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.
- 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.