Что такое Liveness probe failed?
Ошибка Liveness probe failed
возникает, когда Kubernetes определяет, что приложение не работает корректно и перезапускает контейнер.
Причины возникновения
- Приложение зависло или не отвечает
- Высокое использование ресурсов
- Ошибки в коде приложения
- Проблемы с зависимостями
- Неправильная конфигурация probe
- Проблемы с сетью внутри контейнера
Как отладить ошибку
- Проверь логи приложения -
kubectl logs pod-name
- Проверь предыдущие логи -
kubectl logs pod-name --previous
- Проверь события пода -
kubectl describe pod pod-name
- Проверь ресурсы -
kubectl top pod pod-name
- Проверь health endpoint -
kubectl exec pod-name -- curl localhost:8080/health
Как исправить ошибку
1. Настрой правильный liveness probe
2. Создай надежный health endpoint
1# Пример для Python/Flask
2from flask import Flask
3import threading
4import time
5
6app = Flask(__name__)
7health_status = True
8
9def background_task():
10 global health_status
11 while True:
12 try:
13 # Проверь критичные компоненты
14 check_database()
15 check_redis()
16 health_status = True
17 except Exception as e:
18 health_status = False
19 print(f"Health check failed: {e}")
20 time.sleep(30)
21
22@app.route('/health')
23def health_check():
24 if health_status:
25 return {'status': 'healthy'}, 200
26 else:
27 return {'status': 'unhealthy'}, 503
28
29if __name__ == '__main__':
30 # Запусти background task
31 thread = threading.Thread(target=background_task)
32 thread.daemon = True
33 thread.start()
34
35 app.run(host='0.0.0.0', port=8080)
3. Исправь проблемы с ресурсами
1apiVersion: v1
2kind: Pod
3metadata:
4 name: my-app
5spec:
6 containers:
7 - name: app
8 image: nginx:latest
9 resources:
10 requests:
11 memory: "256Mi"
12 cpu: "250m"
13 limits:
14 memory: "512Mi"
15 cpu: "500m"
16 livenessProbe:
17 httpGet:
18 path: /health
19 port: 8080
20 initialDelaySeconds: 60
21 periodSeconds: 30
4. Настрой exec probe для сложных проверок
1apiVersion: v1
2kind: Pod
3metadata:
4 name: my-app
5spec:
6 containers:
7 - name: app
8 image: nginx:latest
9 livenessProbe:
10 exec:
11 command:
12 - /bin/sh
13 - -c
14 - |
15 if [ $(ps aux | grep nginx | grep -v grep | wc -l) -eq 0 ]; then
16 exit 1
17 fi
18 if [ $(curl -f http://localhost:8080/health || echo "FAIL") = "FAIL" ]; then
19 exit 1
20 fi
21 initialDelaySeconds: 30
22 periodSeconds: 15
5. Исправь проблемы с зависимостями
1apiVersion: v1
2kind: Pod
3metadata:
4 name: my-app
5spec:
6 initContainers:
7 - name: wait-for-dependencies
8 image: busybox
9 command: ['sh', '-c', 'until nc -z db 5432 && nc -z redis 6379; do echo waiting for dependencies; sleep 2; done;']
10 containers:
11 - name: app
12 image: nginx:latest
13 livenessProbe:
14 httpGet:
15 path: /health
16 port: 8080
17 initialDelaySeconds: 30
18 periodSeconds: 10
6. Настрой restart policy
Как мониторить подобные ошибки
- Мониторь количество перезапусков подов
- Настрой алерты на liveness probe failures
- Проверяй метрики приложения
- Логируй все probe failures
FAQ
В: Как часто должен выполняться liveness probe?
О: Обычно каждые 10-30 секунд, но зависит от приложения и требований.
В: Что делать, если приложение медленно отвечает?
О: Увеличь timeoutSeconds, настрой правильный failureThreshold.
В: Как избежать бесконечных перезапусков?
О: Исправь корневую причину проблемы, настрой правильные probe параметры.
Лучшие практики
- Создавай легкие и быстрые health endpoints
- Не включай тяжелые операции в liveness probe
- Настрой правильные timeout и failureThreshold
- Мониторь количество перезапусков
- Исправляй корневые причины проблем