Сколько существует проб (probes) в Kubernetes и для чего они нужны?

«Сколько существует проб (probes) в Kubernetes и для чего они нужны?» — вопрос из категории Kubernetes, который задают на 23% собеседований Devops Инженер. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

В Kubernetes существует три типа проб (probes), которые kubelet использует для проверки состояния контейнера:

  1. Liveness Probe — определяет, жив ли контейнер. Если проверка завершается неудачей, kubelet убивает контейнер и перезапускает его согласно политике перезапуска (restartPolicy). Это нужно для восстановления "зависших" приложений.

  2. Readiness Probe — определяет, готов ли контейнер принимать трафик. Если проверка не проходит, Service, связанный с подом, прекращает направлять на него запросы. Это критично для плавного развертывания и обработки зависимостей при старте.

  3. Startup Probe (доступна с v1.16) — используется для медленно стартующих контейнеров (например, legacy-приложений). Она откладывает запуск liveness и readiness проб до своего успешного завершения, предотвращая преждевременные перезапуски.

Пример конфигурации в манифесте Pod:

apiVersion: v1
kind: Pod
metadata:
  name: my-app
spec:
  containers:
  - name: web
    image: nginx:latest
    ports:
    - containerPort: 80
    livenessProbe:
      httpGet:
        path: /health
        port: 80
      initialDelaySeconds: 15
      periodSeconds: 10
    readinessProbe:
      httpGet:
        path: /ready
        port: 80
      initialDelaySeconds: 5
      periodSeconds: 5
    startupProbe:
      httpGet:
        path: /startup
        port: 80
      failureThreshold: 30
      periodSeconds: 10

Правильная настройка проб — ключ к высокой доступности и отказоустойчивости приложений в Kubernetes.