
Kubernetes là gì? Hướng dẫn dễ hiểu cho người mới bắt đầu
Tìm hiểu Kubernetes từ khái niệm, kiến trúc, cách hoạt động đến ví dụ triển khai thực tế cho người mới bắt đầu.
Kubernetes là gì?
Kubernetes là một hệ thống orchestration container mã nguồn mở, được thiết kế để triển khai, mở rộng và quản lý các ứng dụng chạy trong container một cách tự động.
Nếu Docker giúp em đóng gói ứng dụng thành container, thì Kubernetes giúp em quản lý hàng loạt container đó một cách có tổ chức, ổn định và dễ mở rộng hơn.
Nói đơn giản: Docker là cái hộp, còn Kubernetes là người quản lý cả kho hộp.
Vì sao Kubernetes quan trọng?
Khi ứng dụng còn nhỏ, em có thể chạy một container là đủ. Nhưng khi hệ thống lớn dần, em sẽ gặp các vấn đề như:
- nhiều container cần chạy đồng thời
- container bị lỗi cần tự khởi động lại
- cần scale lên khi có nhiều người dùng
- cần cập nhật phiên bản mà không làm gián đoạn hệ thống
- cần cân bằng tải giữa nhiều instance
Kubernetes giải quyết các bài toán đó bằng cách tự động hóa gần như toàn bộ vòng đời của container.
Kubernetes giải quyết những gì?
| Vấn đề | Kubernetes hỗ trợ |
|---|---|
| Container bị chết | Tự khởi động lại |
| Tải tăng cao | Tự scale số lượng pod |
| Deploy phiên bản mới | Rolling update |
| Phân phối request | Service + load balancing |
| Cấu hình phức tạp | ConfigMap, Secret |
| Chạy ứng dụng nhiều máy | Cluster management |
Kiến trúc cơ bản của Kubernetes
Một Kubernetes cluster thường gồm 2 phần chính:
1. Control Plane
Đây là “bộ não” của hệ thống.
Các thành phần quan trọng:
- API Server: cổng giao tiếp chính với cluster
- Scheduler: quyết định pod sẽ chạy ở node nào
- Controller Manager: theo dõi trạng thái và tự sửa khi có sai lệch
- etcd: database lưu trạng thái của cluster
2. Worker Node
Đây là nơi ứng dụng thực sự chạy.
Các thành phần chính:
- kubelet: agent trên node, đảm bảo pod chạy đúng
- container runtime: Docker, containerd, CRI-O
- kube-proxy: xử lý networking và load balancing nội bộ
Các khái niệm quan trọng trong Kubernetes
Pod
Pod là đơn vị triển khai nhỏ nhất trong Kubernetes. Một pod có thể chứa một hoặc nhiều container.
Deployment
Deployment dùng để quản lý pod, hỗ trợ rollout, rollback và scale.
Service
Service cung cấp một địa chỉ ổn định để truy cập pod, vì pod có thể thay đổi IP liên tục.
Namespace
Namespace giúp chia môi trường thành từng vùng logic riêng biệt.
ConfigMap và Secret
- ConfigMap: lưu cấu hình không nhạy cảm
- Secret: lưu dữ liệu nhạy cảm như password, token
Ví dụ luồng hoạt động đơn giản
Khi em deploy một ứng dụng lên Kubernetes, luồng cơ bản thường như sau:
- Em viết file YAML mô tả ứng dụng
kubectl applygửi cấu hình lên API Server- Control Plane kiểm tra trạng thái mong muốn
- Scheduler chọn node phù hợp
- Kubelet trên node kéo image và chạy container
- Service giúp ứng dụng có thể được truy cập ổn định
Ví dụ file Deployment
apiVersion: apps/v1
kind: Deployment
metadata:
name: hello-app
spec:
replicas: 3
selector:
matchLabels:
app: hello-app
template:
metadata:
labels:
app: hello-app
spec:
containers:
- name: hello-app
image: nginx:1.27
ports:
- containerPort: 80Giải thích nhanh
replicas: 3nghĩa là chạy 3 bản saoselectordùng để nhận diện podtemplatelà mẫu pod sẽ được tạonginx:1.27là image được dùng để chạy container
Ví dụ file Service
apiVersion: v1
kind: Service
metadata:
name: hello-app-svc
spec:
selector:
app: hello-app
ports:
- port: 80
targetPort: 80
type: ClusterIPService này sẽ tạo một điểm truy cập ổn định cho các pod có label app: hello-app.
Một workflow thực tế khi deploy ứng dụng
| Bước | Mô tả |
|---|---|
| Build | Build Docker image |
| Push | Đẩy image lên registry |
| Deploy | Áp manifest vào Kubernetes |
| Observe | Theo dõi logs, metrics, events |
| Scale | Tăng/giảm replica khi cần |
| Update | Rolling update phiên bản mới |
Lệnh Kubernetes cơ bản cần nhớ
kubectl get pods
kubectl get services
kubectl get deployments
kubectl describe pod <pod-name>
kubectl logs <pod-name>
kubectl apply -f deployment.yaml
kubectl delete -f deployment.yamlKubernetes khác Docker Compose như thế nào?
| Tiêu chí | Docker Compose | Kubernetes |
|---|---|---|
| Mục đích | Chạy nhiều container đơn giản | Quản lý hệ thống container quy mô lớn |
| Scale | Hạn chế | Mạnh, tự động |
| Self-healing | Không mạnh | Có |
| Rolling update | Hạn chế | Có |
| Networking | Đơn giản | Phức tạp nhưng linh hoạt |
| Độ khó | Dễ học | Khó hơn |
Theo anh, Docker Compose rất hợp cho môi trường local hoặc dự án nhỏ. Kubernetes đáng học khi em muốn đi xa hơn với backend, cloud, devops hoặc production.
Khi nào nên dùng Kubernetes?
Kubernetes phù hợp khi em cần:
- hệ thống có nhiều service
- triển khai nhiều môi trường: dev, staging, production
- tự động scale theo tải
- đảm bảo tính sẵn sàng cao
- có chiến lược deploy chuyên nghiệp
Nếu app chỉ có 1 backend nhỏ và 1 database, thì dùng Kubernetes đôi khi là “quá tay”.
Khi nào chưa cần dùng Kubernetes?
Em có thể chưa cần Kubernetes nếu:
- chỉ đang học Docker cơ bản
- dự án còn rất nhỏ
- chưa có nhu cầu scale
- chưa cần CI/CD phức tạp
- team ít người, vận hành đơn giản
Anh nghĩ cách học tốt nhất là: Docker trước, Kubernetes sau. Đi kiểu này sẽ đỡ bị loạn vì Kubernetes có khá nhiều khái niệm mới.
Best practices cho người mới học Kubernetes
- Học chắc Docker và container trước.
- Nắm rõ Pod, Deployment, Service.
- Hiểu YAML và label/selector.
- Thực hành với cluster local như kind, minikube hoặc k3s.
- Tập đọc
kubectl describevàkubectl logs. - Học dần ConfigMap, Secret, Ingress, Volume, StatefulSet.
- Đừng cố học hết một lần, vì Kubernetes rất rộng.
Tổng kết
Kubernetes là công cụ cực kỳ mạnh để quản lý ứng dụng container ở quy mô lớn. Nó giúp em triển khai, mở rộng, tự phục hồi và vận hành ứng dụng một cách chuyên nghiệp hơn.
Nếu Docker là nền móng, thì Kubernetes là tầng vận hành phía trên giúp hệ thống trưởng thành hơn. Với người học DevOps hoặc backend, đây là một kỹ năng rất đáng đầu tư.
Kết luận của anh: học Kubernetes sớm là tốt, nhưng học đúng thứ tự còn tốt hơn. Học nền tảng container trước, rồi mới đi sâu vào orchestration, em sẽ tiến nhanh hơn rất nhiều.
Gợi ý đọc tiếp
- Docker là gì và cách hoạt động của container
- Pod, Deployment, Service khác nhau thế nào
- Ingress trong Kubernetes là gì
- ConfigMap và Secret dùng ra sao
- StatefulSet vs Deployment
- Kubernetes local với kind, minikube và k3s