Liveness probe fail thì kubelet giết container và khởi động lại. Nên nếu probe kiểm tra nhầm thứ, hệ thống tự phá chính nó.
Hai lỗi phổ biến:
1. Health endpoint kiểm tra cả dependency. Nếu /health gọi DB và DB chậm 5 giây, liveness fail → mọi Pod restart cùng lúc → mất luôn service dù app hoàn toàn bình thường. Sự cố ở DB bị khuếch đại thành sự cố toàn hệ thống.
2. Timeout quá ngắn cho app khởi động chậm. App JVM cần 40 giây warm-up nhưng initialDelaySeconds: 10 → probe fail trước khi app kịp sẵn sàng → restart mãi, Pod không bao giờ lên được.
Nguyên tắc tách vai trò:
- Liveness = "process này có kẹt vĩnh viễn không?" → chỉ check nội tại (deadlock, event loop chết). Endpoint phải rẻ và không gọi dependency ngoài.
- Readiness = "có nên nhận traffic lúc này không?" → được phép check dependency; fail chỉ khiến Pod rời Endpoints, không restart.
- Startup probe = chỗ đúng để khoan dung với app khởi động lâu; liveness bị hoãn cho tới khi startup pass.
startupProbe:
httpGet: { path: /health/live, port: 8080 }
failureThreshold: 30
periodSeconds: 5 # cho phep toi da 150s de khoi dong
livenessProbe:
httpGet: { path: /health/live, port: 8080 }
periodSeconds: 10
readinessProbe:
httpGet: { path: /health/ready, port: 8080 }
periodSeconds: 5