ADR-0015 — Kustomize para serviços próprios, Helm para terceiros
- Status: Aceito
- Data: 2026-07-18
Contexto
Precisamos empacotar/parametrizar os manifests Kubernetes para o deploy via GitOps (Argo CD) no k3s (ADR-0006, ADR-0003). Há duas famílias de workloads:
- Serviços próprios:
backend(Java),collector(Python),frontend(Angular) — manifests simples (Deployment, Service, ConfigMap, HPA, Ingress/IngressRoute) que nós controlamos. - Componentes de terceiros: Traefik, cert-manager, RabbitMQ, operadores de Postgres/Redis, stack de observabilidade (Prometheus/Grafana/Loki), Sealed/External Secrets, etc. — softwares de fornecedores, com muitas opções de configuração.
A versão anterior da doc previa "um Helm chart por serviço". Para manifests próprios e simples, Helm adiciona indireção (templates, values.yaml, _helpers.tpl) sem ganho real.
Decisão
Usar a ferramenta certa para cada caso:
- Kustomize para os serviços próprios:
deploy/k8s/base/(manifests planos e legíveis) +overlays/{dev,staging,prod}(patches por ambiente: réplicas, recursos, host, imagem). A tag da imagem é atualizada pelo CI no overlay (viaimages:do Kustomize) — semkubectl apply. - Helm para componentes de terceiros: consumir os charts oficiais da comunidade, fixando versão e mantendo nossos
valuesversionados no repo GitOps (infra/). - Argo CD suporta ambos nativamente (uma
Applicationaponta para um chart Helm ou para um diretório Kustomize), então o padrão app-of-apps convive com as duas abordagens.
Consequências
- + Manifests próprios simples, explícitos e fáceis de revisar (diff limpo no PR).
- + Sem manter templates Helm caseiros; menos boilerplate e menos armadilhas de renderização.
- + Reaproveita o ecossistema maduro de charts para software de terceiros (upgrades e valores bem documentados).
- + Bump de imagem trivial e seguro via
kustomize edit set imageno CI. - − Dois mecanismos no repositório (Kustomize + Helm) — mitigado por serem de domínios distintos (nossas apps vs. terceiros) e ambos suportados pelo Argo CD.
- − Kustomize tem parametrização mais limitada que Helm; aceitável para manifests próprios.
Alternativas consideradas
- Helm para tudo (inclusive apps próprias): overhead de templates para manifests simples; padrão anterior, agora revisado.
- Kustomize para tudo (inclusive terceiros): exigiria manter/gerar bases de software de terceiros à mão, perdendo o valor dos charts oficiais.
- Jsonnet/cdk8s: poder maior, porém curva de aprendizado e complexidade desnecessárias para o tamanho atual do projeto.