#kubernetes #kubernetes-pod #readinessprobe
#kubernetes #kubernetes-pod #проверка готовности
Вопрос:
Что происходит, когда Kubernetes readiness-probe
возвращает false? Перезапускает ли Kubernetes этот модуль после тайм-аута? Как долго Kubernetes ожидает готовности?
Ответ №1:
Датчик готовности не перезапускает модуль / контейнер, датчик готовности определяет, что контейнер готов к обслуживанию трафика. Если контейнер будет проверен и сочтен не «готовым», контейнер будет удален с конечных точек, и трафик на него не будет отправляться до тех пор, пока он снова не будет готов.
[2] https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle/#container-probes
[3] kubectl explain pod.spec.containers.readinessProbe
KIND: Pod
VERSION: v1
RESOURCE: readinessProbe <Object>
DESCRIPTION:
Periodic probe of container service readiness. Container will be removed
from service endpoints if the probe fails. Cannot be updated. More info:
https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#container-probes
Probe describes a health check to be performed against a container to
determine whether it is alive or ready to receive traffic.
FIELDS:
exec <Object>
One and only one of the following should be specified. Exec specifies the
action to take.
failureThreshold <integer>
Minimum consecutive failures for the probe to be considered failed after
having succeeded. Defaults to 3. Minimum value is 1.
httpGet <Object>
HTTPGet specifies the http request to perform.
initialDelaySeconds <integer>
Number of seconds after the container has started before liveness probes
are initiated. More info:
https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#container-probes
periodSeconds <integer>
How often (in seconds) to perform the probe. Default to 10 seconds. Minimum
value is 1.
successThreshold <integer>
Minimum consecutive successes for the probe to be considered successful
after having failed. Defaults to 1. Must be 1 for liveness and startup.
Minimum value is 1.
tcpSocket <Object>
TCPSocket specifies an action involving a TCP port. TCP hooks not yet
supported
timeoutSeconds <integer>
Number of seconds after which the probe times out. Defaults to 1 second.
Minimum value is 1. More info:
https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#container-probes
Давайте воспользуемся зондом готовности по умолчанию из документации:
cat pod.yaml
apiVersion: v1
kind: Pod
metadata:
name: nginx
spec:
containers:
- name: nginx
image: nginx:1.14.2
ports:
- containerPort: 80
readinessProbe:
exec:
command:
- cat
- /tmp/healthy
initialDelaySeconds: 5
periodSeconds: 5
Чтобы выполнить проверку, kubelet выполняет команду cat /tmp/healthy в целевом контейнере. Если команда выполнена успешно, она возвращает 0, значит, контейнер готов и может «служить». если команда возвращает что-либо, кроме 0, контейнер неисправен.
Поскольку этот файл не существует в контейнере с самого начала, при запуске модуля он будет очень нездоровым.
date amp;amp; k get pods nginx
Thu 2 Dec 2021 19:08:43 AST
NAME READY STATUS RESTARTS AGE
nginx 0/1 Running 0 66s
теперь давайте запустим exec и создадим файл, чтобы команда была выполнена успешно.
k exec -it nginx -- bash
root@nginx:/# touch /tmp/healthy
root@nginx:/# exit
exit
проверка снова:
date amp;amp; k get pods nginx
Thu 2 Dec 2021 19:09:26 AST
NAME READY STATUS RESTARTS AGE
nginx 1/1 Running 0 110s
удаление снова:
k exec -it nginx -- bash
root@nginx:/# rm /tmp/healthy
root@nginx:/# exit
exit
проверка:
date amp;amp; k get pods nginx
Thu 2 Dec 2021 19:09:53 AST
NAME READY STATUS RESTARTS AGE
nginx 0/1 Running 0 2m17s
Комментарии:
1.
until it is ready again
AFAIK модуль готов к запуску, затем запускается и проверяется с помощью liveness-probes. Затем может умереть и перезапуститься. Так что нет такой вещи, какready again
нет? (это было бы как рождение заново, т.Е. Невозможно)2. Привет! Контейнер может быть полностью
not ready
запущен, и важно понимать, что умирание и перезапуск — это не то, что происходит с ним в контекстеreadiness probe
(это то, что нам нужноliveness probe
). Контейнер может стать не готовым, а затем снова готов. Нет ничего невозможного 🙂3. Я обновил ответ, чтобы показать пример того, как один и тот же контейнер может быть создан неработоспособным, затем стать работоспособным, а затем снова стать неработоспособным.
4. Я имею в виду, что цикл:
not ready
->ready
->live
->died
. Можете ли вы уточнить, где и как это может произойтиready again
?5. Конечно, проверка готовности — это проверка готовности к подаче, поэтому, если в определенный момент своего жизненного цикла обнаруживается, что контейнер не готов, но затем проверка готовности снова завершается успешно — это именно тот момент, когда он снова станет готовым.