What’s actually slowing this PC down?

Pick the symptom - the matching free tool is one click away.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

If a Kubernetes Pod is stuck in Pending, start with its Events. Run kubectl describe pod POD -n NAMESPACE and read the newest scheduling event. A FailedScheduling message means the scheduler tried to place the Pod but could not find a suitable node for that attempt. If the Pod has scheduling gates, however, the scheduler may not have considered it yet.

1. Confirm the Pod and inspect its Events

Check the Pod’s status, age, namespace, and whether a node has been assigned. Then inspect its details and recent events:

kubectl get pod POD -n NAMESPACE -o wide
kubectl describe pod POD -n NAMESPACE

In the describe output, find the Events section and examine the newest event’s Reason, From, and Message. The Kubernetes Pod debugging guide uses kubectl describe to investigate a Pod and shows a FailedScheduling event with node-level fit details.

Events describe what happened at a particular point in time. They can recur as cluster conditions change, so use the latest message alongside the current Pod specification and node state rather than treating an older event as a permanent diagnosis.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.
#1 Best Overall

Query Events in the right namespace

Events are namespaced. To list Events for the affected Pod’s namespace, run:

kubectl get events -n NAMESPACE

To look for a broader pattern across namespaces, run:

kubectl get events --all-namespaces

The Kubernetes debugging documentation notes that Events can be retrieved across all namespaces with this flag.

2. Interpret FailedScheduling: resources or placement rules?

FailedScheduling commonly means no eligible node currently fits the Pod’s resource requests or placement requirements. The scheduler filters for valid Nodes based on constraints and available resources, then selects and binds a node; a Pod’s requests and the resources already requested by workloads on each eligible node matter. See the Kubernetes resource management documentation and kube-scheduler reference.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

Translate the event message into a specific check. A message about insufficient CPU points to a resource-fit problem; memory may also be a limiting resource. Other messages can point to node labels, taints, or constraints that rule out otherwise available nodes.

Check resource requests against eligible node capacity

Review the Pod’s container resource requests and compare them with the allocatable capacity and already-requested resources on nodes that meet its placement rules. The relevant comparison is not simply the node’s total capacity: the scheduler must find an eligible node with room for the Pod’s requests. CPU and memory are common resource dimensions. Kubernetes’ resource management guide illustrates a scheduling failure caused by insufficient CPU.

If the requests are higher than the workload needs, right-sizing them may help, but lowering requests changes what the scheduler reserves for the Pod and can affect workload performance under contention. If the requests are appropriate, adding eligible capacity may be more suitable, though it has operational and infrastructure costs. Choose based on the workload’s requirements and the event details rather than changing requests as a default fix.

Check constraints that make nodes ineligible

Inspect the Pod and relevant Nodes for:

  • nodeSelector and required node affinity, which restrict placement by node labels.
  • Taints on Nodes and matching Pod tolerations.
  • Topology spread constraints that influence placement across topology domains.
  • A custom scheduler selection, if the Pod specifies one.

These rules change which nodes qualify, even when a cluster has free resources. If a selector or other constraint is unintended, correcting it can expand the eligible set; relaxing a deliberate rule may undermine placement, isolation, or availability goals. Verify the intended policy before changing it.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

3. Check whether a scheduling gate is holding the Pod

A Pod can be Pending because it is intentionally withheld from scheduling, not because the scheduler tried and failed to place it. Check whether the Pod specification contains .spec.schedulingGates:

kubectl get pod POD -n NAMESPACE -o yaml

Look for spec.schedulingGates. While gates remain, the Pod is not ready for the scheduler to consider. Kubernetes documents Pod Scheduling Readiness as stable since v1.30; its scheduling readiness documentation explains that removing all gates marks the Pod ready for scheduling. A gate owner should remove its gate only when the corresponding prerequisite has been met.

This distinction matters: a gated Pod has not yet undergone the ordinary placement attempt, while an unschedulable result means the scheduler attempted placement and found no suitable node for that attempt.

Independent reader supportYour contribution helps us test, update, and keep practical guides available for everyone.Support on Ko-Fi

4. Inspect scheduler logs when Events are not enough

Use scheduler logs when the Pod’s Events are missing, ambiguous, or insufficient to explain a recurring issue. Look around the time of the scheduling attempt for component-level context. Kubernetes’ cluster troubleshooting guide documents /var/log/kube-scheduler.log on control-plane nodes and notes that systemd-based systems may require journalctl.

Free tools Windows power users keep installed

One-click scans. No signup required.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

How to retrieve those logs depends on the cluster. Scheduler components can run as static Pods, and their output may be collected by a centralized logging system. Access permissions and provider-managed control planes may also limit what you can inspect directly. Kubernetes’ logging architecture documentation describes component logging approaches; follow the instructions for your distribution or managed service rather than assuming control-plane host access.

5. Use scheduler metrics to investigate broader patterns

For a recurring problem or a cluster-wide pattern, scheduler metrics can supplement the evidence from an individual Pod’s Events and specification. The Kubernetes system metrics documentation describes scheduling-attempt metrics and distinguishes an unschedulable result from an internal error outcome.

Metrics can help determine whether scheduling outcomes are recurring or widespread, but they do not explain a particular Pod’s eligibility on their own. Use the event message and Pod specification to diagnose an individual failure, then use metrics to understand its wider context.

Product prices and availability are accurate as of the date/time indicated and are subject to change. Any price and availability information displayed on Amazon at the time of purchase will apply.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.