DEV Community

Cover image for Mastering Kubernetes DaemonSets: Deploy Pods Across Your Cluster
Labby for LabEx

Posted on

Mastering Kubernetes DaemonSets: Deploy Pods Across Your Cluster

Introduction

MindMap

This article covers the following tech skills:

Skills Graph

In Kubernetes, a DaemonSet is a type of controller that ensures a copy of a pod is running on every node in the cluster. This lab will guide you through the process of creating a DaemonSet to run replicas of a pod on every node in the cluster.

Create a Pod

Create a simple pod that will be used as the template for the replicas. Create a file called /home/labex/project/myapp-pod.yaml with the following contents:

apiVersion: v1
kind: Pod
metadata:
  name: myapp-pod
spec:
  containers:
    - name: myapp-container
      image: nginx
      ports:
        - containerPort: 80
Enter fullscreen mode Exit fullscreen mode

Create the pod using the following command:

kubectl apply -f /home/labex/project/myapp-pod.yaml
Enter fullscreen mode Exit fullscreen mode

Create a Daemonset

Create a DaemonSet to run replicas of the myapp-pod on every node in the cluster. Create a file called /home/labex/project/myapp-daemonset.yaml with the following contents:

apiVersion: apps/v1
kind: DaemonSet
metadata:
  name: myapp-daemonset
spec:
  selector:
    matchLabels:
      app: myapp
  template:
    metadata:
      labels:
        app: myapp
    spec:
      containers:
        - name: myapp-container
          image: nginx
          ports:
            - containerPort: 80
Enter fullscreen mode Exit fullscreen mode

This DaemonSet uses the myapp-pod as the template for the replicas and sets the matchLabels selector to app: myapp to ensure that the replicas are created on every node.

Create the DaemonSet using the following command:

kubectl apply -f /home/labex/project/myapp-daemonset.yaml
Enter fullscreen mode Exit fullscreen mode

Verify the Daemonset

Verify that the DaemonSet has been created and that replicas of the myapp-pod are running on every node. Use the following command to list the nodes in the cluster:

kubectl get nodes
Enter fullscreen mode Exit fullscreen mode

Use the following command to list the pods created by the DaemonSet:

kubectl get pods -l app=myapp
Enter fullscreen mode Exit fullscreen mode

You should see one pod for each node in the cluster.

Update the Daemonset

Update the DaemonSet to change the image used by the myapp-container. Create a file called /home/labex/project/myapp-daemonsett-update.yaml with the following contents:

apiVersion: apps/v1
kind: DaemonSet
metadata:
  name: myapp-daemonset
spec:
  selector:
    matchLabels:
      app: myapp
  template:
    metadata:
      labels:
        app: myapp
    spec:
      containers:
        - name: myapp-container
          image: busybox
          command: ["sleep", "3600"]
Enter fullscreen mode Exit fullscreen mode

This updated DaemonSet changes the image used by the myapp-container to busybox and sets the command to sleep 3600.

Update the DaemonSet using the following command:

kubectl apply -f /home/labex/project/myapp-daemonset-update.yaml
Enter fullscreen mode Exit fullscreen mode

Verify that the DaemonSet has been updated and that replicas of the myapp-pod are running with the new image. Use the following command to list the pods created by the DaemonSet:

kubectl get pods -l app=myapp
Enter fullscreen mode Exit fullscreen mode

You should see new pods created with the updated image.

Summary

In this lab, you learned how to use a DaemonSet in Kubernetes to run replicas of a pod on every node in the cluster.


Want to learn more?

Join our Discord or tweet us @WeAreLabEx ! 😄

Top comments (0)