If a Pod is stuck in Pending with a FailedScheduling event that says Insufficient cpu or Insufficient memory, the scheduler cannot find an eligible node with enough uncommitted allocatable resources to meet its requests. Inspect the event first, then compare the Pod’s requests with node capacity and eligibility. Lower a request only when it is genuinely larger than the workload needs; otherwise free capacity or add suitable nodes.
Confirm that resource fit is the reason the Pod is Pending
Pending does not, by itself, mean the cluster is short on CPU or memory. A Pod can be Pending for other reasons, so use its Events to identify the scheduler’s actual complaint before changing resource settings.
As an Amazon Associate I earn from qualifying purchases.
-
Find the Pod and its namespace if needed:
kubectl get pods -A.Recommended Free Tools
Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy. -
Inspect its details and Events:
kubectl describe pod <pod-name> -n <namespace>.#1 Best Overall
-
Look for a
FailedSchedulingevent and read the full message. Messages such asInsufficient cpuandInsufficient memoryindicate that the scheduler could not find a fitting node. Repeated events mean no placement was available during those attempts.
If the event names a different cause, investigate that cause rather than assuming resource shortage. A container that has already been scheduled but fails to start is a different problem from a Pod that the scheduler cannot place. See Kubernetes’ guide to debugging a running Pod and its general Pod debugging guide.
Why low CPU or memory usage may not help
Kubernetes schedules a Pod using its resource requests, not a snapshot of how much CPU or memory running containers happen to be using at that moment. The scheduler checks whether a node can accommodate the Pod’s requested resources alongside requests already assigned there. Kubernetes explains that a Pod remains Pending while its resource request cannot be satisfied in its resource management documentation.
For that reason, a node that looks idle in a usage monitor may still fail the scheduler’s request-fit check. Conversely, actual usage above a request does not automatically count as additional reserved capacity in that check. Requests should reflect the workload’s needs; reducing one just to get a Pod placed can weaken the resource assurance the request provides.
Requests and limits do different jobs
Requests inform scheduling. Limits govern resource use for running containers through the kubelet and runtime. If an event reports insufficient CPU or memory, changing only a limit does not make the Pod’s request fit on a node. Check the request in the Pod specification and its workload configuration before editing either value.
Memory behavior can also differ from the scheduler’s reservation accounting. For example, a memory-backed emptyDir can consume memory, while usage above a request is not counted as extra scheduler reservation. Treat this as a runtime capacity and safety concern, not as the direct remedy for a FailedScheduling event.
Compare the Pod’s requests with node Allocatable
Run kubectl describe nodes to inspect node resource details. Compare the Pod’s effective CPU and memory requests with each candidate node’s Allocatable resources and the resource allocation information for Pods already scheduled there.
Do these 3 things before closing this tab:
1Repair Windows errors before they cause bigger problems2Scan for outdated or missing drivers - takes under a minute3Clear out junk files and repair common Windows errorsCapacity is the node’s total resource amount. Allocatable is the amount available to normal Pods after applicable system reservations. Therefore, a Pod may not fit even when the node’s total Capacity appears large enough. Kubernetes documents node resource status and allocatable reservations in its node status reference and node allocatable guide. Its guidance states that “The scheduler does not over-subscribe ‘Allocatable’.”
Check the request for every container in the Pod, not just the container you suspect. The scheduler evaluates the Pod’s resource needs as a whole. The CPU assignment examples and memory assignment examples show how these resource settings are expressed.
Work out whether the shortage is per-node, cluster-wide, or about eligibility
The request is too large for every available node
A Pod cannot be placed if its request exceeds what every eligible node can offer, even if the cluster appears to have enough free resources in aggregate. Cluster-wide spare capacity is not interchangeable when no single eligible node can satisfy the request. The available amount to compare is each node’s Allocatable capacity after existing requests, not its total Capacity.
If the workload truly needs that much CPU or memory, it needs a node with enough allocatable resources. If the request is higher than the workload requires, right-sizing may make it fit, but validate that change against the application’s needs first.
The Tool Desk
Outbyte PC Repair FREERepair Windows errors before they cause bigger problemsFix Now →Outbyte Driver Updater FREEScan for outdated or missing drivers - takes under a minuteDriver Scan →Eligible nodes are short on allocatable resources
If the request could fit on a node in principle but no eligible node currently has enough uncommitted allocatable resources, the cluster may be saturated. Review the Pods occupying capacity and whether any are no longer needed. Kubernetes’ resource usage troubleshooting guide covers inspecting resource use and allocation.
Best Value
Nodes with resources may still be ineligible
Resource fit is not the only scheduling condition. A node with enough CPU and memory may be excluded by a taint the Pod does not tolerate. Check the node’s taints and the Pod’s tolerations before concluding that every node is resource-saturated. A resource remedy will not solve an eligibility mismatch.
Independent reader supportYour contribution helps us test, update, and keep practical guides available for everyone.Choose the least disruptive fix that matches the cause
| Remedy | When it fits | Trade-off |
|---|---|---|
| Correct an unnecessarily high request | The configured request exceeds the workload’s justified needs, and a lower value would fit an eligible node. | Can permit placement without adding capacity, but changes the scheduler’s reservation assumption. Validate workload requirements rather than lowering requests blindly. |
| Terminate unneeded Pods or scale down replicas | Existing workloads consume capacity and can safely be removed or reduced. | Can free capacity sooner than provisioning nodes, but removes Pods or replicas and may affect service capacity. |
| Add suitable nodes | Workload requests are appropriate, but existing eligible nodes lack capacity or none is large enough to fit the Pod. | Adds durable capacity but requires infrastructure and operational work. The new nodes must be eligible for the Pod. |
| Resolve node eligibility constraints | Nodes have resources but taints prevent the Pod from using them. | Correcting a taint or toleration mismatch can open placement options, but only do so when the intended workload should be allowed on those nodes. |
Which option is fastest depends on the cluster. Freeing resources or correcting a clearly inflated request may take effect before new nodes can be provisioned and joined. Adding nodes is appropriate when the workload needs the requested capacity, but it is not a fix if the new nodes remain ineligible.
Recheck scheduling after making a change
-
Apply the selected change through the configuration that manages the workload, if applicable, so it is not overwritten by a later rollout.
Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy. -
Check the Pod again with
kubectl describe pod <pod-name> -n <namespace>and review the newest Events. -
If
FailedSchedulingcontinues, read the updated message and repeat the fit and eligibility checks. A change may address one shortage without making any node eligible or providing enough capacity for the full request.
Kubernetes’ scheduling documentation describes the unscheduled state: if the scheduler cannot find a node where a Pod can fit, the Pod remains unscheduled until a place can be found.
Quick Recap
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.

