Ответ
За запуск и управление жизненным циклом контейнеров на каждом узле кластера отвечает kubelet.
Роль kubelet:
- Агент узла: Работает на каждой ноде как системный демон.
- Исполнитель: Получает спецификации Pod (манифесты в формате YAML/JSON) от API-сервера Kubernetes.
- Драйвер контейнеров: Взаимодействует с низкоуровневым container runtime (например, containerd или CRI-O) через интерфейс CRI (Container Runtime Interface) для создания, запуска, остановки и удаления контейнеров.
- Наблюдатель: Постоянно отслеживает состояние 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 не сможет управлять рабочими нагрузками на этом узле.