---
title: "Why Is My Kubernetes Job Still Pending? Tracing Kueue Admission with Headlamp - Angryecho"
description: "By Utkarsh Raj (LFX Mentee, CNCF), René Dudfield (Microsoft), Kevin Hannon (Red Hat) | Wednesday, October 14, 2026 You submit a Kubernetes Job and wait for its…"
canonical_url: "https://www.angryecho.com/c/DevOps/p/P2TBBjkn28h28P7d8tdBW"
meta:
  "og:description": "By Utkarsh Raj (LFX Mentee, CNCF), René Dudfield (Microsoft), Kevin Hannon (Red Hat) | Wednesday, October 14, 2026 You submit a Kubernetes Job and wait for its…"
  "og:image": "https://www.angryecho.com/_og/d/c_Post%2Ctitle_~5ZCQ5qe9572R%2Cdescription_~5ZCQ5qe95LiA5LiL77yM5bCx5LiK5ZCQ5qe9572R44CC%2CpostId_P2TBBjkn28h28P7d8tdBW%2Crevision_~MjAyNi0xMC0yNVQwMjo1Nzo1MC4xODM3Nzla%2Cp_Ii9jL0Rldk9wcy9wL1AyVEJCamtuMjhoMjhQN2Q4dGRCVyI%2Cs_5ZjmmD939i8OpaO4.png"
  "og:image:height": "630"
  "og:image:type": image/png
  "og:image:width": "1200"
  "og:title": "Why Is My Kubernetes Job Still Pending? Tracing Kueue Admission with Headlamp"
---

> Index of every page on this site: [llms.txt](https://www.angryecho.com/llms.txt)

# **Why Is My Kubernetes Job Still Pending? Tracing Kueue Admission with Headlamp**

By **[Utkarsh Raj](https://github.com/utkarshrajpandey0001)**** (LFX Mentee, CNCF),** **[René Dudfield](https://github.com/illume)**** (Microsoft),** **[Kevin Hannon](https://github.com/kannon92)**** (Red Hat)** | Wednesday, October 14, 2026

You submit a [Kubernetes Job](https://kubernetes.io/docs/concepts/workloads/controllers/job/) and wait for its Pods to appear. A minute passes. Then another. The Job is still suspended, there are no application logs, and there may not even be a Pod to inspect.

In a cluster managed by [Kueue](https://kueue.sigs.k8s.io/), this can be completely normal. Kueue may still be deciding whether the Job can use the requested resources. The useful question is not only “Why is the Pod pending?” It is first “Has Kueue admitted the Workload?”

The [Kueue plugin for Headlamp](https://github.com/headlamp-k8s/plugins/tree/main/kueue) brings that investigation into the Headlamp UI. Instead of reconstructing the admission path from several commands and large YAML objects, you can begin with the Workload, read its condition message, and follow links through the LocalQueue, ClusterQueue, ResourceFlavor, and Cohort.

This article follows that Headlamp-first path. The command line appears only in a short optional section for reproducing the example.

## Before you begin

You need a Kubernetes cluster with [Kueue installed](https://kueue.sigs.k8s.io/docs/installation/), a [Headlamp installation](https://headlamp.dev/docs/latest/installation/), and the `[0.1.0-alpha](https://github.com/headlamp-k8s/plugins/tree/main/kueue/0.1.0-alpha)`[ Kueue plugin](https://github.com/headlamp-k8s/plugins/tree/main/kueue/0.1.0-alpha). Your Kubernetes identity must be allowed to read the Kueue resources used in this article.

The alpha release provides read-only views for Kueue `v1beta2` Cohorts, ClusterQueues, LocalQueues, ResourceFlavors, and Workloads. It does not add its own create, edit, stop, resume, or delete workflows. Headlamp still provides its standard YAML and resource actions where your permissions allow them.

## First, separate admission from Pod scheduling

Kueue and the Kubernetes scheduler answer different questions.

- Kueue admission: Should this Workload start now, considering queue policy, quota, ResourceFlavors, admission checks, and other waiting Workloads?
- Pod scheduling: After the Workload is admitted and the Job resumes, which nodes can run its Pods?

That boundary changes the investigation. If the Workload is not admitted, stay in the Kueue section of Headlamp. If it is admitted but its Pods are still `Pending`, move to Headlamp's normal Job and Pod views and inspect scheduler events.

![图片](https://kubernetes.io/blog/2026/10/14/tracing-kueue-admission-with-headlamp/kueue-admission-architecture.png)

Kueue admission architecture

## The Headlamp-first troubleshooting path

The quickest investigation starts with the Workload, not with a shell.

![图片](https://kubernetes.io/blog/2026/10/14/tracing-kueue-admission-with-headlamp/headlamp-kueue-troubleshooting-flow.png)

Tracing a pending Job through Headlamp

## Step 1: Open the Workloads view

In Headlamp, open **Kueue → Workloads**. Select the namespace that contains the Job, then find the Workload created for it.

Kueue creates a [Workload](https://kueue.sigs.k8s.io/docs/concepts/workload/) to represent the resource request and admission state of a Job. In the alpha plugin, owner references are shown as `Kind/name` text but are not yet clickable. The Workload name normally contains the Job name, so the namespace filter and table search are the simplest ways to locate it.

Before opening the detail page, the list already gives you a useful first scan:

- LocalQueue
- priority and priority class
- active state
- admitted state
- completion state
- a readable current status such as `Admitted`, `Finished`, or `Inadmissible`
- age

If there is no matching Workload, check three things before going further: the selected namespace, whether the Job was submitted to a LocalQueue, and whether your Kubernetes account can list Workloads. The plugin performs permission checks and displays an access message when the current identity cannot read a resource.

## Step 2: Read status, conditions, and events

Open the Workload. Start with its current status and [conditions](https://kueue.sigs.k8s.io/docs/tasks/troubleshooting/troubleshooting_jobs/#is-my-job-admitted), not with the full YAML.

For admission troubleshooting, the most important condition types are `QuotaReserved` and `Admitted`.

- `Admitted=True` means Kueue has admitted the Workload. The Job can resume, so any remaining `Pending` Pods belong to the scheduling branch of the investigation.
- `QuotaReserved=False` with a reason such as `Pending` means Kueue has not reserved quota. The condition message explains what prevented the reservation.
- An `Inadmissible` status means the Workload currently cannot fit the available queue configuration. A missing covered resource, unsuitable ResourceFlavor, stopped queue, or admission check can all lead you here.

For example, a condition message may report that Kueue could not assign a ResourceFlavor because the ClusterQueue has insufficient CPU quota. That message is the first real answer to “Why is my Job still pending?” The rest of the Headlamp journey explains the configuration behind it.

Also check the **Events** section. Conditions describe the current state; events help show what recently changed or what Kueue attempted.

## Step 3: Compare the Workload's request with its assignment

Stay on the Workload detail page and inspect the PodSets and resource requests. The plugin shows the requested Pod count, CPU, memory, and other resources that Kueue evaluates together.

This matters because a Job with `parallelism: 3` and a one-CPU request per Pod asks Kueue for three CPUs in total. Looking at only one Pod's template would underestimate the Workload.

If quota has already been reserved, the same page also shows the assigned ClusterQueue, ResourceFlavors, and admitted resource usage. If those admission assignments are absent, the Workload has not reached that point yet.

In our example, the Workload requests:

- three Pods
- three CPUs in total
- 600 MiB of memory in total

The next question is where that request entered Kueue.

## Step 4: Follow the linked LocalQueue

Use the [LocalQueue](https://kueue.sigs.k8s.io/docs/concepts/local_queue/) link on the Workload detail page. A LocalQueue is the namespace-level entry point used by the Job. It connects namespaced Workloads to a cluster-scoped ClusterQueue.

The LocalQueue page shows:

- its namespace and connected ClusterQueue
- stop policy and current status
- pending, reserving, and admitted Workload counts
- Kueue conditions and Kubernetes events
- related Workloads in the same namespace

This page answers two practical questions: Did the Job enter the queue you expected, and is it the only Workload waiting there?

If the LocalQueue is inactive or stopped, that may already explain the wait. If it is active, follow the linked ClusterQueue to inspect the capacity behind it.

（节选）

> 原文： [Kubernetes Blog｜Why Is My Kubernetes Job Still Pending? Tracing Kueue Admission with Headlamp](https://kubernetes.io/blog/2026/10/14/tracing-kueue-admission-with-headlamp/)，2026-10-15

排序方式 :

### **成为第一条评论！**

Nobody's responded to this post yet. Add your thoughts and get the conversation going.

```json
{"@context":"https://schema.org","@graph":[{"@id":"https://www.angryecho.com/c/DevOps/p/P2TBBjkn28h28P7d8tdBW#post","@type":"DiscussionForumPosting","commentCount":0,"dateModified":"2026-10-25T02:57:50.183Z","datePublished":"2026-10-14T18:35:00.000Z","description":"By Utkarsh Raj (LFX Mentee, CNCF), René Dudfield (Microsoft), Kevin Hannon (Red Hat) | Wednesday, October 14, 2026 You submit a Kubernetes Job and wait for its…","headline":"Why Is My Kubernetes Job Still Pending? Tracing Kueue Admission with Headlamp","isPartOf":"https://www.angryecho.com/c/DevOps","mainEntityOfPage":"https://www.angryecho.com/c/DevOps/p/P2TBBjkn28h28P7d8tdBW","text":"By Utkarsh Raj (LFX Mentee, CNCF), René Dudfield (Microsoft), Kevin Hannon (Red Hat) |\nWednesday, October 14, 2026\n\nYou submit a Kubernetes Job and\nwait for its Pods to appear. A minute passes. Then another. The Job is still suspended, there are no\napplication logs, and there may not even be a Pod to inspect.\n\nIn a cluster managed by Kueue, this can be completely normal. Kueue\nmay still be deciding whether the Job can use the requested resources. The useful question is not\nonly “Why is the Pod pending?” It is first “Has Kueue admitted the Workload?”\n\nThe Kueue plugin for Headlamp brings that\ninvestigation into the Headlamp UI. Instead of reconstructing the admission path from several\ncommands and large YAML objects, you can begin with the Workload, read its condition message, and\nfollow links through the LocalQueue, ClusterQueue, ResourceFlavor, and Cohort.\n\nThis article follows that Headlamp-first path. The command line appears only in a short optional\nsection for reproducing the example.\n\nBefore you begin\n\nYou need a Kubernetes cluster with Kueue installed,\na Headlamp installation, and the\n0.1.0-alpha Kueue plugin.\nYour Kubernetes identity must be allowed to read the Kueue resources used in this article.\n\nThe alpha release provides read-only views for Kueue v1beta2 Cohorts, ClusterQueues, LocalQueues,\nResourceFlavors, and Workloads. It does not add its own create, edit, stop, resume, or delete\nworkflows. Headlamp still provides its standard YAML and resource actions where your permissions\nallow them.\n\nFirst, separate admission from Pod scheduling\n\nKueue and the Kubernetes scheduler answer different questions.\n\n\n\n\n\nKueue admission: Should this Workload start now, considering queue policy, quota, ResourceFlavors,\nadmission checks, and other waiting Workloads?\n\n\n\nPod scheduling: After the Workload is admitted and the Job resumes, which nodes can run its Pods?\n\nThat boundary changes the investigation. If the Workload is not admitted, stay in the Kueue section\nof Headlamp. If it is admitted but its Pods are still Pending, move to Headlamp's normal Job and\nPod views and inspect scheduler events.\n\n\n\nKueue admission architecture\n\nThe Headlamp-first troubleshooting path\n\nThe quickest investigation starts with the Workload, not with a shell.\n\n\n\nTracing a pending Job through Headlamp\n\nStep 1: Open the Workloads view\n\nIn Headlamp, open Kueue → Workloads. Select the namespace that contains the Job, then find the\nWorkload created for it.\n\nKueue creates a Workload to represent the\nresource request and admission state of a Job. In the alpha plugin, owner references are shown as\nKind/name text but are not yet clickable. The Workload name normally contains the Job name, so the\nnamespace filter and table search are the simplest ways to locate it.\n\nBefore opening the detail page, the list already gives you a useful first scan:\n\n\n\n\n\nLocalQueue\n\n\n\npriority and priority class\n\n\n\nactive state\n\n\n\nadmitted state\n\n\n\ncompletion state\n\n\n\na readable current status such as Admitted, Finished, or Inadmissible\n\n\n\nage\n\nIf there is no matching Workload, check three things before going further: the selected namespace,\nwhether the Job was submitted to a LocalQueue, and whether your Kubernetes account can list\nWorkloads. The plugin performs permission checks and displays an access message when the current\nidentity cannot read a resource.\n\nStep 2: Read status, conditions, and events\n\nOpen the Workload. Start with its current status and\nconditions,\nnot with the full YAML.\n\nFor admission troubleshooting, the most important condition types are QuotaReserved and\nAdmitted.\n\n\n\n\n\nAdmitted=True means Kueue has admitted the Workload. The Job can resume, so any remaining\nPending Pods belong to the scheduling branch of the investigation.\n\n\n\nQuotaReserved=False with a reason such as Pending means Kueue has not reserved quota. The\ncondition message explains what prevented the reservation.\n\n\n\nAn Inadmissible status means the Workload currently cannot fit the available queue\nconfiguration. A missing covered resource, unsuitable ResourceFlavor, stopped queue, or admission\ncheck can all lead you here.\n\nFor example, a condition message may report that Kueue could not assign a ResourceFlavor because the\nClusterQueue has insufficient CPU quota. That message is the first real answer to “Why is my Job\nstill pending?” The rest of the Headlamp journey explains the configuration behind it.\n\nAlso check the Events section. Conditions describe the current state; events help show what\nrecently changed or what Kueue attempted.\n\nStep 3: Compare the Workload's request with its assignment\n\nStay on the Workload detail page and inspect the PodSets and resource requests. The plugin shows the\nrequested Pod count, CPU, memory, and other resources that Kueue evaluates together.\n\nThis matters because a Job with parallelism: 3 and a one-CPU request per Pod asks Kueue for three\nCPUs in total. Looking at only one Pod's template would underestimate the Workload.\n\nIf quota has already been reserved, the same page also shows the assigned ClusterQueue,\nResourceFlavors, and admitted resource usage. If those admission assignments are absent, the\nWorkload has not reached that point yet.\n\nIn our example, the Workload requests:\n\n\n\n\n\nthree Pods\n\n\n\nthree CPUs in total\n\n\n\n600 MiB of memory in total\n\nThe next question is where that request entered Kueue.\n\nStep 4: Follow the linked LocalQueue\n\nUse the LocalQueue link on the Workload\ndetail page. A LocalQueue is the namespace-level entry point used by the Job. It connects namespaced\nWorkloads to a cluster-scoped ClusterQueue.\n\nThe LocalQueue page shows:\n\n\n\n\n\nits namespace and connected ClusterQueue\n\n\n\nstop policy and current status\n\n\n\npending, reserving, and admitted Workload counts\n\n\n\nKueue conditions and Kubernetes events\n\n\n\nrelated Workloads in the same namespace\n\nThis page answers two practical questions: Did the Job enter the queue you expected, and is it the\nonly Workload waiting there?\n\nIf the LocalQueue is inactive or stopped, that may already explain the wait. If it is active, follow\nthe linked ClusterQueue to inspect the capacity behind it.\n\n（节选）\n\n\n\n原文：Kubernetes Blog｜Why Is My Kubernetes Job Still Pending? Tracing Kueue Admission with Headlamp，2026-10-15","url":"https://www.angryecho.com/c/DevOps/p/P2TBBjkn28h28P7d8tdBW","author":{"@type":"Person","name":"用户272688","url":"https://www.angryecho.com/u/LfVbf0g4"},"image":["https://kubernetes.io/blog/2026/10/14/tracing-kueue-admission-with-headlamp/kueue-admission-architecture.png","https://kubernetes.io/blog/2026/10/14/tracing-kueue-admission-with-headlamp/headlamp-kueue-troubleshooting-flow.png"],"interactionStatistic":[{"@type":"InteractionCounter","interactionType":"https://schema.org/LikeAction","userInteractionCount":0},{"@type":"InteractionCounter","interactionType":"https://schema.org/DislikeAction","userInteractionCount":0},{"@type":"InteractionCounter","interactionType":"https://schema.org/ViewAction","userInteractionCount":0},{"@type":"InteractionCounter","interactionType":"https://schema.org/ShareAction","userInteractionCount":0}]}]}
```

## Sitemap

See the full [sitemap](https://www.angryecho.com/sitemap.md) for all pages.
