0
0
Kubernetesdevops~5 mins

DaemonSets for per-node workloads in Kubernetes - Commands & Configuration

Choose your learning style9 modes available
Introduction
Sometimes you need to run a small program on every computer in your cluster. DaemonSets help you do this by making sure a copy of your program runs on each node automatically.
When you want to collect logs from every node in your cluster.
When you need to monitor the health of each node with a small agent.
When you want to run a network tool on every node to manage traffic.
When you need to apply security scanning software on all nodes.
When you want to run a storage driver on every node to handle disks.
Config File - daemonset.yaml
daemonset.yaml
apiVersion: apps/v1
kind: DaemonSet
metadata:
  name: node-agent
  labels:
    app: node-agent
spec:
  selector:
    matchLabels:
      app: node-agent
  template:
    metadata:
      labels:
        app: node-agent
    spec:
      containers:
      - name: node-agent
        image: busybox
        command: ["sh", "-c", "while true; do echo Hello from node $(hostname); sleep 30; done"]

This file creates a DaemonSet named node-agent. It runs a simple container on every node that prints a message every 30 seconds. The selector and template.metadata.labels ensure the DaemonSet manages the right pods. The command runs a loop printing the node's name.

Commands
This command creates the DaemonSet in your Kubernetes cluster, starting the pods on all nodes.
Terminal
kubectl apply -f daemonset.yaml
Expected OutputExpected
daemonset.apps/node-agent created
This command lists all DaemonSets in the current namespace to verify your DaemonSet is running.
Terminal
kubectl get daemonsets
Expected OutputExpected
NAME DESIRED CURRENT READY UP-TO-DATE AVAILABLE NODE SELECTOR AGE node-agent 3 3 3 3 3 <none> 10s
This command shows the pods created by the DaemonSet and on which nodes they are running.
Terminal
kubectl get pods -l app=node-agent -o wide
Expected OutputExpected
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES node-agent-abc12 1/1 Running 0 15s 10.244.1.5 worker-node-1 <none> <none> node-agent-def34 1/1 Running 0 15s 10.244.2.5 worker-node-2 <none> <none> node-agent-ghi56 1/1 Running 0 15s 10.244.3.5 worker-node-3 <none> <none>
-l app=node-agent - Filter pods by label to show only DaemonSet pods
-o wide - Show extra details including node names
This command shows detailed information about the DaemonSet, including events and pod status.
Terminal
kubectl describe daemonset node-agent
Expected OutputExpected
Name: node-agent Namespace: default Selector: app=node-agent Labels: app=node-agent Desired Number of Nodes Scheduled: 3 Current Number of Nodes Scheduled: 3 Number of Nodes Misscheduled: 0 Pods Status: 3 Running / 0 Waiting / 0 Succeeded / 0 Failed Events: Type Reason Age From Message ---- ------ ---- ---- ------- Normal SuccessfulCreate 1m daemonset-controller Created pod: node-agent-abc12 Normal SuccessfulCreate 1m daemonset-controller Created pod: node-agent-def34 Normal SuccessfulCreate 1m daemonset-controller Created pod: node-agent-ghi56
Key Concept

A DaemonSet ensures one copy of a pod runs on every node automatically and stays running.

Common Mistakes
Not matching the selector labels with the pod template labels in the DaemonSet spec.
Kubernetes won't know which pods belong to the DaemonSet, so it won't manage them properly.
Make sure the selector.matchLabels exactly matches the labels in template.metadata.labels.
Applying the DaemonSet YAML without checking node readiness or taints.
Pods may not schedule on nodes that are not ready or have taints blocking them.
Verify nodes are ready and adjust tolerations in the DaemonSet spec if needed.
Using a container image that does not run or exits immediately.
Pods will crash or restart constantly, causing instability.
Use a container with a long-running process or a command that keeps running.
Summary
Create a DaemonSet YAML file that defines a pod to run on every node.
Apply the DaemonSet with kubectl apply to start pods on all nodes.
Use kubectl get daemonsets and kubectl get pods to verify pods are running on each node.
Use kubectl describe daemonset to see detailed status and events.