kubernetes: Assigning a pod to a node

2 min read | by Jordi Prats

In a kubernetes cluster not all nodes must be identical, for example, some might have access to a disk that others don't, or belong to a different network segment that do have a public IP thus we might want to assign pods to specific nodes

Let's assume we have the following nodes available:

$ kubectl top nodes NAME CPU(cores) CPU% MEMORY(bytes) MEMORY% canterbury.pet2cattle.com 254m 9% 1729Mi 5% scopuli.pet2cattle.com 1047m 1% 1203Mi 15% anubis.pet2cattle.com 154m 26% 2729Mi 9% 

If we want, for whatever reason, to force the scheduling of a pod to a node, for example: scopuli.pet2cattle.com we just need to set nodeName to the node we want to use, for example:

apiVersion: v1 kind: Pod metadata:  name: demo spec:  nodeName: scopuli.pet2cattle.com  containers:  - name: demo  image: busybox  command: ["sleep"]  args: ["1h"] 

If we apply this yaml:

$ kubectl apply -f demo.yaml pod/demo created 

We will see that this pod is going to be scheduled to the pod we told kubernetes to do it. If we add -o wide to kubectl get we will be able to see the node:

$ kubectl get pod demo -o wide NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES demo 1/1 Running 0 2d5h 10.42.0.63 scopuli.lolcathost.systemadmin.es <none> <none> 

We must take into account that resource requests/limits still apply, as a rule of thumb, if a given pod wouldn't be scheduled to a given node for some reason, nodeName won't force it's scheduling: It just adds another restriction to the resource request


Posted on 04/02/2021