Assign Pods to Nodes

This page shows how to assign a Kubernetes Pod to a particular node in aKubernetes cluster.

Before you begin

You need to have a Kubernetes cluster, and the kubectl command-line tool mustbe 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 acluster, you can create one by usingminikubeor you can use one of these Kubernetes playgrounds:

To check the version, enterkubectl version.

Add a label to a node

  1. List thenodes in your cluster, along with their labels:

    kubectl get nodes --show-labels

    The output is similar to this:

    NAME      STATUS    ROLES    AGE     VERSION        LABELSworker0   Ready     <none>   1d      v1.13.0        ...,kubernetes.io/hostname=worker0worker1   Ready     <none>   1d      v1.13.0        ...,kubernetes.io/hostname=worker1worker2   Ready     <none>   1d      v1.13.0        ...,kubernetes.io/hostname=worker2
  2. Choose one of your nodes, and add a label to it:

    kubectl label nodes <your-node-name>disktype=ssd

    where<your-node-name> is the name of your chosen node.

  3. Verify that your chosen node has adisktype=ssd label:

    kubectl get nodes --show-labels

    The output is similar to this:

    NAME      STATUS    ROLES    AGE     VERSION        LABELSworker0   Ready     <none>   1d      v1.13.0        ...,disktype=ssd,kubernetes.io/hostname=worker0worker1   Ready     <none>   1d      v1.13.0        ...,kubernetes.io/hostname=worker1worker2   Ready     <none>   1d      v1.13.0        ...,kubernetes.io/hostname=worker2

    In the preceding output, you can see that theworker0 node has adisktype=ssd label.

Create a pod that gets scheduled to your chosen node

This pod configuration file describes a pod that has a node selector,disktype: ssd. This means that the pod will get scheduled on a node that hasadisktype=ssd label.

apiVersion:v1kind:Podmetadata:name:nginxlabels:env:testspec:containers:-name:nginximage:nginximagePullPolicy:IfNotPresentnodeSelector:disktype:ssd
  1. Use the configuration file to create a pod that will get scheduled on yourchosen node:

    kubectl apply -f https://k8s.io/examples/pods/pod-nginx.yaml
  2. Verify that the pod is running on your chosen node:

    kubectl get pods --output=wide

    The output is similar to this:

    NAME     READY     STATUS    RESTARTS   AGE    IP           NODEnginx    1/1       Running0          13s    10.200.0.4   worker0

Create a pod that gets scheduled to specific node

You can also schedule a pod to one specific node via settingnodeName.

apiVersion:v1kind:Podmetadata:name:nginxspec:nodeName:foo-node# schedule pod to specific nodecontainers:-name:nginximage:nginximagePullPolicy:IfNotPresent

Use the configuration file to create a pod that will get scheduled onfoo-node only.

What's next

Last modified August 24, 2023 at 6:38 PM PST:Use code_sample shortcode instead of code shortcode (e8b136c3b3)