“Mình có cần dùng Kubernetes không?”
Đây là câu hỏi mình nhận được nhiều nhất từ các CTO startup. Họ đã chạy Docker ngon lành trên máy cá nhân. Họ nghĩ Kubernetes chỉ là “Docker phiên bản mạnh hơn” (Docker on steroids).
Hoàn toàn sai lầm.
So sánh Docker với Kubernetes giống như so sánh một Viên gạch với một Ông cai thầu xây dựng. Một cái là vật liệu; cái kia là một hệ thống phức tạp chuyên đi quát tháo khi có người đi trễ.
Đây là Hướng dẫn chuyên sâu về Hệ sinh thái Container. Chúng ta sẽ bắt đầu từ mô hình tư duy, các lệnh debug, và cái lỗi ám ảnh mang tên “CrashLoopBackOff”.
Phần 1: Nền tảng (Mô hình tư duy)
Kỷ nguyên Nguyên thủy: Ngôi nhà
Ngày xưa, chúng ta xây Nhà (Máy chủ vật lý).
- Muốn nấu ăn, xây Bếp.
- Muốn ngủ, xây Phòng ngủ.
- Vấn đề: Nếu Bếp cháy, Phòng ngủ cũng cháy theo. (App A làm sập App B).
Kỷ nguyên VM: Chung cư
Sau đó có Máy ảo (Virtual Machine). Trên một miếng đất to (Server), ta xây nhiều căn hộ khép kín.
- Mỗi căn hộ có điện nước, tường bao riêng nhờ Hypervisor.
- Vấn đề: Nặng nề. Căn nào cũng phải tự lo nồi niêu xoong chảo riêng. (Khởi động cả hệ điều hành mất cả phút).
Kỷ nguyên Docker: Phòng khách sạn (Container)
Docker nhận ra ta không cần cả một căn hộ. Ta chỉ cần một Căn phòng.
- Container: Phòng tiêu chuẩn. Nội thất giống hệt nhau (Dependencies).
- Dùng chung: Các phòng dùng chung điện nước của tòa nhà (Host OS Kernel).
- Lợi ích: Bạn có thể “hô biến” ra 1,000 căn phòng trong vài giây.
Kỷ nguyên Kubernetes: Ông Quản lý khách sạn
Giờ bạn có 1,000 căn phòng. Ai dọn dẹp? Ai xếp phòng cho khách? Toilet hỏng thì ai sửa?
Kubernetes (K8s) chính là Ông Quản lý.
- Bạn: “Tôi cần 3 phòng View Biển (Front-end) và 2 phòng có Két sắt (Database).”
- Quản lý (K8s): “Xong.”
- Thực tế: Một phòng bị ngập nước.
- Quản lý (K8s): “Tôi thấy phòng 203 bị ’tèo’ rồi. Tôi vừa tạo ngay một phòng y hệt, phòng 405. Khách còn chưa kịp nhận ra.”
Docker chạy cái app. Kubernetes chạy cái Docker.
Phần 2: Điều tra (Debug như chuyên gia)
1. Soi Container (Docker thuần)
Khi container dở chứng trên máy local:
| |
2. Soi Pod (Kubernetes)
Khi một Pod (cái vỏ bọc của K8s cho container) bị chết:
| |
Lệnh “Describe” là bạn thân nhất của bạn. Nó nói cho bạn biết chính xác tại sao Ông Quản lý lại giết cái phòng đó (ví dụ “OOMKilled” - do khách ăn tốn RAM quá).
Phần 3: Chẩn đoán (Giải mã Error Codes)
Lỗi của Kubernetes thường khá khó hiểu. Đây là từ điển giải mã.
| Trạng thái | Ý nghĩa | Ông Quản lý nói… | Cách sửa |
|---|---|---|---|
| Pending | Hết phòng. | “Khách sạn full rồi. Không còn server nào đủ RAM cho anh cả.” | Mua thêm server (node) hoặc giảm resource request. |
| CrashLoopBackOff | Chết đi sống lại. | “Cứ mở cửa phòng là nó nổ tung. Tôi tạm thời không mở nữa.” | Check code (kubectl logs). Thường do lỗi config hoặc không kết nối được DB. |
| OOMKilled | Hết bộ nhớ (Out of Memory). | “Thằng khách này ăn hết cả cái buffet. Tôi đuổi nó rồi.” | Tăng resources.limits.memory lên. |
| ImagePullBackOff | Không tìm thấy Image. | “Anh đòi nội thất kiểu ‘V2’, nhưng trong kho không có.” | Kiểm tra tên image/tag hoặc quyền truy cập registry. |
Phần 4: Giải pháp (Yamls & Dockerfiles)
1. Bản thiết kế (Dockerfile)
Giữ cho nó nhẹ thôi. Đừng mang cả đội thợ xây vào nếu bạn chỉ cần cái búa.
| |
2. Sổ tay hướng dẫn (K8s Deployment)
Ra lệnh cho Ông Quản lý. Ông ấy sẽ tự lo phần còn lại.
| |
Mô hình tư duy chốt hạ
| |
Nếu bạn có 1 server, dùng Docker Compose. Nếu bạn có 100 server, dùng Kubernetes. Đừng thuê một Ông Quản lý khách sạn 5 sao về chỉ để dọn dẹp cái phòng trọ sinh viên của bạn.
