middle
Каков жизненный цикл Pod?
Pod проходит через несколько фаз (phases) за время своей жизни. Фаза отражает общее состояние Pod’а, а не отдельных контейнеров внутри него.
Фазы Pod
| Фаза | Описание |
|---|---|
| Pending | Pod принят кластером, но один или несколько контейнеров ещё не готовы к запуску. Pod ждёт назначения на ноду, скачивания образов и т.д. |
| Running | Pod назначен на ноду, все контейнеры созданы. Как минимум один контейнер выполняется или находится в процессе запуска/перезапуска |
| Succeeded | Все контейнеры в Pod’е успешно завершились и не будут перезапущены. Типично для Job’ов |
| Failed | Все контейнеры завершились, и хотя бы один завершился с ошибкой (ненулевой exit code) |
| Unknown | Состояние Pod’а не удалось определить, обычно из-за проблем со связью с нодой |
Состояния контейнера внутри Pod
- Waiting — контейнер ожидает (скачивание образа, ожидание зависимостей)
- Running — контейнер запущен и работает
- Terminated — контейнер завершил выполнение (успешно или с ошибкой)
Политики перезапуска (restartPolicy)
| Политика | Поведение |
|---|---|
| Always (по умолчанию) | Всегда перезапускать контейнер |
| OnFailure | Перезапускать только при ошибке (ненулевой exit code) |
| Never | Никогда не перезапускать |
Graceful Shutdown
При удалении Pod’а Kubernetes:
- Отправляет сигнал
SIGTERMконтейнеру - Ждёт
terminationGracePeriodSeconds(по умолчанию 30 секунд) - Если контейнер не остановился — отправляет
SIGKILL
Для Spring Boot приложений важно корректно обрабатывать SIGTERM, чтобы завершить текущие запросы. Spring Boot 2.3+ поддерживает graceful shutdown через настройку server.shutdown=graceful.
На собеседовании: важно знать фазы Pod’а (Pending, Running, Succeeded, Failed, Unknown) и механизм graceful shutdown. Частая ошибка — не упоминать
terminationGracePeriodSecondsи не знать, что Spring Boot нужно отдельно настраивать для корректного завершения.