Home / Desenvolvimento / Docker e Kubernetes não são DevOps: complicação disfarçada de progresso

Docker e Kubernetes não são DevOps: complicação disfarçada de progresso

Container ship stuck in port — Docker e Kubernetes não são DevOps
  • Docker e Kubernetes viraram sinônimo de “DevOps” no Brasil — mas não são, são ferramentas.
  • O sinal claro de que a escolha foi equivocada: cluster Kubernetes em produção e deploy ainda levando mais de quinze minutos.
  • Cultura, automação de teste e continuous delivery importam uma ordem de grandeza a mais do que a escolha de orquestrador.
  • A ferramenta correta é a mais simples que resolve o problema real. Servidor bare-metal, VM, PaaS, Docker, Kubernetes — cada uma tem um nicho distinto.
  • Quando o cluster tem mais pods que desenvolvedores, o problema é organizacional, não técnico.

Docker e Kubernetes não são DevOps. São complicação disfarçada de progresso.

A maioria das empresas brasileiras de médio porte que adotaram Docker e Kubernetes entre 2019 e 2024 buscava institucionalizar práticas de DevOps. O resultado operacional predominante foi o oposto: aumento de complexidade sem ganho de throughput de entrega. A CNCF Annual Survey 2023 registra que 84% das organizações estão usando ou avaliando Kubernetes em produção, e que complexidade operacional é o principal desafio relatado pelos próprios usuários. A DORA Report 2023 (Google) reforça o achado: os times de alta performance não adotam Kubernetes por padrão — adotam a ferramenta mais simples capaz de resolver o problema concreto. Plataformas legadas (bare-metal, VM, PaaS) ainda entregam performance equivalente ou superior em times de pequeno e médio porte.

A tese deste post é técnica, não editorial: o problema central nunca foi a infraestrutura. Foi a ausência de cultura, processo e automação. Containers são instrumentos de qualidade elevada quando há conteúdo a ser colocado dentro deles. Quando não há, constituem overhead de origem organizacional.

A história das 47 imagens

Um caso observado com frequência no mercado brasileiro de e-commerce entre 2019 e 2024 ilustra o padrão. Empresa de aproximadamente 300 desenvolvedores, com aplicação monolítica em servidor único Ubuntu e deploy via Capistrano levando doze minutos, decide “modernizar” a infraestrutura. A justificativa formal: alinhar a stack ao que Netflix e Google utilizam.

Linha do tempo do caso:

  • 2019: cluster de quatro nós, doze microsserviços, Helm charts, GitLab CI. Deploy: vinte e cinco minutos.
  • 2020: dobram o time, dobram os microsserviços. Adotam Istio como service mesh. Deploy: trinta e cinco minutos.
  • 2021: incidentes começam a crescer. Adotam Datadog, Sentry, PagerDuty. Contratação de dois SREs.
  • 2022: ArgoCD para GitOps. Pipeline de CI/CD vira nova fonte de incidentes.
  • 2023: cluster de doze nós, 47 imagens em produção, deploy de trinta minutos. Os dois SREs pedem desligamento no mesmo mês.
  • 2024: reescrita de metade dos microsserviços para monolito. Deploy volta para oito minutos.

A pergunta que não foi feita em 2019 era a única que importava: por que o deploy levava vinte e cinco minutos? A resposta era conhecida antes da migração: testes manuais, ausência de pipeline, build local consumindo dezoito minutos. Resolver isso primeiro, com CI/CD maduro e build incremental, teria custado uma fração do investimento realizado em orquestração.

Quando Docker e Kubernetes fazem sentido

Docker e Kubernetes resolvem problemas específicos. Adotá-los fora desses contextos é a fonte predominante de overhead desnecessário observado no mercado.

Docker e Kubernetes fazem sentido quando:

  • **O ambiente muda com frequência.** Times polyglot, múltiplas versões de runtime, bibliotecas conflitantes. O problema do “funciona na minha máquina” é recorrente e documentado em ticket.
  • **Deploys são frequentes e SLA é alto.** Dez ou mais deploys por dia. Cada minuto de fricção no processo se traduz em feature não entregue.
  • **Times estão distribuídos geograficamente.** Container resolve a divergência entre ambiente local e ambiente de produção sem replicar setup manual em cada workstation.
  • **CI/CD já está maduro e o container é o artefato final do pipeline.** Container, nesse cenário, é a última etapa, não a primeira.

Em todos esses casos, o ganho é mensurável. Todos os casos, porém, pressupõem que o problema de processo foi resolvido antes. Docker e Kubernetes não resolvem problema de processo. Expõem a ausência dele com mais clareza.

Quando Docker e Kubernetes são overhead que ninguém pediu

O reverso é igualmente frequente. Cenários em que a containerização é pior que a alternativa simples:

  • **Aplicação monolítica, deploy semanal, time de cinco desenvolvedores.** Servidor único com `rsync` resolve. Adicionar container é abstração sem função clara.
  • **Banco de dados relacional tradicional (Postgres, MySQL) em produção crítica.** Storage persistente, backup e replicação são todos mais simples em VM ou bare-metal do que em cluster Kubernetes.
  • **Empresa sem automação de teste.** Container vira repositório de dívida técnica em vez de solução. A desculpa “agora está em container” substitui a correção do problema real.
  • **Cultura de deploy sem pipeline de validação automatizada.** Kubernetes amplia a falta de processo. Em vez de um servidor mal configurado, passam a existir doze nós mal configurados sem rastreabilidade da versão em execução.

O sinal mais claro de que o cenário é o segundo: cluster Kubernetes em produção cuja documentação é mais complexa que a documentação do código que executa. Quando ninguém consegue explicar o que cada pod faz ou por que ele existe sem consultar Confluence, o overhead venceu o ganho.

O que é DevOps de verdade, e por que Kubernetes não entrega isso

DevOps é cultura antes de ferramenta. O framework CALMS (Culture, Automation, Lean, Measurement, Sharing), formulado por Jez Humble e Damon Edwards, descreve a arquitetura conceitual. Em termos operacionais, a aplicação prática se reduz a três pilares:

1. CI/CD maduro. Build, teste e deploy automatizados. O desenvolvedor executa git push e a mudança chega a produção sem intervenção manual. A maioria das empresas brasileiras autodenominadas “DevOps” não atende a esse critério.

2. Observabilidade. Métricas, logs e traces integrados. Quando algo falha, a resposta para o que, onde e por que chega em menos de cinco minutos, não quarenta e cinco.

3. Post-mortem sem culpados. A pergunta após incidente é “o que o sistema ensinou sobre essa falha”, não “quem foi o responsável”. Sem essa prática, o medo domina o processo de release e ninguém executa deploy.

Kubernetes, isoladamente, não entrega nenhum dos três. É possível operar o cluster mais avançado do mercado e ainda assim o pipeline permanecer travado em vinte e três minutos de build, e a investigação de incidente exigir consulta a logs distribuídos em 47 pods.

Critério de três perguntas antes de subir cluster

Antes de aprovar a próxima proposta de adoção de Kubernetes, três perguntas merecem resposta objetiva:

1. O deploy atual leva mais de quinze minutos? Em caso afirmativo, o gargalo é teste manual ou build lento, não orquestração. A ordem de solução é outra.

2. A cobertura de testes automatizados no caminho crítico é superior a setenta por cento? Em caso negativo, container amplifica a distribuição de bugs. Bugs passam a ser entregues em 47 imagens em vez de uma.

3. O time tem capacidade de operar Kubernetes em regime 24/7? Em caso negativo, a previsão é de seis incidentes críticos por trimestre. A contratação de SRE precede o cluster, ou o cluster não é aprovado.

Se qualquer resposta é “não” ou “depende”, a decisão correta é não adotar Kubernetes ainda. A sequência é voltar para VM, automatizar o que é automatizável e reavaliar a questão em horizonte de dezoito meses. A organização poupa burnout e capital.

Como decidir sem transformar tecnologia em religião

O critério de seleção é direto: a ferramenta mais simples capaz de resolver o problema real entra antes; a substituição por ferramenta mais complexa ocorre quando a anterior não aguenta a demanda. A complexidade não é objetivo; é consequência inevitável de problema real não resolvido.

Faixas de decisão operacional:

  • **1 a 5 desenvolvedores, 1 aplicação, deploy diário ou menos** → servidor único (VM ou bare-metal) com script de deploy manual ou Ansible. Investimento: R$ 0 a R$ 2 mil por mês.
  • **5 a 20 desenvolvedores, poucos serviços, deploy de 5 a 10 por dia** → Docker com Docker Compose, ou PaaS (Fly.io, Render, Railway). Investimento: R$ 2 a R$ 10 mil por mês.
  • **20 ou mais desenvolvedores, microsserviços, deploy de 50 ou mais por dia** → Kubernetes **condicionado** à existência de SRE dedicado. Em ausência, EKS, GKE ou AKS gerenciado com suporte empresarial. Investimento: R$ 20 a R$ 100 mil por mês.
  • **Acima desse porte** → Kubernetes gerenciado com platform team dedicado de 3 a 5 SREs sênior. Investimento em pessoas: R$ 200 mil ou mais por ano.

A variável determinante da decisão é orçamento e estrutura organizacional, não tecnologia. Kubernetes é caro não em licença, mas em gente qualificada para operá-lo. Quando a estrutura de gente não existe, a estrutura de cluster é investimento sem retorno.

A ferramenta é a parte fácil

A porção difícil do problema é ter testes automatizados, ter CI/CD maduro, ter observabilidade, ter prática de post-mortem e ter cultura de responsabilidade compartilhada pela produção. Nenhum desses elementos é entregue por kubectl apply. Cada um exige anos de investimento organizacional e nenhuma biblioteca mágica.

A próxima vez que uma proposta de “subir Kubernetes para resolver o deploy lento” chegar para aprovação, a investigação prioritária é outra: por que o deploy está lento. A resposta, em padrão de mercado observado entre 2019 e 2024, está no pipeline de testes, no tempo de build ou na ausência de automação — não no orquestrador. Cluster é consequência de processo maduro, não substituto para ele.

Marcado:

Deixe um Comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *