2 pontos por GN⁺ 2024-01-24 | 1 comentários | Compartilhar no WhatsApp

Dúvida sobre o uso de templates em YAML

  • Levanta a questão de quando o uso de templates em YAML passou a ser aceito como algo comum e como isso pôde acontecer.
  • Apresentou na cfgmgmtcamp 2019 a necessidade de gerenciamento de configuração no Kubernetes e a solução kr8.
  • Durante a apresentação, levantou dúvidas sobre templates em YAML, o que gerou discussões ativas online e na conferência.

Problema de configuração

  • Quando aplicações e infraestrutura crescem além de uma certa escala, enfrentam o problema da complexidade de configuração.
  • A configuração de aplicações implantadas em diferentes ambientes (desenvolvimento, staging, produção) ou regiões (Europa, América do Norte) pode variar.
  • Administradores de sistemas e engenheiros de DevOps conhecem bem a complexidade do gerenciamento de configuração, e cada ferramenta usa YAML para resolver esse problema.

Será que regredimos?

  • Com a computação em nuvem, as exigências da indústria mudaram e novas ferramentas surgiram.
  • Ferramentas como CloudFormation e Helm são excelentes ferramentas de configuração, mas acredita-se que a indústria como um todo cometeu um erro ao projetar templates em YAML.
  • Isso é explicado com o exemplo de um chart do Helm que recebe parâmetros personalizados.

Chart do Helm

  • Um chart do Helm renderiza o chart recebendo parâmetros externos por meio do arquivo values.yaml.
  • Explica a complexidade que surge ao começar com parâmetros simples de string e depois configurar campos opcionais, arrays e maps.
  • Aponta as exigências rígidas de espaços em branco do YAML e as limitações do sistema de templates.

JSON, Jsonnet & YAML

  • YAML é um superconjunto de JSON, e a conversão entre os dois formatos é simples.
  • Jsonnet é uma linguagem de templates de dados voltada para gerar configurações em JSON.

A igreja do Jsonnet

  • Jsonnet é uma linguagem nova pouco conhecida fora da comunidade Kubernetes.
  • Com Jsonnet, é possível gerar facilmente configurações JSON usando variáveis externas.
  • Explica como lidar com campos opcionais, maps e parâmetros, além dos recursos adicionais do Jsonnet.

Kr8

  • Kr8 usa todos os métodos empregados para criar e manipular de forma fácil e simples a configuração de vários clusters Kubernetes.
  • Se você se identifica com os conceitos explicados aqui, vale a pena conferir o Kr8.

Opinião do GN⁺

  • Complexidade dos templates em YAML: Este texto destaca a complexidade e as limitações dos templates em YAML, mostrando bem os problemas que a indústria enfrenta no gerenciamento de configuração.
  • Vantagens do Jsonnet: O Jsonnet é apresentado como uma alternativa aos templates em YAML, enfatizando sua facilidade de uso e flexibilidade, o que desperta interesse por novas ferramentas.
  • Futuro do gerenciamento de configuração: Este texto oferece uma visão sobre o futuro do gerenciamento de configuração e abre espaço para que profissionais de DevOps e administradores de sistemas busquem novas abordagens.

1 comentários

 
GN⁺ 2024-01-24
Comentários do Hacker News
  • Há muitas reclamações sobre arquivos de configuração YAML. Isso também é visto como a pior parte no GitHub Actions, e a sensação é parecida em relação a outras linguagens proprietárias de configuração (HCL, ASL etc.). APIs declarativas são boas, mas existe a demanda para permitir gerar declarações de forma programática.

  • Declarar e gerar configuração como código oferece uma experiência melhor. O AWS CDK entende isso exatamente, permitindo escrever definições declarativas de configuração e infraestrutura de nuvem com linguagens type-safe e suporte de IDE.

  • Concorda-se que fazer template de YAML é irracional, e argumenta-se que, quando lógica complexa é necessária, deve-se usar uma linguagem de programação de verdade para gerar YAML/JSON etc. Isso pode resolver muitos problemas.

  • Houve discussão sobre Kubernetes e, apesar de a API do Kubernetes ter um schema JSON intuitivo e bem definido, as pessoas ainda gastam muito tempo aprendendo a usar Helm charts. Jsonnet, Ksonnet, Nu e CUE não ganharam grande popularidade, e parece que a maioria das pessoas usa o Kustomize embutido no kubectl.

  • Há a observação de que os desenvolvedores não pensam o suficiente sobre como lidar corretamente com configuração. Pode-se dizer que toda programação é, na prática, um problema de configuração, e toda configuração acaba sendo passada como parâmetro para alguma função. Pode ser melhor armazenar a configuração em um banco de dados central.

  • Em CI/CD, às vezes o YAML é usado quase como se fosse uma linguagem de programação, mas isso é extremamente verboso, pouco intuitivo e visto como uma linguagem específica de fornecedor mal definida.

  • Há pesar pelo fato de o Helm ter vencido. Trabalhar com Helm charts é muito desconfortável, o editor não consegue ajudar, e todos os dados precisam ser alinhados corretamente com indent 4. Existe a previsão de que o Helm trará o fim do Kubernetes.

  • Existe uma filosofia pessoal de que usar interpolação de strings para gerar código legível por máquina não é desejável. Problemas como SQL injection e cross-site scripting continuarão acontecendo. Defende-se que arquivos de template não deveriam ser usados para gerar HTML.

  • Há a opinião de que quem escolhe YAML parece não reconhecer o problema. Existe um conflito direto entre representações de dados centradas em humanos e representações de dados centradas em computadores. YAML e JSON são, na prática, formatos de dados diferentes.

  • Há quem goste de YAML, mas o amaldiçoe todos os dias ao trabalhar com Helm charts. A posição é a de continuar usando Helm mesmo detestando-o, porque todo mundo usa.

  • Considera-se migrar para cuelang, que parece ser melhor projetado do que Jsonnet. O Kubernetes já tem funcionalidade de reconciliação de estado, então só faltaria adicionar a funcionalidade de exclusão.