8000 fix(kueue): bound a submitted job's request to what a node can supply by evanjpw · Pull Request #916 · google/xmc · GitHub
[go: up one dir, main page]

Skip to content

fix(kueue): bound a submitted job's request to what a node can supply - #916

Merged
evanjpw merged 2 commits into
mainfrom
eka/kueue-node-bounded-requests
Sep 23, 2026
Merged

evanjpw merged 2 commits into
mainfrom
eka/kueue-node-bounded-requests

Conversation

@evanjpw
@evanjpw evanjpw commented Sep 17, 2026 •
Copy link
Copy Markdown
Collaborator

Adds a LimitRange to each queue namespace, so every submitted container gets a default CPU and memory request and a ceiling no single node could host. Both are settable under queues in values.yaml.

Without a request, a job is admitted as BestEffort and the kubelet evicts it first under node pressure. We lost a trainer 25 minutes in, on a node reporting 10.8 GiB in use against a request of zero. The client cannot send a request itself, because ResourceSet puts cpu_resources and gpu_resources in a oneof, so a job asking for an accelerator cannot also ask for CPU or memory. The LimitRange supplies what the client could not. It reaches only containers naming no request of their own, which is every job XMC submits, and sets no limit, so a job may still burst above the request rather than being OOM-killed at it.

Without a ceiling, the opposite failure. Kueue admits against quota, and quota is a sum over the fleet, so a container asking for more than any single node has can pass admission, hold that quota, and sit Pending forever because nothing can host it. max rejects it at submission instead.

That ceiling is coarse by construction. A namespace spanning pools of different sizes can only be given the larger, and allocatable is below capacity in any case, so it rules out what nothing could ever host rather than promising a fit.

The numbers are ours and a deployment with different node shapes will want its own, which is why they are values rather than constants. The in-template defaults are unchanged, so a deployment that sets nothing renders exactly as before.

Tested with helm lint, the chart configuration tests, and kubectl apply --dry-run=server against a live cluster for both rendered objects.

Sent with ❤️ from Eka Robotics.

@google-cla
google-cla Bot commented Sep 17, 2026
Copy link
Copy Markdown

Thanks for your pull request! It looks like this may be your first contribution to a Google open source project. Before we can look at your pull request, you'll need to sign a Contributor License Agreement (CLA).

View this failed invocation of the CLA check for more information.

For the most up to date status, view the checks section at the bottom of the pull request.

@gemini-code-assist gemini-code-assist Bot left a comment
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Code Review

This pull request introduces LimitRange resources for both the cpu-queue and gpu-queue namespaces to define default container resource requests and maximum limits. The review feedback recommends making these hardcoded resource requests and limits configurable via Helm's values.yaml to allow easier customization across different environments and node shapes.

@evanjpw
evanjpw force-pushed the eka/kueue-node-bounded-requests branch 3 times, most recently from 4a275a9 to 9c41ae7 Compare September 17, 2026 20:13
@evanjpw
evanjpw marked this pull request as ready for review September 18, 2026 11:18
A container that names no CPU or memory request is admitted against quota
as if it were free, so a queue can admit more work than its nodes can hold.
The `LimitRange` supplies a request, and a `max` rejects a container larger
than any single node the queue can reach.

The values live in `queues` in `values.yaml`, because a deployment's node
shapes are its own.

Sent with ❤️ from Eka Robotics.
@evanjpw
evanjpw added this pull request to the merge queue Sep 23, 2026
Merged via the queue into main with commit 9554dff Sep 23, 2026
11 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants

0