Health check регулярно проверяет состояние контейнеров, когда они работают. Если проверка состояния не настроена, pod не может обнаружить исключения приложения или автоматически перезапустить приложение для его восстановления. В результате pod может находиться в состоянии Running, но приложение недоступно или работает аномально.
Kubernetes предоставляет три типа проб проверки состояния для мониторинга приложений в контейнерах с целью обеспечения стабильности системы и высокой доступности.
Для получения дополнительной информации см. Liveness, Readiness, and Startup Probes и how to configure them.
Проба liveness probe обнаруживает ситуации, когда контейнер работает, но не отвечает, например, взаимные блокировки.
Check Method | Description | Specific Parameter | Common Parameter |
|---|---|---|---|
HTTP (httpGet) | Этот метод применяется к контейнерам, которые предоставляют сервисы HTTP или HTTPS. Кластер периодически отправляет HTTP/HTTPS GET‑запрос к конечной точке целевого контейнера. Если код статуса ответа находится в диапазоне 200–399, probe считается успешной. Если код статуса ответа находится вне этого диапазона, probe завершается неудачей, и kubelet останавливает и перезапускает контейнер. |
|
|
TCP (tcpSocket) | Этот метод применяется к контейнерам, которые предоставляют TCP‑службы (например, базы данных, кэши и пользовательские TCP‑приложения). Кластер периодически пытается установить TCP‑соединение с целевым контейнером. Если соединение успешно, проба считается здоровой. В противном случае проба завершается неудачей, и kubelet останавливает и перезапускает контейнер. | Port: порт контейнера, открытый для проверок состояния. Допустимый диапазон: от 1 до 65535. | |
Command (exec) | Необходимо указать исполняемую команду, которую кластер будет периодически запускать внутри контейнера. Если команда завершается с кодом 0, проба считается успешной. В противном случае проба завершается неудачей, и kubelet останавливает и перезапускает контейнер. CAUTION: Избегайте проб, основанных на командах, в средах с высокой нагрузкой, поскольку они потребляют системные ресурсы. Если ресурсов системы недостаточно, например, при высоком использовании CPU или заблокированной файловой системе, пробам может истечь время ожидания и они завершатся неудачей. Если их необходимо использовать, следуйте этим рекомендациям:
| Command: команда, выполняемая внутри контейнера для проверки его состояния. Введите несколько команд, разместив их на отдельных строках. ПРИМЕЧАНИЕ:
| |
gRPC Check (grpc) | Этот метод применяется к gRPC‑приложениям. HTTP‑порты или внешние скрипты не требуются. Проверки состояния используют стандартные gRPC API. | Port: порт контейнера, открытый для проверок состояния. Допустимый диапазон: от 1 до 65535. |
vim health_check.yaml
The following uses an HTTP request as an example. For details about other health check methods, see Configuring Liveness, Readiness and Startup Probes. File content:
apiVersion: apps/v1kind: Deploymentmetadata:name: nginxnamespace: defaultspec:replicas: 1selector:matchLabels:app: nginxversion: v1template:metadata:labels:app: nginxversion: v1spec:containers:- name: container-1image: nginx:latestlivenessProbe : # The liveness probehttpGet: # HTTP requests are used to check container health.path: / # The HTTP health check pathport: 80 # The health check port is 80 .host: '' # The host address, which defaults to the pod IP addressscheme: HTTP # The health check protocolhttpHeaders: # (Optional) The request header name is Custom-Header , and the value is Awesome .- name: Custom-Headervalue: AwesomeinitialDelaySeconds: 3 # The grace period for container startup before health checks begin, in secondstimeoutSeconds: 1 # The probe timeout, in secondsperiodSeconds: 3 # The probe check period, in secondssuccessThreshold: 1 # The minimum consecutive successful probes required to mark a container healthy after a failurefailureThreshold: 3 # The minimum consecutive probe failures before marking a container unhealthyimagePullSecrets:- name: default-secret
kubectl create -f health_check.yaml
Если отображается информация, аналогичная следующей, рабочая нагрузка создаётся:
deployment.apps/nginx created
kubectl get pod
Если статус pod Running, рабочая нагрузка создана.
NAME READY STATUS RESTARTS AGEnginx-58cdd4f48d-jcsqn 1/1 Running 0 4m19s
Readiness probe определяет, готовы ли контейнеры pod к получению трафика. Pod присоединяется к конечным точкам Service для получения трафика только после того, как все его контейнеры готовы.
Check Method | Description | Specific Parameter | Common Parameter |
|---|---|---|---|
HTTP (httpGet) | Этот метод применяется к контейнерам, которые предоставляют службы HTTP или HTTPS. Кластер периодически отправляет HTTP/HTTPS GET‑запрос к конечной точке целевого контейнера. Если код статуса ответа находится в диапазоне 200–399, probe считается успешным. Если код статуса ответа находится вне этого диапазона, probe завершается с ошибкой, и kubelet останавливает и перезапускает контейнер. |
|
|
TCP (tcpSocket) | Этот метод применяется к контейнерам, которые предоставляют TCP‑сервисы (например, базы данных, кеши и пользовательские TCP‑приложения). Кластер периодически пытается установить TCP‑соединение с целевым контейнером. Если соединение успешно, проверка считается здоровой. В противном случае проверка не проходит, и kubelet останавливает и перезапускает контейнер. | Port: порт контейнера, открытый для проверок состояния. Допустимый диапазон: от 1 до 65535. | |
Command (exec) | Необходимо указать исполняемую команду, которую кластер будет периодически запускать внутри контейнера. Если команда завершается с кодом 0, проверка считается успешной. В противном случае проверка не проходит, и kubelet останавливает и перезапускает контейнер. ПРЕДУПРЕЖДЕНИЕ: Избегайте проверок, основанных на командах, в средах с высокой нагрузкой, поскольку они потребляют системные ресурсы. Если системных ресурсов недостаточно, например при высокой загрузке CPU или заблокированной файловой системе, проверки могут истекать по времени и завершаться с ошибкой. Если их необходимо использовать, следуйте этим рекомендациям:
| Command: команда, выполняемая внутри контейнера для проверки его состояния. Вводите несколько команд, размещая их в отдельных строках. ПРИМЕЧАНИЕ:
| |
gRPC Check (grpc) | Этот метод применяется к gRPC‑приложениям. Порты HTTP или внешние скрипты не требуются. Проверки состояния используют стандартные gRPC API. | Port: контейнерный порт, открытый для проверок состояния. Допустимый диапазон: от 1 до 65535. |
vim health_check.yaml
Ниже приведён пример с использованием HTTP‑запроса. Подробнее о других методах проверок состояния см. Configuring Liveness, Readiness and Startup Probes. Содержимое файла:
apiVersion: apps/v1kind: Deploymentmetadata:name: nginxnamespace: defaultspec:replicas: 1selector:matchLabels:app: nginxversion: v1template:metadata:labels:app: nginxversion: v1spec:containers:- name: container-1image: nginx:latestreadinessProbe : # The readiness probehttpGet: # HTTP requests are used to check container health.path: / # The HTTP health check pathport: 80 # The health check port is 80 .host: '' # The host address, which defaults to the pod IP addressscheme: HTTP # The health check protocolhttpHeaders: # (Optional) The request header name is Custom-Header , and the value is Awesome .- name: Custom-Headervalue: AwesomeinitialDelaySeconds: 3 # The grace period for container startup before health checks begin, in secondstimeoutSeconds: 1 # The probe timeout, in secondsperiodSeconds: 3 # The probe check period, in secondssuccessThreshold: 1 # The minimum consecutive successful probes required to mark a container healthy after a failurefailureThreshold: 3 # The minimum consecutive probe failures before marking a container unhealthyimagePullSecrets:- name: default-secret
kubectl create -f health_check.yaml
Если отображается информация, аналогичная следующей, рабочая нагрузка создаётся:
deployment.apps/nginx created
kubectl get pod
Если статус pod Running, рабочая нагрузка создана.
NAME READY STATUS RESTARTS AGEnginx-58cdd4f48d-jcsqn 1/1 Running 0 4m19s
Startup probes запускаются при старте контейнера для проверки инициализации. Они используются для медленно запускающихся приложений.
Метод проверки | Описание | Конкретный параметр | Общий параметр |
|---|---|---|---|
HTTP (httpGet) | Этот метод применяется к контейнерам, которые предоставляют службы HTTP или HTTPS. Кластер периодически отправляет HTTP/HTTPS GET‑запрос к конечной точке целевого контейнера. Если код состояния ответа находится в диапазоне 200–399, проба считается успешной. Если код состояния ответа находится вне этого диапазона, проба завершается с ошибкой, и kubelet останавливает и перезапускает контейнер. |
|
|
TCP (tcpSocket) | Этот метод применяется к контейнерам, которые предоставляют TCP‑службы (например, базы данных, кэши и пользовательские TCP‑приложения). Кластер периодически пытается установить TCP‑соединение с целевым контейнером. Если соединение успешно, зонд считается здоровым. В противном случае зонд не проходит, и kubelet останавливает и перезапускает контейнер. | Port: порт контейнера, открытый для проверок состояния. Допустимый диапазон: от 1 до 65535. | |
Command (exec) | Необходимо указать исполняемую команду, которую кластер будет периодически запускать внутри контейнера. Если команда завершается с кодом 0, зонд считается успешным. В противном случае зонд не проходит, и kubelet останавливает и перезапускает контейнер. ПРЕДУПРЕЖДЕНИЕ: Избегайте проб на основе команд в средах с высокой нагрузкой, поскольку они потребляют ресурсы системы. Если ресурсы системы недостаточны, например при высокой загрузке CPU или заблокированной файловой системе, пробам может истечь время ожидания и они завершатся с ошибкой. Если необходимо их использовать, следуйте этим рекомендациям:
| Command: команда, выполняемая внутри контейнера для проверки его состояния. Вводите несколько команд на отдельных строках. ПРИМЕЧАНИЕ:
| |
Проверка gRPC (grpc) | Этот метод применяется к gRPC‑приложениям. HTTP‑портов или внешних скриптов не требуется. Проверки состояния используют стандартные gRPC API. | Port: порт контейнера, открытый для проверок состояния. Допустимый диапазон: от 1 до 65535. |
vim health_check.yaml
Следующее использует HTTP‑запрос в качестве примера. Для получения сведений о других методах проверки работоспособности см. Configuring Liveness, Readiness and Startup Probes. Содержимое файла:
apiVersion: apps/v1kind: Deploymentmetadata:name: nginxnamespace: defaultspec:replicas: 1selector:matchLabels:app: nginxversion: v1template:metadata:labels:app: nginxversion: v1spec:containers:- name: container-1image: nginx:lateststartupProbe : # The startup probehttpGet: # HTTP requests are used to check container health.path: / # The HTTP health check pathport: 80 # The health check port is 80 .host: '' # The host address, which defaults to the pod IP addressscheme: HTTP # The health check protocolhttpHeaders: # (Optional) The request header name is Custom-Header , and the value is Awesome .- name: Custom-Headervalue: AwesomeinitialDelaySeconds: 3 # The grace period for container startup before health checks begin, in secondstimeoutSeconds: 1 # The probe timeout, in secondsperiodSeconds: 3 # The probe check period, in secondssuccessThreshold: 1 # The minimum consecutive successful probes required to mark a container healthy after a failurefailureThreshold: 3 # The minimum consecutive probe failures before marking a container unhealthyimagePullSecrets:- name: default-secret
kubectl create -f health_check.yaml
Если отображается информация, аналогичная следующей, рабочая нагрузка создаётся:
deployment.apps/nginx created
kubectl get pod
Если статус pod равен Running, рабочая нагрузка создана.
NAME READY STATUS RESTARTS AGEnginx-58cdd4f48d-jcsqn 1/1 Running 0 4m19s