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

iTechGuides is reader-supported. When you buy through links on our site, we may earn an affiliate commission. As an Amazon Associate I earn from qualifying purchases. Learn more

Why is my Kubernetes pod stuck in Pending waiting for a GPU? Start with the Pod’s latest FailedScheduling event. It usually states whether no node has the requested GPU resource or whether labels, affinity, taints, topology, or another scheduling condition excludes otherwise capable nodes. Then verify the exact GPU resource name and quantity, compare node capacity with allocatable devices, and check the driver and device-plugin deployment. Buying more hardware will not correct a scheduler configuration error.

What “Pending” means for a GPU Pod

A Pod in Pending has been accepted by the API server but is not yet running on a node. For a GPU workload, the scheduler must find a node that simultaneously satisfies the Pod’s resource request and every placement rule. A cluster can contain GPU-equipped machines while the Pod remains pending if those machines advertise a different resource name, have no free allocatable device, carry an untolerated taint, or fail the Pod’s selectors or affinity rules.

Do not confuse a scheduling wait with a later runtime failure. Once a Pod has a node assignment, it has passed scheduling; failures such as a container runtime error, missing libraries, or an application crash require a different investigation.

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

Run this evidence-first triage

  1. Identify the namespace and node assignment. Replace the placeholders with the actual values:
    kubectl get pod <pod> -n <namespace> -o wide

    A blank NODE column normally means the Pod has not been scheduled.

  2. Read the complete description and Events section.
    kubectl describe pod <pod> -n <namespace>

    Look at the newest events first, especially messages beginning with FailedScheduling. Kubernetes emits scheduling events while an unschedulable Pod remains pending.

  3. Record the exact resource key and quantity in the Pod spec. Check the rendered object rather than relying on a Helm value or a local file:
    kubectl get pod <pod> -n <namespace> -o yaml

    Inspect spec.containers[].resources.limits and, if present, requests.

  4. List node capacity and allocatable resources.
    kubectl get nodes
    kubectl describe node <node>

    In the output, compare Capacity and Allocatable, and inspect the node’s labels and taints.

  5. Check the GPU driver and device-plugin Pods. Find the DaemonSet and its Pods in the namespace used by your platform, then inspect status and logs:
    kubectl get daemonsets,pods -A
    kubectl describe pod <device-plugin-pod> -n <plugin-namespace>
    kubectl logs <device-plugin-pod> -n <plugin-namespace>

    Use the actual names from your installation; vendors and distributions choose different namespaces and labels.

Capture the event text before changing anything. A message such as Insufficient nvidia.com/gpu points to resource fit; a message naming NodeAffinity or TaintToleration points to placement filtering. The distinction determines the next command.

#1 Best Overall
Sale
Compressed Air Duster,130000RPM Super Power Cordless Air Duster,Rechargeable Brushless Blower,3 Gear Adjustable Blower with LED Light,Dust Remover for Computer/House/Outdoor/Car
  • Powerful Turbo Fan:CAGIWIRU Electric Air Duster have reached speed up to 130000RPM,Can efficient remove dust and debris.With LED light and Three Adjustable Speed to meet with different cleaning tasks.
  • With Attached USB C Fasting Charging cable.Charing 3 hours,Enjoy up to 240 minutes of use on the lowest setting, For third speed can use for 25mins.with four charging options to meet with your needs.
  • Wide Application: attached 5 different nozzles,making it suitable for a variety of scenes, such as car,pet, pc, keyboards, and other electronic devices. It also serves for office and home clean duster.
  • Handy Design & Portable:Cordless air duster electric nozzle is Light weight and small size, design and comfortable to hold and space saving, convenient to carry around. You can put it in your room or inside the car without taking up space.
  • Economical &Reusable: Built durable materials with a long-lasting battery,our CAGIWIRU air duster it's a sustainable alternative to disposable air cans.

Verify the GPU resource request

Use the resource name the node actually advertises

In the traditional device-plugin model, a vendor plugin registers an extended integer resource with kubelet. Common names include nvidia.com/gpu and amd.com/gpu, but your cluster may expose a different vendor-specific key. Copy the key exactly, including punctuation and capitalization, from the node’s resource list. A request for gpu does not match nvidia.com/gpu.

Extended device resources are integer resources. They cannot be overcommitted, so a request for two devices requires two allocatable devices on one eligible node; Kubernetes cannot split a fractional device between Pods.

Put the GPU in limits

Kubernetes’ GPU scheduling documentation states: “GPUs are only supposed to be specified in the limits section.” A GPU limit can be used without a separate request. If both fields are set, they must be equal; a request without a limit is unsupported for this resource type.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.
apiVersion: v1
kind: Pod
metadata:
  name: gpu-check
spec:
  restartPolicy: Never
  containers:
  - name: workload
    image: your-image:tag
    resources:
      limits:
        nvidia.com/gpu: 1

The example is valid only if a node advertises nvidia.com/gpu. Substitute the key reported by your cluster. Do not assume that changing the image, command, or CPU request will create a missing GPU resource.

Check quantity and hidden defaults

Compare the requested count with each eligible node’s allocatable count. A Pod requesting four GPUs cannot fit on a node with two, even when the cluster has several two-GPU nodes; standard extended resources are allocated on a single node. Also inspect admission-generated fields and the final Pod YAML, because a mutating webhook, chart value, or sidecar may add an unexpected GPU request.

Check capacity, allocatable devices, and health

Understand capacity versus allocatable

When a device plugin registers devices, kubelet reports them in the node status. Capacity is the total registered count; Allocatable is what the scheduler can assign after kubelet reservations and device health are applied. A quick view of node status is:

Rank #2
EVEO® Screen Cleaner Spray Kit (Streak-Free) TV Screen Cleaner for Smart TV, Lcd, LEd, Oled | Computer Screen Cleaner Spray and Wipe Microfiber Cloth - TV, Monitor, Laptop, iPad, Car - 6.7oz 1 Pack
  • Screen Cleaner is Your Screen’s New Bestfriend! - EVEO is proud to present a screen cleaner that’s perfectly suited for your TV. Meet your new screen cleaner, computer screen cleaner, laptop cleaner, iPad cleaner, Macbook,tv cleaner or any other electronic device. Our screen cleaner spray and wipe along with the included plush microfiber cloth, easily removes dust, fingerprints & other smudges on the screen’s surface. Clean effectively for a streak-free screen
  • Gentle on your Screens - Our screen cleaner spray and wipes is compatible to be used even for the most sensitive LCD, LED, CRT, and OLED screens in proper use. Be at ease knowing that this product is compatible with all the major brands: LG, SONY, Samsung, Sharp, iPad, iPhone, Android screens, Kindle, PC monitors - we’ve got you covered! Can be used as LCD screen cleaner, tv cleaner, smart tv screen cleaner, and more
  • Premium Super Soft Plush Microfiber Cloth - Included in this efficient screen cleaning kit. This screen cleaner spray and wipe has our signature plush microfiber cloth specially designed to comply with screens and monitors and leave them streak-free. Has been shown to effectively absorbs stubborn stains, zero streaks, and no fiber shedding. Always use this together with our screen cleaner for the best results
  • Easy-to-Use Screen Cleaner Kit + microfiber cleaning cloth - The EVEO Screen Cleaning Kit will easily be your new favorite tool when it comes to taking care of the things you love most, quick and easy solution for a streak-free screen. Simply screw on the sprayer gun on the screen cleaner bottle. Spray the cleaning liquid onto the microfiber cloth, then wipe the screen until desired cleanliness & shine is achieved.
  • Quality Screen Care Kit Worth Purchasing - Enjoy a convenient Screen Cleaner anytime, anywhere you need it. Your satisfaction is our top priority. We stand behind the quality of our products and that’s why, you shouldn’t be worrying at all. We manufacture the Best Screen Cleaner. and can be used for laptop cleaning kit, laptop screen cleaner, tv screen cleaner for smart tv. MacBook screen cleaner, monitor cleaner or screen cleaner spray for electronic devices with microfiber cleaning cloth
kubectl get node <node> -o json

Search the returned status.capacity and status.allocatable maps for the exact GPU key. You can also use kubectl describe node <node> for a readable report.

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

Interpret a capacity/allocatable mismatch

  • Both fields show no GPU key: kubelet has not received a registered resource. Investigate drivers, the plugin DaemonSet, registration, and plugin logs before editing the Pod.
  • Capacity is positive but allocatable is lower: some devices may be assigned, reserved, or marked unhealthy. Check existing Pods and plugin health reporting.
  • Allocatable is positive but no free device remains: the scheduler may report Insufficient <vendor>/gpu. Remove only workloads you intentionally no longer need; do not delete running GPU jobs as a diagnostic shortcut.

When a device is marked unhealthy, the allocatable count can fall while capacity stays unchanged. That state explains why a new Pod cannot obtain a device even though the node still appears to have the original hardware count.

Check every eligible node, not only one

Run the node inspection across the cluster. A GPU may be available on a node that fails another filter, so the event can still report an apparent shortage. Resource fit and placement rules are evaluated together; confirm both before adding machines.

Find placement rules that filter out GPU nodes

Node selectors and required affinity

Inspect spec.nodeSelector and spec.affinity.nodeAffinity in the Pod. Required rules must match labels exactly, including values such as GPU model, operating system, zone, or accelerator class. Compare them with:

kubectl get nodes --show-labels
kubectl get node <node> --show-labels

A typo, a label removed during node provisioning, or a requirement for a model absent from the cluster can leave zero eligible nodes even when GPUs are idle. Required node affinity is a hard filter; preferred affinity influences ranking but does not by itself make a node ineligible.

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

Taints and tolerations

GPU nodes are often tainted so general workloads do not consume accelerator capacity. Display taints with:

Rank #3
Sale
BladeHawks RGB Gaming Mouse Pad Extra Large Extended 31.5x12 Inch-Black | LED mouse pad with 14 lighting modes, covers keyboard & mouse, anti-slip rubber base, waterproof surface, USB powered
  • 【Large size】:Measuring 800 x 300 mm/ 31. 5×12 inches, which is wider and taller than others. Large mouse pad can perfectly fit your keyboard and mouse of any size, and there is also ample space for peripherals such as phones, tablets, etc.
  • 【LED backlight mouse pad】:Blade Hawks RGB mouse pad provides 7 static modes and 7 dynamic modes will give you the options you are looking for. Power-off memory function remembers the last lighting mode you selected. The super glow fiber Chroma will give you a colorful gaming setup that you want.
  • 【Anti-slip rubber base】:Made from Natural rubber, this gaming mousepad will firmly grip your desktop, allowing you to enjoy the ultimate precision in the games you are most passionate about. It also comes with a texture that enhances this ability even further.
  • 【Smooth and waterproof surface】: Micro-textured cloth surface, for extremely precise mouse control and a smooth movement. When liquid splashes on the gaming mouse pad, it forms water droplets and slides down. Will not delay your work or gameplay.
  • 【Plug and play】: This mouse and keyboard pad is powered by USB, plug and play, no driver required. One button control light modes. Press one time to change the lighting mode, press twice to change the brightness, press and hold about 3 seconds turn ON/OFF.
kubectl describe node <node>

For every NoSchedule or NoExecute taint that should be tolerated, add a matching toleration to the Pod. The key, effect, and operator semantics must match. A toleration does not force placement on that node; it only prevents the corresponding taint from filtering it out.

spec:
  tolerations:
  - key: "accelerator"
    operator: "Equal"
    value: "gpu"
    effect: "NoSchedule"

Use the taint actually shown on your node instead of copying this illustrative value.

Other scheduler filters

The scheduler’s NodeResourcesFit, NodeAffinity, and TaintToleration plugins commonly explain GPU placement failures. Pod anti-affinity, inter-Pod affinity, topology spread constraints, host-port conflicts, and volume topology can also remove candidates. The event message may list several filter reasons; fix the one that applies to the current Pod rather than broadly disabling scheduling rules.

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.

Interpret common scheduling messages

Event or symptom What it suggests Next check
Insufficient nvidia.com/gpu (or another vendor key) The requested integer quantity does not fit on any currently eligible node. Verify the exact key and count, then compare allocatable devices on nodes that also satisfy selectors, affinity, taints, and topology.
No GPU key in node capacity The resource was not advertised to kubelet. Check vendor drivers, device-plugin registration, DaemonSet readiness, and plugin logs.
node(s) didn't match Pod's node affinity/selector GPU nodes exist but their labels do not satisfy a required rule. Compare the rule with live node labels; correct either the label source or the Pod requirement.
node(s) had untolerated taint A tainted GPU node was filtered out. Inspect the node taint and add a narrowly scoped matching toleration if the workload is allowed there.
TopologyAffinityError A node-local or topology-manager constraint rejected the request, possibly because local resources are insufficient. Inspect Pod events, kubelet logs, node topology-manager policy, and device locality.
Pod has a scheduling gate The Pod was deliberately withheld from scheduling. Inspect spec.schedulingGates and the controller or admission component responsible for removing the gate.

The first row does not prove that the entire cluster lacks GPUs. It may mean that GPUs are available only on nodes excluded by another filter. Confirm the node configuration and the full event message.

Investigate scheduling gates and Pod Scheduling Readiness

A scheduling gate intentionally keeps a Pod out of the scheduler’s consideration until another component declares it ready. Inspect the field directly:

kubectl get pod <pod> -n <namespace> -o jsonpath='{.spec.schedulingGates}'

If gates are present, identify the controller, admission webhook, or workflow that added them. Removing a gate manually can bypass a required preparation step and create a different failure, so use the owning system’s documented procedure. Pod Scheduling Readiness is stable from Kubernetes v1.30; older clusters or older controllers may not support the same behavior. Confirm the cluster version before relying on this field.

Rank #4
Sale
Vaydeer Wrist Rest for Keyboard and Mouse, Computer Ergonomic Wrist Support Pad, Soft Memory Foam Arm Cushion for Desk, Palm Hand Office Laptop Typing
  • 【Softer and More Comfortable】Vaydeer wrist rest has unique diamond pattern, which is the combination of softness and aesthetics. The materials of wrist rest are improved into higher quality memory foam and covered with silky smooth lycra. The computer wrist rest makes you as comfortable and cushiony as like rest your wrists on clouds.
  • 【Ergonomic Wrist Saver】The wrist rests for keyboard and mouse comes with a 17.32×3.15×0.83 inch keyboard wrist pad and a 5.94×3.15×0.83 inch mouse wrist support. Based on ergonomic design, the unique concave shape is the perfect fit for your wrist joints. The wrist rest pad fits most computer keyboards and laptops, improve hand and wrist posture, release your wrist and arm stress.
  • 【Non-Slip Rubber Bottom】Featuring an anti-skid silicone base on the bottom, this wrist keyboard support stays firmly in place on your desk, preventing the padding from sliding around, ensuring stable and consistent wrist support during extended computer sessions.
  • 【Better Experience & Pain Relief】Our keyboard arm rest is beneficial to alleviate the soreness caused by direct contact and friction between your arm and a hard desk surface, reducing the risk of wrist fatigue or carpal tunnel. The soft texture of memory foam can evenly distribute the pressure around your wrists and provide good support with just enough give.
  • 【Helpful in Multiple Scenarios】Whether you're working, studying, writing, typing, gaming, this keyboard and mouse rest combo is an essential accessory to add comfort and support to your hands and wrists. It’s also a great gift for men, women, family, friend, coworker, gamer, teacher, etc.

Resolve topology-related GPU waits

TopologyAffinityError is not the same as a generic cluster-wide GPU shortage. Kubernetes can reject a request when a node does not have enough resources in the required topology locality or when the kubelet’s topology-manager policy rejects the combination of devices. This is especially relevant when CPUs, hugepages, network devices, and GPUs must be aligned on the same NUMA domain.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.
  1. Read the Pod’s Events and status for the exact topology error.
  2. Identify the node candidates and inspect kubelet logs on those nodes.
  3. Check the node’s topology-manager policy and the device plugin’s topology information.
  4. Reduce or change the locality requirement only if the workload permits it; otherwise place the Pod on a node whose local device layout satisfies the request.

Do not “fix” a topology error by merely increasing the cluster’s total GPU count. Additional devices in another NUMA domain or zone may not satisfy the Pod’s locality requirement.

If the cluster uses DRA, inspect claims and preparation

Clusters using Kubernetes Dynamic Resource Allocation (DRA) do not necessarily represent an accelerator as a traditional extended resource in the Pod. The Pod can reference a ResourceClaim, while a DRA driver selects, binds, and prepares the device. Inspect the Pod and its claims:

kubectl get pod <pod> -n <namespace> -o yaml
kubectl get resourceclaim -A
kubectl describe resourceclaim <claim> -n <namespace>

Look for an unbound claim, a driver that is not running, or a device-preparation condition that has failed or not completed. The claim’s events and conditions are more useful than changing a conventional nvidia.com/gpu limit when the workload is intentionally using DRA.

DRA device-binding conditions are documented as beta in Kubernetes v1.36 documentation. Feature gates, API versions, and driver support must match the actual cluster; do not apply a DRA manifest copied from a newer release to an older control plane without checking compatibility.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.
Independent reader supportYour contribution helps us test, update, and keep practical guides available for everyone.Support on Ko-Fi

Repair missing or unhealthy device-plugin advertisement

Confirm the drivers are installed on every intended node

Kubernetes relies on the vendor’s host driver and a corresponding device plugin. A container image containing GPU libraries cannot create a node resource if the host driver is absent or unusable. Check the node’s driver status using your vendor’s supported diagnostic command and inspect kernel or kubelet logs when the plugin cannot initialize.

Best Value
Sale
Under Desk Cable Management Tray No Drill, Metal Mesh Cable Management Under Desk with Clamp Mount, 2 Hole Cable Tray with Wire Management and Cord Organizer for Home Office Standing Desk
  • 【No Drill Mounted】Cable management tray can be assembled in as little as 3 minutes or less-simply. Side clips easily clampe the edge of desk, pass through the holes on the sides, and secure excess cables with baskets. Desk cable management supports inward or outward installation to meet your needs in different scenarios, and provides you with great convenience when collecting and organizing wires.
  • 【Rubber Pad Protects Desk】Wire organizer under desk built-in soft rubber pads on the clamp protect your desk from scratches, so you will not damage your furniture or office.
  • 【Sturdy and Beautiful】Cord management under desk is made of high-quality carbon steel and holds about 15 lbs. The wire basket has 2 holes on each side of the tray to enable your cables to pass freely. Cable baskets are suitable for desk thickness use from 0.4" to 2.4".
  • 【Space Saving & Keep Organized】Desk cable management tray holds all your power cords, outlet strips, USB hubs and computer transformers hidden from your feet, and the data cables will not enter the vacuum cleaner to keep your desk clean and tidy. Desk wire organizer is also suitable for use in the kitchen and outdoors.
  • 【Reduce Safety Risks】Cable tray under desk keeps all plugs away from your kids, no more worry about tripping. Using 2 holes wire tray saves extra space, helps you easily cabling and wire protection. The mesh design is not easy to accumulate dust, but avoids safety accidents caused by messy wires.

Check the DaemonSet and registration

A device-plugin DaemonSet should run on each node intended to host that GPU type. Verify that its Pods are scheduled, ready, and not repeatedly restarting:

kubectl get daemonsets -A
kubectl get pods -A -o wide
kubectl describe pod <device-plugin-pod> -n <plugin-namespace>
kubectl logs <device-plugin-pod> -n <plugin-namespace> --all-containers

The device-plugin framework lets a plugin register with kubelet, list devices, and report health changes. Registration errors, permission problems, incompatible driver versions, or a failed health check can prevent the GPU key from appearing or can reduce allocatable devices. Resolve the plugin’s reported error, then verify node status again; restarting the workload alone does not refresh a missing registration.

Account for version-sensitive health fields

Device-resource health status is described as beta in Kubernetes v1.36 documentation. Field names and observability may differ on older clusters. Treat a missing health field as an availability limitation, not proof that every device is healthy; use node status, plugin logs, and the vendor’s diagnostics together.

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.

Separate scheduling from post-assignment failures

Run kubectl get pod -o wide again after each change. If a node name appears and the Pod moves to ContainerCreating, CrashLoopBackOff, or another post-scheduling state, stop applying scheduler fixes. Examine container events and logs instead:

kubectl describe pod <pod> -n <namespace>
kubectl logs <pod> -n <namespace> --all-containers
kubectl logs <pod> -n <namespace> --previous

At this stage, likely areas include runtime hooks, driver/library compatibility, permissions, image architecture, or an application-level CUDA error. An unhealthy device can affect an already assigned Pod differently from the scheduler’s allocatable count for new Pods, so correlate the failure with the assignment time and node health.

A practical decision path

  1. No node assigned: read the newest FailedScheduling event.
  2. Event says insufficient GPU: match the resource key and integer quantity, then compare allocatable devices on eligible nodes.
  3. Event names affinity, selector, taint, or spread: compare the Pod rules with live node labels, taints, and topology constraints.
  4. GPU key is absent from node status: troubleshoot host drivers, plugin registration, DaemonSet health, and device health.
  5. A scheduling gate is present: identify the component that owns and removes it.
  6. DRA is in use: inspect the ResourceClaim and DRA driver conditions rather than adding a legacy GPU limit.
  7. TopologyAffinityError appears: investigate kubelet topology policy and node-local device layout.
  8. A node is assigned: switch to runtime, driver, and application diagnostics.

This sequence keeps the evidence tied to the scheduler decision. It also prevents a common mistake: adding hardware when the real issue is an incorrect resource key, an untolerated taint, or a device plugin that never registered.

Version and feature checks

  • The core GPU scheduling and device-plugin framework is stable in Kubernetes v1.26 and later, but vendor driver and plugin compatibility still matters.
  • Pod Scheduling Readiness is stable from v1.30; verify the control-plane version and the controller that manages gates.
  • DRA device-binding conditions and device-resource health status are described as beta in v1.36 documentation; confirm feature support before depending on those fields.
  • Always compare examples with the API versions and feature gates enabled in your cluster. A command can succeed while a newer status field is unavailable, or a manifest can be rejected on an older release.

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.