Какие типы probe (проб) вы знаете в Kubernetes и для чего они используются?

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

Ответ

В Kubernetes пробы — это механизм проверки состояния контейнера. Я настраиваю их для всех production-ворклодов, чтобы обеспечить отказоустойчивость и нулевое время простоя.

Три основных типа probe:

  1. Liveness Probe (Проба жизнеспособности)

    • Назначение: Определяет, жив ли контейнер. Если проба fails, kubelet убивает контейнер и перезапускает его согласно политике restartPolicy.
    • Использование: Для восстановления "зависших" приложений, которые не отвечают, но процесс еще работает.
      livenessProbe:
      httpGet:
      path: /health/live
      port: 8080
      initialDelaySeconds: 30  # Даем приложению время на старт
      periodSeconds: 10        # Проверяем каждые 10 секунд
      failureThreshold: 3      # После 3 неудач контейнер будет перезапущен
  2. Readiness Probe (Проба готовности)

    • Назначение: Определяет, готов ли контейнер принимать трафик. При fail'е контейнер удаляется из эндпоинтов Service.
    • Использование: Для ситуаций, когда приложение временно не может обслуживать запросы (загрузка кэша, подключение к БД).
      readinessProbe:
      exec:
      command:
        - /app/check-ready.sh  # Кастомный скрипт проверки зависимостей
      initialDelaySeconds: 5
      periodSeconds: 5
  3. Startup Probe (Проба старта)

    • Назначение: Для медленно стартующих приложений. Пока startup probe не станет successful, liveness и readiness пробы не активируются.
    • Использование: Защищает приложения с долгим временем инициализации от преждевременных перезапусков.
      startupProbe:
      httpGet:
      path: /health/startup
      port: 8080
      failureThreshold: 30  # Пробуем много раз
      periodSeconds: 10     # с большим интервалом

Ключевой момент: Правильная настройка initialDelaySeconds, timeoutSeconds и failureThreshold критически важна, чтобы пробы не мешали нормальной работе приложения.