Container orchestration là nền tảng của cloud-native computing hiện đại. Khi số lượng containers tăng lên, việc quản lý chúng một cách thủ công là bất khả thi. Kubernetes và Docker Swarm là hai giải pháp orchestration phổ biến nhất, mỗi cái có ưu nhược điểm riêng.
Bài viết này so sánh chi tiết Kubernetes vs Docker Swarm, giúp bạn chọn giải pháp phù hợp cho use case của mình.
Container Orchestration là gì?
Container Orchestration là quá trình tự động hóa việc quản lý, scheduling, scaling và networking của containers trong một distributed environment. Trước khi có orchestration, developers phải manually deploy, scale, và manage containers across multiple hosts – công việc tốn thời gian và dễ sai sót.
Container orchestration giải quyết các vấn đề:
- Scheduling – Tự động chọn optimal node để deploy containersScaling – Tự động scale up/down dựa trên trafficLoad balancing – Phân phối traffic đều giữa các containersService discovery – Containers tự động tìm thấy nhauHealth monitoring – Tự động restart failed containers, redistribute loadRolling updates – Update application không downtime
| Orchestration Feature | Mô tả |
|---|---|
| Auto-healing | Tự restart containers khi fail hoặc node die |
| Horizontal scaling | Tự động thêm/bớt replicas dựa trên metrics |
| Zero-downtime deploy | Rolling update với no service interruption |
| Storage orchestration | Tự động mount volumes cho containers |
| Network management | Automated networking và DNS discovery |
Kubernetes là gì?
Kubernetes (thường gọi là K8s) là open-source container orchestration platform được phát triển ban đầu bởi Google, sau đó donated cho Cloud Native Computing Foundation (CNCF) năm 2015. Kubernetes cung cấp framework hoàn chỉnh để deploy, scale, và manage containerized applications.
Kubernetes có kiến trúc master-worker với các components chính:
Kubernetes Architecture
| Component | Mô tả | Chạy trên |
|---|---|---|
| kube-apiserver | API server – entry point cho tất cả management tasks | Master node |
| etcd | Distributed key-value store cho cluster state | Master node |
| kube-scheduler | Schedule pods đến optimal nodes | Master node |
| kube-controller-manager | Run controller loops (replication, endpoints, etc) | Master node |
| kubelet | Agent chạy trên mỗi node, manage containers | Worker node |
| kube-proxy | Network proxy, handle routing | Worker node |
| Container Runtime | Docker, containerd, CRI-O | Worker node |
Kubernetes Objects (Resources)
# Pod - smallest deployable unit
apiVersion: v1
kind: Pod
metadata:
name: nginx-pod
spec:
containers:
- name: nginx
image: nginx:latest
ports:
- containerPort: 80
# Deployment - declarative updates cho Pods
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx-deployment
spec:
replicas: 3
selector:
matchLabels:
app: nginx
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx:latest
ports:
- containerPort: 80
# Service - network abstraction
apiVersion: v1
kind: Service
metadata:
name: nginx-service
spec:
selector:
app: nginx
ports:
- protocol: TCP
port: 80
targetPort: 80
type: LoadBalancer
Kubernetes CLI (kubectl)
# Cài đặt kubectl # Linux: curl -LO "https://dl.k8s.io/release/$(curl -L -s https://dl.k8s.io/release/stable.txt)/bin/linux/amd64/kubectl" chmod +x kubectl sudo mv kubectl /usr/local/bin/ # Kết nối đến cluster kubectl config use-context my-cluster # Deploy application kubectl apply -f deployment.yaml # Xem pods, services, deployments kubectl get pods kubectl get svc kubectl get deployments # Describe và debug kubectl describe pod nginx-pod kubectl logs nginx-pod kubectl exec -it nginx-pod -- /bin/sh # Scale deployment kubectl scale deployment nginx-deployment --replicas=5 # Xem cluster info kubectl cluster-info kubectl get nodes
Cài đặt Kubernetes (minikube cho development)
# Cài đặt minikube (single-node K8s) # Linux curl -LO https://storage.googleapis.com/minikube/releases/latest/minikube-linux-amd64 sudo install minikube-linux-amd64 /usr/local/bin/minikube # Start cluster minikube start --driver=docker # Hoặc dùng k3s (lightweight K8s) curl -sfL https://get.k3s.io | sh - # Kiểm tra kubectl get nodes kubectl get pods -A # Stop cluster minikube stop # Delete cluster minikube delete
Docker Swarm là gì?
Docker Swarm là native container orchestration solution của Docker, được tích hợp sẵn trong Docker Engine. Docker Swarm biến một group Docker hosts thành một single virtual Docker host, đơn giản hóa việc deploy và manage containers ở scale.
Docker Swarm Architecture
- Manager Nodes – Maintain cluster state, schedule workloads, serve API endpointsWorker Nodes – Run containers, report back to managersRaft Consensus – Manager nodes dùng Raft consensus để agree trên stateService Discovery – Built-in DNS-based discoveryRouting Mesh – Distribute traffic across containers
Initialize Docker Swarm
# Initialize swarm (trên manager node) docker swarm init # Join worker vào swarm (copy token từ output của swarm init) docker swarm join --token:2377 # Join another manager docker swarm join-token manager # List nodes trong swarm docker node ls # Leave swarm docker swarm leave
Deploy Services trong Swarm
# Deploy service (similar to kubectl apply) docker service create --name web \ --replicas 3 \ --publish 80:80 \ nginx:latest # List services docker service ls # Inspect service docker service inspect web # Scale service docker service scale web=5 # Update service (rolling update) docker service update --image nginx:1.21 web # Remove service docker service rm web # View service logs docker service logs web
Docker Compose cho Swarm
# docker-compose.yml
version: "3.8"
services:
web:
image: nginx:latest
deploy:
replicas: 3
ports:
- "80:80"
networks:
- webnet
redis:
image: redis:alpine
deploy:
replicas: 1
ports:
- "6379:6379"
networks:
- webnet
networks:
webnet:
driver: overlay
# Deploy stack (swarm mode)
docker stack deploy -c docker-compose.yml myapp
# List stacks
docker stack ls
# Remove stack
docker stack rm myapp
So sánh chi tiết Kubernetes vs Docker Swarm
| Tiêu chí | Kubernetes | Docker Swarm |
|---|---|---|
| Setup complexity | Phức tạp (min 3-5 nodes cho production) | Đơn giản (2 nodes bắt đầu được) |
| Learning curve | Steep (cần hiểu nhiều concepts) | Dễ (developers quen Docker đã biết) |
| Scalability | 5,000+ nodes, 300,000+ pods | ~1,000 nodes, 50,000+ containers |
| Ecosystem | Rất lớn (CNCF projects, Helm, Operators) | Nhỏ hơn (Docker Compose-centric) |
| Cloud support | AKS, EKS, GKE – managed services phổ biến | Docker Swarm mode on ACS, Swarm-based |
| Rolling updates | Deployment strategy (RollingUpdate, Recreate) | docker service update với –update-delay |
| Auto-scaling | HPA, VPA, Cluster Autoscaler | Manual scaling (docker service scale) |
| Storage | Persistent volumes, CSI drivers | Docker volumes, NFS, proprietary plugins |
| Networking | CNI plugins, Ingress controllers, kube-dns | Overlay network, ingress mesh |
| Secret management | Secrets objects, integration với Vault | Docker secrets (Swarm-native) |
| Monitoring | Prometheus, Grafana, Datadog integration | Built-in health checks, Docker metrics driver |
| CLI tool | kubectl | docker (extension của Docker CLI) |
Kubernetes Advantages và Disadvantages
Kubernetes Advantages
- Industry standard – 80%+ Fortune 500 dùng K8sMassive ecosystem – Helm charts, Operators, CNCF projectsCloud-agnostic – Run anywhere (on-prem, AWS, GCP, Azure)Auto-scaling – HPA, VPA, Cluster AutoscalerAdvanced scheduling – Affinity, taints, tolerationsService mesh integration – Istio, Linkerd, Consul Connect
Kubernetes Disadvantages
- Complex setup – Cần nhiều components và configurationSteep learning curve – Nhiều concepts mới (Pods, Services, Deployments, Ingress, etc)Resource overhead – Master node requires significant resourcesOperations complexity – Thường cần dedicated DevOps/SRE team
Docker Swarm Advantages và Disadvantages
Docker Swarm Advantages
- Simplicity – Có thể setup trong 5 phútDocker-native – Không cần học thêm tool, dùng docker CLI quen thuộcLow overhead – Swarm mode chỉ thêm ~50MB RAM overheadFast deployment – Từ zero đến production trong minutesHot migration – Containers có thể move giữa nodes không downtimeIntegrated security – RBAC, secrets, scanning built-in
Docker Swarm Disadvantages
- Limited scale – Không phù hợp cho very large deploymentsFewer features – Không có HPA, advanced scheduling như K8sSmaller ecosystem – Less third-party integration optionsEnterprise support limited – Docker Business subscription cần thiết cho full features
Khi nào nên chọn Kubernetes?
- Large enterprise deployments – Cần scale > 1000 nodes, multi-teamMicroservices architecture – Complex service meshes, many services cần fine-grained controlCloud-native strategy – Dùng multiple cloud providers, on-prem hybridAdvanced CI/CD – GitOps, progressive delivery, canary deploymentsMission-critical applications – Cần high availability, disaster recovery, complianceTeam có Kubernetes experience – Đã có skills, muốn leverage ecosystem
Khi nào nên chọn Docker Swarm?
- Small to medium deployments – < 50 nodes, < 1000 containersDocker-first organizations – Team đã quen với Docker, muốn simple solutionQuick prototypes – Cần setup nhanh, không muốn invest vào complex infrastructureLimited DevOps resources – Team nhỏ, không có dedicated K8s expertsMigrating from Docker Compose – Muốn scale up existing compose setupDevelopment/Testing environments – Local dev, CI/CD pipelines
Migration: Docker Compose to Kubernetes
# Docker Compose → Kubernetes (using Kompose) # Cài đặt kompose curl -L https://github.com/kubernetes/kompose/releases/download/v1.28.0/kompose-linux-amd64 -o kompose chmod +x kompose sudo mv kompose /usr/local/bin/ # Convert docker-compose.yml to Kubernetes manifests kompose convert # Output: deployment.yaml, service.yaml, etc. # Apply to Kubernetes kubectl apply -f . # Hoặc dùng Docker Desktop Kubernetes (simple path) # Enable Kubernetes in Docker Desktop settings # docker-compose up -d # kubectl apply -f kubernetes/
Best Practices cho Container Orchestration
- Use declarative configuration – Define desired state, let orchestration handle restImplement health checks – Liveness and readiness probes cho applicationsResource limits – Set CPU/memory limits tránh noisy neighborUse namespaces – Separate dev/staging/production workloadsImplement logging aggregation – ELK stack, Loki, CloudWatch logsMonitor everything – Prometheus + Grafana, Datadog, New RelicRegular backups – etcd/swarm state backups, disaster recovery plan
Câu hỏi thường gặp (FAQ)
Kubernetes có miễn phí không?
Kubernetes là open-source và miễn phí. Tuy nhiên, bạn phải trả tiền cho infrastructure (VMs, storage, network). Các managed Kubernetes services như EKS, AKS, GKE có tính phí cho control plane management (~$70-150/month cho EKS/AKS).
Docker Swarm có còn được Docker hỗ trợ không?
Có, Docker Swarm vẫn là part của Docker Engine và được supported. Docker tiếp tục invest vào Swarm mode, nhưng Kubernetes features ecosystem phát triển nhanh hơn.
Tôi có thể dùng cả K8s và Swarm không?
Về lý thuyết có thể run chúng trên same cluster nhưng không recommended. Chúng compete cho same resources và scheduling. Chọn one và stick with it.
Docker Swarm có thể scale như Kubernetes không?
Docker Swarm có thể scale đến ~1000 nodes và 50,000 containers trong production. Đủ cho hầu hết use cases. Nhưng Kubernetes có proven track record ở much larger scales (10,000+ nodes).
Helm vs Docker Compose – cái nào tương đương Kubernetes?
Helm là package manager cho Kubernetes (như apt cho Debian), dùng để deploy complex applications với templates và values. Docker Compose deploys stacks trong Swarm mode. Chúng không tương đương trực tiếp – Helm là K8s-native, Compose là Swarm-native.
Managed Kubernetes (EKS/AKS/GKE) vs self-hosted?
Managed K8s (EKS/AKS/GKE) giảm operational overhead đáng kể, tự động handle upgrades và patches. Self-hosted cho phép more control nhưng cần dedicated team để manage. Production thường dùng managed; dev/test có thể dùng minikube hoặc k3s.
Kết luận
Kubernetes vs Docker Swarm không có winner tuyệt đối – chọn dựa trên use case:
- Chọn Kubernetes khi: enterprise scale, complex microservices, multi-cloud strategy, có DevOps expertiseChọn Docker Swarm khi: đơn giản là đủ, team nhỏ, rapid deployment, Docker-first workflow
Để tìm hiểu thêm về Docker, hãy tham khảo hướng dẫn Docker toàn tập trên vnhte.com.