Health check регулярно проверяет состояние контейнеров, когда контейнеры находятся в работе. Если проверка состояния не настроена, pod не может обнаружить исключения приложения или автоматически перезапустить приложение для его восстановления. В результате pod может находиться в состоянии Running, но приложение недоступно или работает аномально.
Kubernetes предоставляет три типа проверок состояния для мониторинга приложений в контейнерах с целью обеспечения стабильности системы и высокой доступности.
Для получения дополнительной информации см. Liveness, Readiness, and Startup Probes и Configure Liveness, Readiness and Startup Probes.
Параметр | Описание |
|---|---|
Check Method | Существует четыре варианта. Выберите один в соответствии со сценарием вашего сервиса. Для получения сведений о конкретных параметрах каждого метода проверки см. "Specific Parameters" в этом разделе. Для получения сведений о общих параметрах, таких как период проверки и задержка, см. Common Parameters.
|
Этот вариант применяется к контейнеру, предоставляющему сервисы по протоколу HTTP/HTTPS. Кластер будет периодически отправлять HTTP/HTTPS GET‑запрос к контейнеру и определять результаты проверки на основе кодов статуса HTTP. Подробности приведены ниже:
Ниже описаны параметры, специфичные для проверки на основе HTTP‑запроса. Примерные значения в Table 2 показывают, что кластер периодически отправляет "GET http://172.16.0.186:80/health-check" в контейнер для проверки его работоспособности.
Parameter | Example Value | Description |
|---|---|---|
Path | /health-check | Путь HTTP или HTTPS запроса для проверки работоспособности. Используйте абсолютный путь, начинающийся со слеша (/). |
Port | 80 | (Mandatory) Порт, на котором слушает контейнер, используемый для определения местоположения контейнера в pod. |
Host Address | 172.16.0.186 | IP‑адрес запрашиваемого хоста. Если этот параметр не задан, по умолчанию используется IP‑адрес pod. |
Protocol | HTTP | Протокол, используемый для отправки запросов. Значение должно соответствовать типу сервиса, предоставляемого контейнером. |
Этот параметр применяется к контейнеру, предоставляющему сервисы по TCP (например, базы данных, кэши и пользовательские сервисы TCP). Кластер будет периодически устанавливать TCP‑соединение с контейнером для проверки его состояния. Если соединение успешно, проверка проходит успешно. В противном случае проверка не проходит. Необходимо указать порт, на котором контейнер прослушивает запросы.
Ниже описаны параметры, специфичные для проверки по TCP‑порту. Предположим, что порт прослушивания контейнера Nginx — 80. Если для контейнера настроена TCP‑проверка и порт проверки установлен в 80, кластер будет периодически устанавливать TCP‑соединение с этим портом. Если соединение успешно, проверка проходит успешно. В противном случае проверка не проходит.
Параметр | Пример значения | Описание |
|---|---|---|
Порт | 80 | (Обязательно) Порт прослушивания контейнера, используемый для определения местоположения контейнера в pod. |
Этот параметр представляет собой гибкий метод проверки состояния, позволяющий указать команду в контейнере. Кластер будет периодически выполнять команду в контейнере для проверки его статуса. Если код выхода равен 0, проверка состояния считается успешной. В противном случае проверка состояния не проходит.
Для проверок, основанных на TCP‑порту и HTTP‑запросах, также можно указывать команды для достижения аналогичного эффекта. Например, примерные значения в Table 4 могут обеспечить эффект проверок, основанных на HTTP‑запросах.
В среде с высокой нагрузкой не используйте проверки состояния, основанные на командах, поскольку они потребляют системные ресурсы. Если ресурсов недостаточно, например, при высоком использовании CPU или заблокированной файловой системе, проверка может завершиться по тайм‑ауту и быть отмечена как неуспешная. Если необходимо использовать проверки, основанные на командах, соблюдайте следующие рекомендации:
Parameter | Example Value | Description |
|---|---|---|
Command | /bin/sh -c curl -sf http://172.16.0.186:80/health-check || exit 1 | Команда, выполняемая в контейнере для проверки его состояния. NOTE:
|
Эта опция применяется к gRPC‑приложениям. Не требуется открывать HTTP‑порты или зависеть от внешних исполняемых скриптов. Проверка состояния контейнера может быть реализована через стандартные gRPC‑API. Проверка gRPC может использоваться только при выполнении следующих условий:
Parameter | Example Value | Description |
|---|---|---|
Port | 80 | (Обязательно) Порт, на котором слушает контейнер, используемый для определения местоположения контейнера в pod. |
Parameter | Description | Example YAML |
|---|---|---|
Period (periodSeconds) | Период обнаружения проб, в секундах. Например, если этот параметр установлен в 30, проба выполняется каждые 30 секунд. | Ниже в качестве примера используется проверка живости на основе TCP‑порта. Конфигурации других методов проверки аналогичны.
|
Задержка (initialDelaySeconds) | Время, зарезервированное для запуска сервисной программы, в секундах. Например, если этот параметр установлен в 30, проверка состояния начинается через 30 секунд после запуска контейнера. | |
Тайм‑аут (timeoutSeconds) | Продолжительность тайм‑аута проверки состояния, в секундах. Если вы установите этот параметр в 0 или не укажете значение, будет использовано значение по умолчанию (1). Пример: значение 10 указывает, что продолжительность тайм‑аута проверки состояния составляет 10 с. Если проверка состояния занимает больше этого времени, она считается неуспешной. | |
Success Threshold (successThreshold) | Минимальное количество последовательных успешных проверок, после которых контейнер считается здоровым после сбоя проверки состояния. Значение по умолчанию — 1, минимальное значение — 1. Этот параметр должен быть установлен в 1 для проверок живости и запуска. Например, если этот параметр установлен в 1, рабочая нагрузка будет восстановлена в нормальное состояние, если проверка состояния будет успешна один раз после сбоя. | |
Failure Threshold (failureThreshold) | Количество последовательных неудач, допускаемых до того, как контейнер будет считаться нездоровым. Значение по умолчанию — 3, минимальное значение — 1.
|
vim health_check.yaml
Пример содержимого файла:
apiVersion: v1kind: Podmetadata:labels:test: livenessname: liveness-httpspec:containers:- name: livenessimage: <image_address>args:- /serverlivenessProbe: # Liveness probehttpGet: # An HTTP request is used to check the containers.path: /healthz # The HTTP check path is /healthz .port: 80 # The health check port is 80 .httpHeaders: # (Optional) The request header name is Custom-Header and the value is Awesome .- 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 .port: 80 # The health check port is 80 .failureThreshold: 30periodSeconds: 10
kubectl create -f health_check.yaml
Если отображается информация, похожая на следующую, pod создаётся:
pod/liveness-http created
kubectl get deployment
Если статус pod Running в выводе команды, pod был создан.
NAME READY STATUS RESTARTS AGEliveness-http 1/1 Running 1 4m59s