Running Pods on Only Some Nodes
This page demonstrates how can you run Pods on only some Nodes as part of a DaemonSet
Before you begin
You need to have a Kubernetes cluster, and the kubectl command-line tool must be configured to communicate with your cluster. It is recommended to run this tutorial on a cluster with at least two nodes that are not acting as control plane hosts. If you do not already have a cluster, you can create one by using minikube or you can use one of these Kubernetes playgrounds:
Running Pods on only some Nodes
Imagine that you want to run a DaemonSet, but you only need to run those daemon pods on nodes that have local solid state (SSD) storage. For example, the Pod might provide cache service to the node, and the cache is only useful when low-latency local storage is available.
Step 1: Add labels to your nodes
Add the label
ssd=true to the nodes which have SSDs.
kubectl label nodes example-node-1 example-node-2 ssd=true
Step 2: Create the manifest
Let's create a DaemonSet which will provision the daemon pods on the SSD labeled nodes only.
Next, use a
nodeSelector to ensure that the DaemonSet only runs Pods on nodes
ssd label set to
apiVersion: apps/v1 kind: DaemonSet metadata: name: ssd-driver labels: app: nginx spec: selector: matchLabels: app: ssd-driver-pod template: metadata: labels: app: ssd-driver-pod spec: nodeSelector: ssd: "true" containers: - name: example-container image: example-image
Step 3: Create the DaemonSet
Create the DaemonSet from the manifest by using
kubectl create or
Let's label another node as
kubectl label nodes example-node-3 ssd=true
Labelling the node automatically triggers the control plane (specifically, the DaemonSet controller) to run a new daemon pod on that node.
kubectl get pods -o wide
The output is similar to:
NAME READY STATUS RESTARTS AGE IP NODE <daemonset-name><some-hash-01> 1/1 Running 0 13s ..... example-node-1 <daemonset-name><some-hash-02> 1/1 Running 0 13s ..... example-node-2 <daemonset-name><some-hash-03> 1/1 Running 0 5s ..... example-node-3