Ответ
Реакция системы зависит от политики перезапуска Pod (restartPolicy) и контроллера, который им управляет (например, Deployment).
Для самостоятельного Pod (не управляемого контроллером):
- Kubelet на узле обнаруживает остановку основного контейнера.
- Если
restartPolicy: Always(значение по умолчанию для Pod'ов в Deployment), Kubelet пытается перезапустить контейнер внутри того же Pod. - При повторных сбоях Kubelet использует экспоненциальную задержку (backoff) между перезапусками, что приводит к состоянию
CrashLoopBackOff. Pod остается на том же узле.
Для Pod, управляемого Deployment/ReplicaSet:
- Kubelet пытается перезапустить контейнер согласно
restartPolicy. - Контроллер ReplicaSet постоянно сверяет фактическое количество работающих Pod'ов с желаемым (
replicas). - Если Pod переходит в неустранимое состояние (например, зависает в
CrashLoopBackOffилиError), ReplicaSet создает новый Pod на другом или том же узле, чтобы поддерживать заданное число реплик. Старый Pod будет удален.
Диагностика:
# Просмотр статуса и причин сбоя
kubectl describe pod <pod-name>
# Просмотр логов упавшего контейнера (--previous для предыдущего экземпляра)
kubectl logs <pod-name> --previous
# Проверка событий в пространстве имен
kubectl get events --sort-by='.lastTimestamp'
Ключевая идея: для stateless-нагрузок контроллеры обеспечивают самовосстановление, заменяя неисправные Pod'ы новыми.