

Kubernetes là hệ điều phối mã nguồn mở dành cho container, thường được gọi tắt là K8s. Nó cho phép tự động hoá việc triển khai, mở rộng và quản lý hàng trăm container trên nhiều máy chủ cùng lúc.
Google phát triển Kubernetes từ năm 2014 dựa trên hệ thống Borg nội bộ, sau đó chuyển giao cho Cloud Native Computing Foundation vào năm 2015. Nhờ đó, Kubernetes trở thành tiêu chuẩn de facto cho việc vận hành container ở quy mô lớn.
Kubernetes giải quyết vấn đề gì
Chạy container trên một máy chủ thì đơn giản, nhưng khi số container tăng lên hàng trăm và cần chạy trên nhiều node, các vấn đề sau xuất hiện: container nào đặt ở đâu, ai khởi động lại container bị treo, làm sao cân bằng tải khi một máy chết, làm sao cập nhật ứng dụng không gián đoạn.
Kubernetes trả lời những câu hỏi đó bằng cơ chế khai báo: bạn mô tả trạng thái mong muốn, bộ điều phối (controller) lo phần còn lại. Nhờ mô hình declarative, việc vận hành trở nên tự hoá và có thể kiểm tra bằng code.
Các khái niệm cốt lõi
- Pod: đơn vị nhỏ nhất mà Kubernetes quản lý, chứa một hoặc nhiều container chia sẻ cùng địa chỉ IP và ổ đĩa. Các container trong một pod luôn được đặt trên cùng một node.
- Deployment: mô tả số bản sao pod cần chạy và cách cập nhật chúng theo chiến lược rolling update.
- Service: cung cấp một địa chỉ IP ổn định và tên DNS cho nhóm pod, đồng thời cân bằng tải giữa các bản sao.
- ConfigMap và Secret: lưu cấu hình không nhạy cảm và thông tin bí mật, tách biệt khỏi image.
- Ingress: bộ định tuyến HTTP vào cụm, kết nối miền public với các service bên trong.
- Namespace: cơ chế cô lập logic để nhóm tài nguyên theo dự án hay môi trường.
Control plane và worker node
Kiến trúc Kubernetes chia thành hai phần. Control plane giữ vai trò bộ não, gồm API server làm cổng giao tiếp chính, scheduler quyết định pod nào đặt ở node nào, controller manager điều phối trạng thái, và etcd lưu toàn bộ cấu hình. Worker node chạy ứng dụng thực tế, với kubelet chịu trách nhiệm khởi động container theo chỉ thị của control plane và một container proxy để định tuyến lưu lượng.
Do mọi tương tác đều đi qua API server bằng REST hoặc gRPC, bạn có thể quản lý cụm bằng kubectl, dashboard, hoặc công cụ của bên thứ ba như Terraform và ArgoCD.
Ví dụ triển khai Nginx bằng 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: nginx:alpine
ports:
- containerPort: 80
Đoạn YAML trên yêu cầu Kubernetes chạy 3 bản sao nginx. Scheduler lần lượt chọn các node còn đủ tài nguyên, kubelet trên node đó kéo image về và khởi động pod. Nếu một pod bị treo hoặc chết, controller sẽ tự tạo pod mới để giữ đủ số lượng, quá trình này gọi là self-healing.
Áp dụng bằng lệnh kubectl apply -f deployment.yaml, kiểm tra bằng kubectl get pods và kubectl describe deployment web nếu cần xem log sự kiện.
Quản lý cấu hình và bí mật
Đặt mật khẩu trực tiếp vào manifest rồi commit lên Git là sai lầm phổ biến. Kubernetes tách phần cấu hình ra khỏi image thông qua ConfigMap cho giá trị thường và Secret cho thông tin nhạy cảm, cả hai đều có thể tham chiếu dưới dạng biến môi trường hoặc file gắn vào pod. Trên production nên mã hoá Secret ở chế độ rest, hoặc tích hợp Vault và External Secrets Operator để không lưu bí mật trong Git.
Hệ sinh thái và các bản phân phối phổ biến
Do Kubernetes phức tạp, hầu hết đội ngũ không tự cài đặt từ đầu. Ba lựa chọn phổ biến nhất là:
- Kubernetes phân phối có sẵn: Amazon EKS, Google GKE, Azure AKS. Rủi ro thấp nhất vì nhà cung cấp lo phần vận hành.
- Bản mã nguồn mở: k3s nhẹ, chạy tốt trên edge và máy yếu; k0s của Mirantis và MicroK8s của Canonical cho đa dạng nhu cầu.
- Cụm tự quản: kubeadm trên máy ảo thuần cho môi trường học tập và thử nghiệm.
Hệ sinh thái đi kèm cũng rất lớn: Helm quản lý gói cài đặt, ArgoCD và Flux quản lý GitOps, Prometheus lấy chỉ số, Grafana hiển thị biểu đồ, Loki thu thập log. Bạn có thể đọc thêm tại tài liệu khái niệm chính thức của Kubernetes.
Có nên dùng Kubernetes cho dự án nhỏ
Không phải dự án nào cũng cần Kubernetes. Nếu ứng dụng chỉ có vài dịch vụ và chưa có yêu cầu scale, chạy trên một VPS cùng Docker Compose thường rẻ hơn và dễ vận hành hơn nhiều. Dấu hiệu cho thấy đã đến lúc cân nhắc Kubernetes gồm: số dịch vụ tăng lên hàng chục, cần triển khai nhiều lần mỗi ngày, yêu cầu zero downtime nghiêm ngặt, hoặc đội ngũ đã có kinh nghiệm vận hành hệ thống phân tán.
Nếu chưa chắc chắn, hãy bắt đầu với k3s trên một máy để làm quen cú pháp manifest và cách debug vấn đề pod không lên. Việc học trên cụm nhỏ dễ hơn nhiều so với production phức tạp.
Tài liệu tham khảo


