Какой компонент Kubernetes отвечает за запуск контейнеров на узле (ноде)?

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

Ответ

За запуск и управление жизненным циклом контейнеров на каждом узле кластера отвечает kubelet.

Роль kubelet:

  1. Агент узла: Работает на каждой ноде как системный демон.
  2. Исполнитель: Получает спецификации Pod (манифесты в формате YAML/JSON) от API-сервера Kubernetes.
  3. Драйвер контейнеров: Взаимодействует с низкоуровневым container runtime (например, containerd или CRI-O) через интерфейс CRI (Container Runtime Interface) для создания, запуска, остановки и удаления контейнеров.
  4. Наблюдатель: Постоянно отслеживает состояние Pod'ов и контейнеров на своей ноде, отправляет отчеты о состоянии (liveness, readiness) в control plane и перезапускает контейнеры при их падении.

Пример: Когда kubelet получает следующий Pod-манифест, он инструктирует container runtime скачать образ nginx:latest и запустить из него контейнер.

apiVersion: v1
kind: Pod
metadata:
  name: web-server
spec:
  containers:
  - name: nginx-container
    image: nginx:latest
    ports:
    - containerPort: 80

Без работающего kubelet на ноде Kubernetes не сможет управлять рабочими нагрузками на этом узле.