Почему kubernetes сообщает "сбой проверки готовности" и "сбой проверки работоспособности"

У меня есть работающее развертывание Kubernetes моего приложения.

---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: my-app
spec:
  ...
  template:
    ...
    spec:
      containers:
      - name: my-app
        image: my-image
        ...
        readinessProbe:
          httpGet:
            port: 3000
            path: /
        livenessProbe:
          httpGet:
            port: 3000
            path: /

Когда я применяю свое развертывание, я вижу, что оно работает правильно и приложение отвечает на мои запросы.

$ kubectl describe pod -l app=my-app

...
Events:
  Type    Reason     Age   From                                  Message
  ----    ------     ----  ----                                  -------
  Normal  Scheduled  4m7s  default-scheduler                     Successfully assigned XXX
  Normal  Pulled     4m5s  kubelet, pool-standard-4gb-2cpu-b9vc  Container image "my-app" already present on machine
  Normal  Created    4m5s  kubelet, pool-standard-4gb-2cpu-b9vc  Created container my-app
  Normal  Started    4m5s  kubelet, pool-standard-4gb-2cpu-b9vc  Started container my-app

Приложение имеет дефект и вылетает при определенных обстоятельствах. Я "вызываю" такое условие, а затем вижу следующее в событиях модуля:

$ kubectl describe pod -l app=my-app

...
Events:
  Type     Reason     Age               From                                  Message
  ----     ------     ----              ----                                  -------
  Normal   Scheduled  6m45s             default-scheduler                     Successfully assigned XXX
  Normal   Pulled     6m43s             kubelet, pool-standard-4gb-2cpu-b9vc  Container image "my-app" already present on machine
  Normal   Created    6m43s             kubelet, pool-standard-4gb-2cpu-b9vc  Created container my-app
  Normal   Started    6m43s             kubelet, pool-standard-4gb-2cpu-b9vc  Started container my-app
  Warning  Unhealthy  9s                kubelet, pool-standard-4gb-2cpu-b9vc  Readiness probe failed: Get http://10.244.2.14:3000/: net/http: request canceled (Client.Timeout exceeded while awaiting headers)
  Warning  Unhealthy  4s (x3 over 14s)  kubelet, pool-standard-4gb-2cpu-b9vc  Liveness probe failed: Get http://10.244.2.14:3000/: net/http: request canceled (Client.Timeout exceeded while awaiting headers)
  Normal   Killing    4s                kubelet, pool-standard-4gb-2cpu-b9vc  Container crawler failed liveness probe, will be restarted

Ожидается, что зонд живучести откажет и контейнер будет перезапущен. Но почему я вижуReadiness probe failed событие?

4 ответа

Решение

Как написал в комментарии @suren, проверка готовности по-прежнему выполняется после запуска контейнера. Таким образом, если определены оба теста живучести и готовности (а также fx, они одинаковы), и готовность, и тест живучести могут потерпеть неудачу.

Вот аналогичный вопрос с четким развернутым ответом.

Зонд готовности используется, чтобы определить, готов ли контейнер обслуживать запросы. Ваш контейнер может работать, но не проходит через зонд. Если он не пройдет проверку, никакая служба не будет перенаправлена ​​на этот контейнер.

По умолчанию период проверки готовности составляет 10 секунд.

Вы можете прочитать больше здесь: https://docs.openshift.com/container-platform/3.9/dev_guide/application_health.html

Вы настроили одну и ту же проверку готовности и зонд живучести - поэтому, если проверка живучести завершилась неудачно, можно предположить, что готовность также терпит неудачу.

Предоставьте функцию / метод реализации на бэкэнде, вы можете создать /health с именем uri и написать здесь логику жизнеспособности, и готовность тоже может быть вашим выбором.

/health uri, должен быть связан с реализацией функции, которая может вернуть код состояния 200, если все пойдет хорошо, иначе это может быть сбой

Другие вопросы по тегам