Skip to content

How to add Labels to Nodes and schedule pods to specific Node in Kubernetes

Last updated on September 27, 2024

In Kubernetes, node labels are a powerful feature that allows you to organize and categorize your nodes based on their attributes. By using node labels, you can ensure that specific workloads are scheduled on the most appropriate nodes in your cluster. In this guide, we’ll walk through the process of adding labels to nodes and deploying a pod to a specific node based on those labels.

Step 1: Labeling Your Nodes

Node labels are key-value pairs that you can assign to your nodes to describe their characteristics. For instance, you might have nodes with different storage types, and you want to ensure certain workloads run on nodes with SSDs while others run on nodes with SAS disks.

Let’s start by labeling two nodes in your Kubernetes cluster:

kubectl label node node1 disktype=ssd
kubectl label node node2 disktype=sas

In this example:

  • node1 is labeled with disktype=ssd.
  • node2 is labeled with disktype=sas.

You can verify that the labels have been applied by running:

kubectl get nodes --show-labels

This command will display all nodes in your cluster along with their labels.

Step 2: Deploying a Pod to a Specific Node

Now that your nodes are labeled, you can deploy pods to specific nodes by using a nodeSelector. A nodeSelector is a field in a pod’s specification that defines the criteria for node selection based on labels.

Here’s an example of a pod specification that will only be scheduled on nodes labeled with disktype=ssd:

apiVersion: v1
kind: Pod
metadata:
  name: nginx
spec:
  containers:
  - name: nginx-container
    image: nginx
  nodeSelector:
    disktype: ssd

In this pod specification:

  • The nodeSelector field is set to disktype: ssd, which means this pod will only be scheduled on nodes that have the disktype=ssd label.

You can create the pod with the following command:

kubectl apply -f nginx-ssd-pod.yaml

Kubernetes will ensure that this pod is scheduled on a node with the disktype=ssd label. If no such node is available, the pod will remain unscheduled until a suitable node becomes available.

Step 3: Verifying the Pod Deployment

Once the pod is deployed, you can verify that it is running on the correct node by using the following command:

kubectl get pod nginx-ssd-pod -o wide

This command will display details about the pod, including the node it’s running on. Ensure that the pod is indeed running on a node with the disktype=ssd label.

Using node labels and nodeSelector in Kubernetes allows you to have fine-grained control over where your workloads run. This can be particularly useful in scenarios where you have different types of hardware in your cluster and need to ensure that specific workloads are scheduled on the most appropriate nodes.

By following the steps outlined in this guide, you can easily label your nodes and deploy pods to specific nodes based on those labels, optimizing your workloads for the underlying infrastructure.

Published inKubernetesLinuxSecurity