In Kubernetes gibt es Workloads, die nicht skaliert, sondern auf jedem Node genau einmal laufen sollen. Genau dafür wurde das DaemonSet entwickelt.
Typische Beispiele sind Monitoring-, Logging- oder Netzwerk-Komponenten, die auf jedem Node präsent sein müssen.
In diesem Artikel lernst du:
- was ein DaemonSet in :contentReference[oaicite:0]{index=0} ist
- wie es sich von Deployment und StatefulSet unterscheidet
- typische Anwendungsfälle
- konkrete YAML-Beispiele
- Best Practices und häufige Fehler
1) Was ist ein Kubernetes DaemonSet?
Ein DaemonSet ist ein Kubernetes-Workload, der sicherstellt, dass auf jedem (oder ausgewählten) Node genau ein Pod läuft.
Wird ein neuer Node zum Cluster hinzugefügt, startet Kubernetes automatisch einen neuen Pod dieses DaemonSets auf diesem Node. Wird ein Node entfernt, verschwindet der Pod ebenfalls.
Merksatz: DaemonSet = genau ein Pod pro Node
2) Wann braucht man ein DaemonSet?
DaemonSets sind ideal für clusterweite Infrastruktur-Komponenten, die eng an den Node gebunden sind.
Typische Anwendungsfälle
- Log-Aggregation (z. B. Fluent Bit, Filebeat)
- Monitoring-Agenten (Node Exporter, Datadog Agent)
- Netzwerk-Komponenten (CNI-Plugins)
- Security-Scanner und Runtime-Überwachung
- Storage- oder CSI-Node-Komponenten
Für klassische Web-Anwendungen oder APIs ist ein DaemonSet nicht geeignet.
3) DaemonSet vs Deployment vs StatefulSet
| Kriterium | Deployment | StatefulSet | DaemonSet |
|---|---|---|---|
| Skalierung | Beliebig | Sequenziell | Automatisch pro Node |
| Anzahl Pods | replicas | replicas | 1 pro Node |
| Typischer Zweck | Applikationen | Datenbanken | Node-Agenten |
4) Wie funktioniert ein DaemonSet?
Ein DaemonSet arbeitet eng mit dem Scheduler zusammen:
- Jeder passende Node erhält genau einen Pod
- Keine manuelle Skalierung nötig
- Pods sind fest an Nodes gebunden
Optional können DaemonSets:
- nur auf bestimmten Nodes laufen (NodeSelector, Affinity)
- Taints und Tolerations nutzen
5) Beispiel: Einfaches DaemonSet
Dieses Beispiel startet einen NGINX-Pod auf jedem Node im Cluster.
apiVersion: apps/v1
kind: DaemonSet
metadata:
name: nginx-daemon
spec:
selector:
matchLabels:
app: nginx-daemon
template:
metadata:
labels:
app: nginx-daemon
spec:
containers:
- name: nginx
image: nginx:1.25
ports:
- containerPort: 80
kubectl apply -f nginx-daemon.yaml
kubectl get daemonset
kubectl get pods -o wide6) DaemonSet nur auf bestimmten Nodes ausführen
Häufig sollen DaemonSets nur auf speziellen Nodes laufen, z. B. nur auf Linux-Nodes oder nur auf Worker-Nodes.
Beispiel mit NodeSelector
spec:
template:
spec:
nodeSelector:
kubernetes.io/os: linux
Beispiel mit Tolerations
So kann ein DaemonSet auch auf Nodes mit Taints laufen:
tolerations:
- operator: "Exists"
7) Updates und Rollouts bei DaemonSets
Auch DaemonSets unterstützen Rolling Updates. Dabei werden Pods nodeweise aktualisiert.
Standardverhalten:
- ein Pod wird beendet
- neuer Pod startet auf demselben Node
- nächster Node folgt
kubectl rollout status daemonset nginx-daemon8) Ressourcen & Sicherheit
DaemonSets laufen auf allen Nodes – deshalb sind Ressourcen-Limits besonders wichtig.
- CPU- und Memory-Limits setzen
- SecurityContext bewusst konfigurieren
- Host-Zugriffe (hostPath, privileged) minimieren
9) Best Practices für DaemonSets
- Nur für nodeweite Aufgaben einsetzen
- Ressourcenverbrauch gering halten
- Taints & Tolerations gezielt nutzen
- Rolling Updates testen
- Logs und Metriken überwachen
10) Häufige Fehler & Troubleshooting
- Zu hoher Ressourcenverbrauch auf allen Nodes
- DaemonSet läuft auch auf Control-Plane-Nodes
- Fehlende Tolerations
kubectl describe daemonset nginx-daemon
kubectl get events
kubectl logs <pod-name>11) Fazit
Ein Kubernetes DaemonSet ist das richtige Werkzeug, wenn du sicherstellen musst, dass eine Komponente auf jedem Node verfügbar ist.
Während Deployments und StatefulSets Anwendungen betreiben, kümmert sich das DaemonSet um die Cluster-Infrastruktur.
Faustregel: Alles, was „pro Node“ laufen soll, gehört in ein DaemonSet.