Почему 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, если все пойдет хорошо, иначе это может быть сбой