Viewing and listing the nodes in your OKD cluster

You can list all the nodes in your cluster to obtain information such as status, age, memory usage, and details about the nodes.

When you perform node management operations, the CLI interacts with node objects that are representations of actual node hosts. The master uses the information from node objects to validate nodes with health checks.

About listing all the nodes in a cluster

You can get detailed information on the nodes in the cluster.

  • The following command lists all nodes:

    1. $ oc get nodes

    The following example is a cluster with healthy nodes:

    1. $ oc get nodes

    Example output

    1. NAME STATUS ROLES AGE VERSION
    2. master.example.com Ready master 7h v1.27.3
    3. node1.example.com Ready worker 7h v1.27.3
    4. node2.example.com Ready worker 7h v1.27.3

    The following example is a cluster with one unhealthy node:

    1. $ oc get nodes

    Example output

    1. NAME STATUS ROLES AGE VERSION
    2. master.example.com Ready master 7h v1.27.3
    3. node1.example.com NotReady,SchedulingDisabled worker 7h v1.27.3
    4. node2.example.com Ready worker 7h v1.27.3

    The conditions that trigger a NotReady status are shown later in this section.

  • The -o wide option provides additional information on nodes.

    1. $ oc get nodes -o wide

    Example output

    1. NAME STATUS ROLES AGE VERSION INTERNAL-IP EXTERNAL-IP OS-IMAGE KERNEL-VERSION CONTAINER-RUNTIME
    2. master.example.com Ready master 171m v1.27.3 10.0.129.108 <none> Red Hat Enterprise Linux CoreOS 48.83.202103210901-0 (Ootpa) 4.18.0-240.15.1.el8_3.x86_64 cri-o://1.27.3-30.rhaos4.10.gitf2f339d.el8-dev
    3. node1.example.com Ready worker 72m v1.27.3 10.0.129.222 <none> Red Hat Enterprise Linux CoreOS 48.83.202103210901-0 (Ootpa) 4.18.0-240.15.1.el8_3.x86_64 cri-o://1.27.3-30.rhaos4.10.gitf2f339d.el8-dev
    4. node2.example.com Ready worker 164m v1.27.3 10.0.142.150 <none> Red Hat Enterprise Linux CoreOS 48.83.202103210901-0 (Ootpa) 4.18.0-240.15.1.el8_3.x86_64 cri-o://1.27.3-30.rhaos4.10.gitf2f339d.el8-dev
  • The following command lists information about a single node:

    1. $ oc get node <node>

    For example:

    1. $ oc get node node1.example.com

    Example output

    1. NAME STATUS ROLES AGE VERSION
    2. node1.example.com Ready worker 7h v1.27.3
  • The following command provides more detailed information about a specific node, including the reason for the current condition:

    1. $ oc describe node <node>

    For example:

    1. $ oc describe node node1.example.com

    Example output

    1. Name: node1.example.com (1)
    2. Roles: worker (2)
    3. Labels: kubernetes.io/os=linux
    4. kubernetes.io/hostname=ip-10-0-131-14
    5. kubernetes.io/arch=amd64 (3)
    6. node-role.kubernetes.io/worker=
    7. node.kubernetes.io/instance-type=m4.large
    8. node.openshift.io/os_id=rhcos
    9. node.openshift.io/os_version=4.5
    10. region=east
    11. topology.kubernetes.io/region=us-east-1
    12. topology.kubernetes.io/zone=us-east-1a
    13. Annotations: cluster.k8s.io/machine: openshift-machine-api/ahardin-worker-us-east-2a-q5dzc (4)
    14. machineconfiguration.openshift.io/currentConfig: worker-309c228e8b3a92e2235edd544c62fea8
    15. machineconfiguration.openshift.io/desiredConfig: worker-309c228e8b3a92e2235edd544c62fea8
    16. machineconfiguration.openshift.io/state: Done
    17. volumes.kubernetes.io/controller-managed-attach-detach: true
    18. CreationTimestamp: Wed, 13 Feb 2019 11:05:57 -0500
    19. Taints: <none> (5)
    20. Unschedulable: false
    21. Conditions: (6)
    22. Type Status LastHeartbeatTime LastTransitionTime Reason Message
    23. ---- ------ ----------------- ------------------ ------ -------
    24. OutOfDisk False Wed, 13 Feb 2019 15:09:42 -0500 Wed, 13 Feb 2019 11:05:57 -0500 KubeletHasSufficientDisk kubelet has sufficient disk space available
    25. MemoryPressure False Wed, 13 Feb 2019 15:09:42 -0500 Wed, 13 Feb 2019 11:05:57 -0500 KubeletHasSufficientMemory kubelet has sufficient memory available
    26. DiskPressure False Wed, 13 Feb 2019 15:09:42 -0500 Wed, 13 Feb 2019 11:05:57 -0500 KubeletHasNoDiskPressure kubelet has no disk pressure
    27. PIDPressure False Wed, 13 Feb 2019 15:09:42 -0500 Wed, 13 Feb 2019 11:05:57 -0500 KubeletHasSufficientPID kubelet has sufficient PID available
    28. Ready True Wed, 13 Feb 2019 15:09:42 -0500 Wed, 13 Feb 2019 11:07:09 -0500 KubeletReady kubelet is posting ready status
    29. Addresses: (7)
    30. InternalIP: 10.0.140.16
    31. InternalDNS: ip-10-0-140-16.us-east-2.compute.internal
    32. Hostname: ip-10-0-140-16.us-east-2.compute.internal
    33. Capacity: (8)
    34. attachable-volumes-aws-ebs: 39
    35. cpu: 2
    36. hugepages-1Gi: 0
    37. hugepages-2Mi: 0
    38. memory: 8172516Ki
    39. pods: 250
    40. Allocatable:
    41. attachable-volumes-aws-ebs: 39
    42. cpu: 1500m
    43. hugepages-1Gi: 0
    44. hugepages-2Mi: 0
    45. memory: 7558116Ki
    46. pods: 250
    47. System Info: (9)
    48. Machine ID: 63787c9534c24fde9a0cde35c13f1f66
    49. System UUID: EC22BF97-A006-4A58-6AF8-0A38DEEA122A
    50. Boot ID: f24ad37d-2594-46b4-8830-7f7555918325
    51. Kernel Version: 3.10.0-957.5.1.el7.x86_64
    52. OS Image: Red Hat Enterprise Linux CoreOS 410.8.20190520.0 (Ootpa)
    53. Operating System: linux
    54. Architecture: amd64
    55. Container Runtime Version: cri-o://1.27.3-0.6.dev.rhaos4.3.git9ad059b.el8-rc2
    56. Kubelet Version: v1.27.3
    57. Kube-Proxy Version: v1.27.3
    58. PodCIDR: 10.128.4.0/24
    59. ProviderID: aws:///us-east-2a/i-04e87b31dc6b3e171
    60. Non-terminated Pods: (12 in total) (10)
    61. Namespace Name CPU Requests CPU Limits Memory Requests Memory Limits
    62. --------- ---- ------------ ---------- --------------- -------------
    63. openshift-cluster-node-tuning-operator tuned-hdl5q 0 (0%) 0 (0%) 0 (0%) 0 (0%)
    64. openshift-dns dns-default-l69zr 0 (0%) 0 (0%) 0 (0%) 0 (0%)
    65. openshift-image-registry node-ca-9hmcg 0 (0%) 0 (0%) 0 (0%) 0 (0%)
    66. openshift-ingress router-default-76455c45c-c5ptv 0 (0%) 0 (0%) 0 (0%) 0 (0%)
    67. openshift-machine-config-operator machine-config-daemon-cvqw9 20m (1%) 0 (0%) 50Mi (0%) 0 (0%)
    68. openshift-marketplace community-operators-f67fh 0 (0%) 0 (0%) 0 (0%) 0 (0%)
    69. openshift-monitoring alertmanager-main-0 50m (3%) 50m (3%) 210Mi (2%) 10Mi (0%)
    70. openshift-monitoring node-exporter-l7q8d 10m (0%) 20m (1%) 20Mi (0%) 40Mi (0%)
    71. openshift-monitoring prometheus-adapter-75d769c874-hvb85 0 (0%) 0 (0%) 0 (0%) 0 (0%)
    72. openshift-multus multus-kw8w5 0 (0%) 0 (0%) 0 (0%) 0 (0%)
    73. openshift-sdn ovs-t4dsn 100m (6%) 0 (0%) 300Mi (4%) 0 (0%)
    74. openshift-sdn sdn-g79hg 100m (6%) 0 (0%) 200Mi (2%) 0 (0%)
    75. Allocated resources:
    76. (Total limits may be over 100 percent, i.e., overcommitted.)
    77. Resource Requests Limits
    78. -------- -------- ------
    79. cpu 380m (25%) 270m (18%)
    80. memory 880Mi (11%) 250Mi (3%)
    81. attachable-volumes-aws-ebs 0 0
    82. Events: (11)
    83. Type Reason Age From Message
    84. ---- ------ ---- ---- -------
    85. Normal NodeHasSufficientPID 6d (x5 over 6d) kubelet, m01.example.com Node m01.example.com status is now: NodeHasSufficientPID
    86. Normal NodeAllocatableEnforced 6d kubelet, m01.example.com Updated Node Allocatable limit across pods
    87. Normal NodeHasSufficientMemory 6d (x6 over 6d) kubelet, m01.example.com Node m01.example.com status is now: NodeHasSufficientMemory
    88. Normal NodeHasNoDiskPressure 6d (x6 over 6d) kubelet, m01.example.com Node m01.example.com status is now: NodeHasNoDiskPressure
    89. Normal NodeHasSufficientDisk 6d (x6 over 6d) kubelet, m01.example.com Node m01.example.com status is now: NodeHasSufficientDisk
    90. Normal NodeHasSufficientPID 6d kubelet, m01.example.com Node m01.example.com status is now: NodeHasSufficientPID
    91. Normal Starting 6d kubelet, m01.example.com Starting kubelet.
    92. #...
    1The name of the node.
    2The role of the node, either master or worker.
    3The labels applied to the node.
    4The annotations applied to the node.
    5The taints applied to the node.
    6The node conditions and status. The conditions stanza lists the Ready, PIDPressure, PIDPressure, MemoryPressure, DiskPressure and OutOfDisk status. These condition are described later in this section.
    7The IP address and hostname of the node.
    8The pod resources and allocatable resources.
    9Information about the node host.
    10The pods on the node.
    11The events reported by the node.

Among the information shown for nodes, the following node conditions appear in the output of the commands shown in this section:

Table 1. Node Conditions
ConditionDescription

Ready

If true, the node is healthy and ready to accept pods. If false, the node is not healthy and is not accepting pods. If unknown, the node controller has not received a heartbeat from the node for the node-monitor-grace-period (the default is 40 seconds).

DiskPressure

If true, the disk capacity is low.

MemoryPressure

If true, the node memory is low.

PIDPressure

If true, there are too many processes on the node.

OutOfDisk

If true, the node has insufficient free space on the node for adding new pods.

NetworkUnavailable

If true, the network for the node is not correctly configured.

NotReady

If true, one of the underlying components, such as the container runtime or network, is experiencing issues or is not yet configured.

SchedulingDisabled

Pods cannot be scheduled for placement on the node.

Listing pods on a node in your cluster

You can list all the pods on a specific node.

Procedure

  • To list all or selected pods on one or more nodes:

    1. $ oc describe node <node1> <node2>

    For example:

    1. $ oc describe node ip-10-0-128-218.ec2.internal
  • To list all or selected pods on selected nodes:

    1. $ oc describe --selector=<node_selector>
    1. $ oc describe node --selector=kubernetes.io/os

    Or:

    1. $ oc describe -l=<pod_selector>
    1. $ oc describe node -l node-role.kubernetes.io/worker
  • To list all pods on a specific node, including terminated pods:

    1. $ oc get pod --all-namespaces --field-selector=spec.nodeName=<nodename>

Viewing memory and CPU usage statistics on your nodes

You can display usage statistics about nodes, which provide the runtime environments for containers. These usage statistics include CPU, memory, and storage consumption.

Prerequisites

  • You must have cluster-reader permission to view the usage statistics.

  • Metrics must be installed to view the usage statistics.

Procedure

  • To view the usage statistics:

    1. $ oc adm top nodes

    Example output

    1. NAME CPU(cores) CPU% MEMORY(bytes) MEMORY%
    2. ip-10-0-12-143.ec2.compute.internal 1503m 100% 4533Mi 61%
    3. ip-10-0-132-16.ec2.compute.internal 76m 5% 1391Mi 18%
    4. ip-10-0-140-137.ec2.compute.internal 398m 26% 2473Mi 33%
    5. ip-10-0-142-44.ec2.compute.internal 656m 43% 6119Mi 82%
    6. ip-10-0-146-165.ec2.compute.internal 188m 12% 3367Mi 45%
    7. ip-10-0-19-62.ec2.compute.internal 896m 59% 5754Mi 77%
    8. ip-10-0-44-193.ec2.compute.internal 632m 42% 5349Mi 72%
  • To view the usage statistics for nodes with labels:

    1. $ oc adm top node --selector=''

    You must choose the selector (label query) to filter on. Supports =, ==, and !=.