Deployments e ReplicaSets no Kubernetes – Controle e Atualização Eficiente de Aplicações Stateless

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

  1. Ao aplicar um Deployment, o Kubernetes gera um ReplicaSet associado.
  2. O ReplicaSet garante que a quantidade de pods definida em spec.replicas esteja sempre em execução.
  3. 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

  1. Modifique o manifesto: troque a tag da imagem.
containers:
- name: app-container
  image: minha-imagem:1.1   # nova versão
  1. Aplique a mudança:
kubectl apply -f deployment.yaml
  1. Verifique o rollout:
kubectl rollout status deployment/minha-app
  1. 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.