Guide · GPU scheduling

GPU Admission on Kueue: policy before the queue

Andrey Lesnikov · 2026-11-02 · sources checked 2026-11-02

How a Kueue AdmissionCheck enforces GPU flavors, FinOps labels, registry allowlists and soft quotas — with an evidence envelope per decision.

On this page

Raw ClusterQueue quota answers "is there capacity?" It does not answer "may this team run this GPU flavor, from this registry, with these FinOps labels, under this soft budget?" That gap is where GPU jobs sneak past platform policy.

This guide is scoped to gpu-admission-kueue and the GPU Admission on Kueue case. Claims about behaviour and evidence apply on that project's corpus only (kind, upstream Kueue, emulated nvidia.com/gpu).

Workload reserved by Kueue then evaluated by a GPU admission controller
Workload reserved by Kueue then evaluated by a GPU admission controller
Architecture sketch for this guide. agent_id tool_name policy_verdict trace_id
Architecture sketch for this guide.

The gap ClusterQueue leaves open

Kueue is strong at admission and cohort borrowing while leaving kube-scheduler to place pods. That is why it often wins over replacing the scheduler (see Kueue vs Volcano vs KAI).

What ClusterQueue still does not express cleanly for GPU platforms:

  • team or namespace caps beyond raw device counts
  • allowed GPU flavors / resource shapes
  • required FinOps or ownership labels
  • GPU-hour or soft budget ceilings
  • image registry allowlists for GPU workloads

Without an extra gate, a correctly labeled Workload that fits quota can still be the wrong job for your policy.

AdmissionCheck as the extension point

Upstream Kueue AdmissionChecks let an external controller participate after quota is reserved. In gpu-admission-kueue:

  1. Kueue reserves quota for the Workload.
  2. The admission controller evaluates a cluster-scoped GPUAdmissionPolicy.
  3. It sets the check to Ready (ALLOW), Retry (HOLD) on soft quota pressure, or Rejected (DENY).
  4. Every decision writes an ASC-compatible evidence envelope (ConfigMap) with policy version and inputs.

Controller name used in the project: gpu-admission.justrunme.com/admission-check. The design stays on upstream Kueue, not a fork.

Fail-closed by default

Condition Behaviour on this corpus
Controller down Checks stay Pending — Workloads are not admitted
Missing / malformed policy Rejected
Undecidable input (missing required labels, bad flavor) Rejected
Soft budget pressure HOLD (Retry) until pressure clears
Golden path ALLOW + evidence envelope

That is the same fail-closed posture as the tool gate on the MCP plane (Agent Security Contract): unavailable policy must not become an implicit allow.

What the evidence covers

From the case and repo evidence files (checked 2026-11-02):

  • 8 e2e scenarios on kind with upstream Kueue: allow_golden, missing_labels, disallowed_flavor, bad_registry, ghcr_evil_prefix, over_quota_hold, malformed_policy, controller_down_fail_closed
  • GPUs are emulated as an extended resource — nothing here measures physical GPU utilization
  • CI run linked from the case evidence narrative

Read those numbers as suite results on this corpus, not as a multi-cluster production SLO.

When you need this guide vs the comparison

Question Go to
Kueue vs Volcano vs KAI as schedulers/admission layers Kueue vs Volcano vs KAI
Policy gate on top of Kueue for flavors, registries, FinOps This guide + GPU Admission case
Serving runtime / queues for LLM pods LLM Infrastructure Runtime
Architecture sketch for this guide. agent_id tool_name policy_verdict trace_id
Architecture sketch for this guide.

Operational checklist

References

Related

Cases

Related cases.

Case 28

GPU Admission on Kueue

  • Kueue
  • GPU
  • Fail-closed

Raw ClusterQueue quota does not cover team caps, allowed GPU flavors, required FinOps labels, GPU-hour or budget ceilings, or image registry allowlists — and GPU jobs need an auditable gate before they are admitted

8 e2e scenarios on this corpus · emulated GPUs

Case 27 · Flagship

Agent Security Contract

  • CLI
  • Action
  • Policy

Agent and MCP stacks expand the attack surface beyond prompt text: tool misuse, poisoned tool descriptions, argument injection, and unapproved high-impact actions run without a pre-execution gate

0 false-ALLOW · 0 false-BLOCK on this corpus

Case 07

LLM Infrastructure Runtime

  • Queue
  • vLLM
  • KServe

LLM workloads move faster than traditional platform controls and can quickly become expensive, opaque, and hard to operate

LLM serving with operability signals

Available for meaningful infrastructure conversations

Build systems that stay calm under pressure.

Available for conversations

Talk infrastructure

Book a working session

Meet ↗

Evidence first

For deep dives

Explore the systems

All cases ↗