
Kubernetes cơ bản: Triển khai ứng dụng container từ A đến Z
Kubernetes (thường viết tắt K8s) là nền tảng orkestration container mã nguồn mở phổ biến nhất hiện nay. Nó tự động hóa việc triển khai, mở rộng và quản lý các ứng dụng chạy trong container. Bài viết này tổng hợp kiến thức cốt lõi từ tài liệu chính thức Kubernetes để bạn nắm vững kiến trúc, Pod, Deployment, Service và thực hành deploy một ứng dụng mẫu từ A đến Z.

1. Kiến trúc Kubernetes
Một cụm Kubernetes bao gồm hai phần chính:
- Control Plane (Mặt phẳng điều khiển): Quyết định trạng thái mong muốn của cụm. Các thành phần chính:
- kube-apiserver: Cổng API duy nhất, tiếp nhận mọi yêu cầu.
- etcd: Kho dữ liệu khóa-giá trị phân tán, lưu trữ toàn bộ trạng thái cụm.
- kube-scheduler: Gán Pod mới vào Node phù hợp.
- kube-controller-manager: Chạy các controller (ReplicaSet, Deployment, Service…) để đồng bộ trạng thái thực tế với trạng thái mong muốn.
- cloud-controller-manager (tùy chọn): Tích hợp với nhà cung cấp đám mây.
- Worker Nodes (Nút làm việc): Chạy workload thực tế. Mỗi Node có:
- kubelet: Agent giao tiếp với API server, đảm bảo container chạy khỏe.
- kube-proxy: Quản lý quy tắc mạng (IPVS/iptables) cho Service.
- Container runtime: Chạy container (containerd, CRI-O, Docker Engine…).

2. Pod – Đơn vị triển khai nhỏ nhất
Pod là đơn vị có thể tạo và quản lý nhỏ nhất trong Kubernetes. Một Pod bao gồm một hoặc nhiều container chia sẻ network namespace, storage volume và vòng đời.
- Một container mỗi Pod: Mô hình phổ biến nhất, Pod đóng vai trò wrapper cho container đơn.
- Nhiều container trong một Pod: Dùng cho sidecar (logging, proxy), init container, hoặc các tiến trình phối hợp chặt chẽ.
- Pod có vòng đời rõ ràng:
Pending → Running → Succeeded/Failed. Khi Node lỗi, Pod trên Node đó bị xóa và Deployment sẽ tạo Pod mới thay thế.

3. Deployment – Quản lý ReplicaSet và cập nhật ứng dụng
Deployment là controller cấp cao khai báo trạng thái mong muốn của ứng dụng (số bản sao, image, chiến lược cập nhật). Deployment tự tạo và quản lý ReplicaSet để đảm bảo số lượng Pod đúng như spec.
- Declarative updates: Chỉnh sửa
spec.template(image, env, resources…) → Deployment tự động rolling update. - Rollback:
kubectl rollout undo deployment/quay lại phiên bản trước. - Scaling:
kubectl scale deployment/hoặc HPA (Horizontal Pod Autoscaler) tự động scale theo CPU/metric tùy chỉnh.--replicas=5
4. Service – Phát hiện và cân bằng tải
Service cung cấp một endpoint ổn định (IP ảo, DNS) cho một tập hợp Pod thay đổi động. Các loại Service chính:
- ClusterIP (mặc định): Chỉ truy cập được bên trong cụm.
- NodePort: Mở port cố định trên mọi Node (
30000-32767), truy cập từ ngoài qua.: - LoadBalancer: Yêu cầu cloud provider cấp Load Balancer ngoài, tự động tạo NodePort & ClusterIP.
- ExternalName: Ánh xạ Service ra DNS ngoài cụm (CNAME).
Service sử dụng selector (label) để gắn Pod. Khi Pod scale up/down, EndpointSlice tự động cập nhật.
5. Ví dụ triển khai ứng dụng Nginx đơn giản
Dưới đây là quy trình deploy một web server Nginx với Deployment + Service ClusterIP.
- Tạo file deployment.yaml:
apiVersion: apps/v1 kind: Deployment metadata: name: nginx-deploy spec: replicas: 3 selector: matchLabels: app: nginx template: metadata: labels: app: nginx spec: containers: - name: nginx image: nginx:1.25 ports: - containerPort: 80 - Tạo file service.yaml:
apiVersion: v1 kind: Service metadata: name: nginx-svc spec: selector: app: nginx ports: - protocol: TCP port: 80 targetPort: 80 type: ClusterIP - Apply và kiểm tra:
kubectl apply -f deployment.yaml kubectl apply -f service.yaml kubectl get pods -l app=nginx kubectl get svc nginx-svc - Truy cập thử (từ Pod khác trong cụm):
kubectl run curl --image=curlimages/curl --rm -it -- curl nginx-svc
6. Tóm tắt và bước tiếp theo
- Kubernetes giải quyết bài toán vận hành container ở quy mô lớn: tự heal, scale, rolling update, service discovery.
- Nắm vững 4 khái niệm cốt lõi: Cluster architecture, Pod, Deployment, Service.
- Thực hành tạo cluster cục bộ bằng Minikube hoặc Kind để test ngay.
- Tìm hiểu thêm: ConfigMap/Secret quản lý cấu hình, Ingress cho HTTP routing, Helm package manager, Prometheus/Grafana monitoring.
Nguồn tham khảo
