Dudas sobre el uso de plantillas de YAML
- Se plantea la pregunta de desde cuándo el uso de plantillas de YAML pasó a aceptarse como algo normal y cómo pudo llegar a aceptarse.
- En cfgmgmtcamp 2019 se presentó la necesidad de la gestión de configuración de Kubernetes y la solución kr8.
- Durante la presentación se cuestionó el uso de plantillas de YAML, lo que provocó un debate activo en línea y en la conferencia.
Problemas de configuración
- Cuando las aplicaciones y la infraestructura crecen más allá de cierto tamaño, se enfrentan al problema de la complejidad de configuración.
- La configuración de una aplicación desplegada en distintos entornos (desarrollo, staging, producción) o regiones (Europa, Norteamérica) puede ser diferente.
- Los administradores de sistemas o ingenieros de DevOps conocen bien la complejidad de la gestión de configuración, y cada herramienta intenta resolver este problema usando YAML.
¿Hemos retrocedido?
- A medida que las exigencias de la industria cambiaron con la computación en la nube, aparecieron nuevas herramientas.
- Se considera que herramientas como CloudFormation y Helm son excelentes para configuración, pero que la industria en general cometió un error al diseñar plantillas de YAML.
- Se explica esto con el ejemplo de un chart de Helm que recibe parámetros personalizables.
Chart de Helm
- Un chart de Helm recibe parámetros externos mediante el archivo
values.yaml para renderizar el chart.
- Se explica la complejidad que surge al partir de parámetros de cadena simples y avanzar hacia campos opcionales, arreglos o mapas.
- Se señalan los estrictos requisitos de espacios en blanco de YAML y las limitaciones del sistema de plantillas.
JSON, Jsonnet y YAML
- YAML es un superconjunto de JSON, y la conversión entre ambos formatos es sencilla.
- Jsonnet es un lenguaje de plantillas de datos cuyo propósito es generar configuraciones JSON.
La iglesia de Jsonnet
- Jsonnet es un lenguaje nuevo poco conocido fuera de la comunidad de Kubernetes.
- Con Jsonnet se pueden generar fácilmente configuraciones JSON usando variables externas.
- Se explica cómo manejar campos opcionales, mapas y parámetros, además de las funciones adicionales de Jsonnet.
Kr8
- Kr8 utiliza todos los métodos usados para crear y manipular de forma fácil y sencilla la configuración de varios clústeres de Kubernetes.
- Si te identificas con los conceptos explicados aquí, se recomienda revisar Kr8.
Opinión de GN⁺
- La complejidad de las plantillas de YAML: Este artículo señala la complejidad y las limitaciones de las plantillas de YAML, y muestra claramente los problemas que enfrenta la industria en la gestión de configuración.
- Las ventajas de Jsonnet: Se presenta Jsonnet como una alternativa a las plantillas de YAML, y al destacar su facilidad de uso y flexibilidad despierta interés por nuevas herramientas.
- El futuro de la gestión de configuración: Este artículo ofrece ideas sobre el futuro de la gestión de configuración y brinda a los ingenieros de DevOps y administradores de sistemas la oportunidad de explorar nuevos enfoques.
1 comentarios
Opiniones de Hacker News
Hay muchas quejas sobre los archivos de configuración YAML. Incluso en GitHub Actions se considera la peor parte, y hay una sensación similar respecto a otros lenguajes de configuración propietarios (HCL, ASL, etc.). Las API declarativas son buenas, pero existe la demanda de permitir generar las declaraciones de forma programática.
Declarar y generar la configuración como código ofrece una mejor experiencia. AWS CDK entiende exactamente este punto y permite escribir definiciones declarativas de configuración e infraestructura en la nube con lenguajes con seguridad de tipos y soporte del IDE.
Se está de acuerdo en que hacer plantillas de YAML es irracional, y se sostiene que cuando se necesita lógica compleja se debería usar un lenguaje de programación real para generar YAML/JSON, etc. Esto puede resolver muchos problemas.
Hubo una discusión sobre Kubernetes: aunque la API de Kubernetes tiene un esquema JSON intuitivo y bien definido, la gente pasa mucho tiempo aprendiendo a usar charts de Helm. Jsonnet, Ksonnet, Nu y CUE no lograron gran popularidad, y parece que la mayoría usa Kustomize, integrado en kubectl.
Se señala que los desarrolladores no piensan lo suficiente en cómo deberían manejar correctamente la configuración. Puede decirse que toda programación es, en esencia, un problema de configuración, y toda configuración termina pasándose como parámetro a alguna función. Guardar la configuración en una base de datos central podría ser mejor.
En CI/CD, YAML a veces se usa casi como si fuera un lenguaje de programación, pero se le considera muy verboso, poco intuitivo y un lenguaje específico de proveedor mal definido.
Se lamenta que Helm haya ganado. Trabajar con charts de Helm es muy incómodo; el editor no puede ayudar y todos los datos deben alinearse correctamente con
indent 4. Hay quien predice que Helm provocará el fin de Kubernetes.Existe una filosofía personal de que no es deseable generar código legible por máquinas usando interpolación de cadenas. Seguirán apareciendo problemas como SQL injection y cross-site scripting. Se sostiene que no deberían usarse archivos de plantilla para generar HTML.
Hay opiniones de que quienes eligen YAML no parecen reconocer el problema. Existe un conflicto directo entre la representación de datos centrada en humanos y la centrada en computadoras. YAML y JSON en realidad son formatos de datos distintos.
Hay quien dice que le gusta YAML, pero que maldice todos los días al trabajar con charts de Helm. Aunque detesta Helm, seguirá usándolo porque todos lo usan.
Se está considerando cambiar a cuelang, que se percibe como mejor diseñado que Jsonnet. Kubernetes ya tiene una función de reconciliación de estado, así que solo haría falta agregar la capacidad de eliminación.