Kubernetes • Manifest • YAML

Hiểu Kubernetes Manifest theo cách trực quan

Manifest là bản thiết kế khai báo resource trong Kubernetes. Thay vì tạo thủ công từng Pod, Deployment hay Service, bạn mô tả desired state bằng YAML, rồi Kubernetes lo phần còn lại.

Mental model
1. Bạn viết YAML
Mô tả resource như Pod, Deployment, Service.
2. kubectl apply -f
Manifest được gửi tới API Server.
3. Control Plane reconcile
Kubernetes cố đưa cluster về đúng desired state.
Manifest là gì?

Là file khai báo cấu hình cho resource trong Kubernetes. Bạn nói muốn gì, Kubernetes tìm cách đạt được trạng thái đó.

Vai trò

Manifest giúp version control, review dễ, tái sử dụng tốt, triển khai nhất quán giữa dev, staging, production.

Vì sao dùng YAML?

YAML ngắn gọn, dễ đọc cho con người, hợp với cấu trúc lồng nhau như metadata, spec, containers, ports.

Manifest tương tác

Click vào từng dòng để xem giải thích bằng tiếng Việt.

Giải thích dòng đang chọn

Các thành phần chính
apiVersion: nhóm API và version của resource.
kind: loại resource, ví dụ Pod hay Deployment.
metadata: thông tin nhận diện như name, labels.
spec: mô tả desired state thực tế.

Từ đơn giản đến production

Bật toggle để xem manifest được mở rộng dần thành production-ready.

Basic: chạy được nhanh, phù hợp để học cấu trúc manifest hoặc test cục bộ.
labels + selector: giúp Deployment biết Pod nào thuộc quyền quản lý.
replicas: tăng số Pod để có HA cơ bản.
resources: khai báo requests/limits để scheduler và runtime làm việc an toàn hơn.
readinessProbe/livenessProbe: giúp rollout và self-healing đáng tin cậy hơn.

Pod vs Deployment

Pod là unit nhỏ nhất có thể deploy trong Kubernetes. Nó chứa một hoặc nhiều container.
Deployment là controller quản lý nhiều Pod, hỗ trợ rollout, self-healing, scaling.
Khi dùng Pod: demo nhanh, debug, học cấu trúc manifest, workload tạm thời.
Khi dùng Deployment: gần như mọi stateless app trong thực tế production.
Visualization
Pod
Pod
container
nginx:1.25
Deployment
Deployment

Lỗi phổ biến

Sai indentation trong YAML
YAML rất nhạy với khoảng trắng. Lệch 2 spaces là đủ làm manifest hỏng.
labels và selector không khớp
Deployment có thể không quản lý được Pod như mong muốn.
Dùng image tag mơ hồ như latest
Khó kiểm soát version, khó debug rollout.
Thiếu resource limits/requests
Dễ gây tranh chấp tài nguyên, khó đoán hiệu năng.

Best practices

Khai báo labels có chủ đích
Ví dụ: app, tier, env để dễ query và quản lý.
Pin image tag rõ ràng
Ví dụ: nginx:1.25.4 thay vì latest.
Thêm probes
Liveness và readiness giúp rollout mượt hơn.
Tách config khỏi image
Dùng ConfigMap và Secret thay vì hard-code.