Hardware FixRecommendedDevice not working? Your driver may be the problemCheck updates for common hardware issues.Fix DriversHalloween DealsAmazon USHalloween week deals: useful picks before month-endAmazon US: current deals, useful picks and tech finds.Check DealsSlow PC?RecommendedPC slow today? Run a repair scan before it gets worseResolve common Windows issues and optimize system performance.Scan Now×
FREEDOM251

Freedom251 › Blog › CPU

How to Fix Kubernetes Pods Stuck in Pending Because of Insufficient CPU or Memory

By Freedom251 Team · · 5 min read

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

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.

  1. Find the Pod and its namespace if needed: kubectl get pods -A.

    Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.
  2. Inspect its details and Events: kubectl describe pod <pod-name> -n <namespace>.

    #1 Best Overall
  3. Look for a FailedScheduling event and read the full message. Messages such as Insufficient cpu and Insufficient memory indicate 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.

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

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.

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

Capacity 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.

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

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.

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.Support on Ko-Fi

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

  1. 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.
  2. Check the Pod again with kubectl describe pod <pod-name> -n <namespace> and review the newest Events.

  3. If FailedScheduling continues, 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.

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.

CPUKubernetesMemoryPodsTroubleshooting

Leave a Reply

Your email address will not be published. Required fields are marked *

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

Recommended PC Tool
Recommended PC Tool
Outdated Drivers Are Slowing You DownFree scan - exact matches
Windows Errors? Fix Them Before They SpreadFree repair scan

Two free Windows tools

One Free Minute Could Fix That PC

Before you go - each of these free tools takes about a minute and tackles what quietly slows a Windows PC down.

Special offer. View Outbyte info, uninstall instructions, EULA, and Privacy Policy.