За что отвечает kubelet в Kubernetes
Что проверяют
Понимаете ли вы разделение ролей в кластере: кто решает, где запустить под, и кто его фактически запускает. Следом обычно спрашивают, что будет с подами, если нода упала, или чем liveness отличается от readiness.
Как отвечать
kubelet это агент на каждой ноде, включая ноды control plane в кластерах на kubeadm. Поды он не планирует: ноду выбирает kube-scheduler, а kubelet следит через API-сервер за подами, назначенными на его ноду, и приводит её к описанному состоянию.
Основные обязанности:
- запуск контейнеров: через CRI отдаёт команды рантайму, обычно containerd или CRI-O. Сеть пода настраивает CNI-плагин, которого вызывает рантайм;
- пробы: выполняет
livenessProbe,readinessProbeиstartupProbe. Проваленная liveness ведёт к перезапуску контейнера поrestartPolicy, проваленная readiness убирает под из эндпоинтов сервиса без перезапуска; - тома и конфиги: монтирует тома через CSI-драйверы, подкладывает Secret и ConfigMap;
- ресурсы: применяет лимиты через cgroups, а при нехватке памяти или диска вытесняет поды по порогам
evictionHard; - статус: отправляет состояние подов и ноды, а в качестве heartbeat регулярно обновляет объект Lease в
kube-node-lease; - статические поды: запускает манифесты из
staticPodPath, обычно/etc/kubernetes/manifests. Так в kubeadm живутkube-apiserverи etcd.
Настройки лежат в файле KubeletConfiguration, логи смотрят через journalctl -u kubelet. На порту 10250 kubelet отдаёт API, через который работают kubectl logs и exec, оттуда же metrics-server забирает метрики ресурсов.
Где спотыкаются
Говорят, что kubelet размещает поды по нодам. Это делает планировщик, kubelet только исполняет решение.
Называют Docker рантаймом, с которым kubelet работает напрямую. Прослойку dockershim удалили в Kubernetes 1.24, связь идёт только через CRI.
Думают, что при падении ноды kubelet перезапустит поды. Он недоступен вместе с нодой: замену создаёт контроллер ReplicaSet на других нодах, и только после того, как нода признана недоступной, по умолчанию примерно через пять минут.