Tình huống: probe làm cả đội Pod restart dây chuyền Trung cấp
Thời gian đọc ước tính: 1 phút
Một query báo cáo làm database chậm. Vì /health của liveness gọi database với timeoutSeconds: 1, kubelet restart cả 8 Pod, Pod mới khởi động lại dồn tải vào database, và cả đội Pod vào CrashLoopBackOff. Bạn đi qua bốn quyết định: cầm máu, root cause, thiết kế lại probe và action item.
- Chọn sai thì đọc giải thích rồi Chọn lại.
- Điểm chỉ tính lựa chọn đầu tiên ở mỗi bước. Gợi ý: với mỗi probe, hỏi “restart có sửa được lỗi này không?”.
Database chậm, cả đội Pod vào CrashLoopBackOff
Bạn là on-call của team order API (NestJS, 8 Pod, mỗi Pod pool 20 connection tới một PostgreSQL primary dùng chung). Mỗi lựa chọn hiển thị ngay hậu quả trên các chỉ số bên dưới.
Bước 1/4 · 14:09, không còn Pod nào nhận traffic
14:02 một query báo cáo full scan trên primary làm database chậm: query thường từ 5 ms lên 1–2 giây. Hai phút sau, cả 8 Pod bị restart. Pod mới khởi động phải nạp cấu hình và warm cache từ database, mất 70 giây thay vì 25, rồi lại bị kill.
Giờ 6/8 Pod đang CrashLoopBackOff, Service không còn endpoint, gần như mọi request trả 503.
- Pod
- 0/8 ready, 6 CrashLoopBackOff
- query báo cáo
- đang chạy 7 phút, pid 48213
- event loop delay của Pod
- bình thường, CPU Pod 20%
livenessProbe: { httpGet: { path: /health, port: 3000 }, periodSeconds: 10, timeoutSeconds: 1, failureThreshold: 3 }
readinessProbe: { httpGet: { path: /health, port: 3000 }, periodSeconds: 10, timeoutSeconds: 1 }
# /health = TypeOrmHealthIndicator.pingCheck('database')
Events:
Warning Unhealthy Liveness probe failed: Get "http://10.0.3.17:3000/health":
context deadline exceeded (Client.Timeout exceeded while awaiting headers)
Normal Killing Container api failed liveness probe, will be restartedBạn làm gì?
Chơi xong, đọc Kubernetes probes để xem bảng chọn probe theo từng loại sự cố và manifest tối giản.