Есть ли реплики в DaemonSet?

«Есть ли реплики в DaemonSet?» — вопрос из категории Kubernetes, который задают на 23% собеседований Devops Инженер. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

В DaemonSet концепция "реплик" (как в Deployment или StatefulSet, где вы задаете replicas: 5) отсутствует. Вместо этого DaemonSet гарантирует запуск одного идентичного пода на каждом узле (Node) в кластере, который соответствует его селектору узлов (.spec.template.spec.nodeSelector).

Как это работает с точки зрения DevOps/администрирования:

  • Автоматическое масштабирование: Если вы добавляете новый узел в кластер, контроллер DaemonSet автоматически создаст на нем под. Если узел удаляется — под также удаляется.
  • Использование: Это идеально для системных демонов, которые должны быть на каждой машине: агенты сбора логов (Fluentd, Filebeat), агенты мониторинга (node-exporter), сетевые плагины (Calico, Cilium) или утилиты для хранения (glusterd).
  • Проверка состояния: Команда kubectl get daemonset показывает колонки DESIRED, CURRENT, READY. DESIRED — это количество узлов, подходящих под селектор.

Пример манифеста для развертывания агента мониторинга на всех узлах:

apiVersion: apps/v1
kind: DaemonSet
metadata:
  name: node-exporter
spec:
  selector:
    matchLabels:
      name: node-exporter
  template:
    metadata:
      labels:
        name: node-exporter
    spec:
      hostNetwork: true
      hostPID: true
      containers:
      - name: node-exporter
        image: prom/node-exporter:latest
        ports:
        - containerPort: 9100

Таким образом, количество "реплик" равно динамическому количеству подходящих узлов в кластере.