Main Causes of Pod Pending Status

368 단어·2 분·원문(.md)

When Scheduling to a Node is Impossible #

Specific Causes

  • CPU/memory request values are larger than the node's available capacity.
  • No node matches the nodeSelector or affinity conditions.
  • The node has taints applied, and the pod does not have tolerations configured.

Solutions

  • Check CPU/memory availability with kubectl describe node and adjust requests.
  • Remove or relax overly restrictive nodeSelector or affinity configurations.
  • Add tolerations if you intend to schedule pods on tainted nodes.
  • If necessary, it's often easier to simply increase the number of schedulable nodes through scale-out.

When Image Pull is Impossible #

  • Incorrect image or tag
  • Private registry authentication failed
  • Registry network timeout

Solutions

  • Check for ErrImagePull, ImagePullBackOff in kubectl describe pod events.
  • Verify image path and tag location (this can be tricky if you hit it ;)).
  • If it's a private registry, imagePullSecret must be configured.
  • If it's a network issue, try pinging and curling the registry from within the cluster.

PVC Binding Failure #

  • StorageClass requested by PVC does not exist.
  • PV capacity/access mode mismatch.
  • Provisioning delayed due to EBS/CSI controller error.

Solutions

  • Check if the status is 'Bound' with kubectl get pvc -n ns.
  • Specify the correct StorageClass name.
  • Verify that AccessMode matches the PV.
  • In an EKS/EBS environment, check the CSI driver status. kubectl get pods- n kube-system | grep csi

When using EBS in EKS, the EBS CSI Driver is responsible for actually creating EBS volumes and attaching/mounting PVs to pods, so check if it's experiencing issues.

CSI = Container Storage Interface The standard interface Kubernetes uses to attach external storage (e.g., AWS EBS, NFS, Ceph, iSCSI, etc.).

Namespace ResourceQuota or LimitRange Conflicts #

  • Total CPU/memory allowed by the namespace exceeded.
  • Pod's request/limit values do not align with LimitRange.

Solutions

  • Check for exceeding limits with kubectl describe quota -n <ns>.
  • Adjust Pod requests/limits to be within the quota/limitrange.
  • Clean up pods consuming unnecessary resources.

LimitRange enforces maximum and minimum request-limit rules that pod containers must adhere to within a namespace; if these are not met, pod creation will fail.

ResourceQuota limits resource usage for an entire namespace, including total CPU/memory, number of PVCs, and number of pods.

It's helpful to distinguish between 'per-pod' and 'per-namespace' units.

SRE/question/q_1.md