Ответ
Реакция зависит от типа пробы:
1. Liveness Probe (проба жизнеспособности):
Если контейнер не проходит проверку livenessProbe после заданного количества попыток (failureThreshold), kubelet убивает контейнер и перезапускает его согласно политике перезапуска (restartPolicy). Это механизм восстановления "зависших" приложений.
2. Readiness Probe (проба готовности):
Если контейнер не проходит readinessProbe, его IP-адрес удаляется из списка эндпоинтов Service. Продолжает работать, но не получает новый входящий трафик. Это позволяет приложению завершить инициализацию или временно исключить неготовый экземпляр из балансировки нагрузки.
Пример конфигурации в Deployment:
apiVersion: apps/v1
kind: Deployment
spec:
template:
spec:
containers:
- name: app
image: myapp:latest
livenessProbe:
httpGet:
path: /healthz
port: 8080
initialDelaySeconds: 30
periodSeconds: 10
failureThreshold: 3
readinessProbe:
httpGet:
path: /ready
port: 8080
initialDelaySeconds: 5
periodSeconds: 5
failureThreshold: 1
Мои действия при падении проб:
- Проверить логи пода:
kubectl logs <pod-name>. - Изучить события пода:
kubectl describe pod <pod-name>для деталей провала проб. - Проверить доступность эндпоинтов пробы изнутри пода:
kubectl exec <pod-name> -- curl -f http://localhost:8080/healthz. - Убедиться, что настройки
initialDelaySeconds,periodSecondsиfailureThresholdсоответствуют реальному времени запуска приложения. - Проверить потребление ресурсов (CPU/память) пода, которое может приводить к зависанию.