Deployments e ReplicaSets no Kubernetes – Controle e Atualização Eficiente de Aplicações Stateless
Deployments e ReplicaSets – controle de aplicações sem estado
No Kubernetes, garantir alta disponibilidade e escalabilidade para aplicações stateless exige recursos nativos que automatizem a criação, atualização e recuperação de pods. Os objetos Deployment e ReplicaSet cumprem esse papel, permitindo definir a quantidade desejada de réplicas, executar atualizações contínuas (rolling updates) sem downtime e reverter mudanças de forma segura.
Como o Deployment controla réplicas
- Deployment: objeto de nível superior que orquestra o ciclo de vida das réplicas.
- ReplicaSet: criado pelo Deployment; mantém o número de pods especificado ativo, substituindo automaticamente qualquer pod que falhe ou seja removido.
Fluxo básico
- Ao aplicar um Deployment, o Kubernetes gera um ReplicaSet associado.
- O ReplicaSet garante que a quantidade de pods definida em
spec.replicasesteja sempre em execução. - Alterações na imagem, nas variáveis de ambiente ou no número de réplicas são declaradas no Deployment, que ajusta o ReplicaSet e os pods de forma automática.
Exemplo de Deployment
apiVersion: apps/v1
kind: Deployment
metadata:
name: minha-app
spec:
replicas: 3 # quantidade desejada de pods
selector:
matchLabels:
app: minha-app # rótulo que identifica os pods do Deployment
template:
metadata:
labels:
app: minha-app
spec:
containers:
- name: app-container
image: minha-imagem:1.0 # versão inicial da aplicação
ports:
- containerPort: 80
Esse manifesto cria e mantém três pods idênticos, todos rotulados app=minha-app.
Rolling Update e Rollback
Rolling Update (atualização contínua)
Durante um rolling update, o Deployment substitui gradualmente os pods antigos pelos novos, obedecendo a uma estratégia que preserva a disponibilidade.
spec:
strategy:
type: RollingUpdate
rollingUpdate:
maxSurge: 1 # até 1 pod extra pode ser criado temporariamente
maxUnavailable: 0 # nenhum pod pode ficar indisponível
- maxSurge: número (ou percentual) de pods adicionais que podem ser criados acima do valor de
replicas. - maxUnavailable: número (ou percentual) de pods que podem estar fora de serviço durante a atualização.
Se a estratégia não for explicitada, o Kubernetes usa maxSurge: 25% e maxUnavailable: 25%.
Rollback (reversão)
O Kubernetes registra cada revisão do Deployment. Caso a nova versão apresente falhas, basta reverter para a revisão anterior:
# desfaz a última atualização
kubectl rollout undo deployment/minha-app
# desfaz para uma revisão específica
kubectl rollout undo deployment/minha-app --to-revision=2
Estratégias de atualização e observabilidade
| Estratégia | Descrição |
|---|---|
| RollingUpdate (padrão) | Substitui pods gradualmente, mantendo o serviço disponível. |
| Recreate | Remove todos os pods antigos antes de criar os novos – gera downtime e costuma ser usado apenas em cenários específicos. |
Monitorando o rollout
kubectl rollout status deployment/minha-app
O comando exibe progresso, sucesso ou falha da atualização em tempo real.
Histórico de revisões
kubectl rollout history deployment/minha-app
Mostra todas as revisões armazenadas, facilitando a escolha de uma versão para rollback.
Comandos essenciais para Deployments
| Comando | Função |
|---|---|
kubectl get deployments |
Lista todos os Deployments no namespace atual. |
kubectl describe deployment minha-app |
Exibe detalhes, eventos e status do Deployment. |
kubectl rollout status deployment/minha-app |
Acompanha o status da atualização em curso. |
kubectl rollout undo deployment/minha-app |
Executa rollback para a revisão anterior. |
kubectl scale deployment minha-app --replicas=5 |
Altera manualmente o número de réplicas. |
Atualizando a imagem da aplicação – passo a passo
- Modifique o manifesto: troque a tag da imagem.
containers:
- name: app-container
image: minha-imagem:1.1 # nova versão
- Aplique a mudança:
kubectl apply -f deployment.yaml
- Verifique o rollout:
kubectl rollout status deployment/minha-app
- Se necessário, faça rollback:
kubectl rollout undo deployment/minha-app
Resumo rápido
| Conceito | Papel |
|---|---|
| Deployment | Orquestra ReplicaSets, gerencia atualizações e rollbacks de aplicações stateless. |
| ReplicaSet | Garante que o número desejado de pods esteja sempre em execução. |
| Rolling Update | Atualiza pods de forma gradual, evitando ou minimizando downtime. |
| Rollback | Restaura rapidamente uma versão anterior em caso de falha. |
| Observabilidade | kubectl rollout status e kubectl rollout history fornecem visibilidade completa do processo. |
Deployments são fundamentais para ambientes dinâmicos e distribuídos, assegurando que sua aplicação esteja sempre disponível, escalável e atualizada com segurança.
Nos próximos artigos abordaremos o gerenciamento de aplicações com estado e técnicas avançadas de escalabilidade e resiliência.