Что происходит, когда kubernetes readiness-probe возвращает false? Как долго ждать?

#kubernetes #kubernetes-pod #readinessprobe

#kubernetes #kubernetes-pod #проверка готовности

Вопрос:

Что происходит, когда Kubernetes readiness-probe возвращает false? Перезапускает ли Kubernetes этот модуль после тайм-аута? Как долго Kubernetes ожидает готовности?

Ответ №1:

Датчик готовности не перезапускает модуль / контейнер, датчик готовности определяет, что контейнер готов к обслуживанию трафика. Если контейнер будет проверен и сочтен не «готовым», контейнер будет удален с конечных точек, и трафик на него не будет отправляться до тех пор, пока он снова не будет готов.

[1] https://kubernetes.io/docs/tasks/configure-pod-container/configure-liveness-readiness-startup-probes/#define-readiness-probes

[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. Конечно, проверка готовности — это проверка готовности к подаче, поэтому, если в определенный момент своего жизненного цикла обнаруживается, что контейнер не готов, но затем проверка готовности снова завершается успешно — это именно тот момент, когда он снова станет готовым.