DEV Community

Cover image for Kubernetes vs Docker Swarm: Qual a diferença na prática?
Rui Valim
Rui Valim

Posted on

Kubernetes vs Docker Swarm: Qual a diferença na prática?

Read this article in English

Se você já trabalhou com contêineres, sabe que a orquestração é essencial para gerenciar aplicações em escala. Os dois nomes que sempre aparecem nessa discussão são Kubernetes e Docker Swarm. Ambas são ferramentas poderosas, mas cada uma tem seu jeitinho de fazer as coisas. Mas afinal, qual é a diferença na prática?

 

1. Docker Swarm tem um início mais rápido

Se você está começando no mundo da orquestração de contêineres, o Docker Swarm pode ser a escolha mais amigável. Hoje ele já vem integrado ao Docker Engine junto a instalação, e com apenas alguns comandos, você pode criar um cluster e gerenciar seus serviços.

Por exemplo, para iniciar um cluster no Docker Swarm, basta rodar:

docker swarm init
Enter fullscreen mode Exit fullscreen mode

E para adicionar um serviço:

docker service create --name meu_servico --replicas 3 minha_imagem
Enter fullscreen mode Exit fullscreen mode

Bem simples, não é mesmo? Já o Kubernetes tem uma curva de aprendizado mais complicada, fazendo uso de vários arquivos YAML. A configuração inicial pode ser intimidadora e complexa, especialmente se você estiver montando um cluster do zero (E sem usar ArgoCD). Ferramentas como Minikube ou kubeadm ajudam, mas ainda assim, Kubernetes exige um entendimento mais profundo de conceitos como Pods, Services, Deployments e Namespaces.

 

2. Kubernetes ao infinito e além

Quando o assunto é escalabilidade, o Kubernetes é rei do pedaço. Ele foi projetado para lidar com cargas de trabalho massicas e ambientes altamente distribuídos. Empresas como Google, Spotify e Airbnb usam Kubernetes para gerenciar milhares de contêineres em produção.

Kubernetes já tem um suporte bem robusto para auto-scaling out of the box, outros pontos que tornam o Kubernetes mais escalável são coisas com o sistema poderoso de self-healing e intelligent scheduling, que resolvem muitas coisas complexas para nós com a maior facilidade do mundo.

O Docker Swarm é mais limitado nesses pontos. Ele escala bem para projetos menores ou médios, mas pode não ser a melhor escolha para ambientes que exigem uma complexidade maior de orquestração ou que envolvem milhares de nós.

 

3. Seus ecossistemas

Por ser mais antigo e extremamente popular, o ecossistema do Kubernetes é vasto e está em constante crescimento. Existem ferramentas para praticamente tudo: monitoramento (Prometheus, Grafana), gerenciamento de secrets (HashiCorp Vault), CI/CD (ArgoCD, Jenkins) e muito mais. Além da presença do mesmo em vários serviços de nuvem como a Azure, AWS e GCP.

O Docker Swarm é bem popular também, mas ainda não é tão adotado pela comunidade como o Kubernetes é, por consequente acaba por ter menos recursos e ferramentas disponível para o uso. Ele funciona bem para casos de uso mais simples, mas não oferece a mesma flexibilidade e variedade de ferramentas que o Kubernetes. Se você precisar de algo além do básico, irá acabar sentindo falta de funcionalidades.

 

4. Mas Rui, qual tu recomenda?

Depois de analisar esses pontos podemos chegar em uma conclusão bem simples até: Você precisa subir poucos deployments, sem muita complexidade e com uma certa velocidade? Usa o Docker Swarm, nesse caso o Kubernetes vai ser um overkill no teu projeto, tanto em complexidade como no bolso. Mas agora, se seu ambiente ira rodar de forma distribuída em vários servidores, precisa garantir um nearly 100% UP Time, ter varias ferramentas de observabilidade e comunicação complexa entre seus micro-serviços? Usa o Kubernetes, seu ambiente estará bem mais robusto e preparado para esse workload intenso.

 

5. Vamos por a mão na massa

Um pequeno exemplo de uso das duas ferramentas:

Docker Swarm:

  1. Inicie o cluster:
   docker swarm init
Enter fullscreen mode Exit fullscreen mode
  1. Crie um serviço:
   docker service create --name web --replicas 3 -p 80:80 nginx
Enter fullscreen mode Exit fullscreen mode

Pronto! Seu nginx está rodando com 3 réplicas.

Kubernetes:

  1. Crie um Deployment:
   apiVersion: apps/v1
   kind: Deployment
   metadata:
     name: web-deployment
   spec:
     selector:
       matchLabels:
         app: web
     template:
       metadata:
         labels:
           app: web
       spec:
         containers:
         - name: nginx
           image: nginx
           ports:
           - containerPort: 80
Enter fullscreen mode Exit fullscreen mode
  1. Crie um Service para expor o Deployment:
   apiVersion: v1
   kind: Service
   metadata:
     name: web-service
   spec:
     selector:
       app: web
     ports:
       - protocol: TCP
         port: 80
         targetPort: 80
     type: LoadBalancer
Enter fullscreen mode Exit fullscreen mode
  1. Crie um HPA para configurar o AutoScaling:
apiVersion: autoscaling/v2
kind: HorizontalPodAutoscaler
metadata:
  name: web-hpa
spec:
  scaleTargetRef:
    apiVersion: apps/v1
    kind: Deployment
    name: web-deployment
  minReplicas: 1
  maxReplicas: 10
  metrics:
    - type: Resource
      resource:
        name: memory
        target:
          averageUtilization: 80
          type: Utilization
Enter fullscreen mode Exit fullscreen mode
  1. Aplique os arquivos YAML:
   kubectl apply -f deployment.yaml
   kubectl apply -f service.yaml
   kubectl apply -f hpa.yaml
Enter fullscreen mode Exit fullscreen mode

Como você pode ver, o Docker Swarm é mais direto, enquanto o Kubernetes exige um pouco mais de configuração.

 

Conclusão

Tanto Kubernetes quanto Docker Swarm têm seus pontos fortes e fracos. A escolha certa depende das necessidades do seu projeto e da sua familiaridade com as ferramentas.

E você, já usou alguma dessas ferramentas? Qual foi sua experiência? Compartilhe nos comentários!


Esse texto foi inteiramente escrito por mim, utilizando IA apenas como correção de texto.

Top comments (1)

Collapse
 
fastii profile image
fastII

awesome Rui