2 puntos por GN⁺ 2024-01-24 | 1 comentarios | Compartir por WhatsApp

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

 
GN⁺ 2024-01-24
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.