Comparativo: estratégias de deploy zero‑downtime em Kubernetes — RollingUpdate vs Blue/Green vs Canary

Por · Publicado em · Atualizado em · 7 min de leitura

Vista aérea de vários navios porta‑contêiner ancorados em um porto próximo à costa
Imagem que remete a 'containers' e orquestração em escala, adequada para Kubernetes Foto: Christian Alemu / Pexels

Este comparativo coloca lado a lado estratégias de deploy zero‑downtime em Kubernetes: RollingUpdate, Blue/Green e Canary. Você verá como funcionam, quando usar cada uma, trade‑offs, custos e exemplos práticos com Service, Ingress e Istio/Argo Rollouts. Use os critérios ao final para decidir com segurança.

O que significa zero‑downtime no Kubernetes, na prática

Zero‑downtime é manter a aplicação atendendo sem erros percebidos durante a troca de versão. No Kubernetes, isso depende de readinessProbes, health checks, política de atualização e capacidade extra para sobrepor versões.

Defina SLOs claros: erro máximo tolerado, p95 de latência e janela de observação. Sem métricas, você não valida se o rollout foi realmente "sem indisponibilidade".

Aspectos críticos: tolerância a conexões longas, sticky sessions, tempo de warm‑up, cache e compatibilidade de esquema de banco de dados.

  • Readiness/liveness probes corretas e rápidas
  • maxSurge/maxUnavailable ajustados ao tráfego
  • Capacidade reserva para sobrepor versões
  • Logs e métricas por versão para comparar impacto
  • Rollback claro e automatizado

RollingUpdate: simples e eficiente para a maioria

RollingUpdate substitui pods gradualmente dentro do mesmo Deployment. Você controla quantos podem ficar indisponíveis e quantos podem surgir além do desejado via maxUnavailable e maxSurge.

Prós: simples, baixo custo de infraestrutura e rollback rápido alterando a ReplicaSet anterior. Contras: tráfego mistura versões, o que dificulta comparações e pode afetar sessões persistentes.

Funciona muito bem quando a aplicação é stateless e compatível entre versões. Automatize via pipeline de CI/CD com gatilhos e validações de saúde.

Veja também como montar um pipeline em CI/CD com GitHub Actions: guia PHP/Laravel.

apiVersion: apps/v1
kind: Deployment
metadata:
  name: api
spec:
  replicas: 6
  strategy:
    type: RollingUpdate
    rollingUpdate:
      maxUnavailable: 0
      maxSurge: 1
  selector:
    matchLabels:
      app: api
  template:
    metadata:
      labels:
        app: api
    spec:
      containers:
        - name: api
          image: registry.example.com/api:v2
          ports:
            - containerPort: 8080
          readinessProbe:
            httpGet:
              path: /healthz
              port: 8080
            initialDelaySeconds: 5
            periodSeconds: 5

Blue/Green: isolamento total com troca de tráfego

Blue/Green mantém duas versões completas: Blue (atual) e Green (nova). Você testa Green isoladamente e, quando aprovada, alterna o tráfego de uma vez, via Service, Ingress ou load balancer.

Prós: separação forte e rollback instantâneo voltando o seletor. Contras: custo de capacidade duplicada durante o teste e a troca.

É ideal quando você precisa validar E2E com dados reais sem misturar versões. Atenção a migrações de banco: prefira evoluir esquema com compatibilidade direta e reversa. Para bancos, veja a abordagem de CDC em Estratégia de migração de banco de dados com zero-downtime usando CDC.

apiVersion: v1
kind: Service
metadata:
  name: api-svc
spec:
  selector:
    app: api
    version: green  # mude para 'blue' no rollback
  ports:
    - port: 80
      targetPort: 8080
---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: api-green
spec:
  replicas: 6
  selector:
    matchLabels:
      app: api
      version: green
  template:
    metadata:
      labels:
        app: api
        version: green
    spec:
      containers:
        - name: api
          image: registry.example.com/api:v2

Canary: medir impacto com tráfego parcial e promover

Canary envia uma fração do tráfego para a nova versão e compara métricas. A promoção é gradual, ex.: 5% → 25% → 50% → 100%. Você pode fazer isso com Ingress que suporta canary ou malha de serviço.

Ferramentas como Istio ou Argo Rollouts permitem divisão por peso, regras e análise automática. Combine com métricas de erro, latência p95 e saturação. Integre feature flags para liberar caminhos de código com segurança em paralelo a canary, como discutido em Feature flags em monólitos PHP: rollout seguro.

Veja conceitos de roteamento ponderado em Istio na documentação do provedor de nuvem, como no guia de tráfego do Service Mesh da Google Cloud.

apiVersion: networking.istio.io/v1beta1
kind: VirtualService
metadata:
  name: api
spec:
  hosts:
    - api.example.com
  http:
    - route:
        - destination:
            host: api-svc
            subset: v1
          weight: 95
        - destination:
            host: api-svc
            subset: v2
          weight: 5
---
apiVersion: networking.istio.io/v1beta1
kind: DestinationRule
metadata:
  name: api
spec:
  host: api-svc
  subsets:
    - name: v1
      labels:
        version: v1
    - name: v2
      labels:
        version: v2

Tabela comparativa: critérios objetivos de escolha

Compare pelos critérios mais importantes ao negócio e à operação. Abaixo, um resumo prático das três abordagens.

Critério RollingUpdate Blue/Green Canary
Risco de impacto ao usuário Baixo a médio (mistura versões) Baixo (troca atômica) Baixo (exposição controlada)
Custo de infraestrutura Baixo Médio a alto (capacidade duplicada) Médio (capacidade extra para duas versões)
Complexidade operacional Baixa Média Média a alta
Rollback Rápido (ReplicaSet anterior) Instantâneo (troca seletor) Rápido (peso volta a 0%)
Tempo para propagar versão Gradual automático Instantâneo na troca Gradual por etapas
Observabilidade necessária Básica Média (health e validações) Alta (métricas e SLOs por versão)
Compatível com autoscaling Sim Sim, por versão Sim, por subset/versão
Cenário típico Serviços stateless Lançamentos com teste E2E isolado Validação com métrica antes de promover

Roteamento: Service, Ingress e malha (Istio/Linkerd)

Service alterna versões via selectors. Ingress pode rotear por host/path e, em alguns controladores, oferecer canary por anotação. Malhas adicionam divisão de tráfego ponderada, circuit breaking e telemetria detalhada.

Para exemplos de canary e gestão de tráfego com malha, consulte documentação de provedores: Google Cloud sobre Service Mesh e roteamento ponderado. Blue/Green com balanceadores gerenciados em EKS também é comum.

  • Service: troca seletor de labels para Blue/Green
  • Ingress: split por host/path e, em alguns casos, canary
  • Service Mesh: pesos por subset, retries e políticas mTLS

Custos, riscos e governança do rollout

Custos variam por réplicas necessárias, tráfego, janelas de canary e duplicação de ambientes em Blue/Green. Tráfego alto e imagens grandes elevam egress e tempo de rollout.

Riscos comuns: migrações incompatíveis, quedas de performance na versão nova e sessões perdidas. Reduza com testes E2E, smoke tests automáticos e métricas por versão.

Documente critérios de promoção e rollback. Cronogramas, playbooks e responsabilidades claras ajudam. Se você sofre com incidentes frequentes em deploys, avalie uma Auditoria de processos de deploy e plano de correção.

  • Defina métricas‑guia: erro, latência e saturação
  • Automatize gates de promoção e rollback
  • Reserve capacidade para sobreposição segura
  • Planeje migrações compatíveis e reversíveis
  • Valide sessões e sticky routing quando necessário

Perguntas frequentes

Quando escolher RollingUpdate em vez de Blue/Green ou Canary?

Quando o serviço é stateless, as versões são compatíveis e você quer simplicidade e baixo custo. RollingUpdate funciona muito bem como padrão. Se precisa isolar versões para testes E2E ou medir impacto com precisão, considere Blue/Green ou Canary.

Posso fazer Canary sem service mesh?

Sim. Alguns controladores de Ingress suportam canary por anotação, redirecionando uma fração do tráfego. Porém, a observabilidade e os controles de política tendem a ser mais limitados que em uma malha de serviço, onde há pesos por subset e telemetria integrada.

Como tratar migrações de banco durante o deploy?

Use migrações compatíveis com versões simultâneas. Primeiro, aplique mudanças aditivas e preserve campos antigos. Faça o rollout da aplicação. Só depois remova campos obsoletos. Para cenários críticos, avalie CDC para transicionar sem interrupção.

Qual estratégia tem rollback mais rápido?

Blue/Green tende a ter rollback instantâneo, pois basta reverter o seletor ou rota. RollingUpdate reverte para a ReplicaSet anterior. Em Canary, você zera o peso da versão nova, o que também é rápido. A prontidão do sistema e automação influenciam o tempo.

Quais métricas observar em um canary release?

Erros por segundo, taxa de 5xx/4xx relevantes, p95/p99 de latência, saturação de CPU/memória, filas e timeouts. Monitore por versão para comparar com a baseline. Defina thresholds e janelas de observação para promoção automática ou rollback.

Quer escolher a estratégia de rollout certa para seu cluster?

Converse sobre critérios, riscos e automação para adaptar RollingUpdate, Blue/Green ou Canary ao seu cenário.

Falar sobre deploy zero‑downtime

Veja também