Проверка состояния регулярно проверяет состояние контейнеров, когда контейнеры работают. Если проверка состояния не настроена, pod не может обнаруживать исключения приложения или автоматически перезапустить приложение для его восстановления. В результате pod может находиться в состоянии Running состояние, но приложение недоступно или работает неправильно.
Kubernetes предоставляет три типа проверок состояния (probe) для мониторинга приложений в контейнерах с целью обеспечения стабильности системы и высокой доступности.
Для получения дополнительной информации, смотрите Liveness, Readiness, and Startup Probes и Configure Liveness, Readiness and Startup Probes.
Параметр | Описание |
|---|---|
Метод проверки | Существует четыре варианта. Выберите один в зависимости от сценария сервиса. Подробнее о конкретных параметрах каждого метода проверки см. в разделе "Specific Parameters". Подробнее о общих параметрах, таких как период проверки и задержка, см. Общие параметры.
|
Этот вариант применяется к контейнеру, предоставляющему сервисы по HTTP/HTTPS. Кластер будет периодически отправлять HTTP/HTTPS GET‑запрос в контейнер и определять результат проверки по статус‑коду HTTP. Подробности:
Ниже приведены параметры, характерные для проверки на основе HTTP‑запроса. Примерные значения в Table 2 показывают, что кластер периодически отправляет "GET http://172.16.0.186:80/health-check" в контейнер для проверки его состояния.
Параметр | Пример значения | Описание |
|---|---|---|
Path | /health-check | HTTP или HTTPS путь запроса для проверки состояния. Используйте абсолютный путь, начинающийся с символа "/". |
Port | 80 | (Обязательно) Порт, на котором слушает контейнер, используется для его поиска в pod. |
Host Address | 172.16.0.186 | IP‑адрес запрашиваемого хоста. Если параметр не указан, по умолчанию используется IP‑адрес pod. |
Protocol | HTTP | Протокол, используемый для отправки запросов. Значение должно соответствовать типу сервиса, предоставляемого контейнером. |
Этот вариант применяется к контейнеру, предоставляющему сервисы по TCP (например, базы данных, кэши, пользовательские TCP‑сервисы). Кластер будет периодически устанавливать TCP‑соединение с контейнером для проверки состояния. Если соединение успешно, проверка считается успешной. В противном случае — не проходит. Необходимо указать порт, на котором слушает контейнер.
Ниже приведены параметры, характерные для проверки на основе TCP‑порта. Предположим, что у контейнера Nginx порт прослушивания — 80. Если для контейнера настроена TCP‑проверка и указать порт проверки "80", кластер будет периодически устанавливать TCP‑соединение с этим портом. Если соединение успешно, проверка считается успешной. В противном случае — не проходит.Table 3 Параметры, характерные для проверки на основе TCP‑порта
Описание | Port | 80 |
|---|---|---|
(Обязательно) Порт, на котором слушает контейнер, используется для его поиска в pod. | Command |
Этот вариант — гибкий метод проверки, позволяющий указать команду в контейнере. Кластер будет периодически выполнять команду в контейнере для проверки его состояния. Если код возврата равен 0, проверка считается успешной. В противном случае — не проходит.
Для проверок на основе TCP‑порта и HTTP‑запросов также можно указать команды для достижения аналогичного эффекта. Например, значения в Table 4 позволяют реализовать проверку, аналогичную HTTP‑запросу.
В средах с высокой нагрузкой не используйте проверки на основе команд, так как они потребляют ресурсы системы. При нехватке ресурсов, например при высоком использовании CPU или блокировке файловой системы, проверка может завершиться по тайм‑ауту и будет отмечена как неудачная. Если необходимо использовать такие проверки, следуйте рекомендациям:
Параметр | Пример значения | Описание |
|---|---|---|
Command | /bin/sh -c curl -sf http://172.16.0.186:80/health-check || exit 1 | Команда, выполняемая в контейнере для проверки его состояния. ПРИМЕЧАНИЕ:
|
Этот вариант применяется к gRPC‑приложениям. Не требуется открывать HTTP‑порты или зависеть от внешних скриптов. Проверка состояния контейнера может быть реализована через стандартные gRPC‑API. Проверка gRPC может использоваться только при выполнении следующих условий:
Параметр | Пример значения | Описание |
|---|---|---|
Port | 80 | (Обязательно) Порт, на котором слушает контейнер, используется для его поиска в pod. |
Параметр | Описание | Example YAML |
|---|---|---|
Period (periodSeconds) | Период обнаружения probe, в секундах. Например, если установить значение "30", probe будет выполняться каждые 30 секунд.30, probe будет выполняться каждые 30 секунд. | Ниже приведён пример конфигурации TCP‑портовой проверки liveness probe. Конфигурации остальных методов проверок аналогичны.
|
Delay (initialDelaySeconds) | Время, отведённое на запуск сервисной программы, в секундах. Например, если установить значение "30", проверка начнётся через 30 секунд после старта контейнера.30 | |
Timeout (timeoutSeconds) | Тайм‑аут проверки, в секундах. Если установить значение "0" или не указать значение, используется значение по умолчанию ("1").1.Пример: значение "10" означает, что тайм‑аут проверки составляет 10 секунд. Если проверка длится дольше, она считается неуспешной. 10 указывает, что тайм‑аут проверки составляет 10 с. | |
Success Threshold (successThreshold) | Минимальное количество последовательных успешных проверок, после которых контейнер считается здоровым после неудачной проверки. Значение по умолчанию — "1", минимальное значение — "1". Для проверок liveness и startup этот параметр должен быть равен "1".1, а минимальное значение — "1". Этот параметр должен быть установлен в "1" для проверок liveness и startup.1.Для примера, если установить значение "1", после одной успешной проверки контейнер будет восстановлен в нормальном состоянии после неудачной проверки. Failure Threshold (failureThreshold) | |
Количество последовательных неудач, после которого контейнер считается нездоровым. Значение по умолчанию — "3", минимальное значение — "1".3, а минимальное значение — "1".1.
|
Example file content:
apiVersion: v1 kind: Pod metadata: labels: test: liveness name: liveness-http spec: containers: - name: liveness image:
<image_address>args:- /serverlivenessProbe: # Liveness probehttpGet: # An HTTP request is used to check the containers.path: /healthz # The HTTP check path is /healthz/healthz.port: 80 # The health check port is 8080.httpHeaders: # (Optional) The request header name is Custom-HeaderCustom-Header and the value is AwesomeAwesome.- name: Custom-Headervalue: AwesomeinitialDelaySeconds: 3periodSeconds: 3readinessProbe: # Readiness probeexec: # A command is used to check the containers.command: # Command to be executed- cat- /tmp/healthyinitialDelaySeconds: 5periodSeconds: 5startupProbe: # Startup probehttpGet: # An HTTP request is used to check the containers.path: /healthz # The HTTP check path is /healthz/healthz.port: 80 # The health check port is 8080.failureThreshold: 30periodSeconds: 10
kubectl create -f health_check.yaml
If information similar to the following is displayed, the pod is being created:
pod/liveness-http created
kubectl get deployment
If the pod status is Running in the command output, the pod has been created.
NAME READY STATUS RESTARTS AGEliveness-http 1/1 Running 1 4m59s