Kubernetes Cơ Bản: Từ Docker Đến K8s Production
Docker giải quyết: "Ở máy tôi chạy được." Kubernetes giải quyết: "Ở 100 máy production, auto-scale, tự heal khi crash, zero-downtime deploy." Theo CNCF Survey 2024, 96% organizations đã dùng hoặc đánh giá Kubernetes — biến K8s trở thành nền tảng container orchestration phổ biến nhất thế giới. Nhưng K8s nổi tiếng với learning curve dốc đứng — bài viết này sẽ giúp bạn hiểu rõ concepts cốt lõi từ Pod đến Ingress, biết khi nào cần K8s, khi nào Docker Compose là đủ, và cách triển khai production-ready một cách an toàn.
Kubernetes Là Gì? Tại Sao Cần Nó?
Kubernetes (viết tắt K8s) là một open-source container orchestration platform được phát triển bởi Google, dựa trên kinh nghiệm 15 năm vận hành hệ thống Borg nội bộ phục vụ hàng tỷ containers mỗi tuần. Năm 2014, Google open-source Kubernetes và trao cho Cloud Native Computing Foundation (CNCF) quản lý. Kể từ đó, K8s trở thành tiêu chuẩn de facto cho việc triển khai và quản lý ứng dụng containerized ở mọi quy mô, từ startup đến enterprise lớn như Spotify, Airbnb và Pinterest.
Nếu chỉ chạy 1-2 containers trên 1 server, Docker Compose là đủ. Nhưng khi ứng dụng của bạn mở rộng — 10, 50, hay 100 containers trên nhiều servers — bạn cần trả lời các câu hỏi: Container nào chạy trên server nào? Nếu 1 container crash thì sao? Làm sao deploy version mới mà không downtime? Kubernetes chính là câu trả lời — nó tự động hóa toàn bộ vòng đời của containers ở production scale.
4 Bài Toán Cốt Lõi K8s Giải Quyết
📈 Auto-Scaling
CPU > 80% → tự tạo thêm pods. Traffic giảm → scale down tiết kiệm chi phí. HPA (Horizontal Pod Autoscaler) theo dõi CPU/memory metrics real-time và tự điều chỉnh số replicas. VPA (Vertical Pod Autoscaler) tự tăng/giảm resource limits cho từng pod. Cluster Autoscaler thêm/bớt nodes khi cần.
🔄 Self-Healing
Container crash → K8s tự restart trong vòng vài giây. Node die → K8s reschedule pods sang node khác tự động. Liveness probe phát hiện app bị treo (deadlock), readiness probe biết khi nào app sẵn sàng nhận traffic. Startup probe cho app khởi động chậm như Java Spring Boot.
🚀 Rolling Updates
Deploy version mới mà không downtime: K8s tạo pods v2, chờ health
check pass, route traffic sang, rồi terminate pods v1 dần dần. Cấu
hình
maxSurge và maxUnavailable để kiểm soát tốc
độ rollout. Rollback 1 command (kubectl rollout undo)
nếu phát hiện lỗi.
🔗 Service Discovery
Services tìm nhau qua DNS nội bộ: postgres.default.svc.cluster.local. Không cần hardcode IP — khi pods thay đổi, K8s tự cập nhật
endpoints. CoreDNS xử lý name resolution bên trong cluster. Kết
hợp với Service Mesh (Istio, Linkerd) để có mTLS, traffic
splitting, observability.
Core Concepts Chi Tiết
Pod
Đơn vị nhỏ nhất trong K8s. 1 Pod chứa 1 hoặc nhiều containers chia sẻ network namespace và storage volumes. Thông thường: 1 Pod = 1 container chính (main container). Pods are ephemeral — không có IP cố định, không persist data mặc định. Cần PersistentVolume (PV) và PersistentVolumeClaim (PVC) cho stateful data. Sidecar pattern cho phép thêm container phụ (logging agent, proxy) vào cùng Pod.
Deployment
Quản lý desired state: "Tôi muốn 3 replicas của app v2.1.0." K8s đảm bảo luôn có đúng 3 pods running. Rolling update, rollback, scale up/down đều qua Deployment. Bên dưới, Deployment tạo ReplicaSet — nó theo dõi và đảm bảo số lượng pods. Khi bạn update image version, Deployment tạo ReplicaSet mới và scale down ReplicaSet cũ dần dần. YAML manifest là declarative — bạn mô tả trạng thái mong muốn, K8s lo phần còn lại.
Service
Stable endpoint cho pods vì pods có IP thay đổi liên tục. ClusterIP (mặc định — chỉ truy cập nội bộ cluster), NodePort (mở port trên mỗi node, range 30000-32767), LoadBalancer (tích hợp cloud LB của AWS/GCP/Azure), ExternalName (map đến DNS bên ngoài). Service dùng label selector để tìm pods — bất kỳ pod nào match labels đều nhận traffic.
Ingress
HTTP/HTTPS routing layer: api.banhcuonflow.com → API service,
app.banhcuonflow.com → Frontend service. SSL/TLS termination
tự động với cert-manager + Let's Encrypt. Path-based routing (/api/* → backend, /* → frontend). Nginx Ingress Controller phổ
biến nhất, nhưng còn có Traefik, HAProxy, Envoy-based (Contour, Emissary).
Rate limiting, IP whitelisting, authentication qua annotations.
ConfigMaps, Secrets Và Namespace
ConfigMap lưu trữ cấu hình ứng dụng dạng key-value (connection strings, feature flags, environment variables) tách biệt khỏi container image. Khi thay đổi config, không cần rebuild image — chỉ cần update ConfigMap và restart pods. Secret tương tự ConfigMap nhưng dành cho dữ liệu nhạy cảm (passwords, API keys, TLS certificates). Secrets được base64 encoded mặc định — cần thêm giải pháp như HashiCorp Vault, AWS Secrets Manager, hoặc Sealed Secrets cho mã hóa thực sự.
Namespace cho phép phân chia cluster thành các môi trường
logic riêng biệt:
dev, staging, production. Mỗi
namespace có resource quotas riêng (CPU, memory limits), network
policies riêng, và RBAC permissions riêng. Đây là cách isolate workloads
mà không cần nhiều clusters vật lý. Trong thực tế, nhiều team dùng
multi-namespace cho multi-tenant hoặc tách biệt các microservices theo
domain.
Helm: Package Manager Cho K8s
Viết YAML cho mỗi resource (Deployment, Service, Ingress, ConfigMap...) rất mệt khi ứng dụng phức tạp. Helm là package manager cho Kubernetes — giống npm cho Node.js hay pip cho Python. Một Helm chart đóng gói toàn bộ K8s manifests thành 1 package có thể install, upgrade, rollback bằng 1 command. Helm sử dụng template engine (Go templates) cho phép parameterize values: cùng 1 chart nhưng thay đổi values file cho dev/staging/production. Chart repository (Artifact Hub) cung cấp hàng nghìn charts có sẵn cho PostgreSQL, Redis, Nginx, Prometheus, Grafana.
Docker Compose vs K8s: Khi Nào Dùng Cái Nào?
Docker Compose: 1 server, < 5 services, team < 5 devs, không cần auto-scale. BanhCuonFlow On-Premise khuyên dùng Docker Compose cho SME (PostgreSQL + API + Redis + Nginx trên 1 VPS). Ưu điểm: đơn giản, chi phí thấp (1 VPS từ $10/tháng), dễ bảo trì, docker-compose.yml chỉ vài chục dòng. Thichh hợp cho ứng dụng nội bộ, MVP, prototype.
Kubernetes: Multi-server, > 10 services, cần HA (High Availability), auto-scale, rolling updates, multiple environments (dev/staging/prod). Team cần ít nhất 1 DevOps/SRE engineer có kinh nghiệm K8s. Managed K8s (GKE, EKS, AKS) giảm operational burden đáng kể nhưng chi phí tối thiểu ~$200-500/tháng cho control plane và worker nodes. Tuy nhiên, khi traffic tăng gấp 10 lần, K8s auto-scale trong vài giây — Docker Compose đòi hỏi can thiệp thủ công.
Production Best Practices 2025–2026
1. Declarative GitOps: Toàn bộ K8s manifests lưu trong Git. Dùng ArgoCD hoặc Flux CD để auto-sync cluster state với Git repository. Mọi thay đổi phải qua Pull Request, tạo audit trail rõ ràng.
2. Resource Limits: Luôn set CPU/memory requests và limits cho mỗi container. Không set limits = 1 pod có thể ngốn resources của cả node, ảnh hưởng các pods khác. Request là minimum guaranteed, limit là maximum allowed. LimitRange và ResourceQuota ở namespace level.
3. Security: Scan container images trước khi deploy (Trivy, Snyk). Network Policies kiểm soát traffic giữa pods — mặc định pods có thể nói chuyện tự do với nhau, rất nguy hiểm. Pod Security Admission (thay thế PodSecurityPolicy deprecated) ngăn containers chạy với root privileges. RBAC quản lý permissions chi tiết.
4. Monitoring: Prometheus + Grafana là stack monitoring tiêu chuẩn cho K8s. Prometheus thu thập metrics từ kubelet, kube-state-metrics, node-exporter. Grafana dashboard trực quan hóa CPU, memory, network I/O, pod restarts. Thiết lập alerting: PagerDuty, Slack, OpsGenie khi pods CrashLoopBackOff hoặc nodes NotReady.
Lộ Trình Học K8s Cho Người Mới
Bước 1 — Docker trước: Hiểu containers, Dockerfile, docker-compose. Nếu chưa vững Docker, đừng nhảy sang K8s. Bước 2 — Local K8s: Cài Minikube, Kind, hoặc Docker Desktop (có K8s tích hợp) để thực hành trên máy cá nhân. Bước 3 — Deploy ứng dụng đơn giản: Tạo Deployment, expose qua Service, thử scale replicas, rolling update. Bước 4 — Networking: Ingress, Network Policies, DNS resolution. Bước 5 — Storage: PersistentVolume, StatefulSet cho databases. Bước 6 — Helm: Đóng gói và chia sẻ ứng dụng dạng charts. Bước 7 — Production: Monitoring (Prometheus + Grafana), logging (EFK stack), CI/CD integration, security hardening.
Chứng chỉ CKA (Certified Kubernetes Administrator) từ CNCF là tiêu chuẩn vàng cho DevOps/SRE engineers. Thi thực hành 2 giờ, hands-on trên cluster thật — không phải trắc nghiệm lý thuyết. Ngoài ra có CKAD (Certified Kubernetes Application Developer) cho developers và CKS (Certified Kubernetes Security Specialist) cho security engineers.