DevOps 30/08/2026 8 phút

Bộ lập lịch Kubernetes xếp chỗ trong 50 mili giây — nhưng nó đặt chỗ theo tờ khai 'requests', không theo mức bạn dùng thật, và một pod ưu tiên cao sẵn sàng giết pod đang chạy để có chỗ

Xếp một pod lên node chỉ tốn khoảng 50 mili giây. Nhưng bộ lập lịch cộng 'requests' chứ không nhìn CPU dùng thật — nên node có thể 'đầy' trong khi thật ra rỗng, và một pod PriorityClass cao sẽ đuổi pod đang chạy để lấy chỗ. Bài này đo cả ba hành vi đó.

DevOps 30/08/2026 9 phút

Cả một cụm Kubernetes chỉ là sổ sách trong etcd — kubelet là chỗ duy nhất sổ sách biến thành tiến trình thật, và toàn bộ độ trễ khởi động pod nằm ở một chỗ bạn không ngờ

Ba mốc cuối của việc khởi động một pod xảy ra gọn trong cùng một giây — kubelet gần như không tốn thời gian. Chỗ đắt là kéo ảnh: 5,9 giây cho 4 MB, 15,7 giây cho 400 MB. Bài này đo đoạn đường từ 'bộ lập lịch ghi tên node' tới 'container đang chạy', và chỉ ra vì sao kubelet là thành phần duy nhất trong Kubernetes không phải là một pod.

DevOps 30/08/2026 7 phút

Quay lui một phiên bản Kubernetes chỉ mất 2,3 giây, nhưng node chết thì phải chờ bốn phút mới có bản thay thế — cùng một tầng ẩn giải thích cả hai

Người ta viết Deployment và nghĩ nó quản pod. Nó không — nó quản ReplicaSet, và tầng ở giữa đó giải thích cả việc quay lui tức thì lẫn việc phản ứng chậm. Đổi ảnh thì ReplicaSet cũ không bị xoá, chỉ đặt mong muốn=0, nên quay lui chỉ là dịch số giữa hai ReplicaSet đã có sẵn (2,3 giây, không kéo ảnh). Node chết thì ReplicaSet chờ bốn phút vì pod ma vẫn báo Ready. Và trong bốn phút đó, kubectl get deployment vẫn hiện 4/4 — chỉ Endpoints nói thật.

DevOps 30/08/2026 7 phút

Cùng một lệnh đổi ảnh: có readinessProbe thì cả ba cấu hình đều 0 lỗi, bỏ nó đi thì 8% yêu cầu chết — thứ tạo ra 'không gián đoạn' không phải RollingUpdate

Đo kỹ rolling update, đổi từng tham số để tìm thứ nào thật sự tạo ra 'không gián đoạn'. Có readinessProbe thì maxUnavailable 0, 1, hay 3 đều 0 lỗi — nhanh gấp sáu lần vẫn không mất yêu cầu nào, vì cấu hình quyết định TỐC ĐỘ chứ không quyết định AN TOÀN. Bỏ readinessProbe đi thì cùng lệnh đó mất 8% yêu cầu (Recreate 18%), và kubectl rollout status báo hoàn tất sau 2,6 giây trong khi container còn tám giây nữa mới nghe cổng. Thứ tạo ra không gián đoạn là readinessProbe, không phải RollingUpdate.

DevOps 30/08/2026 8 phút

Ba probe của Kubernetes nghe như cùng một việc 'kiểm tra sức khoẻ' — nhưng khi hỏng, một cái giết container, một cái chỉ ngừng gửi việc, một cái bảo hai cái kia chờ

Ba probe trả lời ba câu hỏi khác nhau và Kubernetes phản ứng theo ba cách khác hẳn. livenessProbe hỏng thì container bị khởi động lại (và nếu lỗi không tự khỏi thì lặp mãi); readinessProbe hỏng thì pod bị gỡ khỏi Endpoints nhưng KHÔNG khởi động lại (RESTARTS=0, vẫn Running, chỉ 0/1); startupProbe thì tạm dừng cả hai cái kia cho ứng dụng khởi động lâu kịp lên. Đo cả ba, và vì sao dùng startupProbe đúng hơn hẳn việc nâng initialDelaySeconds — cái sau chữa lúc khởi động nhưng làm ì việc phát hiện lỗi suốt đời container.

DevOps 30/08/2026 8 phút

Cơ sở dữ liệu chớp tắt vài giây, và cả bốn pod ứng dụng — vốn đang khoẻ mạnh — rơi vào vòng lặp khởi động lại chỉ vì một dòng livenessProbe nghe rất hợp lý

Probe là thứ hiếm hoi mà cấu hình sai còn tệ hơn không cấu hình. Dựng ba kiểu sai phổ biến nhất và đo hậu quả: livenessProbe kiểm phụ thuộc ngoài khiến cả fleet restart khi DB chết (và restart không sửa được gì, còn làm phục hồi tệ hơn); timeoutSeconds mặc định 1 giây giết pod hoàn toàn khoẻ chỉ vì nó trả lời chậm hơn một giây; readinessProbe với failureThreshold 1 làm cả dịch vụ mất hết endpoint khi mọi pod cùng trượt một nhịp — mà kubectl get pods trông gần như bình thường. Và vì sao nhiều ứng dụng KHÔNG nên có livenessProbe.