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
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.