Realizar o deploy de uma nova versão de uma aplicação em produção é uma das etapas mais críticas de um processo de entrega de software. Mesmo quando uma aplicação possui testes automatizados, pipelines de CI/CD, ambientes de homologação e validações de qualidade, ainda existe um risco associado à execução da nova versão em produção.
Problemas de performance, incompatibilidades com serviços externos, falhas de integração, consumo excessivo de memória, aumento de latência e erros não previstos podem aparecer apenas quando a aplicação está submetida ao tráfego real.
Nesse contexto, estratégias de deployment são utilizadas para reduzir o risco de uma nova versão. Em vez de simplesmente desligar a aplicação antiga e iniciar a nova, podemos controlar como a nova versão será introduzida no ambiente produtivo.
No Kubernetes, existem estratégias nativas, principalmente o Rolling Update, e estratégias mais avançadas de Progressive Delivery, como Canary Deployment e Blue-Green Deployment, normalmente implementadas com ferramentas como o Argo Rollouts.
As três abordagens possuem objetivos semelhantes: disponibilizar novas versões de forma segura. Entretanto, cada uma controla de maneira diferente aspectos como:
- Quantidade de usuários expostos à nova versão;
- Velocidade do deployment;
- Capacidade de rollback;
- Consumo de infraestrutura;
- Controle do tráfego;
- Validação por métricas;
- Impacto de uma falha em produção.
1. O que é uma estratégia de deployment?
Uma estratégia de deployment define como uma versão nova substitui a versão atualmente executada.
Imagine uma aplicação em produção na versão:
Aplicação v1
Uma nova versão é desenvolvida:
Aplicação v2
A principal questão passa a ser:
Como migrar os usuários da versão v1 para a versão v2 com o menor risco possível?
Existem diferentes respostas para esse problema.
Rolling Update
v1 → v1 + v2 → v2
Os Pods antigos são substituídos gradualmente.
Blue-Green
Blue (v1) → validação da Green (v2) → troca de tráfego → Green (v2)
As duas versões coexistem, mas normalmente apenas uma recebe o tráfego produtivo.
Canary
90% v1 + 10% v2
↓
70% v1 + 30% v2
↓
50% v1 + 50% v2
↓
0% v1 + 100% v2
A nova versão recebe uma pequena parcela do tráfego e sua exposição aumenta progressivamente após validação.
2. Rolling Update: a estratégia nativa do Kubernetes
O Rolling Update é a estratégia mais comum e padrão para objetos Deployment no Kubernetes.
O Kubernetes substitui gradualmente os Pods pertencentes à versão antiga pelos Pods da nova versão. Durante o processo, ambas as versões podem coexistir temporariamente. A estratégia RollingUpdate é o padrão do Deployment, enquanto a alternativa nativa é Recreate.
Imagine uma aplicação com cinco réplicas:
Versão atual:
Pod 1 - v1
Pod 2 - v1
Pod 3 - v1
Pod 4 - v1
Pod 5 - v1
Após iniciar o deployment da versão v2:
Pod 1 - v2
Pod 2 - v1
Pod 3 - v1
Pod 4 - v1
Pod 5 - v1
Depois:
Pod 1 - v2
Pod 2 - v2
Pod 3 - v1
Pod 4 - v1
Pod 5 - v1
O processo continua até:
Pod 1 - v2
Pod 2 - v2
Pod 3 - v2
Pod 4 - v2
Pod 5 - v2
A velocidade e o comportamento dessa substituição são controlados principalmente por:
maxSurgemaxUnavailable
2.1 maxSurge
O parâmetro maxSurge define quantos Pods adicionais podem ser criados temporariamente durante o deployment.
Considere:
replicas: 10
Com:
maxSurge: 2
O Kubernetes pode executar temporariamente até:
10 Pods desejados + 2 Pods extras = 12 Pods
Isso permite criar novos Pods antes de remover todos os Pods antigos.
Também é possível utilizar porcentagem:
maxSurge: 25%
A documentação do Kubernetes permite valores absolutos ou percentuais; percentuais para maxSurge são arredondados para cima. O padrão é 25%.
2.2 maxUnavailable
O parâmetro maxUnavailable define quantos Pods podem ficar indisponíveis durante a atualização.
Exemplo:
replicas: 10
maxUnavailable: 1
Durante o processo, o Kubernetes tentará garantir que no mínimo nove Pods permaneçam disponíveis.
Também é possível utilizar porcentagem:
maxUnavailable: 20%
Nesse caso, até 20% das réplicas desejadas podem estar indisponíveis durante a atualização. Para porcentagens, o Kubernetes arredonda maxUnavailable para baixo; o padrão também é 25%.
2.3 Exemplo de Rolling Update
apiVersion: apps/v1
kind: Deployment
metadata:
name: application
spec:
replicas: 5
strategy:
type: RollingUpdate
rollingUpdate:
maxSurge: 1
maxUnavailable: 0
selector:
matchLabels:
app: application
template:
metadata:
labels:
app: application
spec:
containers:
- name: application
image: my-application:2.0.0
ports:
- containerPort: 8080
readinessProbe:
httpGet:
path: /health
port: 8080
Com essa configuração:
Replicas desejadas: 5
maxSurge: 1
maxUnavailable: 0
O Kubernetes pode criar um Pod adicional temporariamente, chegando a seis Pods, enquanto busca manter os cinco Pods disponíveis.
Um fluxo simplificado seria:
[ v1 ][ v1 ][ v1 ][ v1 ][ v1 ]
↓
[ v1 ][ v1 ][ v1 ][ v1 ][ v1 ][ v2 ]
↓
[ v1 ][ v1 ][ v1 ][ v1 ][ v2 ]
↓
[ v1 ][ v1 ][ v1 ][ v2 ][ v2 ]
↓
[ v1 ][ v1 ][ v2 ][ v2 ][ v2 ]
↓
[ v1 ][ v2 ][ v2 ][ v2 ][ v2 ]
↓
[ v2 ][ v2 ][ v2 ][ v2 ][ v2 ]
2.4 Vantagens do Rolling Update
Simplicidade
Não exige necessariamente ferramentas adicionais.
O próprio Kubernetes gerencia o processo através do recurso Deployment.
Menor consumo de infraestrutura
Normalmente não é necessário manter duas versões completas da aplicação durante todo o deployment.
Ausência de downtime em configurações adequadas
Com probes, réplicas suficientes e valores corretos de maxSurge e maxUnavailable, é possível atualizar a aplicação gradualmente sem interromper o serviço.
Integração nativa
Funciona diretamente com:
Deployment
ReplicaSet
Service
Readiness Probe
Liveness Probe
HPA
2.5 Limitações do Rolling Update
O maior problema é que o Rolling Update não fornece controle preciso sobre qual percentual dos usuários recebe cada versão.
Por exemplo, se existem:
10 Pods
e durante o deployment temos:
9 Pods v1
1 Pod v2
isso não significa necessariamente que exatamente 10% dos usuários receberão a nova versão.
O tráfego dependerá de fatores como:
- Balanceamento do Service;
- Conexões persistentes;
- Distribuição de requisições;
- Número de réplicas;
- Comportamento do cliente;
- Ingress;
- Service Mesh.
Além disso, o Kubernetes Deployment não realiza, por conta própria, análise de métricas de negócio para decidir se uma versão deve continuar ou sofrer rollback. Ferramentas de progressive delivery adicionam esse tipo de capacidade.
3. Canary Deployment
O Canary Deployment é uma estratégia na qual uma pequena parcela dos usuários recebe inicialmente a nova versão da aplicação.
O objetivo é limitar o chamado blast radius, ou seja, limitar o número de usuários potencialmente impactados caso exista um problema.
O conceito vem da ideia de validar uma mudança em pequena escala antes de expô-la completamente.
Imagine:
Versão estável: v1
Nova versão: v2
Em vez de migrar todos os usuários:
100% → v2
podemos fazer:
95% → v1
5% → v2
Após análise:
90% → v1
10% → v2
Depois:
75% → v1
25% → v2
E assim sucessivamente:
50% → v1
50% → v2
↓
25% → v1
75% → v2
↓
0% → v1
100% → v2
O Argo Rollouts define Canary como uma estratégia em que a nova versão é liberada para uma pequena porcentagem do tráfego de produção e permite configurar etapas específicas para controlar essa progressão.
4. Canary Deployment com Argo Rollouts
O Kubernetes padrão não possui um objeto Deployment com Canary completo baseado em porcentagem de tráfego e análise progressiva de métricas.
Para esse cenário, uma solução comum é utilizar o Argo Rollouts, que adiciona um controlador e CRDs para estratégias como Canary e Blue-Green. Ele também pode integrar o rollout com Ingress Controllers, Service Meshes e provedores de métricas.
Em vez de:
kind: Deployment
podemos utilizar:
kind: Rollout
Exemplo:
apiVersion: argoproj.io/v1alpha1
kind: Rollout
metadata:
name: application
spec:
replicas: 10
selector:
matchLabels:
app: application
template:
metadata:
labels:
app: application
spec:
containers:
- name: application
image: my-application:2.0.0
ports:
- containerPort: 8080
strategy:
canary:
steps:
- setWeight: 10
- pause:
duration: 5m
- setWeight: 25
- pause:
duration: 10m
- setWeight: 50
- pause:
duration: 15m
- setWeight: 100
Nesse cenário, a estratégia é:
Etapa 1
10% do tráfego → nova versão
↓
Aguardar 5 minutos
↓
Etapa 2
25% do tráfego → nova versão
↓
Aguardar 10 minutos
↓
Etapa 3
50% do tráfego → nova versão
↓
Aguardar 15 minutos
↓
Etapa final
100% → nova versão
O Argo Rollouts permite etapas como setWeight e pause, inclusive pausas manuais ou com duração configurada.
5. O papel do Traffic Routing no Canary
Existe uma diferença importante entre:
Quantidade de Pods
e:
Quantidade de tráfego
Suponha que existam:
9 Pods v1
1 Pod v2
Podemos pensar inicialmente:
1 Pod de 10 = 10% do tráfego
Porém, isso é apenas uma aproximação.
Sem um mecanismo avançado de roteamento, a distribuição pode ser aproximada pela proporção de Pods. A própria documentação do Argo Rollouts destaca essa limitação e explica que, para um controle mais fino de pesos, é necessário utilizar um Ingress Controller ou Service Mesh com capacidade de traffic shaping.
Com um sistema de traffic routing, é possível definir:
95% → Stable
5% → Canary
mesmo que a quantidade de Pods não represente exatamente essa mesma proporção.
Exemplo conceitual:
┌──────────────────┐
Usuários ────────► │ Ingress / Gateway│
└────────┬─────────┘
│
┌─────────┴─────────┐
│ │
90% 10%
│ │
▼ ▼
┌─────────────┐ ┌─────────────┐
│ Stable v1 │ │ Canary v2 │
└─────────────┘ └─────────────┘
Dependendo da arquitetura, o roteamento pode ser integrado com tecnologias como:
- NGINX;
- Istio;
- Linkerd;
- AWS ALB;
- App Mesh;
- SMI e outros provedores suportados.
O Argo Rollouts possui integrações específicas para diferentes mecanismos de traffic routing.
6. Canary baseado em métricas
Um dos maiores benefícios do Canary é a possibilidade de tomar decisões baseadas em dados reais.
Durante uma etapa:
90% Stable
10% Canary
podemos monitorar indicadores como:
Taxa de erro
HTTP 5xx
Exceptions
Falhas de API
Latência
p95
p99
Tempo médio de resposta
Consumo de recursos
CPU
Memória
Network
Métricas de negócio
Pedidos concluídos
Logins realizados
Pagamentos aprovados
Taxa de conversão
Suponha que a nova versão apresente:
v1
Error Rate: 0.2%
p95: 150ms
E o Canary:
v2
Error Rate: 4.8%
p95: 1200ms
O rollout pode ser interrompido antes que a nova versão seja entregue para toda a base de usuários.
O Argo Rollouts oferece integração com provedores de métricas e análise para apoiar promoções ou rollbacks automatizados.
7. Fluxo completo de um Canary Deployment
Um fluxo de produção pode funcionar assim:
CI/CD Pipeline
│
▼
Build da imagem
│
▼
Testes automatizados
│
▼
Publicação no Registry
│
▼
Atualização do Rollout
│
▼
Nova versão é criada
│
▼
5% do tráfego
│
▼
Análise de métricas
│ │
Sucesso Falha
│ │
▼ ▼
10% tráfego Rollback
│
▼
25% tráfego
│
▼
50% tráfego
│
▼
100% tráfego
│
▼
Deploy concluído
8. Blue-Green Deployment
O Blue-Green Deployment trabalha com dois ambientes ou duas versões da aplicação.
Tradicionalmente:
Blue = versão atual
Green = nova versão
Exemplo:
BLUE
my-application:1.0.0
GREEN
my-application:2.0.0
Inicialmente:
Usuários
│
▼
BLUE - v1
A nova versão é criada:
┌──────────────┐
│ BLUE - v1 │
Usuários ───────►│ Produção │
└──────────────┘
┌──────────────┐
│ GREEN - v2 │
│ Preview/Test │
└──────────────┘
A versão Green pode ser validada antes de receber o tráfego principal.
Após a aprovação:
Antes:
Usuários → BLUE v1
Depois:
Usuários → GREEN v2
A troca pode ser muito rápida porque, em vez de substituir Pods progressivamente, o roteamento de produção passa a apontar para a nova versão.
A documentação do Argo Rollouts descreve Blue-Green como uma estratégia na qual a versão antiga e a nova podem coexistir, enquanto a nova é validada antes da troca do tráfego de produção.
9. Blue-Green no Kubernetes com Argo Rollouts
O Argo Rollouts pode utilizar dois Services:
Active Service
Preview Service
A arquitetura pode ser representada assim:
┌──────────────────────┐
│ Usuários │
└──────────┬───────────┘
│
▼
┌──────────────────────┐
│ Active Service │
└──────────┬───────────┘
│
▼
┌──────────────────────┐
│ BLUE v1 │
│ Produção │
└──────────────────────┘
┌──────────────────────┐
│ Preview Service │
└──────────┬───────────┘
│
▼
┌──────────────────────┐
│ GREEN v2 │
│ Preview │
└──────────────────────┘
Exemplo:
apiVersion: argoproj.io/v1alpha1
kind: Rollout
metadata:
name: application
spec:
replicas: 5
selector:
matchLabels:
app: application
template:
metadata:
labels:
app: application
spec:
containers:
- name: application
image: my-application:2.0.0
strategy:
blueGreen:
activeService: application-active
previewService: application-preview
autoPromotionEnabled: false
scaleDownDelaySeconds: 30
Nesse modelo, o activeService continua direcionando o tráfego normal para a versão atual, enquanto o previewService pode direcionar tráfego de validação para a nova versão. O Argo Rollouts permite pausar antes da promoção usando autoPromotionEnabled: false e possui configurações adicionais para análise antes ou depois da promoção.
10. Fluxo do Blue-Green Deployment
Podemos dividir o processo em etapas.
Etapa 1 — Produção
Active Service
│
▼
BLUE - v1
A versão atual atende os usuários.
Etapa 2 — Criação da nova versão
Active Service Preview Service
│ │
▼ ▼
BLUE - v1 GREEN - v2
Produção Nova versão
A nova versão é iniciada.
Etapa 3 — Validação
A equipe pode testar:
GREEN - v2
Por meio de:
- Smoke tests;
- Testes automatizados;
- Testes de integração;
- Testes manuais;
- Testes de performance;
- Análise de métricas.
Etapa 4 — Promoção
Após a aprovação:
Antes:
Active Service → BLUE v1
A promoção altera o direcionamento:
Depois:
Active Service → GREEN v2
O tráfego produtivo é transferido para a nova versão.
Etapa 5 — Período de segurança
A versão anterior pode continuar disponível temporariamente.
GREEN - v2 → Produção
BLUE - v1 → Mantida temporariamente
Isso facilita uma reversão rápida caso um problema seja identificado.
11. Rollback no Blue-Green
O Blue-Green possui uma característica muito importante: a versão anterior pode continuar pronta para uso.
Imagine:
BLUE = v1
GREEN = v2
Após a promoção:
Usuários → GREEN v2
Se for identificado um problema crítico:
Usuários → BLUE v1
O rollback pode ser baseado na reversão do roteamento, desde que a versão anterior ainda esteja disponível e compatível com o estado do sistema.
Porém, existe um ponto fundamental: rollback de aplicação não significa automaticamente rollback de banco de dados.
Imagine que a versão v2 execute uma migration:
ALTER TABLE users ADD COLUMN new_field;
Isso pode ser compatível com a versão antiga.
Mas imagine uma migration destrutiva:
ALTER TABLE users DROP COLUMN old_field;
Caso a versão v1 dependa dessa coluna:
Rollback da aplicação → v1
Banco de dados → incompatível
Portanto, estratégias de deployment devem ser combinadas com estratégias seguras de evolução de banco de dados.
Uma abordagem muito utilizada é:
Expand
↓
Deploy
↓
Migrate
↓
Contract
Por exemplo:
Expand
Adicionar a nova estrutura sem remover a antiga.
Banco v1 + novas estruturas
Deploy
Publicar a aplicação nova.
Aplicação v1 + Aplicação v2 compatíveis
Migrate
Migrar gradualmente dados ou comportamento.
Contract
Somente após a estabilização remover estruturas antigas.
12. Comparação entre Rolling Update, Canary e Blue-Green
| Característica | Rolling Update | Canary | Blue-Green |
|---|---|---|---|
| Estratégia nativa no Kubernetes | Sim | Não de forma completa | Não de forma completa |
| Ferramenta adicional | Não necessariamente | Geralmente sim | Geralmente sim |
| Duas versões simultâneas | Temporariamente | Sim | Sim |
| Controle percentual de tráfego | Limitado | Excelente com traffic routing | Geralmente troca de ambiente |
| Validação gradual | Limitada | Excelente | Pré/pós-promoção |
| Rollback | Possível | Excelente | Muito rápido |
| Consumo de infraestrutura | Baixo/Médio | Médio | Alto |
| Complexidade | Baixa | Alta | Média |
| Ideal para | Aplicações comuns | Sistemas críticos e alto tráfego | Sistemas que exigem troca controlada |
13. Comparação visual
Rolling Update
v1 v1 v1 v1 v1
↓ Deploy
v2 v1 v1 v1 v1
↓
v2 v2 v1 v1 v1
↓
v2 v2 v2 v1 v1
↓
v2 v2 v2 v2 v1
↓
v2 v2 v2 v2 v2
Canary
Produção
95% → v1
5% → v2
↓
90% → v1
10% → v2
↓
75% → v1
25% → v2
↓
50% → v1
50% → v2
↓
0% → v1
100% → v2
Blue-Green
Fase inicial
100% → BLUE v1
0% → GREEN v2
Validação
100% → BLUE v1
GREEN v2 → Preview/Test
Promoção
0% → BLUE v1
100% → GREEN v2
14. Quando utilizar Rolling Update?
O Rolling Update é uma excelente escolha quando:
- A aplicação possui múltiplas réplicas;
- Existe uma boa estratégia de readiness probes;
- As versões podem coexistir;
- Não existe necessidade de controle preciso do tráfego;
- O sistema possui risco moderado;
- A equipe deseja simplicidade operacional.
Exemplo:
API interna
5 réplicas
Baixo risco
Boa cobertura de testes
Uma configuração como:
strategy:
type: RollingUpdate
rollingUpdate:
maxSurge: 1
maxUnavailable: 0
pode ser suficiente.
O Kubernetes também permite acompanhar o andamento do rollout e detectar falta de progresso através de progressDeadlineSeconds; a documentação indica que o padrão é 600 segundos.
15. Quando utilizar Canary Deployment?
O Canary é recomendado quando:
- A aplicação possui grande volume de usuários;
- Uma falha pode causar grande impacto;
- Existem métricas confiáveis;
- A equipe possui observabilidade madura;
- Existe necessidade de limitar o impacto de uma nova versão;
- O sistema permite múltiplas versões executando simultaneamente.
Exemplo:
API de pagamentos
Milhões de requisições
SLA crítico
Prometheus + Grafana + Alerting
Uma estratégia possível:
1%
↓
5%
↓
10%
↓
25%
↓
50%
↓
100%
Entre cada etapa:
Analisar:
- Error rate
- p95
- p99
- CPU
- Memory
- Métricas de negócio
Se algo falhar:
Abortar
↓
Retornar tráfego para Stable
↓
Investigar
16. Quando utilizar Blue-Green?
O Blue-Green é recomendado quando:
- É necessário validar a aplicação inteira antes da promoção;
- A troca precisa ser rápida;
- O rollback precisa ser simples;
- A infraestrutura suporta temporariamente duas versões;
- Não é necessário fazer uma liberação progressiva por percentual.
Exemplo:
Sistema corporativo crítico
Fluxo:
Produção → BLUE v1
Nova versão → GREEN v2
Testes → GREEN v2
Aprovação → troca Active Service
Produção → GREEN v2
Caso ocorra uma falha:
GREEN v2 → problema
↓
Retornar tráfego
↓
BLUE v1
17. O que é Progressive Delivery?
Progressive Delivery é um conceito que evolui a ideia de Continuous Delivery.
Em um pipeline tradicional:
Code
↓
Build
↓
Test
↓
Deploy
↓
Produção
No Progressive Delivery:
Code
↓
Build
↓
Test
↓
Deploy
↓
Pequena exposição
↓
Análise de métricas
↓
Aumentar exposição
↓
Nova análise
↓
Produção completa
A diferença fundamental é que o deployment deixa de ser apenas uma ação técnica e passa a ser um processo controlado por feedback real do ambiente de produção.
O Argo Rollouts descreve Progressive Delivery justamente como uma liberação controlada e gradual, com exposição limitada da nova versão, observação contínua e promoção ou rollback com base na validação.
18. A importância da observabilidade
Canary e Blue-Green ficam muito mais eficientes quando combinados com observabilidade.
Uma arquitetura pode ser:
┌───────────────┐
│ Kubernetes │
└───────┬───────┘
│
┌──────────┴──────────┐
│ │
▼ ▼
Stable v1 Canary v2
│ │
└──────────┬──────────┘
│
▼
Prometheus
│
▼
Grafana
│
▼
Argo Rollouts
│
┌─────────┴─────────┐
│ │
Sucesso Falha
│ │
▼ ▼
Promover Rollback
Métricas importantes incluem:
HTTP 5xx
Latency p95
Latency p99
CPU
Memory
Restarts
OOMKilled
Saturation
Request rate
Business KPIs
A pergunta não deve ser apenas:
Os Pods estão rodando?
Mas também:
A nova versão está funcionando melhor ou pelo menos dentro dos limites aceitáveis?
Um Pod pode estar:
Running
e ainda assim a aplicação pode estar apresentando:
Latência alta
Erros de negócio
Falhas de integração
Timeouts
Por isso, readiness probes são importantes, mas não substituem análise mais profunda de métricas. Essa é uma das diferenças importantes entre o Rolling Update tradicional e soluções de progressive delivery.
19. Readiness Probe e estratégias de deploy
Independentemente da estratégia escolhida, a aplicação deve informar corretamente quando está pronta para receber tráfego.
Exemplo:
readinessProbe:
httpGet:
path: /actuator/health/readiness
port: 8080
initialDelaySeconds: 10
periodSeconds: 5
Enquanto o Pod não estiver pronto:
Pod criado
↓
Aplicação iniciando
↓
Readiness = false
↓
Não recebe tráfego
↓
Aplicação pronta
↓
Readiness = true
↓
Pode receber tráfego
Isso é fundamental especialmente em Rolling Updates.
Uma estratégia segura não depende apenas do controller de deployment. Ela depende também da qualidade da configuração da aplicação.
20. Exemplo de estratégia para diferentes níveis de criticidade
Aplicação de baixo risco
Rolling Update
Configuração:
maxSurge: 1
maxUnavailable: 0
Aplicação de médio risco
Rolling Update
+
Readiness Probe
+
Liveness Probe
+
Observabilidade
+
Rollback automático ou manual via pipeline
Aplicação de alto risco
Canary
+
Traffic Routing
+
Prometheus
+
Grafana
+
Alerting
+
Análise automática
+
Rollback automático
Aplicação crítica com necessidade de reversão rápida
Blue-Green
+
Preview Environment
+
Smoke Tests
+
Pre-Promotion Analysis
+
Post-Promotion Monitoring
21. Arquitetura recomendada para Progressive Delivery
Uma arquitetura moderna pode utilizar:
Developer
│
▼
Git Repository
│
▼
CI Pipeline
│
├── Testes
├── Lint
├── Security Scan
└── Build Docker Image
│
▼
Container Registry
│
▼
GitOps Repository
│
▼
Argo CD
│
▼
Kubernetes
│
▼
Argo Rollouts
│
├── Canary
│ │
│ ▼
│ Traffic Routing
│ │
│ ▼
│ Métricas
│ │
│ ▼
│ Promote/Rollback
│
└── Blue-Green
│
▼
Preview + Active
Nesse modelo:
- CI constrói e valida o software;
- Container Registry armazena a imagem;
- GitOps controla o estado desejado;
- Argo CD sincroniza o cluster;
- Argo Rollouts controla a estratégia de entrega;
- Prometheus/Grafana fornecem observabilidade.
22. Conclusão
Não existe uma única estratégia de deployment ideal para todas as aplicações.
O Rolling Update é simples, eficiente e faz parte do Kubernetes. É uma ótima escolha para aplicações que podem coexistir entre versões e não precisam de um controle detalhado sobre a distribuição do tráfego.
O Blue-Green Deployment é especialmente útil quando é necessário preparar e validar completamente uma nova versão antes de realizar uma troca rápida do tráfego. Sua principal vantagem é a simplicidade de promoção e a possibilidade de reversão rápida, embora normalmente exija mais recursos de infraestrutura.
O Canary Deployment oferece o maior nível de controle sobre a exposição da nova versão. Ele permite liberar a aplicação progressivamente para uma parcela dos usuários, analisar métricas reais e interromper o rollout antes que uma falha atinja toda a base de usuários.
Podemos resumir as estratégias da seguinte maneira:
Rolling Update
→ Simplicidade e eficiência
→ Atualização gradual de Pods
→ Estratégia nativa do Kubernetes
Blue-Green
→ Validação completa antes da promoção
→ Troca rápida entre versões
→ Excelente para rollback rápido
Canary
→ Exposição gradual ao tráfego
→ Redução do blast radius
→ Métricas e análise progressiva
→ Ideal para ambientes críticos
Para ambientes modernos de produção, especialmente aplicações de alto impacto, a evolução natural é sair de um modelo baseado apenas em:
Deploy → Torcer para funcionar
para um modelo de Progressive Delivery:
Deploy
↓
Expor parcialmente
↓
Medir
↓
Validar
↓
Promover
ou
Rollback
Dessa forma, o Kubernetes deixa de ser apenas uma plataforma para executar containers e passa a fazer parte de uma estratégia completa de entrega segura, automatizada, observável e resiliente.
Top comments (0)