Kubernetes Gerenciado vs Docker Compose: Qual Escolher em Produção

12/10/2026  ·  Devskin

Kubernetes Gerenciado vs Docker Compose: Qual Escolher em Produção

O kubernetes gerenciado virou a resposta padrão para quem pergunta como rodar containers em produção, mas nem todo SaaS precisa dele no primeiro dia. Neste comparativo técnico, coloco lado a lado o kubernetes gerenciado (EKS, GKE, AKS e equivalentes de outros provedores) e a combinação clássica de Docker Compose em uma VM Linux, olhando arquitetura, operação, custo e maturidade do time.

A ideia não é declarar um vencedor. É mostrar onde cada abordagem se sustenta e onde ela começa a cobrar juros técnicos.

Como cada arquitetura funciona

Docker Compose em um host único

O Compose descreve serviços, redes e volumes em um arquivo YAML, e o Docker Engine executa tudo em um único nó. Na frente, normalmente fica um reverse proxy como Traefik ou Nginx terminando TLS. A rede é uma bridge local, os volumes ficam no disco da VM e o deploy é, em geral, um docker compose pull && docker compose up -d disparado por pipeline via SSH.

services:
  api:
    image: registry.exemplo.com/api:1.4.2
    restart: unless-stopped
    env_file: .env
    healthcheck:
      test: [CMD, curl, -f, http://localhost:8080/health]
      interval: 30s
      retries: 3

O modelo é simples e previsível. O custo dessa simplicidade: o host é ponto único de falha, a escala é vertical e atualizações sem indisponibilidade exigem scripts ou um proxy bem configurado.

Kubernetes gerenciado: o control plane fica com o provedor

Em um kubernetes gerenciado, o provedor opera API server, etcd, scheduler e controllers, com alta disponibilidade e upgrades assistidos. Você cuida dos worker nodes (ou escolhe um modo mais abstrato, quando o provedor oferece) e dos manifests. O núcleo do modelo é o reconciliation loop: você declara o estado desejado e os controllers trabalham continuamente para alcançá-lo.

apiVersion: apps/v1
kind: Deployment
metadata:
  name: api
spec:
  replicas: 3
  strategy:
    type: RollingUpdate
    rollingUpdate:
      maxUnavailable: 0
      maxSurge: 1
  selector:
    matchLabels:
      app: api
  template:
    metadata:
      labels:
        app: api
    spec:
      containers:
        - name: api
          image: registry.exemplo.com/api:1.4.2
          readinessProbe:
            httpGet:
              path: /health
              port: 8080
          resources:
            requests:
              cpu: 250m
              memory: 256Mi
            limits:
              memory: 512Mi

Aqui entram Service, Ingress, HPA, PodDisruptionBudget, ConfigMap e Secret. Cada peça resolve um problema real, mas também adiciona superfície de configuração para o time dominar.

Prós e contras na prática

Docker Compose

  • Prós: curva de aprendizado baixa, ambiente de desenvolvimento muito próximo ao de produção, poucos componentes para depurar e custo de infraestrutura mínimo.
  • Contras: sem scheduling entre nós, sem autoscaling nativo, rollout sem downtime depende de engenharia própria e a recuperação de falha do host é manual ou semiautomatizada.

Kubernetes gerenciado

  • Prós: rolling updates com probes, self-healing, autoscaling horizontal, isolamento por namespace, RBAC, ecossistema amplo (Helm, Kustomize, operators, service mesh) e portabilidade razoável entre provedores.
  • Contras: complexidade operacional real, curva de aprendizado íngreme, custo fixo de cluster (muitos provedores cobram pelo control plane; confira a tabela vigente) e risco de overengineering em produtos pequenos.

Um ponto que costuma ser subestimado: o kubernetes gerenciado não elimina operação. Ele muda o tipo de operação. Você deixa de se preocupar com etcd, mas passa a lidar com versões de API depreciadas, upgrades de node pool, CNI, ingress controller, políticas de rede e requests/limits mal dimensionados.

Trade-offs: custo, observabilidade e deploy

Custo. Compose em uma VM bem dimensionada tende a ser a opção mais barata para cargas pequenas e médias. O kubernetes gerenciado compensa quando o aproveitamento de recursos melhora com bin packing, autoscaling e múltiplos serviços compartilhando nós. Sem requests e limits bem calibrados, porém, o cluster vira apenas uma VM cara com mais camadas. Para atacar esse tema com método, vale ler Custo de Cloud: como reduzir até 70% com DevOps na prática.

Observabilidade. No Compose, logs do Docker, métricas do host e um agente de coleta resolvem boa parte dos casos. No kubernetes gerenciado, a observabilidade passa a ser requisito: métricas por pod, eventos do cluster, logs centralizados e alertas sobre estado de rollout. Sem isso, a plataforma fica opaca justamente quando mais precisa de transparência.

Deploy e CI/CD. O pipeline muda de natureza. No Compose, o artefato é uma imagem e o deploy é uma troca de container. No cluster, o artefato é imagem mais manifest versionado, idealmente aplicado por GitOps ou por kubectl/Helm com credenciais restritas. Se você ainda está estruturando essa etapa, o tutorial Deploy Automatizado com GitHub Actions e Docker: Tutorial Passo a Passo mostra uma base sólida que serve de ponto de partida para qualquer um dos dois caminhos.

Time e bus factor. Uma stack só é boa se o time consegue operá-la às 3h da manhã. Um kubernetes gerenciado nas mãos de uma única pessoa que entende o cluster é um risco maior do que um Compose simples e bem documentado.

Quando escolher cada um

  • Compose em VM: MVP, SaaS em fase inicial, poucas dependências, tráfego previsível, time pequeno e tolerância a janelas curtas de manutenção.
  • Kubernetes gerenciado: múltiplos serviços com ciclos de release independentes, necessidade de autoscaling, requisitos de alta disponibilidade, ambientes efêmeros por pull request e times com capacidade de manter a plataforma.
  • Meio-termo: serviços gerenciados de containers do provedor (como plataformas serverless de containers) ou Docker Swarm/Nomad em cenários específicos, quando você quer orquestração sem toda a carga do ecossistema Kubernetes.

Um caminho pragmático é preparar a aplicação para migrar sem pressa: seguir os princípios de 12-factor, expor endpoints de health, externalizar configuração e estado, versionar imagens de forma imutável e manter o pipeline agnóstico ao destino. Assim, a decisão por kubernetes gerenciado vira uma evolução planejada, não uma reescrita de emergência.

Conclusão

O kubernetes gerenciado entrega resiliência, padronização e escala, mas cobra em complexidade e custo fixo. Docker Compose entrega velocidade e simplicidade, mas tem um teto claro. Escolha pela dor real do seu produto hoje, com um plano de evolução definido, e não pela moda do momento. Plataforma boa é a que seu time consegue operar com segurança e que acompanha o crescimento do negócio.

Contact

Send a message

Get in touch