Basic support for the GPU/batch/inference ecosystem (37 kinds)#880
Basic support for the GPU/batch/inference ecosystem (37 kinds)#880nadaverell wants to merge 1 commit into
Conversation
a273682 to
e607b26
Compare
|
Visual test results (live on radar-test-nonprod with real operators — Kueue, Volcano, JobSet, KubeRay, Kubeflow training-operator installed; faked CRs for the operator-less tools):
Bug found and fixed by the test (latest commit): bare-plural name resolution ( |
e607b26 to
077c6fc
Compare
There was a problem hiding this comment.
Cursor Bugbot has reviewed your changes and found 1 potential issue.
There are 2 total unresolved issues (including 1 from previous review).
❌ Bugbot Autofix is OFF. To automatically fix reported issues with cloud agents, enable autofix in the Cursor dashboard.
Reviewed by Cursor Bugbot for commit 077c6fc. Configure here.
Status badges, smart table columns, column filters, drawer kind names, sidebar grouping, and Helm RBAC for: - Kueue: ClusterQueue, LocalQueue, Workload, ResourceFlavor, AdmissionCheck + Cluster Autoscaler ProvisioningRequest - KubeRay: RayCluster, RayJob, RayService, RayCronJob - KServe: InferenceService, ServingRuntime, ClusterServingRuntime, InferenceGraph, TrainedModel, LLMInferenceService - Gateway API Inference Extension: InferencePool (dual-group v1 + v1alpha2 with shape-detected accessors), InferenceObjective - LeaderWorkerSet, JobSet - Volcano: Job, Queue, PodGroup, JobFlow, JobTemplate - KAI Scheduler: Queue, PodGroup - KAITO: Workspace, RAGEngine - NVIDIA NIM Operator: NIMService, NIMCache, NIMPipeline - AMD GPU Operator: DeviceConfig - Kubeflow training: PyTorchJob, TFJob, MPIJob, TrainJob Detail views deliberately use the generic spec/status renderer - typed renderers, topology, and diagnosis land with the deeper per-tool phases. All status/spec accessors verified against upstream Go types; multi- version tolerant (Kueue v1beta1/v1beta2, MPIJob v1/v2beta1, GIE dual group) and nil-guarded throughout. Collision handling: Volcano Job shares the jobs plural with batch/v1 - core JobRenderer is apiVersion-gated and the CR falls through to GenericRenderer (Crossplane pattern); Volcano/KAI Queues + PodGroups and KAITO Workspaces disambiguate by group via GROUP_QUALIFIED_COLUMN_KEYS and guarded status routing. Five dispatch tests pin the collisions.
077c6fc to
6ceb11d
Compare

Phase 1.5 of GPU/inference support — a breadth pass over the GPU scheduling, batch, and inference-serving ecosystem, before the deeper per-tool phases. Follows #878 (merged).
What "basic support" means (per the docs-claim discipline): status badges, smart table columns, working column filters, correct drawer kind chips, sidebar grouping, and in-cluster RBAC — for 37 kinds across 12 tools. Detail views use the generic spec/status renderer; typed renderers/topology/diagnosis come with each tool's deep phase. Every status mapping was verified against upstream Go types, not guessed.
Collision work (the hard part):
Jobshares thejobsplural with batch/v1 — the core JobRenderer line is apiVersion-gated and Volcano CRs fall through to GenericRenderer via the established Crossplane-collision patternQueue/PodGroupand KAITOWorkspacedisambiguate by group in table columns (GROUP_QUALIFIED_COLUMN_KEYS), status badges, and filter valuesDiscovery fix (found by the visual test): bare-plural name resolution (
/api/resources/clusterqueueswithout a group, MCPlist_resourceswith a bare kind) resolved to Kueue's aggregated visibility API — a get-only resource shadowing the real plural — because ties across groups went to whichever resource discovery enumerated first.indexResourceLockednow prefers list+watch-capable resources before the existing non-CRD/stability rules; regression test pins both enumeration orders. This generalizes to any aggregated API shadowing a kind's plural.Multi-version tolerance: Kueue v1beta1↔v1beta2 (cohort/cohortName rename handled), MPIJob v1↔v2beta1, LLMInferenceService v1alpha1↔v1alpha2, InferencePool v1 (
spec.endpointPickerRef,status.parents) ↔ v1alpha2 (spec.extensionRef,status.parent— the singular json tag is a real upstream quirk).Helm chart: 12 new
rbac.crdGroupstoggles + ClusterRole rules so in-cluster installs can list these groups. NosupportedCRDFallbackswarmup entries — these kinds arrive via normal CRD discovery; warmup is reserved for first-class integrations.Verified:
make tsc, Go tests (incl. chart-RBAC guard), 560 frontend tests,helm lint— plus a live visual test on EKS with real Kueue, Volcano, JobSet, KubeRay, and Kubeflow training-operator installed: real Kueue admission rendered end-to-end (suspended Job → Workload admitted → Finished), Volcano↔batch Job collision verified in tables and drawer, Volcano vs KAI queue twins resolve independently, KServe Ready vs BlockedByFailedLoad badges. 10 screenshots + details in the PR comment below.Note
Medium Risk
Large surface area of new status/column logic and discovery precedence changes; RBAC broadens read access to many CRD groups by default on Helm installs.
Overview
Adds basic browsing support for 37 CRDs across the GPU scheduling, batch, and inference stack (Kueue, KubeRay, KServe, Inference Gateway, JobSet/LWS, Volcano, KAI, KAITO, NIM, AMD GPU, Kubeflow training).
The UI gains per-kind table columns, status badges, and column filters via new
resource-utils-*modules and cell renderers wired throughResourcesViewandResourceRendererDispatch. Colliding plurals (jobs,queues,podgroups,workloads,workspaces) are disambiguated by API group in tables, filters, and drawer routing (e.g. VolcanoJobskips the coreJobRendererand uses the generic spec/status view).Helm adds 12 default-on
rbac.crdGroupstoggles and matching ClusterRole rules; docs/README document the integration scope.Backend discovery now prefers resources that support list+watch when the same plural is shadowed by a get-only aggregated API (Kueue
clusterqueuesvs visibility API), with a regression test.Reviewed by Cursor Bugbot for commit 6ceb11d. Bugbot is set up for automated code reviews on this repo. Configure here.