0 XP
Módulo 8 · Kubernetes e Helm

Helm: empacotar, versionar e fazer rollback

Avançado 50 min+25 XPHelm

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 appVersion
  • values.yaml: padrões
  • templates/: manifestos com Go template
  • values-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 Helm

Nota 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 cloudshop

Por 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. 1. O que faz helm upgrade --atomic?

  2. 2. O que faz 'helm upgrade --atomic'?

  3. 3. Qual comando mostra o YAML final sem aplicar nada?

Minhas anotações

Salvo automaticamente neste navegador.

AnteriorPróxima