Marcio Cunha

O que são Kubernetes Deployments e como fazer deploy sem downtime

Descubra como o Kubernetes gerencia atualizações de aplicativos em produção usando Rolling Updates, controle de réplicas e reversão rápida de versões sem queda.

Marcio Cunha•5 min
Também disponível em:EnglishEspañol
Resumo
  • Deployments no Kubernetes coordenam a criação e atualização de conjuntos de pods mantendo a aplicação sempre disponível.
  • A estratégia de rolling update substitui gradualmente pods antigos por novos evitando qualquer interrupção para o usuário final.
  • O controle de réplicas garante que o sistema mantenha exatamente a quantidade necessária de instâncias ativas durante todo o processo.
  • A reversão rápida permite voltar para a versão anterior de forma automatizada caso um erro crítico seja detectado em produção.
  • Configurar adequadamente os parâmetros de disponibilidade evita falhas de sobrecarga e garante estabilidade em sistemas distribuídos.

O que são Kubernetes Deployments e por que você precisa deles

Gerenciar softwares em servidores costumava ser uma dor de cabeça monumental. Quando uma nova versão de um sistema era liberada, a equipe de operações frequentemente precisava parar o serviço antigo, copiar os novos arquivos e reiniciar a aplicação, gerando minutos ou até horas de indisponibilidade para os usuários. Com a chegada dos contêineres e de plataformas de orquestração, esse cenário mudou drasticamente. No ecossistema do Kubernetes, a ferramenta fundamental para gerenciar o ciclo de vida das aplicações é o Deployment.

Em termos simples, um Deployment é um objeto de configuração que diz ao Kubernetes exatamente como rodar a sua aplicação. Ele funciona como um gerente de projeto rigoroso: você define quantas cópias do seu programa deseja rodar ao mesmo tempo, qual imagem de contêiner deve ser utilizada e como as atualizações devem acontecer. Na prática, isso significa que você nunca mais precisa alterar servidores manualmente. O Kubernetes assume a responsabilidade de manter o estado desejado, garantindo que se um servidor cair ou se uma nova versão precisar entrar no ar, o trabalho pesado seja feito de forma automatizada e transparente.

Como funciona o controle de réplicas e a estabilidade

O coração de um Deployment reside na sua capacidade de gerenciar o número de réplicas. Uma réplica é simplesmente uma cópia idêntica do seu contêiner rodando no cluster. Se o seu site precisa de três instâncias rodando simultaneamente para dar conta do tráfego, o Deployment garante que exatamente três pods estejam ativos o tempo todo. Caso um pod apresente falha e seja encerrado abruptamente, o sistema percebe a discrepância e cria imediatamente um substituto.

Para entender como os pods se comunicam e mantêm a rede organizada por trás dessas réplicas, vale a pena conferir a estrutura de pods e gerenciamento de rede. Quando você altera a configuração de um Deployment — como atualizar a versão do software —, ele não desliga tudo de uma vez. Ele utiliza uma estratégia inteligente chamada rolling update, que abordaremos em detalhes a seguir, garantindo que o tráfego dos usuários seja direcionado apenas para instâncias que já inicializaram e passaram por todas as verificações de saúde.

Atualizações sem downtime através do Rolling Update

O maior medo de qualquer engenheiro ao colocar uma nova versão em produção é tirar o serviço do ar. É aqui que entra o rolling update, o mecanismo padrão do Kubernetes para atualizar aplicações sem downtime. Em vez de desligar todas as instâncias antigas de uma só vez, o rolling update substitui os pods de forma gradual, em lotes controlados. Enquanto alguns pods antigos continuam atendendo os clientes, novos pods com a versão atualizada começam a ser criados e testados.

Para configurar esse comportamento na prática, utilizamos arquivos de manifesto em formato YAML. Abaixo está um exemplo funcional de um Deployment configurado para realizar atualizações suaves, controlando quantas instâncias podem ficar indisponíveis e quantas podem exceder o limite durante a transição.

apiVersion: apps/v1
kind: Deployment
metadata:
  name: minha-aplicacao
  labels:
    app: web
spec:
  replicas: 4
  strategy:
    type: RollingUpdate
    rollingUpdate:
      maxSurge: 1
      maxUnavailable: 1
  selector:
    matchLabels:
      app: web
  template:
    metadata:
      labels:
        app: web
    spec:
      containers:
      - name: app
        image: minha-imagem:v2.0
        ports:
        - containerPort: 8080

Neste arquivo de configuração, o parâmetro maxSurge define que o Kubernetes pode criar temporariamente um pod a mais do que o limite estipulado durante o processo de atualização. Já o maxUnavailable garante que no máximo um pod fique fora do ar simultaneamente. Na prática, isso significa que se você tem quatro réplicas, o cluster nunca terá menos de três instâncias ativas respondendo a requisições, eliminando qualquer impacto perceptível para quem está acessando o sistema.

O papel das verificações de saúde na transição segura

Muitas equipes cometem o erro de achar que basta trocar a versão da imagem no arquivo YAML para ter um deploy seguro. Se a nova versão da aplicação iniciar mas travar logo em seguida ao receber a primeira requisição, o Kubernetes continuará enviando tráfego para ela se não houver mecanismos adequados de validação. É por isso que os Deployments trabalham em conjunto com as sondas de saúde conhecidas como Liveness e Readiness Probes.

A Readiness Probe é a ferramenta que diz ao cluster se o pod está pronto para começar a receber tráfego. Durante um rolling update, o novo pod só passa a receber conexões dos usuários quando essa sonda retorna um sinal positivo, indicando que a aplicação carregou com sucesso e está com todas as conexões de banco de dados estabelecidas. Se a aplicação falhar nessa inicialização, o Kubernetes pausa o processo de atualização e evita que o bug contamine o restante do ambiente de produção.

Como fazer reversão rápida (Rollback) quando algo dá errado

Mesmo com testes rigorosos em ambientes de homologação, bugs inesperados podem escapar e chegar até a produção. Quando isso acontece, o fator mais crítico é o tempo de resposta. Em infraestruturas tradicionais, fazer o rollback exigia compilar novamente a versão anterior, gerar novos pacotes e executar scripts manuais de cópia. No Kubernetes, o histórico de revisões é mantido nativamente, permitindo uma reversão instantânea.

Cada alteração aplicada a um Deployment gera uma nova revisão gravada no histórico do cluster. Caso você perceba que a versão recém-implantada apresentou um comportamento anômalo, basta executar um comando rápido para retornar ao estado anterior e estabilizar o sistema imediatamente.

kubectl rollout undo deployment/minha-aplicacao

Se você precisar investigar versões específicas antes de decidir qual histórico restaurar, é possível listar todas as revisões anteriores com o comando kubectl rollout history deployment/minha-aplicacao. Na prática, essa facilidade transforma o que antes era uma crise estressante de madrugada em um procedimento rotineiro e seguro de poucos segundos, garantindo a resiliência operacional do negócio.

Conclusão e melhores práticas para produção

Dominar os Kubernetes Deployments e as estratégias de atualização sem downtime é um divisor de águas para qualquer equipe de engenharia de software. Ao substituir o medo de colocar códigos novos em produção por processos automatizados de rolling update e controle rigoroso de réplicas, as organizações ganham velocidade de entrega e estabilidade operacional. O segredo do sucesso reside em combinar arquivos de configuração bem estruturados com testes automatizados e sondas de saúde confiáveis, garantindo que o sistema se cure e se adapte de forma autônoma diante de qualquer imprevisto.