Что происходит после падения pod в Kubernetes?

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

Ответ

Реакция системы зависит от политики перезапуска Pod (restartPolicy) и контроллера, который им управляет (например, Deployment).

Для самостоятельного Pod (не управляемого контроллером):

  • Kubelet на узле обнаруживает остановку основного контейнера.
  • Если restartPolicy: Always (значение по умолчанию для Pod'ов в Deployment), Kubelet пытается перезапустить контейнер внутри того же Pod.
  • При повторных сбоях Kubelet использует экспоненциальную задержку (backoff) между перезапусками, что приводит к состоянию CrashLoopBackOff. Pod остается на том же узле.

Для Pod, управляемого Deployment/ReplicaSet:

  1. Kubelet пытается перезапустить контейнер согласно restartPolicy.
  2. Контроллер ReplicaSet постоянно сверяет фактическое количество работающих Pod'ов с желаемым (replicas).
  3. Если 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'ы новыми.