Проверка состояния регулярно проверяет состояние контейнеров, когда контейнеры работают. Если проверка состояния не настроена, pod не может обнаруживать исключения приложения или автоматически перезапускать приложение для его восстановления. В результате pod может находиться в Запущено состояние, но приложение недоступно или имеет аномалии.
Kubernetes предоставляет три типа проверок состояния для мониторинга приложений в контейнерах с целью обеспечения стабильности системы и высокой доступности.
Для получения дополнительной информации см. Проба живости, готовности и запуска и Настройка проб живости, готовности и запуска.
Параметр | Описание |
|---|---|
Метод проверки | Существует четыре варианта. Выберите один в соответствии со сценарием вашего сервиса. Подробнее о конкретных параметрах каждого метода проверки см. раздел "Specific Parameters" в этом разделе. Для получения подробной информации о общих параметрах, таких как период проверки и задержка, см Общие параметры.
|
Эта опция применяется к контейнеру, предоставляющему службы через HTTP/HTTPS. Кластер будет периодически отправлять HTTP/HTTPS GET запрос к контейнеру и определять результаты проверки на основе HTTP-кодов состояния. Подробности приведены ниже:
Ниже описаны параметры, специфичные для проверки на основе HTTP‑запроса. Примерные значения в Таблица 2 указывают, что кластер периодически отправляет "GET http://172.16.0.186:80/health-check" к контейнеру для проверки его работоспособности.
Параметр | Примерное значение | Описание |
|---|---|---|
Путь | /health-check | Путь HTTP или HTTPS запроса для проверки состояния. Используйте абсолютный путь, начинающийся со слэша (/). |
Порт | 80 | (Обязательно) Порт прослушивания контейнера, который используется для определения местоположения контейнера в поде. |
Адрес хоста | 172.16.0.186 | IP-адрес запрашиваемого хоста. Если этот параметр не установлен, по умолчанию используется IP-адрес пода. |
Протокол | HTTP | Протокол, используемый для отправки запросов. Значение должно соответствовать типу сервиса, предоставляемого контейнером. |
Эта опция применяется к контейнеру, предоставляющему сервисы по протоколу TCP (например, базы данных, кэши и пользовательские TCP‑сервисы). Кластер будет периодически устанавливать TCP‑соединение с контейнером для проверки его работоспособности. Если соединение успешно, проверка считается успешной. В противном случае проверка не проходит. Необходимо указать порт, на котором контейнер принимает соединения.
Ниже описаны параметры, специфичные для проверки, основанной на TCP‑порту. Предположим, что порт прослушивания контейнера Nginx — 80. Если для контейнера настроена TCP‑проверка и порт проверки установлен на 80, кластер будет периодически устанавливать TCP‑соединение к порту. Если соединение успешно, зонд считается успешным. В противном случае зонд не удался.
Параметр | Пример значения | Описание |
|---|---|---|
Порт | 80 | (Обязательно) Порт прослушивания контейнера, который используется для поиска контейнера в pod. |
Этот параметр — гибкий метод проверки работоспособности, позволяющий указать команду в контейнере. Кластер будет периодически выполнять команду в контейнере для проверки его состояния. Если статус кода выхода равен 0, проверка работоспособности успешна. В противном случае проверка работоспособности не удалась.
Для проверок, основанных на порту TCP и HTTP‑запросах, вы также можете указать команды для достижения аналогичных эффектов. Например, примерные значения в Таблица 4 может достичь эффекта проверок, основанных на HTTP‑запросах.
В среде с высокой нагрузкой рекомендуется не запускать команды для проверки состояния здоровья. Запуск команд потребляет системные ресурсы. Если системных ресурсов недостаточно (например, когда нагрузка на CPU высока или файловая система заблокирована), проверка состояния может завершиться неудачей из‑за тайм‑аута. Если необходимо запустить команду для проверки состояния, рекомендуется увеличить количество допускаемых отказов и расширить интервал тайм‑аута, чтобы предотвратить сбой проверки из‑за непредвиденной конкуренции за ресурсы.
Параметр | Примерное значение | Описание |
|---|---|---|
Команда | /bin/sh -c curl -sf http://172.16.0.186:80/health-check || exit 1 | Команда, выполненная в контейнере, для проверки статуса контейнера. NOTE:
|
Эта опция применяется к gRPC‑приложениям. Вам не требуется открывать HTTP‑порты или полагаться на внешние исполняемые скрипты. Проверка состояния Контейнера может быть реализована через стандартные gRPC‑API. Проверка gRPC может использоваться только если выполнены следующие условия:
Параметр | Пример значения | Описание |
|---|---|---|
Порт | 80 | (Обязательно) Порт прослушивания Контейнера, который используется для поиска Контейнера в pod. |
Параметр | Описание | Пример YAML |
|---|---|---|
Период (periodSeconds) | Период обнаружения проб, в секундах. Например, если этот параметр установлен в 30, проба выполняется каждые 30 секунд. | Ниже приведён пример проверки пробой живости на основе TCP‑порта. Конфигурации остальных методов проверки аналогичны.
|
Задержка (initialDelaySeconds) | Время, выделенное для запуска программы службы, в секундах. Например, если этот параметр установлен в 30, проверка работоспособности начинается через 30 секунд после запуска контейнера. | |
Тайм-аут (timeoutSeconds) | Продолжительность тайм‑аута проверки состояния, в секундах. Если вы задаёте этот параметр 0 или не указываете значение, используется значение по умолчанию (1) используется. Пример: Значение 10 указывает, что продолжительность тайм‑аута проверки состояния составляет 10 с. Если проверка состояния занимает больше времени, чем это значение, проверка считается неуспешной. | |
Порог успешности (successThreshold) | Минимальное количество последовательных успешных проверок, после которого контейнер считается здоровым после сбоя проверки состояния. Значение по умолчанию — 1, а минимальное значение — 1. Этот параметр должен быть установлен на 1 для проб живости и запуска. Например, если этот параметр установлен на 1, рабочая нагрузка будет восстановлена в нормальное состояние, если проверка работоспособности пройдет успешно один раз после сбоя. | |
Порог отказов (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 Запущен в выводе команды pod был создан.
NAME READY STATUS RESTARTS AGEliveness-http 1/1 Running 1 4m59s