Nodes

In Kubernetes, nodes are the (potentially virtual) machines where your workloads run. As a developer, you typically don’t deal with nodes directly, however as an admin you might want to familiarize yourself with node operations.

Node information is captured in a resource type named node:

$ kubectl get nodes

The output will vary depending on your cluster. The example below is taken from a minikube cluster:

NAME       STATUS   ROLES                  AGE   VERSION
minikube   Ready    control-plane,master   42m   v1.20.2

One uncommon, but still important, requirement is to make Kubernetes schedule a pod on a certain node. For this, we first need to label the node we want to target (using the node name as retrieved above):

$ kubectl label nodes minikube shouldrun=here

Now we can create a pod that is scheduled on the node with the label shouldrun=here:

$ kubectl apply -f https://github.com/openshift-evangelists/kbe/raw/main/specs/nodes/pod.yaml

The -o wide flag, when retrieving pod information, will show the node on which the pod is running:

$ kubectl get pods --output=wide

In this case, the node is the same one that was labeled in the label command above.

The describe subcommand contains a wealth of information about the node (the example output below has been truncated for readability):

Name:               minikube
Roles:              control-plane,master
...
Addresses:
  InternalIP:  192.168.39.147
  Hostname:    minikube
Capacity:
  cpu:                4
  ephemeral-storage:  17784752Ki
  hugepages-2Mi:      0
  memory:             11999700Ki
  pods:               110
...
Events:
  Type    Reason                   Age                From        Message
  ----    ------                   ----               ----        -------
  Normal  NodeHasSufficientMemory  47m (x7 over 47m)  kubelet     Node minikube status is now: NodeHasSufficientMemory
  Normal  NodeHasNoDiskPressure    47m (x6 over 47m)  kubelet     Node minikube status is now: NodeHasNoDiskPressure
  Normal  NodeHasSufficientPID     47m (x6 over 47m)  kubelet     Node minikube status is now: NodeHasSufficientPID
  Normal  Starting                 47m                kubelet     Starting kubelet.
...

Note that there are more sophisticated methods than shown above, such as using affinity, to assign pods to nodes.