Что такое Liveness probe failed?

Ошибка Liveness probe failed возникает, когда Kubernetes определяет, что приложение не работает корректно и перезапускает контейнер.

Причины возникновения

  • Приложение зависло или не отвечает
  • Высокое использование ресурсов
  • Ошибки в коде приложения
  • Проблемы с зависимостями
  • Неправильная конфигурация probe
  • Проблемы с сетью внутри контейнера

Как отладить ошибку

  1. Проверь логи приложения - kubectl logs pod-name
  2. Проверь предыдущие логи - kubectl logs pod-name --previous
  3. Проверь события пода - kubectl describe pod pod-name
  4. Проверь ресурсы - kubectl top pod pod-name
  5. Проверь health endpoint - kubectl exec pod-name -- curl localhost:8080/health

Как исправить ошибку

1. Настрой правильный liveness probe

 1apiVersion: v1
 2kind: Pod
 3metadata:
 4  name: my-app
 5spec:
 6  containers:
 7  - name: app
 8    image: nginx:latest
 9    livenessProbe:
10      httpGet:
11        path: /health
12        port: 8080
13      initialDelaySeconds: 30
14      periodSeconds: 10
15      timeoutSeconds: 5
16      failureThreshold: 3
17      successThreshold: 1

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

 1apiVersion: v1
 2kind: Pod
 3metadata:
 4  name: my-app
 5spec:
 6  restartPolicy: Always
 7  containers:
 8  - name: app
 9    image: nginx:latest
10    livenessProbe:
11      httpGet:
12        path: /health
13        port: 8080
14      initialDelaySeconds: 30
15      periodSeconds: 10

Как мониторить подобные ошибки

  • Мониторь количество перезапусков подов
  • Настрой алерты на liveness probe failures
  • Проверяй метрики приложения
  • Логируй все probe failures

FAQ

В: Как часто должен выполняться liveness probe?

О: Обычно каждые 10-30 секунд, но зависит от приложения и требований.

В: Что делать, если приложение медленно отвечает?

О: Увеличь timeoutSeconds, настрой правильный failureThreshold.

В: Как избежать бесконечных перезапусков?

О: Исправь корневую причину проблемы, настрой правильные probe параметры.

Лучшие практики

  • Создавай легкие и быстрые health endpoints
  • Не включай тяжелые операции в liveness probe
  • Настрой правильные timeout и failureThreshold
  • Мониторь количество перезапусков
  • Исправляй корневые причины проблем