k8s Nodes
Count cluster nodes:
kubectl get nodes --no-headers | wc -l
or
kubectl get nodes -o json | jq '.items | length'
List taints for all the nodes
kubectl get nodes -o json|jq '.items[].spec.taints'
Example output:
[
  {
    "effect": "NoSchedule",
    "key": "eks.amazonaws.com/compute-type",
    "value": "fargate"
  }
]
[
  {
    "effect": "NoSchedule",
    "key": "clari.io/nodegroup",
    "value": "eks-core-services"
  }
]
null
Alternatively:
kubectl get nodes -o="custom-columns=NodeName:.metadata.name,TaintKey:.spec.taints[*].key,TaintValue:.spec.taints[*].value,TaintEffect:.spec.taints[*].effect"
Output:
NodeName                               TaintKey                         TaintValue          TaintEffect
fargate-ip-10-14-81-126.ec2.internal   eks.amazonaws.com/compute-type   fargate             NoSchedule
ip-10-14-102-143.ec2.internal          clari.io/nodegroup               eks-core-services   NoSchedule
ip-10-14-103-86.ec2.internal           <none>                           <none>              <none>
ip-10-14-83-79.ec2.internal            clari.io/nodegroup               eks-core-services   NoSchedule
ip-10-14-86-20.ec2.internal            clari.io/nodegroup               eks-core-services   NoSchedule
ip-10-14-86-93.ec2.internal            <none>                           <none>              <none>
ip-10-14-91-35.ec2.internal            clari.io/nodegroup               eks-core-services   NoSchedule
ip-10-14-94-20.ec2.internal            clari.io/nodegroup               eks-core-services   NoSchedule
ip-10-14-94-45.ec2.internal            <none>                           <none>              <none>
ip-10-14-99-93.ec2.internal            <none>                           <none>              <none>
List info for all the nodes:
kubectl get nodes -o json|jq '.items[].status.nodeInfo'
Example output:
{
  "architecture": "amd64",
  "bootID": "**************",
  "containerRuntimeVersion": "containerd://1.6.6",
  "kernelVersion": "5.10.210-201.855.amzn2.x86_64",
  "kubeProxyVersion": "v1.27.9-eks-680e576",
  "kubeletVersion": "v1.27.9-eks-680e576",
  "machineID": "",
  "operatingSystem": "linux",
  "osImage": "Amazon Linux 2",
  "systemUUID": "******************"
}
{
  "architecture": "amd64",
  "bootID": "****************************",
  "containerRuntimeVersion": "containerd://1.6.31+bottlerocket",
  "kernelVersion": "5.15.152",
  "kubeProxyVersion": "v1.27.11-eks-9572756",
  "kubeletVersion": "v1.27.11-eks-9572756",
  "machineID": "*******************",
  "operatingSystem": "linux",
  "osImage": "Bottlerocket OS 1.19.4 (aws-k8s-1.27)",
  "systemUUID": "***********************"
}
Taint/UnTaint a node
To taint the node1 with key1=value1:
kubectl taint nodes node1 key1=value1:NoSchedule
No pod will be able to schedule onto node1 unless it has a matching
toleration.
To remove the taint added by the command above, you can run:
kubectl taint nodes node1 key1=value1:NoSchedule-
Label a node
kubectl label node node01 color=blue
Node affinity
Drain the node
kubectl drain --ignore-daemonsets node01
Bring the node back online
kubectl uncordon node01