Designing zero-downtime deploys with blue/green in Kubernetes
Designing zero-downtime deploys with blue/green in Kubernetes
Blue/green deploys evitam interrupção enquanto você troca versões de apps. Em clusters pequenos, a estratégia funciona bem sem precisar de service mesh.
Este guia mostra como estruturar dois Deployments (blue e green) apontando para o mesmo Service, alternando via selector.
When to use
- Precisa trocar versões sem derrubar sessões ativas.
- Quer rollback rápido trocando apenas labels.
- Cluster não usa Istio/Linkerd e você quer algo leve.
Steps
1) Criar dois Deployments idênticos, exceto pelo label
Use app: myapp e color: blue ou color: green.
2) Apontar o Service para uma cor por vez
No Service, defina selector: { app: myapp, color: blue }. O tráfego vai só para o azul.
3) Publicar a nova versão na cor ociosa
Atualize o Deployment green com a nova imagem. Espere Ready e checagens de saúde.
4) Alternar o Service para a nova cor
Mude o selector para color: green. O switch é instantâneo e sem recriar pods.
5) Manter a versão anterior viva por minutos
Deixe o blue rodando para rollback rápido se surgir erro.
Tip: health checks e readiness
- Configure
readinessProbepara recusar tráfego até a app estar pronta. - Se usar migrations, rode fora do fluxo de deploy ou antes de apontar o Service para evitar falhas.
Clean up
- Depois de validar, atualize a cor antiga com a nova versão para manter paridade.
- Documente quem muda o selector e em que momento para evitar troca acidental.