Какой компонент Kubernetes отвечает за перезапуск упавшего pod?

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

Ответ

За перезапуск упавшего пода на конкретном узле отвечает kubelet. Он работает как агент на каждой ноде и непрерывно сравнивает фактическое состояние подов с желаемым, описанным в PodSpec.

Если контейнер в поде завершается с ошибкой, kubelet перезапускает его в соответствии с политикой restartPolicy, указанной в манифесте пода. Для подов, управляемых контроллерами (например, Deployment или StatefulSet), сам контроллер отвечает за поддержание желаемого количества реплик. Если под на узле полностью выходит из строя, контроллер создаст новый под на другом доступном узле.

Пример политики перезапуска в манифесте:

apiVersion: v1
kind: Pod
metadata:
  name: my-app-pod
spec:
  containers:
  - name: nginx
    image: nginx:stable
  restartPolicy: Always # Возможные значения: Always, OnFailure, Never

На практике в продакшене редко работают с "голыми" подами (Pod). Используют контроллеры, такие как Deployment, которые обеспечивают самовосстановление и высокую доступность приложения.