Skip to content

Link scheduler nominated Nodes separately from Pod placement - #2010

Open
nadaverell wants to merge 3 commits into
mainfrom
feature/relationship-pod-nomination
Open

nadaverell wants to merge 3 commits into
mainfrom
feature/relationship-pod-nomination

Conversation

@nadaverell

@nadaverell nadaverell commented Oct 7, 2026 •

Copy link
Copy Markdown
Contributor

When the scheduler picks a node for a Pending Pod (for example after preempting lower-priority Pods), it records that choice in status.nominatedNodeName before the Pod is bound. The Pod drawer now shows this as a separate Nominated Node row that links to the Node. A tooltip explains that the nomination can change before binding. The assigned Node row (spec.nodeName) is unchanged.

The row only appears while the Pod is unbound. The API server clears a nomination on binding by default only from Kubernetes 1.35; it was opt-in in 1.34 (KEP-5278, ClearingNominatedNodeNameAfterBinding), so a running Pod can still carry a stale nomination naming a different node. Showing it next to the real Node would be misleading.

Scope: the shared Pod drawer only (Radar and Radar Hub via @skyhook-io/k8s-ui). No graph, MCP context or Diagnose change.

Validation: renderer tests cover the link click, a Pod with no nomination, and a bound Pod with a stale, different nomination (which stays hidden). In a browser against a v1.36 kind cluster, the link on a Pending Pod opens the Node drawer. Kubernetes 1.36 rejects a nomination on a bound Pod, so the stale case could not be reproduced live and is covered by the unit test only.

pod-nominated-node


Note

Low Risk
Read-only Pod drawer UI and navigation; display gating avoids misleading stale nomination on bound Pods.

Overview
The Pod detail Status section now surfaces status.nominatedNodeName as a separate Nominated Node row (with tooltip) when the Pod has no spec.nodeName yet, using the same cluster-scoped Node link/navigation as the assigned Node field.

Nomination is hidden once the Pod is bound (spec.nodeName set), so stale nomination values on older Kubernetes versions are not shown alongside the real node assignment.

New PodNomination.test.tsx covers link navigation for pending Pods and the bound-Pod hide behavior.

Reviewed by Cursor Bugbot for commit e8a830c. Bugbot is set up for automated code reviews on this repo. Configure here.

@nadaverell
nadaverell requested a review from hisco as a code owner October 7, 2026 05:45
@qodo-free-for-open-source-projects

Copy link
Copy Markdown

PR Summary by Qodo

Show nominated Nodes separately from assigned Pod Nodes

✨ Enhancement 🧪 Tests 🕐 Less than 10 minutes

Grey Divider

AI Description

• Show a Pod’s nominated Node as a separate link when Kubernetes reports one.
• Explain that nomination can change before binding, without treating it as assigned placement.
• Test Node navigation and ensure assigned placement alone does not imply nomination.
Diagram

graph TD
  Status["Pod status"] --> Renderer["Pod renderer"] --> Nomination["Nominated link"] --> Node["Core Node"]
  Spec["Pod spec"] --> Renderer --> Placement["Assigned link"] --> Node
Loading
High-Level Assessment

Keep nomination as a conditional status property beside, but distinct from, assigned placement. Reusing ResourceLink provides Node navigation without extending scheduling, capacity, or graph semantics; those broader changes would incorrectly imply nomination is binding.

Files changed (2) +28 / -0

Enhancement (1) +4 / -0
PodRenderer.tsxDisplay nominated Node separately in Pod status +4/-0

Display nominated Node separately in Pod status

• Conditionally displays status.nominatedNodeName as a Node link alongside the existing assigned Node property. Its tooltip clarifies that nomination may change before the Pod is bound.

packages/k8s-ui/src/components/resources/renderers/PodRenderer.tsx

Tests (1) +24 / -0
PodNomination.test.tsxTest nominated Node navigation and absent nomination +24/-0

Test nominated Node navigation and absent nomination

• Adds a DOM test that clicks a Pending Pod’s nominated Node and verifies navigation to a cluster-scoped core Node. A second test confirms an assigned Node alone does not produce a nomination property.

packages/k8s-ui/src/components/resources/renderers/PodNomination.test.tsx

@qodo-free-for-open-source-projects

Copy link
Copy Markdown

Code Review by Qodo

🐞 Bugs (0) 📘 Rule violations (0) 📎 Requirement gaps (0)

Grey Divider

Great, no issues found!

Qodo reviewed your code and found no material issues that require review

Grey Divider

Tip of the day
💡 Did you know, you can route each severity your way: inline, summary, both, or drop

More tips ↗ | Customize Qodo ↗ | Qodo docs ↗

Grey Divider

Qodo Logo

Before Kubernetes 1.35 the API server does not clear status.nominatedNodeName
when a Pod is bound, so a running Pod can still name a different node. Show the
nomination only while the Pod is unbound, give the label the same tooltip
affordance as QoS Class, and rewrite the test in the renderer-test style.
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.

1 participant