middle
Что такое Liveness, Readiness и Startup Probes?
Probes (пробы) — механизм проверки состояния контейнера в Kubernetes. Liveness определяет, жив ли контейнер, Readiness — готов ли принимать трафик, Startup — завершился ли запуск.
Сравнение Probes
| Probe | Что проверяет | Действие при провале | Когда использовать |
|---|---|---|---|
| Liveness | Жив ли контейнер | Перезапуск контейнера | Deadlock’и, зависания, утечки памяти |
| Readiness | Готов ли принимать трафик | Убрать из эндпоинтов Service (без перезапуска) | Длительный прогрев, временные перегрузки |
| Startup | Завершился ли запуск | Перезапуск (блокирует Liveness/Readiness) | Приложения с долгим стартом (Spring Boot) |
Типы проверок
| Тип | Описание |
|---|---|
| httpGet | HTTP GET-запрос к эндпоинту. Успех: код 200-399 |
| tcpSocket | Проверка TCP-соединения к порту |
| exec | Выполнение команды внутри контейнера. Успех: exit code 0 |
| grpc | gRPC Health Check |
Пример для Spring Boot приложения
Spring Boot Actuator предоставляет готовые эндпоинты для проб:
Deployment с тремя Probes
apiVersion: apps/v1
kind: Deployment
metadata:
name: my-spring-app
spec:
replicas: 3
selector:
matchLabels:
app: my-spring-app
template:
metadata:
labels:
app: my-spring-app
spec:
containers:
- name: app
image: my-registry/my-spring-app:1.0.0
ports:
- containerPort: 8080
startupProbe:
httpGet:
path: /actuator/health/liveness
port: 8080
initialDelaySeconds: 10
periodSeconds: 5
failureThreshold: 30 # 10 + 30*5 = до 160 сек на старт
livenessProbe:
httpGet:
path: /actuator/health/liveness
port: 8080
periodSeconds: 10
failureThreshold: 3
readinessProbe:
httpGet:
path: /actuator/health/readiness
port: 8080
periodSeconds: 5
failureThreshold: 3
Настройка Spring Boot application.yml:
Пример
management:
endpoints:
web:
exposure:
include: health,info,prometheus
endpoint:
health:
probes:
enabled: true
group:
liveness:
include: livenessState
readiness:
include: readinessState,db
Параметры проб
| Параметр | Описание | По умолчанию |
|---|---|---|
| initialDelaySeconds | Задержка перед первой проверкой | 0 |
| periodSeconds | Интервал между проверками | 10 |
| timeoutSeconds | Тайм-аут одной проверки | 1 |
| failureThreshold | Количество неудачных проверок для признания провала | 3 |
| successThreshold | Количество успешных проверок для признания успеха | 1 |
На собеседовании: нужно чётко разделять Liveness (перезапускает), Readiness (убирает из балансировки), Startup (блокирует остальные пробы на время старта). Частая ошибка — не использовать Startup Probe для Spring Boot и получать убийство контейнера Liveness Probe во время старта.