PRO

Как настроить liveness и readiness probes в Kubernetes?

Liveness probe определяет, нужно ли перезапустить контейнер, если приложение зависло или оказалось в неисправимом состоянии. Readiness probe определяет, готов ли Pod получать трафик: при её ошибке Kubernetes исключает Pod из endpoints Service, но не перезапускает его только из-за readiness failure.
Подробный ответ

Liveness probe

Liveness probe отвечает на вопрос: «Нужно ли перезапустить контейнер?». Если проверка не проходит больше допустимого числа раз, kubelet перезапускает контейнер.

Readiness probe

Readiness probe отвечает на вопрос: «Готово ли приложение принимать трафик?». Пока readiness probe не проходит, Pod не включается в endpoints подходящих Service. Если уже работающий Pod перестаёт быть ready, новый трафик к нему не направляется.

Пример HTTP probes

apiVersion: apps/v1
kind: Deployment
metadata:
  name: api
spec:
  template:
    spec:
      containers:
        - name: api
          image: ghcr.io/acme/api:1.0.0
          ports:
            - containerPort: 8000
          livenessProbe:
            httpGet:
              path: /health/live
              port: 8000
            initialDelaySeconds: 15
            periodSeconds: 10
            timeoutSeconds: 3
            failureThreshold: 3
          readinessProbe:
            httpGet:
              path: /health/ready
              port: 8000
            initialDelaySeconds: 5
            periodSeconds: 5
            timeoutSeconds: 3
            failureThreshold: 3

Типы проверок

Kubernetes поддерживает HTTP GET, TCP socket и exec probes. Для большинства HTTP API подходит отдельный лёгкий endpoint. Liveness не должен зависеть от временно недоступной внешней системы, иначе Kubernetes может бесконечно перезапускать здоровое приложение.

Startup probe

Если приложение долго стартует, стоит добавить startupProbe. Пока startup probe не пройдёт, Kubernetes не применяет обычную логику liveness, что защищает медленно стартующее приложение от преждевременных перезапусков.

startupProbe:
  httpGet:
    path: /health/live
    port: 8000
  periodSeconds: 5
  failureThreshold: 30

Как ответить на собеседовании

Liveness probe перезапускает контейнер, если приложение зависло или не может восстановиться. Readiness probe управляет включением Pod в Service endpoints и не даёт направлять трафик на неготовый экземпляр. Для долгого старта добавляю startup probe и отдельно подбираю задержки, timeout и failure thresholds.

Оцени свой прогресс

Честно оцени своё понимание этого вопроса, чтобы мы могли построить твой учебный трек максимально эффективно.
Читать в блоге