1. Manifest là gì?
Nó là một file YAML mô tả Desired State (Trạng thái mong muốn) của một tài nguyên. Bạn đưa Manifest cho K8s, K8s sẽ làm mọi cách để hiện thực hóa nó.
2. Tại sao dùng YAML?
Dễ đọc với con người, dễ quản lý bằng Git (GitOps). Quan trọng nhất, nó hỗ trợ cấu trúc phân cấp (nested) cực tốt cho các hệ thống phức tạp.
3. Triết lý Declarative
Thay vì ra lệnh "Hãy tạo 3 cái máy", bạn chỉ cần khai báo: "Tôi muốn có 3 cái máy". K8s sẽ tự động kiểm tra và bù đắp nếu thiếu.
🖼️ Visualization
- 🚀 Pod: Đơn vị nhỏ nhất, chứa 1 hoặc nhiều container.
- 🛡️ Deployment: "Sếp" của Pod, lo việc tự động hồi sinh Pod nếu chết và scale số lượng.
Giải thích chi tiết
| Đặc điểm | Pod (Cơ bản) | Deployment (Production) |
|---|---|---|
| Khả năng tự hồi phục | Không. Chết là hết. | Có. Tự động tạo lại Pod mới nếu lỗi. |
| Scaling | Thủ công từng Pod. | Dễ dàng tăng/giảm số lượng bằng replicas. |
| Cập nhật (Update) | Phải xóa đi tạo lại. | Hỗ trợ Zero-downtime Rollout. |
| Khi nào dùng? | Test nhanh, chạy task ngắn hạn (Jobs). | Luôn luôn dùng cho ứng dụng chạy 24/7. |
⚠️ Lỗi phổ biến
Sai Tab/Khoảng trắng
YAML cực kỳ nhạy cảm với thụt lề. Chỉ cần thừa 1 space là Manifest vô giá trị.
Quên Selector
Deployment không tìm thấy Pod để quản lý vì matchLabels không khớp với labels của Pod.
✅ Best Practices
Luôn đặt Resource Limits
Giới hạn CPU/RAM để tránh 1 container "ăn" hết tài nguyên của cả Node.
Dùng Image Tag cụ thể
Tránh dùng :latest. Hãy dùng version cụ thể (vd: :v1.2.3) để đảm bảo tính ổn định.