Kubernetes DaemonSet ist die geeignete Wahl, um Systemdienste wie Logging, Monitoring oder Netzwerk-Plugins node-übergreifend und konsistent in einem Cluster bereitzustellen. Statt eine feste Anzahl an Replikaten zu verwalten, stellt ein DaemonSet sicher, dass genau ein Pod dieses Typs auf jedem relevanten Node aktiv ist.
Zentrale Punkte
- Automatische Verteilung von Pods auf alle (oder gezielte) Knoten
- Ideal für systemnahe Dienste wie Monitoring oder Logging
- Resiliente Aktualisierung – Node für Node, ohne Ausfälle
- Flexible Steuerung über nodeSelector und Tolerations
- Unverzichtbar in dynamischen Cluster-Umgebungen
Was ist ein Kubernetes DaemonSet?
Ein Kubernetes DaemonSet sorgt dafür, dass ein bestimmter Pod-Typ auf jedem physikalischen oder virtuellen Node eines Clusters automatisch läuft. Der Controller verteilt diese Pods nicht wie ein Deployment zufällig über das Cluster, sondern genau dorthin, wo sie gebraucht werden: auf alle Nodes oder nur eine Teilmenge davon. Dabei kümmert sich Kubernetes um das Erstellen, Neustarten oder Entfernen der Daemon-Pods. Fällt ein Node aus oder kommt ein neuer hinzu, reagiert das DaemonSet automatisch – ohne manuelle Arbeitsschritte.
Typische Anwendungsfälle
DaemonSets kommen dann zum Einsatz, wenn systemnahe Hilfsdienste gebraucht werden, die auf jedem Node aktiv sein müssen. Diese Dienste unterstützen meist andere Anwendungen oder sichern den stabilen Betrieb des Clusters.
Dazu gehören unter anderem:
- Monitoring-Agenten wie Prometheus Node Exporter
- Log-Collector wie Fluentd oder Filebeat
- Netzwerk-Plugins wie Calico oder Cilium
- Backup-Tools oder Sicherheitsagenten
Auch benutzerdefinierte Dienste wie eigene Hardwarescanner oder Konfigurationshelfer können direkt als DaemonSet konfiguriert werden. So lasse ich beispielsweise einen maßgeschneiderten Pod auf allen Nodes laufen, der regelmäßig CPU-Sensoren ausliest.

Konfiguration eines DaemonSet mit YAML
Wie bei anderen Kubernetes-Ressourcen nutzt man YAML-Dateien, um ein DaemonSet zu definieren. Das Herzstück ist der Pod-Template-Bereich, der Container, Images und Umgebungsvariablen festlegt. Die automatische Verteilung auf alle Nodes übernimmt der DaemonSet-Controller.
Ein einfaches YAML-Beispiel:
apiVersion: apps/v1
kind: DaemonSet
metadata:
name: nginx-daemonset
spec:
selector:
matchLabels:
app: nginx
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx-container
image: nginx:latest
Nach einem einfachen kubectl apply -f daemonset.yaml
läuft der NGINX-Webserver auf jedem Knoten. So baue ich in Sekundenschnelle eine node-übergreifende Umgebung für einfache Dienste auf.
Gezielte Steuerung per nodeSelector und Tolerations
Manche Dienste sollen nicht auf allen Nodes arbeiten – etwa, wenn bestimmte Hardwarevoraussetzungen notwendig sind. Dafür nutzt man nodeSelector, um gezielt Labels wie „region=europe“ oder „disktype=ssd“ anzusprechen. Ebenso lassen sich mit Tolerations Pods auf „getainteten“ Nodes zulassen, etwa wenn einzelne Nodes isoliert laufen oder besonderen Belastungen unterliegen.
Diese granularen Regeln geben mir als Administrator detaillierte Kontrolle darüber, wo welche Dienste im Cluster zur Verfügung stehen – und verhindern unnötige Ressourcennutzung.
Unterschiede zu anderen Kubernetes-Controllern
Wer bereits mit Deployments oder ReplicaSets arbeitet, erkennt schnell, dass ein DaemonSet völlig andere Ziele verfolgt. Die folgende Tabelle hilft beim direkten Vergleich:
Typ | Zielsetzung | Steuerung | Node-übergreifend? |
---|---|---|---|
Deployment | Replika-Anzahl im Cluster | Cluster-weit | Nein |
ReplicaSet | Pod-Anzahl, ersetzt von Deployment verwaltet | Cluster-weit | Nein |
StatefulSet | Zustandsbehaftete Pods mit festen Identitäten | Sequentiell, Cluster-weit | Nein |
DaemonSet | Instanz pro (gewähltem) Node | Pro Node | Ja |
Ich setze DaemonSets vor allem in Kombination mit sicherheitsrelevanten Komponenten ein, um automatisiert die nötige Abdeckung zu erreichen.
Updates und Rollouts ohne Risiko
Ein entscheidender Vorteil: Ändert sich das Container-Image oder die Definition eines DaemonSet, aktualisiert Kubernetes die dazugehörigen Pods sequentiell – Node für Node. So bleibt die Infrastruktur verfügbar und konsistent, auch während des Rollouts.
In produktiven Clustern schätze ich besonders diese Update-Methode, da keine zentralen Dienste gleichzeitig ausfallen. Darüber hinaus machen definierte RollingUpdate-Strategien die ganze Angelegenheit steuerbar: Stopp-Verhalten, Zeit zwischen einzelnen Node-Updates und Fehlerbehandlung können konfiguriert werden.

Praktische Verwaltung mehrerer DaemonSets
DaemonSets lassen sich problemlos kombinieren. Ich betreibe in vielen Clustern mehrere Instanzen: Einer für systematisches Log-Streaming, ein zweiter für das Sammeln von Metriken, ein dritter für Firewall-Routing oder Netzwerksegmentierung. Wichtig sind hier durchdachte Labels und Selektoren, um keine Kollisionen zu erzeugen.
In der Praxis ermöglicht mir das eine schlanke Verwaltung selbst in großen Clustern mit über 100 Nodes. Statt Skripte zu schreiben oder jeden Node manuell einzubinden, regelt Kubernetes durch das DaemonSet alles automatisch.
Schnell entfernen, wenn nötig
Ein DaemonSet lässt sich jederzeit wieder löschen: kubectl delete daemonset my-agent
entfernt nicht nur die Steuerung, sondern auch alle zugehörigen Pods. Das reduziert Fehlerquellen und verhindert, dass Altsysteme weiterlaufen. Ich setze diese Funktion oft beim Umstieg auf neue Agenten ein – zum Beispiel, wenn ein Logging-Tool abgelöst wird.
Aber aufgepasst: Das Entfernen löscht keine persistenten Volumes oder Daten. Deshalb sollten vorherige Backups eingeplant werden.

Erweiterte Konzepte und bewährte Vorgehensweisen
In der Praxis stehen Administratoren häufig vor speziellen Anforderungen, wenn sie DaemonSets nutzen. Während einfache Dienste wie Logging-Agenten zumeist ohne große Feineinstellungen auskommen, erfordern komplexere Systeme manchmal ausgefeilte Strategien. Gerade bei sicherheitskritischen oder ressourcenintensiven Workloads lohnt es sich, folgende Punkte gezielt zu beachten:
- Ressourcenzuteilung (Resource Requests & Limits): DaemonSet-Pods laufen auf jedem Node. Bei begrenzten Ressourcen kann dies schnell zu Engpässen im Cluster führen. Setze daher möglichst klare Limits und Requests, damit Kubernetes die Pods korrekt planen kann und keine unnötige Überbelegung entsteht. Ein häufig unterschätzter Faktor: Wenn ein DaemonSet sehr speicherintensive Dienste wie Virenscanner auf jedem Node startet, kann die Clusterperformance leiden. Ressourcenkonfiguration ist hier der Schlüssel.
- Node Affinity & Anti-Affinity: Neben nodeSelector und Tolerations bieten sich erweiterte Scheduling-Optionen über Node Affinity oder Pod Anti-Affinity an. Besonders in heterogenen Clustern mit verschiedenartigen Hardware-Setups hilft das, Pods passgenau zu verteilen und einzelne Rechenknoten beispielsweise für GPU-lastige Dienste gezielt einzusetzen. So lassen sich dedizierte Knoten für speicher- oder CPU-intensive DaemonSets einplanen.
- Entwicklung einer Rollout-Strategie: Obwohl das Rolling Update eines DaemonSet automatisiert verläuft, ist eine geplante Upgrade-Strategie entscheidend. Wer etwa ein Monitoring-Dienst-Update einspielt, sollte exakt wissen, wie viele Pods gleichzeitig erneuert werden dürfen, um weiterhin Echtzeit-Daten zu erhalten. Eine Kombination aus podManagementPolicy und RollingUpdate-Parametern schafft Klarheit.
Damit wird klar, dass DaemonSets nicht nur als einfache „Starte-einen-Pod-auf-jedem-Node“-Lösung zu verstehen sind. Eine gute Planung zur Skalierung und Ausfallsicherheit sorgt dafür, dass die Dienste tatsächlich stabil in Produktionsumgebungen laufen. Ich habe erlebt, dass Teams anfangs unterschätzt haben, wie viele Ressourcen ein Logging- oder Security-Agent beansprucht, wenn er einmal pro Node läuft. Man sollte also unbedingt die Leistungsfaktoren im Blick behalten, um kein böses Erwachen zu erleben.
Integration von Debugging-Tools und Diagnose
Ein weiterer, oft unterschätzter Vorteil: DaemonSets lassen sich auch ausgezeichnet für Debugging- und Diagnosezwecke einsetzen. In einem größeren Cluster kann es erforderlich sein, auf jedem Node bestimmte Logs abzugreifen, Netzwerk-Informationen einzusammeln oder Security-Checks durchzuführen. Hierzu erstelle ich kurzfristig ein spezielles DaemonSet, das nur für investigative Zwecke dient. Indem ich die Pods mit einem minimalen Container-Image ausstatte, welches diagnostische Tools wie netstat
oder tcpdump
enthält, habe ich in kürzester Zeit ein verteiltes Analysetool im Cluster. Sobald die Untersuchungen abgeschlossen sind, lösche ich das DaemonSet wieder. Vorteil: Ich muss nicht manuell auf jedem Node einen Container starten oder SSH-Verbindungen erstellen.
Allerdings ist in Sicherheitsumgebungen Vorsicht geboten. Möchte man Debugging-Tools wie tcpdump
in produktiven Bereichen ausrollen, sollte man sich der Compliance-Anforderungen bewusst sein. Jede Debug-Session birgt potenzielle Risiken, wenn Shellzugänge oder Netzwerkzugriffe offengelegt werden. Hier können zusätzliche Pod Security Policies oder Security Context-Konfigurationen entscheidend sein.
Monitoring und Observability
DaemonSet-Pods sind, je nach Dienst, eine zentrale Datenquelle für das gesamte Cluster. Gerade bei Monitoring- und Logging-Diensten sammeln sie kontinuierlich Metriken oder Logeinträge eines gesamten Nodes. Um hier dauerhaft den Überblick zu behalten, empfiehlt es sich, auf Observability-Ansätze zu setzen. Dashboards wie Grafana, verknüpft mit Prometheus, bieten detaillierte Einblicke in den Zustand von DaemonSet-Pods: Wann starten sie neu, verbrauchen sie zu viel Speicher, wo entstehen zeitliche Engpässe? Die Idee ist, pro DaemonSet ein eigenes Monitoring-Dashboard zu bauen, das aufzeigt, ob Updates reibungslos liefen und ob die Dienste auf allen Nodes korrekt arbeiten.
Gerade in stark wachsenden Clustern möchte ich nachvollziehen, ob an jedem Standort der gleiche Agent in gleicher Version läuft. Dank Kibana und Co. kann ich zusätzlich die Logs der einzelnen DaemonSets auswerten und feststellen, ob sich Fehler oder Abstürze auf bestimmte Regionen oder Node-Typen beschränken. Dieses fokussierte Troubleshooting spart Zeit in komplexen Umgebungen.
Häufige Stolperfallen
Die Arbeit mit DaemonSets ist prinzipiell simpel, doch gibt es einige typische Fallstricke:
- Fehlende Tolerations: Wenn Nodes getaintet sind (z.B. für spezielle Workloads), muss ich explizite Tolerations für mein DaemonSet definieren. Ansonsten startet mein Dienst nicht auf diesen Knoten, obwohl ich es vielleicht benötige.
- Unklare Ressourcenkalkulation: Ein DaemonSet multipliziert den Ressourcenverbrauch des Pods mit der Anzahl der Nodes. Das wird gerne unterschätzt. Hier sollte eine Lastprognose erfolgen, bevor man den Rollout startet.
- Fehlerhafte Labels und Selektoren: Die Pod-Labels im Template müssen mit dem
spec.selector.matchLabels
übereinstimmen. Ein Vertipper oder ein zusätzliches Label kann dazu führen, dass das DaemonSet keine Pods verwaltet oder unnötig neue Pods erzeugt. - Ungeplantes Rolling Update: Ändert man das Template eines DaemonSet ohne Bedacht, kann dies zu einem kompletten Re-Rollout führen. Gerade bei sicherheitskritischen Agenten ist dies nicht immer gewollt, wenn gleichzeitig andere wichtige Wartungsarbeiten laufen. Planvolles Vorgehen ist daher ratsam.
Wer diese Punkte im Blick behält und das Zusammenspiel mit Deployments oder StatefulSets versteht, wird mit DaemonSets eine robuste Basis für systemnahe Dienste schaffen. Viele Administratoren schätzen insbesondere, dass man sich mit einem DaemonSet um weniger manuelle Aufgaben kümmern muss – es läuft quasi “im Hintergrund” mit und übernimmt zentrale Funktionen für jeden Node.
Skalierung und Performanceoptimierungen
Auch wenn DaemonSets per Definition genau ein Pod pro Node betreiben, haben wir dennoch Stellschrauben für die Performance. Wer etwa eine hohe Durchsatzlast zu erwarten hat, kann bestimmte Nodes dedizieren, die über nodeSelector selektiert werden. So lässt sich sicherstellen, dass nur auf leistungsstarken Nodes spezielle Monitoring- oder Scan-Dienste laufen. Möchte ich zusätzlich eine schnelle Kommunikation zwischen den DaemonSet-Pods sicherstellen, kann ich hostNetworking aktivieren. Dies hat jedoch Sicherheits- und Netzwerkimplikationen, da Pods direkt an das Host-Netz binden.
Ein weiterer Performanceaspekt ist das Thema Lock-In: Wenn jeder DaemonSet-Pod umfangreiche Verarbeitungsprozesse ausführt (etwa Datenerfassung oder Live-Analyse), kann das die Hauptanwendungen auf demselben Node ausbremsen. Eine gründliche Architekturplanung, in der klar benannt wird, wie viel CPU und RAM ein Daemon-Pod benötigt, hilft, unnötige Ressourcenkonflikte zu vermeiden. In kritischen Umgebungen messe ich mit Tools wie kubectl top
oder Prometheus
regelmäßig den Ressourcenbedarf. So kann ich im Frühstadium identifizieren, wenn sich ein DaemonSet zu einem “Ressourcenfresser” entwickelt.
Impuls für flexible Cloud- und Hybrid-Setups
Mit steigender Vernetzung zwischen verschiedenen Rechenzentren und Cloud-Providern wächst das Bedürfnis, Dienste möglichst einheitlich zu verteilen. DaemonSets sind dabei ein echter Gewinn, weil sie universell funktionieren – egal ob der Node in einer Private Cloud, einem Public-Cloud-Anbieter oder On-Premises steht. Sobald Knoten in das Cluster aufgenommen werden, sorgen die DaemonSets dafür, dass der gleiche Satz an „systemnahen“ Anwendungen installiert wird. So entsteht ein harmonisiertes Betriebsumfeld über verschiedene Regionen hinweg.
Ich habe auch Szenarien erlebt, in denen temporär Nodes nur für kurze Zeit online gehen, um Spitzenlasten abzufedern. In diesen Situationen ist es besonders hilfreich, dass man keine eigenen Deployments mehr verwalten muss, die sich darum kümmern, dass alle nötigen Zusatzdienste vorhanden sind. Das DaemonSet registriert eigenständig, wann ein neuer Node hinzukommt, und startet dort umgehend seinen Pod. Damit entfällt der manuelle Aufwand, den man früher in traditionellen Infrastrukturen hatte, wenn man in Eile neue Server aufsetzen und konfigurieren musste.
Alltagstauglichkeit und häufige Erweiterungen
Bei der täglichen Arbeit mit DaemonSets ergeben sich zwangsläufig Anpassungen. Viele Teams ergänzen ihre DaemonSets beispielsweise um Sidecar-Container, die zusätzliche Logs sammeln oder die Applikation beobachten. Ebenso lassen sich Init-Container definieren, die vor dem eigentlichen Start wichtige Konfigurationsschritte ausführen, etwa das Herunterladen von Konfigdateien oder das Überprüfen von Zertifikaten.
Dank Kubernetes’ offener Architektur kann man solche Ideen testen, indem man das DaemonSet in einer Stage- oder Testumgebung anlegt und mögliche Konflikte frühzeitig erkennt. Bei vielen Clustern meiner Kunden sehe ich heute nicht mehr nur ein einziges DaemonSet, sondern mehrere, die teils sehr spezifische Aufgaben übernehmen. Vom Durchführen automatisierter Security-Scans über das Vorladen von Container-Images (Pre-Pulling) bis hin zum Verteilen von API-Zugriffsschlüsseln wird der Anwendungsbereich immer größer.
Die Flexibilität von DaemonSets macht sie zu einem integralen Bestandteil jeder Kubernetes-Umgebung, in der man auf gleichmäßige Verteilung von Diensten angewiesen ist. Zusammen mit Deployments und StatefulSets decken sie die meisten Anforderungen an moderne containerisierte Anwendungen ab. Somit bleiben Cluster-Administratoren handlungsfähig und können schnell auf Veränderungen reagieren, ohne jedes Mal aufwendige Konfigurationen manuell durchführen zu müssen.
Abschließende Gedanken zur Nutzung von DaemonSets
DaemonSets erleichtern mir die tägliche Arbeit im Cluster deutlich. Ich spare mir grundlegende Automatisierungsskripte, reduziere Fehlerpotenzial bei neuen Nodes und habe jederzeit Transparenz und Kontrolle über alle systemnahen Abläufe.
Monitoring, Security-Scanner, Backup-Dienste – all diese wiederkehrenden Agenten verteile ich per YAML in Sekunden über das gesamte Cluster. Wenn ein Node in einem anderen Rechenzentrum startet, ist innerhalb kurzer Zeit der passende Daemon aktiv. Genau diese Flexibilität erwarte ich in modernen Kubernetes-Setups.
Mein Tipp: Schaue regelmäßig in die Pod-Logs und achte auf den Zustand der DaemonSet-Pods. Fehlerhafte Images oder Konflikte mit nodeSelector-Einstellungen erkennst du so frühzeitig und kannst gegensteuern. Mit dem Wissen um Ressourcenzuteilung, Rollout-Strategien und Sicherheitsaspekten ist ein DaemonSet eine kraftvolle und zugleich stabile Methode, systemnahe Anwendungen zu betreiben. Wer diese Aspekte beachtet, profitiert langfristig von einer hochautomatisierten und leicht zu wartenden Infrastruktur – egal ob für wenige Nodes oder für mehrere hundert.