DEV Community

Khadijah (Dana Ordalina)
Khadijah (Dana Ordalina)

Posted on

Readiness probe

Readiness probe ** — это **проверка “готово ли приложение принимать трафик”.

Проще говоря: “Ты уже готов работать с пользователями или ещё нет?”

Чаще всего это термин из Kubernetes.

Простыми словами 👇

Представь кафе:

  • Кафе открыто, но
  • повар ещё не готов,
  • кухня не прогрелась,
  • продукты не разложены.

Readiness probe — это как вопрос официанту:
👉 «Можно уже пускать клиентов?»

Если ответ “нет” — клиенты не заходят.
Если “да” — клиентов начинают пускать.

В Kubernetes что происходит

  • Kubernetes регулярно проверяет приложение (например, по HTTP-запросу или команде).
  • Если readiness probe успешен ✅ → pod получает трафик (его добавляют в Service / Load Balancer).
  • Если неуспешен ❌ → pod жив, но трафик к нему не идёт.

⚠️ Важно:
Readiness probe не убивает pod, он просто временно “выводится из оборота”.

Чем отличается от liveness probe

Коротко:

  • Liveness probe“Ты вообще жив?” ❌ нет → pod перезапускают
  • Readiness probe“Ты готов обслуживать запросы?” ❌ нет → pod живёт, но без трафика

Когда readiness probe особенно нужен

  • приложение долго стартует
  • подключается к БД
  • делает миграции
  • временно перегружено
  • зависит от внешних сервисов

Погнали, наглядно и без заумных слов 😄


Реальный YAML-пример с readiness + liveness + startup

apiVersion: v1
kind: Pod
metadata:
  name: demo-app
spec:
  containers:
    - name: app
      image: my-app:1.0
      ports:
        - containerPort: 8080

      # 1️⃣ Startup probe — ждём, пока приложение ВООБЩЕ запустится
      startupProbe:
        httpGet:
          path: /health/startup
          port: 8080
        failureThreshold: 30
        periodSeconds: 5
        # → даём до 150 секунд на старт

      # 2️⃣ Readiness probe — готово ли принимать трафик
      readinessProbe:
        httpGet:
          path: /health/ready
          port: 8080
        initialDelaySeconds: 5
        periodSeconds: 5
        failureThreshold: 3

      # 3️⃣ Liveness probe — не зависло ли
      livenessProbe:
        httpGet:
          path: /health/live
          port: 8080
        periodSeconds: 10
        failureThreshold: 3
Enter fullscreen mode Exit fullscreen mode

Что здесь происходит по шагам

🟦 Startup probe

Вопрос: «Ты уже ЗАПУСТИЛСЯ?»

  • Kubernetes не запускает readiness и liveness, пока startup probe не станет OK
  • если не стал OK за лимит → pod перезапускают

💡 Нужен для:

  • Java / Spring
  • приложений с миграциями
  • долгого старта

🟩 Readiness probe

Вопрос: «Ты ГОТОВ принимать запросы?»

  • если ❌ → pod убирают из Service
  • pod не перезапускают
  • когда снова ✅ → трафик возвращается

💡 Типично проверяют:

  • подключение к БД
  • доступность зависимостей
  • перегрузку

🟥 Liveness probe

Вопрос: «Ты вообще ЖИВ?»

  • если ❌ → pod перезапускают

💡 Проверяет:

  • deadlock
  • зависшие потоки
  • утечки памяти

Сравнение: startup vs readiness (очень коротко)

Probe Когда Если FAIL Для чего
startup только при старте pod перезапуск долгий запуск
readiness всё время убрать трафик временно не готов
liveness всё время pod перезапуск приложение зависло

Жизненный пример

Приложение стартует так:

  1. запускается JVM (40 сек)
  2. миграции БД (30 сек)
  3. готово принимать запросы

👉 startup probe ждёт шаги 1–2
👉 readiness probe включает трафик только после шага 3
👉 liveness probe следит, чтобы всё не зависло через час


Top comments (0)