Helm vs Jsonnet: Templating de Manifestos Kubernetes
Helm é um gerenciador de pacotes para Kubernetes com charts templatizados e releases; Jsonnet é uma linguagem de templating de dados de propósito geral que gera manifestos de forma programática. Helm empacota e distribui; Jsonnet compõe com abstrações reais.
Ambos produzem YAML do Kubernetes, mas resolvem metades diferentes do problema. Helm faz templating de texto Go e gerencia releases (install, upgrade, rollback); Jsonnet é uma linguagem para gerar configuração com funções e herança. Aqui está a comparação honesta.
| Helm | Jsonnet | |
|---|---|---|
| Tipo | Gerenciador de pacotes + templating | Linguagem de templating de dados |
| Templating | Go templates sobre strings YAML | Linguagem quase tipada, componível |
| Empacotamento/distribuição | Charts, repos, releases | Nenhum nativo (libs via jsonnet-bundler) |
| Gerenciamento de releases | Estado de install/upgrade/rollback | Nenhum (aplica o YAML gerado) |
| Reuso | Values de chart + subcharts | Funções, imports, mixins |
| Ecossistema | Enorme ecossistema de charts | Tanka, libs ksonnet, kube-libsonnet |
Empacotamento vs programabilidade
Helm brilha no empacotamento: existe um chart para quase tudo, e helm install/upgrade/rollback rastreia o estado do release no cluster. Sua fraqueza é o templating de strings, onde lógica complexa em Go templates sobre YAML fica desajeitada. Jsonnet inverte isso: é uma linguagem de verdade com funções e composição, então configs grandes permanecem DRY, mas não tem empacotamento ou ciclo de vida de release nativo, então você gera o YAML e o aplica por conta própria (muitas vezes via Tanka ou uma ferramenta GitOps).
Reuso e segurança
Jsonnet captura erros estruturais e compõe bibliotecas de forma limpa, o que escala bem para muitos serviços parecidos. O reuso no Helm vem através de arquivos values e subcharts, o que é acessível mas pode acabar profundamente aninhado. Se você quer abstração, Jsonnet; se você quer um mercado de charts prontos, Helm.
No CI
Ambos se encaixam em um pipeline: renderize os manifestos (helm template ou jsonnet), valide-os e então aplique. Renderizar e fazer diff no CI antes do deploy captura erros cedo, independentemente da ferramenta que você escolher.
O veredito
Escolha Helm para empacotamento, distribuição e gerenciamento de releases com um vasto ecossistema de charts; escolha Jsonnet quando você precisa de programabilidade real e config DRY entre muitos serviços. Eles podem coexistir, e alguns times renderizam ambos em um fluxo GitOps.