Bird
Raised Fist0
Kubernetesdevops~20 mins

DaemonSets for per-node workloads in Kubernetes - Practice Problems & Coding Challenges

Choose your learning style10 modes available
Challenge - 5 Problems
🎖️
DaemonSet Mastery
Get all challenges correct to earn this badge!
Test your skills under time pressure!
💻 Command Output
intermediate
1:30remaining
Output of DaemonSet Pod Distribution
You have a DaemonSet running on a Kubernetes cluster with 3 nodes. After running kubectl get pods -o wide, how many pods will you see for this DaemonSet?
A3 pods, one on each node
B1 pod, scheduled on the master node only
C0 pods, DaemonSets do not create pods automatically
D3 pods, but all scheduled on the same node
Attempts:
2 left
💡 Hint
DaemonSets ensure one pod per node unless node selectors or taints prevent scheduling.
🧠 Conceptual
intermediate
1:00remaining
Purpose of DaemonSets
What is the main purpose of using a DaemonSet in Kubernetes?
ATo run a copy of a pod on every node for node-level tasks
BTo manage multiple replicas of a pod for load balancing
CTo schedule pods only on master nodes
DTo create pods that run only once and then exit
Attempts:
2 left
💡 Hint
Think about tasks that need to run on all nodes, like monitoring or logging.
❓ Troubleshoot
advanced
2:00remaining
DaemonSet Pods Not Running on New Nodes
You added two new nodes to your Kubernetes cluster, but the DaemonSet pods are not appearing on these new nodes. What is the most likely cause?
APods are scheduled only on nodes labeled as 'worker' and new nodes are labeled 'master'
BDaemonSets only schedule pods on nodes present at creation time
CThe DaemonSet controller needs to be restarted manually
DThe new nodes are tainted and the DaemonSet has no tolerations
Attempts:
2 left
💡 Hint
Check node taints and tolerations for DaemonSet pods.
❓ Configuration
advanced
2:00remaining
DaemonSet Node Selector Configuration
You want your DaemonSet pods to run only on nodes labeled disk=ssd. Which snippet correctly configures this in the DaemonSet spec?
A"tolerations": [{"key": "disk", "value": "ssd"}]
B"nodeSelector": {"disk": "ssd"}
C"nodeSelector": {"ssd": "disk"}
D"affinity": {"nodeAffinity": {"requiredDuringSchedulingIgnoredDuringExecution": {"nodeSelectorTerms": [{"matchExpressions": [{"key": "disk", "operator": "In", "values": ["ssd"]}]}]}}}
Attempts:
2 left
💡 Hint
Node selectors use key-value pairs to filter nodes.
✅ Best Practice
expert
2:30remaining
Best Practice for Updating DaemonSet Pods
You need to update the container image of a DaemonSet without downtime. Which strategy is best to achieve this?
ADelete the DaemonSet and recreate it with the new image
BManually delete pods one by one to force recreation with the new image
CUse the DaemonSet rolling update strategy with maxUnavailable set to 1
DUpdate the DaemonSet spec and immediately restart the kubelet on all nodes
Attempts:
2 left
💡 Hint
DaemonSets support rolling updates to minimize downtime.

Practice

(1/5)
1. What is the main purpose of a DaemonSet in Kubernetes?
easy
A. To expose services outside the cluster
B. To manage persistent storage volumes
C. To run one pod on every node in the cluster
D. To schedule batch jobs at specific times

Solution

  1. Step 1: Understand DaemonSet functionality

    A DaemonSet ensures that a copy of a pod runs on all or some nodes in the cluster.
  2. Step 2: Compare with other Kubernetes objects

    Other objects like Jobs or Services do not guarantee one pod per node; DaemonSet does.
  3. Final Answer:

    To run one pod on every node in the cluster -> Option C
  4. Quick Check:

    DaemonSet = one pod per node [OK]
Hint: DaemonSet always runs pods on all nodes [OK]
Common Mistakes:
  • Confusing DaemonSet with Deployment
  • Thinking DaemonSet manages storage
  • Assuming DaemonSet schedules batch jobs
2. Which of the following is the correct way to specify a DaemonSet selector in the YAML manifest?
easy
A. selector: labels: app: my-daemon
B. selector: matchLabels: app: my-daemon
C. selector: matchExpressions: - key: app operator: Equals values: [my-daemon]
D. selector: matchLabels: app: my-daemon matchExpressions: - key: tier operator: In values: [backend]

Solution

  1. Step 1: Recall DaemonSet selector syntax

    The selector must use matchLabels or matchExpressions under selector.
  2. Step 2: Identify correct syntax

    selector: matchLabels: app: my-daemon uses matchLabels correctly with key-value pairs. selector: labels: app: my-daemon is invalid because it uses labels instead of matchLabels. selector: matchExpressions: - key: app operator: Equals values: [my-daemon] has wrong operator case and structure. selector: matchLabels: app: my-daemon matchExpressions: - key: tier operator: In values: [backend] mixes both but DaemonSet selector only supports one selector type.
  3. Final Answer:

    selector: matchLabels: app: my-daemon -> Option B
  4. Quick Check:

    DaemonSet selector uses matchLabels [OK]
Hint: Use matchLabels under selector for DaemonSet [OK]
Common Mistakes:
  • Using 'labels' instead of 'matchLabels'
  • Incorrect operator casing in matchExpressions
  • Mixing matchLabels and matchExpressions in selector
3. Given this DaemonSet YAML snippet, what will happen when a new node joins the cluster?
apiVersion: apps/v1
kind: DaemonSet
metadata:
  name: log-agent
spec:
  selector:
    matchLabels:
      app: log-agent
  template:
    metadata:
      labels:
        app: log-agent
    spec:
      containers:
      - name: log-agent
        image: log-agent:latest
medium
A. A pod named log-agent will be created on the new node automatically
B. No pod will be created until manually triggered
C. The DaemonSet will fail due to missing node selector
D. Pods will be created only on nodes labeled 'log-agent'

Solution

  1. Step 1: Understand DaemonSet behavior on new nodes

    DaemonSets automatically create pods on every node that matches the selector, including new nodes joining the cluster.
  2. Step 2: Check node selector usage

    This DaemonSet has no node selector restricting nodes, so it applies to all nodes.
  3. Final Answer:

    A pod named log-agent will be created on the new node automatically -> Option A
  4. Quick Check:

    DaemonSet pods auto-create on new nodes [OK]
Hint: DaemonSet pods auto-launch on all nodes by default [OK]
Common Mistakes:
  • Assuming manual pod creation on new nodes
  • Thinking node selector is mandatory
  • Believing pods only run on labeled nodes
4. You created a DaemonSet but no pods are running on any node. Which of these is the most likely cause?
medium
A. The DaemonSet is created in the wrong namespace
B. The DaemonSet spec is missing the container image
C. The cluster has no nodes available
D. The pod template labels do not match the DaemonSet selector

Solution

  1. Step 1: Check DaemonSet selector and pod template labels

    DaemonSet requires the selector to match the pod template labels exactly; otherwise, pods won't be created.
  2. Step 2: Evaluate other options

    Missing container image causes pod creation failure but usually shows pod errors. No nodes means no pods but is rare. Wrong namespace means DaemonSet exists but unrelated to nodes.
  3. Final Answer:

    The pod template labels do not match the DaemonSet selector -> Option D
  4. Quick Check:

    Selector and pod labels must match [OK]
Hint: Match pod labels with selector to run DaemonSet pods [OK]
Common Mistakes:
  • Ignoring label mismatch between selector and template
  • Assuming missing image stops pod creation silently
  • Not verifying cluster node availability
5. You want to run a logging agent on all Linux nodes but exclude Windows nodes in your Kubernetes cluster. How should you configure the DaemonSet?
hard
A. Add a nodeSelector with kubernetes.io/os: linux in the pod spec
B. Add a tolerations for Windows taints in the pod spec
C. Set the DaemonSet selector to os: linux label
D. Use a Deployment instead of DaemonSet with node affinity

Solution

  1. Step 1: Identify how to target Linux nodes only

    Kubernetes labels nodes with kubernetes.io/os set to their OS. Using nodeSelector with kubernetes.io/os: linux restricts pods to Linux nodes.
  2. Step 2: Evaluate other options

    Tolerations are for taints, not OS filtering. Selector matches pod labels, not nodes. Deployment does not guarantee one pod per node.
  3. Final Answer:

    Add a nodeSelector with kubernetes.io/os: linux in the pod spec -> Option A
  4. Quick Check:

    Use nodeSelector to filter nodes by OS [OK]
Hint: Use nodeSelector with OS label to filter nodes [OK]
Common Mistakes:
  • Using selector to filter nodes instead of nodeSelector
  • Confusing tolerations with node filtering
  • Using Deployment instead of DaemonSet for per-node pods
Recommended

Ready to prove it?

Pass the test and this pattern moves unknown strong while earning +1 Grip toward your certificate.

10 questions~5 mineasy hard