Docker Swarm vs K3s cho startup 3 dev: chọn cái nào?

Chia sẻ bài viết

Mục lục
TL;DR
  • Docker Swarm dễ học, dùng Docker Compose syntax, đủ cho 5-10 service.
  • K3s là Kubernetes nhẹ (50MB binary), full ecosystem K8s nhưng learning curve cao.
  • Swarm phù hợp startup 1-3 dev, deploy nhanh, ít overhead RAM (50MB master).
  • K3s phù hợp khi cần GitOps, Helm chart, scale 10+ node, tận dụng skill K8s.
  • Khuyến nghị: bắt đầu Swarm với 3 VPS, switch K3s khi team lên 5+ dev hoặc cần K8s job.

Startup 3 dev sắp deploy production trên 3 con Cloud VPS, đang phân vân giữa Docker Swarm và K3s - chọn cái nào? Cả hai đều là container orchestrator chạy được multi-node, nhưng triết lý và độ phức tạp khác xa nhau. Bài này phân tích từng yếu tố: setup time, learning curve, RAM overhead, deploy speed, ecosystem để bạn quyết định nhanh.

Tóm tắt: Docker Swarm là Docker Compose nâng cấp lên multi-node, syntax giống hệt, học 1 ngày là dùng được. K3s là Kubernetes thật, chỉ nhẹ hơn 80% (binary 50MB thay vì 500MB), nhưng vẫn cần học YAML manifest, Helm, Ingress, ConfigMap, Secret, RBAC... Cần 1-2 tuần để vận hành tự tin.

Ngân sách startup 3 dev: 3-5 VPS Cloud loại 4-8GB là đủ. Cả Swarm và K3s đều chạy ổn ở size này. Khác biệt nằm ở thời gian, sức học và roadmap dài hạn.

1. Bảng so sánh nhanh Swarm vs K3s

Tiêu chíDocker SwarmK3s
Setup time15 phút1-2 giờ
Learning curve1 ngày (nếu biết Compose)1-2 tuần
RAM overhead master~50MB~500MB
RAM overhead worker~30MB~200MB
Binary size~80MB (Docker)~50MB (K3s)
EcosystemHạn chế, ít pluginFull Kubernetes
Helm chartKhông
GitOps (ArgoCD/Flux)Không native
Hire dev có skillKhó (ít người biết)Dễ (K8s phổ biến)
Production-ready

2. Setup Docker Swarm trên 3 VPS

# Cài Docker trên cả 3 VPS
curl -fsSL https://get.docker.com | sh
sudo usermod -aG docker $USER

# Init Swarm trên node 1 (manager)
docker swarm init --advertise-addr 1.2.3.4
# Output: docker swarm join --token SWMTKN-xxx 1.2.3.4:2377

# Trên 2 node còn lại (worker)
docker swarm join --token SWMTKN-xxx 1.2.3.4:2377

# Kiểm tra
docker node ls

3 lệnh, 5 phút. Swarm cluster sẵn sàng. So với K3s cần cài server, agent, kubeconfig, kubectl, manifests - mất 1-2 giờ.

3. Deploy app với Docker Swarm stack file

# docker-stack.yml
version: '3.8'

services:
  web:
    image: my-app:1.0
    deploy:
      replicas: 3
      update_config:
        parallelism: 1
        delay: 10s
      restart_policy:
        condition: on-failure
    ports:
      - "80:3000"
    networks:
      - web-net

  db:
    image: postgres:16
    volumes:
      - db-data:/var/lib/postgresql/data
    environment:
      POSTGRES_PASSWORD: example
    networks:
      - web-net

networks:
  web-net:
    driver: overlay

volumes:
  db-data:

# Deploy
docker stack deploy -c docker-stack.yml myapp
docker service ls
docker service ps myapp_web

Syntax gần như Docker Compose, dev đã biết Compose dùng được ngay. Update image rolling: docker service update --image my-app:1.1 myapp_web.

4. Setup K3s trên 3 VPS

# Trên node 1 (server)
curl -sfL https://get.k3s.io | sh -
sudo cat /var/lib/rancher/k3s/server/node-token  # ghi nhớ token

# Trên 2 node còn lại (agent)
curl -sfL https://get.k3s.io | K3S_URL=https://1.2.3.4:6443 K3S_TOKEN=xxx sh -

# Lấy kubeconfig về máy local
scp [email protected]:/etc/rancher/k3s/k3s.yaml ~/.kube/config
sed -i 's/127.0.0.1/1.2.3.4/' ~/.kube/config

# Kiểm tra
kubectl get nodes

Setup nặng hơn Swarm chút. Nhưng K3s có sẵn Traefik ingress, local-path storage, metrics-server, CoreDNS - không cần cài thêm.

5. Deploy app với K3s manifest

# deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
  name: web
spec:
  replicas: 3
  selector:
    matchLabels:
      app: web
  template:
    metadata:
      labels:
        app: web
    spec:
      containers:
      - name: web
        image: my-app:1.0
        ports:
        - containerPort: 3000
---
apiVersion: v1
kind: Service
metadata:
  name: web-svc
spec:
  selector:
    app: web
  ports:
  - port: 80
    targetPort: 3000
---
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: web-ingress
  annotations:
    traefik.ingress.kubernetes.io/router.entrypoints: web
spec:
  rules:
  - host: app.com
    http:
      paths:
      - path: /
        pathType: Prefix
        backend:
          service:
            name: web-svc
            port:
              number: 80

# Apply
kubectl apply -f deployment.yaml
kubectl get pods
kubectl logs -l app=web

YAML dài hơn Docker Compose 3-4x. Nhưng cho phép fine-tune mọi thứ: resource limit, probes, affinity, secrets, configmap.

6. RAM overhead thực tế

Cluster sizeSwarm totalK3s totalChênh lệch
1 manager + 2 worker~110MB~900MBK3s nặng hơn 790MB
3 manager + 3 worker~240MB~2100MBK3s nặng hơn 1.8GB

K3s ngốn RAM vì chạy etcd (hoặc sqlite), API server, controller manager, scheduler, kubelet, kube-proxy. Swarm chỉ chạy dockerd với raft consensus nhẹ.

Với VPS 4GB, Swarm để lại 3.7GB cho app. K3s để lại chỉ 3.0GB. Quan trọng với cluster nhỏ ngân sách hẹp.

7. Update và rollback

# Swarm rolling update
docker service update --image my-app:1.1 myapp_web

# Swarm rollback
docker service rollback myapp_web

# K3s rolling update
kubectl set image deployment/web web=my-app:1.1
kubectl rollout status deployment/web

# K3s rollback
kubectl rollout undo deployment/web
kubectl rollout history deployment/web

Cả hai đều có rolling update tự động. K3s ghi nhớ history nhiều version, Swarm chỉ ghi previous. Đủ cho 95% case.

8. Service discovery và load balancing

  • Swarm: service tự động resolve qua DNS internal (http://db:5432). Load balancing built-in IPVS.
  • K3s: Service object với ClusterIP, NodePort, LoadBalancer. DNS internal qua CoreDNS. Phức tạp hơn nhưng linh hoạt.

9. Storage và persistent volume

  • Swarm: volume Docker native, bind mount, NFS. Đơn giản, ít option.
  • K3s: StorageClass với local-path, Longhorn, NFS, Ceph. Có dynamic provisioning. Phù hợp khi cần stateful complex.

Với startup nhỏ chỉ chạy Postgres + Redis + 1 app, volume Swarm đủ. Khi cần multi-replica DB hoặc Ceph distributed, K3s thắng.

10. Ecosystem và monitoring

ToolSwarmK3s
Portainer UICó (free)Có (free)
Helm chart catalogKhôngCó (1000+ chart)
ArgoCD / Flux GitOpsKhông native
Prometheus stackCài tayHelm install 1 lệnh
Service mesh (Istio/Linkerd)Không
HPA autoscaleKhông

11. Quyết định: chọn Swarm hay K3s?

Chọn Docker Swarm khi:

  • Team 1-3 dev, không có K8s skill.
  • Cần deploy nhanh, không có thời gian học YAML manifest.
  • VPS RAM hẹp (2-4GB).
  • App đơn giản: 5-10 service, không cần autoscaling.
  • Đã có docker-compose.yml, muốn scale ra multi-node nhanh.

Chọn K3s khi:

  • Team có ít nhất 1 dev biết K8s.
  • Roadmap dài hạn cần scale 10+ node hoặc switch K8s managed (EKS, GKE).
  • Cần GitOps với ArgoCD, Helm chart manage.
  • App phức tạp: 20+ service, autoscaling, service mesh.
  • VPS đủ lớn (4-8GB+).

12. Roadmap migration từ Swarm sang K3s

Startup hay bắt đầu Swarm năm 1, switch K3s năm 2-3 khi team lên 5+ dev và cần ecosystem K8s. Plan migration:

  • Tháng 1-12: Swarm trên 3 VPS, deploy MVP, học K8s song song.
  • Tháng 13: dựng cluster K3s test ở 1 VPS riêng, port docker-stack.yml sang K8s manifest.
  • Tháng 14-15: deploy staging trên K3s, chạy parallel với Swarm prod.
  • Tháng 16: switch prod sang K3s, decommission Swarm.
Cloud VPS cho vibe coder

Cluster Swarm hoặc K3s từ 3 VPS - bắt đầu chỉ 597k/tháng

Cloud VPS TND sẵn AlmaLinux 9, Ubuntu 22/24, Debian 12/13. SSD CEPH, snapshot 1-click, backup hằng ngày, network 200Mbps trong nước. Internal network giữa các VPS không tính phí, latency dưới 1ms.

Xem 8 cấu hình Cloud VPS →

FAQ

Docker Swarm có còn được maintain không?

Có. Docker Inc vẫn maintain Swarm mode trong Docker Engine, không deprecated. Tuy không phát triển feature mới nhiều, nhưng stable và an toàn dùng production.

K3s có khác Kubernetes thường nhiều không?

K3s là Kubernetes đã được strip bớt component cloud-specific (như CSI plugin AWS, GCP). Còn lại 95% API compatible. Manifest viết cho K3s chạy thẳng trên K8s managed (EKS, GKE, AKS).

Có thể chạy Swarm và K3s trên cùng VPS không?

Có thể nhưng không nên. Cả 2 đều dùng iptables, overlay network, port range tương tự - dễ conflict. Nên dùng VPS riêng cho từng cluster để dễ debug.

Swarm có hỗ trợ Helm chart không?

Không native. Helm là Kubernetes-specific. Swarm chỉ có docker-compose YAML và docker secret. Nếu cần package manage thì dùng Docker Compose include hoặc viết script tự deploy stack.

K3s có thể chạy single-node được không?

Được. Cài K3s trên 1 VPS, node vừa là server vừa là worker. Phù hợp dev/staging hoặc app nhỏ. RAM tối thiểu 1GB cho K3s + 1GB cho app.

Có nên dùng Kompose để convert docker-compose sang K8s manifest không?

Kompose chuyển auto được 80% case đơn giản. Phần còn lại (volume, config phức tạp) phải edit tay. Dùng làm starting point thì OK, không nên dựa hoàn toàn.

2009
15+ năm vận hành liên tục
10+
tập đoàn lớn tin dùng
100+
doanh nghiệp SMB Việt
30 ngày
đổi key lỗi miễn phí
Phần mềm bản quyền chính hãng chúng tôi cung cấp
Bản quyền chính hãng Hóa đơn VAT đầy đủ Đổi key lỗi 30 ngày Vận hành từ 2009 MST 0200994870 Hotline 0225.999.6666