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
E para adicionar um serviço:
docker service create --name meu_servico --replicas 3 minha_imagem
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:
- Inicie o cluster:
docker swarm init
- Crie um serviço:
docker service create --name web --replicas 3 -p 80:80 nginx
Pronto! Seu nginx está rodando com 3 réplicas.
Kubernetes:
- 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
- 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
- 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
- Aplique os arquivos YAML:
kubectl apply -f deployment.yaml
kubectl apply -f service.yaml
kubectl apply -f hpa.yaml
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)
awesome Rui