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. KubernetesDocker 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.

Chào các bạn mình là Quốc Hùng , mình sinh ra thuộc cung song tử ,song tử luôn khẳng định chính mình ,luôn luôn phấn đấu vượt lên phía trước ,mình sinh ra và lớn lên tại vùng đất võ cổ truyền ,đam mê của mình là coder ,ngày đi học tối về viết blog ...