Ответ
Kubelet — это критически важный системный демон (агент), который работает на каждом узле (Node) в кластере Kubernetes. Его основная задача — обеспечивать жизненный цикл подов (Pods), назначенных данному узлу.
Основные обязанности kubelet:
- Получение спецификаций подов: Kubelet взаимодействует с API-сервером Kubernetes (или напрямую через файловую систему или HTTP) и получает
PodSpecs— описания того, какие контейнеры должны запускаться. - Запуск и поддержание работы контейнеров: Он использует низкоуровневый контейнерный runtime (например, containerd или CRI-O) для создания, запуска и остановки контейнеров внутри подов согласно спецификации.
- Выполнение проверок жизнеспособности (Probes): Kubelet регулярно выполняет
livenessProbeиreadinessProbe, определенные в манифесте пода. ЕслиlivenessProbeпадает, kubelet перезапускает контейнер. ЕслиreadinessProbeпадает, kubelet удаляет IP адрес пода из эндпоинтов сервиса. - Мониторинг и репортинг: Kubelet постоянно отслеживает состояние подов и ресурсов узла (CPU, память) и отправляет эти метрики обратно на API-сервер, что позволяет
kubectl get nodesи другим компонентам видеть актуальное состояние. - Управление томами (Volumes) и секретами: Монтирует необходимые тома (например,
hostPath,emptyDir, или сетевые тома типаawsElasticBlockStore) и загружает секреты (Secrets) и конфигурационные карты (ConfigMaps) в поды.
Пример диагностики: Если под завис в состоянии Pending, проблема может быть не в kubelet. Но если под на узле в состоянии CrashLoopBackOff, первым делом проверяю логи kubelet на этом узле:
# Просмотр логов kubelet
sudo journalctl -u kubelet -f --since "5 minutes ago"
# Проверка статуса службы kubelet
sudo systemctl status kubelet
Kubelet — это «исполнительный механизм» на узле, связывающий желаемое состояние (от Control Plane) с фактическим состоянием контейнеров.