Skip to content
thesarfo

Concept

Kubernetes: DaemonSets

How DaemonSets guarantee one Pod per node for node-level services like logging and monitoring agents.

views 0

A DaemonSet ensures that exactly one copy of a specific Pod runs on each Node (or selected Nodes) in a Kubernetes cluster. It’s ideal for deploying node-level services like monitoring agents, logging daemons, or networking tools (e.g., kube-proxy, Calico, Cilium).

DaemonSet Pods are not scheduled by the default Scheduler but directly placed by the DaemonSet controller. They automatically deploy Pods to new Nodes as they are added to the cluster, and remove Pods when Nodes are deleted. Pod placement can be controlled with nodeSelectors, affinity, taints, and tolerations.

Example YAML manifest:

apiVersion: apps/v1
kind: DaemonSet
metadata:
name: fluentd-agent
namespace: default
labels:
k8s-app: fluentd-agent
spec:
selector:
matchLabels:
k8s-app: fluentd-agent
template:
metadata:
labels:
k8s-app: fluentd-agent
spec:
containers:
- name: fluentd
image: quay.io/fluentd_elasticsearch/fluentd:v4.5.2

Key commands:

Terminal window
kubectl create -f fluentd-ds.yaml
kubectl apply -f fluentd-ds.yaml --record
kubectl get daemonsets
kubectl describe ds fluentd-agent
kubectl rollout status ds fluentd-agent
kubectl set image ds fluentd-agent fluentd=quay.io/fluentd_elasticsearch/fluentd:v4.6.2 --record
kubectl rollout undo ds fluentd-agent --to-revision=1
kubectl delete ds fluentd-agent

DaemonSets are essential for ensuring consistent background services are running across the entire cluster or a specific subset of Nodes.