Blog
Thoughts on engineering, design, and building great products.
Disruption và PodDisruptionBudget
Pod biến mất theo hai kiểu rất khác nhau: không tự nguyện (node chết, hết RAM — không ai ngăn được) và tự nguyện (rút node đi bảo trì, nâng cấp — chủ động). PodDisruptionBudget chỉ canh đúng kiểu thứ hai: nó bảo cluster đừng rút quá nhiều bản sao cùng lúc. Bài này phân biệt hai kiểu disruption rồi kiểm chứng PDB bằng Eviction API thật — thấy tận mắt cú evict bị chặn bằng HTTP 429.
Requests, limits, QoS và Downward API
Khai requests và limits cho container không chỉ là chuyện đặt con số. requests dẫn đường cho scheduler, limits là hàng rào kernel cưỡng chế — CPU bị bóp, bộ nhớ vượt là OOM kill. Từ bộ số đó Kubernetes xếp pod vào ba lớp QoS quyết định ai bị giết trước khi node cạn RAM. Bài này test thật cả ba lớp QoS, một cú OOMKilled, và Downward API để pod tự đọc thông tin về chính nó.
Ephemeral container và kubectl debug
Container production tốt thường không có shell — image distroless càng gọn càng ít công cụ gỡ rối, nên kubectl exec bó tay. Bài này dùng ephemeral container: nhét tạm một container công cụ vào pod đang chạy mà không phải restart hay sửa image của nó. Đào ngữ nghĩa theo tài liệu rồi kiểm chứng cả ba chế độ của kubectl debug — gắn vào pod đang chạy, nhân bản pod, và gỡ rối thẳng node — trên cluster thật.
Probe: liveness, readiness và startup
Bài 18 để lại condition Ready chưa có lời giải. Đứng sau nó là probe — cơ chế kubelet dùng để hỏi container ba câu khác nhau: mày còn sống không, mày sẵn sàng nhận lưu lượng chưa, mày khởi động xong chưa. Bài này tách bạch ba loại probe theo đúng tài liệu rồi kiểm chứng từng cái bằng pod thật: liveness làm kubelet giết và restart, readiness gỡ pod khỏi endpoint của Service, startup vô hiệu hóa hai probe kia tới khi app kịp khởi động.
Init Container và Sidecar Container
Một pod không chỉ có container chính. Init container chạy việc chuẩn bị tới khi xong rồi mới nhường cho app khởi động; sidecar container chạy song song app suốt đời pod. Bài này phân biệt hai loại, đào ngữ nghĩa chính xác theo tài liệu — thứ tự khởi động, cách xử lý lỗi, thứ tự tắt — và kiểm chứng bằng các pod thật trên cluster v1.36.
Vòng Đời Của Một Pod: Phase, Condition và restartPolicy
Mở phần Pods chuyên sâu bằng thứ bạn đọc mỗi ngày trong kubectl get pods mà ít khi đọc kỹ: trạng thái của một pod. Bài này tách ba lớp trạng thái — phase tổng quát, container state chi tiết, và condition như một checklist — rồi cho thấy phase thực ra được suy ra từ container state cộng với restartPolicy. Bốn pod thật minh hoạ Running, Succeeded, Failed và CrashLoopBackOff.
Vòng Đời Một Request: Từ kubectl apply Tới Pod Chạy
Smoke test ở bài trước cho thấy cluster chạy; bài này lần theo một câu lệnh apply duy nhất đi qua từng thành phần đã dựng, theo trình tự thời gian, để thấy chúng chuyền tay nhau ra sao. Quan trọng hơn cả chuỗi bước là mô hình đằng sau: không có nhạc trưởng ra lệnh, chỉ có nhiều vòng lặp độc lập cùng nhìn vào một nguồn sự thật và kéo hiện thực về phía mong muốn.