Objetivos desta aula
- Criar chart próprio
- Parametrizar por ambiente
- Executar rollout e rollback
Helm empacota manifests em chart com templates e values, resolvendo dois problemas: repetição entre ambientes e versionamento de release. Cada instalação ou upgrade cria uma revisão, o que torna rollback um comando único e auditável.
Estruture o chart com values.yaml de defaults conservadores e arquivos por ambiente (values-dev.yaml, values-prod.yaml) alterando réplicas, recursos, host e tag de imagem. Templates devem falhar cedo: use required para valores obrigatórios.
Antes de aplicar, valide com helm lint e helm template para ver o YAML final, e prefira upgrade --atomic --wait, que reverte automaticamente se os pods não ficarem prontos. Rollback treinado é rollback confiável.
1. O problema que o Helm resolve
Dev, staging e produção usam os mesmos manifestos com diferenças (réplicas, domínio, recursos). Copiar YAML gera divergência. O Helm usa templates + values e empacota tudo em um chart versionado.
2. Estrutura de um chart
Chart.yaml: nome, versão do chart e appVersionvalues.yaml: padrõestemplates/: manifestos com Go templatevalues-prod.yaml: sobrescritas por ambiente
3. Releases e histórico
Cada helm upgrade cria uma revisão guardada no cluster. helm rollback api 3 volta exatamente para a revisão 3. Use --atomic para desfazer sozinho se o deploy falhar.
4. Antes de aplicar, veja
helm template renderiza localmente; helm lint valida; o plugin helm diff mostra o que vai mudar — o equivalente ao terraform plan.
5. Distribuição
Charts podem ser publicados como artefatos OCI no mesmo registry das imagens (helm push) e assinados. Alternativa sem templates: Kustomize, com bases e overlays.
Na prática
Chart do CloudShop
yaml
# Chart.yaml
apiVersion: v2
name: cloudshop
description: Plataforma CloudShop (web + api)
type: application
version: 0.3.0
appVersion: "1.2.0"
# values.yaml
replicaCount: 2
image:
repository: ghcr.io/sua-org/cloudshop/api
tag: "" # obrigatorio via --set ou values de ambiente
pullPolicy: IfNotPresent
resources:
requests: { cpu: 100m, memory: 128Mi }
limits: { cpu: 500m, memory: 256Mi }
ingress:
enabled: true
host: cloudshop.dev
# templates/deployment.yaml (trecho)
# image: "{{ .Values.image.repository }}:{{ required \"informe image.tag\" .Values.image.tag }}"
# replicas: {{ .Values.replicaCount }}Ciclo de release e rollback
bash
helm lint ./charts/cloudshop
helm template cloudshop ./charts/cloudshop -f values-prod.yaml | kubectl apply --dry-run=client -f -
helm upgrade --install cloudshop ./charts/cloudshop \
-n cloudshop --create-namespace \
-f values-prod.yaml --set image.tag=v1.2.0 \
--atomic --wait --timeout 5m
helm history cloudshop -n cloudshop
helm rollback cloudshop 3 -n cloudshop # volta para a revisao 3
kubectl rollout status deploy/cloudshop-api -n cloudshop
kubectl rollout undo deploy/cloudshop-api -n cloudshop # alternativa sem HelmNota de segurança: Não passe senha por --set (fica no histórico e no release do Helm). Use Secret gerenciado externamente.
Template com valores e checksum de config
yaml
# templates/deployment.yaml (trecho)
spec:
replicas: {{ .Values.replicas }}
template:
metadata:
annotations:
# muda quando o ConfigMap muda -> força restart dos Pods
checksum/config: {{ include (print $.Template.BasePath "/configmap.yaml") . | sha256sum }}
spec:
containers:
- name: api
image: "{{ .Values.image.repository }}:{{ .Values.image.tag }}"
resources: {{- toYaml .Values.resources | nindent 12 }}Ciclo completo com Helm
bash
helm lint charts/api
helm template api charts/api -f values-prod.yaml | less # ver o YAML final
helm diff upgrade api charts/api -f values-prod.yaml -n cloudshop
helm upgrade --install api charts/api -f values-prod.yaml -n cloudshop --atomic --timeout 5m
helm history api -n cloudshop
helm rollback api 3 -n cloudshopPor que isso importa
Helm é o formato de distribuição padrão no ecossistema e a base do que o ArgoCD sincroniza.
Erro comum
Deixar image.tag vazio e implantar acidentalmente latest.
Dica de produção
--atomic --wait transforma upgrade falho em rollback automático, sem intervenção humana.
Pergunta de entrevista
Como você reverteria um deploy ruim feito por Helm, e o que aconteceria com o banco?
Glossário
- chart
- Pacote Helm com templates, values e metadados.
- revisão
- Versão de uma release Helm, usada para histórico e rollback.
- Chart
- Pacote Helm com templates, valores padrão e metadados.
- Release
- Instância de um chart instalada no cluster, com histórico de revisões.
- Kustomize
- Ferramenta de customização de YAML por overlays, sem templates.
Conexão com o CloudShop
Empacotar o CloudShop em chart e validar o rollback da versão anterior.
Quiz da aula
1. O que faz helm upgrade --atomic?
2. O que faz 'helm upgrade --atomic'?
3. Qual comando mostra o YAML final sem aplicar nada?
Minhas anotações
Salvo automaticamente neste navegador.