Ко всем статьям

Жизненный цикл пода — Graceful Shutdown, Probes и Requests/Limits

Почему бывают 502 при rollout, как настроить preStop sleep, Liveness vs Readiness и не застрелить прод жадными healthcheck’ами и CPU throttling.

Поделиться в Telegram
Содержание

Жизненный цикл пода — Graceful Shutdown, Probes и Requests/Limits

Три связанных темы из канала: «красивый уход», healthchecks и ресурсы.


Graceful Shutdown

При остановке: SIGTERM → ждём terminationGracePeriodSeconds (дефолт 30с) → SIGKILL.

Код: на SIGTERM перестать принимать новые запросы → дождаться текущих → закрыть БД/очереди → exit 0.

Race в K8s: SIGTERM и снятие из Endpoints асинхронны — Ingress ещё шлёт трафик, а приложение уже закрыло порт → 502.

preStop sleep (best practice):

yaml
lifecycle:
  preStop:
    exec:
      command: ["/bin/sh", "-c", "sleep 5"]

За 5–10 секунд балансировщик успевает убрать под из ротации, затем приходит SIGTERM. terminationGracePeriodSeconds — с запасом под длинные запросы (например 60).


Liveness vs Readiness

Probe

Вопрос

При сбое

Что проверять

Liveness

Я жив?

Рестарт

Лёгкий /health/liveбез БД

Readiness

Готов к трафику?

Убрать из Service

БД, кэш, зависимости

Слабый чек («порт открыт») → зомби отдаёт 500. Жадный чек (БД+Redis+S3 в liveness) → каскадный рестарт всех подов при деградации БД.

yaml
livenessProbe:
  httpGet: { path: /health/live, port: 8080 }
  periodSeconds: 10
readinessProbe:
  httpGet: { path: /health/ready, port: 8080 }
  failureThreshold: 3

Requests vs Limits

  • Requests — гарантия для scheduler.
  • Limits RAM — OOMKill при превышении.
  • Limits CPU — throttling (тормоза без явных ошибок).

QoS:

  1. Guaranteed — requests = limits;
  2. Burstable — requests < limits;
  3. BestEffort — без ресурсов (первые под нож).

Практика: Memory requests == limits; CPU requests честные, limits осторожно (иногда не ставят, чтобы не троттлить пики).

yaml
resources:
  requests:
    memory: "512Mi"
    cpu: "250m"
  limits:
    memory: "512Mi"

Чек-лист деплоя

  1. SIGTERM в коде
  2. preStop sleep
  3. Раздельные live/ready
  4. Честные resources / QoS

Связано: Troubleshooting, Autoscaling.