Health Checks That Lied
Нашите pods докладват, че са здрави, но не могат да обслужват трафик. Как така?
Проверката за здраве:
livenessProbe:
httpGet:
path: /health
port: 8080
Handler-ът:
@GetMapping("/health")
public String health() {
return "OK"; // Винаги връща OK
}
Проблемът:
- Приложението стартира, връща "OK"
- Връзката с базата данни пропада
- Кешът е недостъпен
- Външен API timeout
- Но проверка за здраве: "OK" ✅
По-добрият подход:
@GetMapping("/health/ready")
public ResponseEntity<HealthStatus> readiness() {
boolean dbOk = checkDatabase();
boolean cacheOk = checkCache();
if (dbOk && cacheOk) {
return ResponseEntity.ok(status);
}
return ResponseEntity.status(503).body(status);
}
Урок: Проверка за здраве, която не проверява здравето, е по-лоша от никаква проверка.