DaemonSet — это контроллер в Kubernetes, который гарантирует, что на каждом узле кластера запущен один экземпляр определённого пода. Такой подход используется для системных сервисов и агентов, которые должны работать повсеместно, независимо от нагрузки или числа приложений.
Особенности DaemonSet
- Один под на узел
Каждый узел автоматически получает «свою» копию пода. Если узел добавляется в кластер — DaemonSet создаёт под и на нём. Если узел удаляется — под исчезает вместе с ним. - Централизованное управление
Администратор описывает DaemonSet в YAML, а Kubernetes сам следит, чтобы все узлы были покрыты. - Гибкость размещения
С помощьюnodeSelector,affinityиtolerationsможно задать, на каких узлах должны или не должны запускаться поды DaemonSet. - Обновления
Поддерживается RollingUpdate: обновления агентов проходят постепенно, без остановки всего кластера.
Примеры использования
- Мониторинг и метрики: Prometheus Node Exporter, Datadog Agent.
- Сбор логов: Fluentd, Filebeat.
- Сетевые плагины: Calico, Cilium, Weave Net.
- Системные агенты: инструменты безопасности, антивирусные или compliance-агенты.
Пример конфигурации DaemonSet
apiVersion: apps/v1
kind: DaemonSet
metadata:
name: node-exporter
labels:
app: monitoring
spec:
selector:
matchLabels:
app: monitoring
template:
metadata:
labels:
app: monitoring
spec:
containers:
- name: node-exporter
image: prom/node-exporter:v1.7.0
ports:
- containerPort: 9100
hostPort: 9100
Для клиента
DaemonSet гарантирует, что ключевые системные сервисы (логирование, метрики, безопасность) всегда работают на каждом узле. Это снижает риск «слепых зон» в мониторинге и обеспечивает предсказуемость инфраструктуры.
Важно: DaemonSet не подходит для бизнес-приложений — он создан именно для инфраструктурных агентов, которые должны быть повсеместно.