DaemonSet

Тема дорожной карты · Kubernetes

DaemonSet — контроллер рабочих нагрузок Kubernetes, гарантирующий запуск ровно одного Pod'а на каждом узле (или выбранном подмножестве узлов) K8s-кластера, что делает его канонической схемой для развёртывания инфраструктурных агентов уровня узла. Типичные варианты использования DaemonSet: сборщики логов (Fluentd, Fluent Bit), экспортёры метрик (Prometheus Node Exporter), сетевые агенты CNI (Calico node, агент Cilium), нодовые плагины CSI и сканеры безопасности, которым необходим прямой доступ к файловой системе хоста или сетевому пространству имён. Планирование DaemonSet учитывает taints и tolerations узлов, поэтому добавление toleration для node-role.kubernetes.io/control-plane приводит к запуску Pod'а DaemonSet также на узлах плоскости управления — паттерн, используемый самим Kubernetes для kube-proxy. При добавлении новых узлов в кластер контроллер DaemonSet автоматически планирует Pod без какого-либо ручного вмешательства, а kubectl rollout restart daemonset/<name> запускает rolling-обновление на всех узлах.

Как это работает

DaemonSet — один из workload-примитивов Kubernetes. Определяет желаемое состояние набора pods — число реплик, pod template, стратегия обновления — а контроллер непрерывно сводит реальное состояние к желаемому. При падении pod или ноды контроллер планирует замену. При обновлении pod template контроллер оркестрирует rolling update с health-проверками между батчами.

Когда применять

Выбирайте DaemonSet по характеристикам нагрузки: Deployment для stateless-сервисов (HTTP API, воркеры), StatefulSet для stateful с stable network identity (БД, очереди), DaemonSet для one-pod-per-node инфраструктуры (log-коллекторы, CNI), Job для batch-задач, CronJob для запланированных batch. Смешивание типов без нужды создаёт операционную сложность; выбирайте простейший подходящий примитив.

Типичные ошибки

Workload-ловушки: слишком низкие resource requests (pods scheduled, но выселяются под нагрузкой) или слишком высокие (кластер выглядит полным при малом реальном использовании); отсутствие liveness/readiness-проб (load balancer шлёт трафик на полу-стартанутые pods); использование Deployment для stateful-нагрузок, которым нужна StatefulSet-упорядоченность. Всегда измеряйте реальное использование ресурсов до sizing.

Связанные понятия

Полезные ресурсы