Ein DaemonSet ist ein Workload-Controller in Kubernetes, der auf jedem Node des Clusters genau einen Pod einer bestimmten Art betreibt – beziehungsweise auf allen Nodes, die einer Auswahl über nodeSelector, Affinitäten und Tolerations entsprechen. Kommt ein neuer Node hinzu, startet Kubernetes dort automatisch den DaemonSet-Pod; wird ein Node entfernt, verschwindet auch der Pod.

Typische Einsatzzwecke

  • Logging-Agenten wie Fluentd oder Filebeat sammeln auf jedem Node die Container-Logs.
  • Monitoring-Agenten wie der Prometheus-node-exporter lesen Metriken jedes Nodes.
  • Netzwerk-Plugins wie Calico oder Cilium stellen das Pod-Netzwerk auf jedem Node her.
  • kube-proxy setzt auf jedem Node die Netzwerkregeln für Services um.

Updates eines DaemonSets laufen seit Kubernetes 1.6 standardmäßig als RollingUpdate: Es wird immer nur auf wenigen Nodes parallel aktualisiert (maxUnavailable begrenzt die Zahl), damit der Dienst währenddessen verfügbar bleibt. Über Tolerations kann man DaemonSet-Pods auch auf den Control-Plane-Nodes des Clusters laufen lassen, etwa für das kube-apiserver-Monitoring.

Abgrenzung: Das Deployment verteilt eine gewünschte Anzahl Pods über den Cluster, das StatefulSet gibt Pods stabile Identitäten – das DaemonSet sorgt für die flächendeckende Abdeckung aller Nodes.