Feature Description
GPUQuota status reconciler that maintains live Status.UsedGPUCount and Status.UsedVRAMBytes by summing the InferenceServices in the quota's scope. Story 2 of #416.
Problem Statement
As an operator, I want each GPUQuota to show current utilization so I can see how close a team is to its cap before deployments start getting rejected.
Proposed Solution
Add internal/controller/gpuquota_controller.go:
- Watch
GPUQuota plus InferenceService (map InferenceService events back to the matching GPUQuotas).
- Resolve scope:
NamespaceRef (single namespace) or Selector (label-matched namespaces). Reject specs that set both (belt-and-suspenders; primary validation is in the webhook story).
- Aggregate GPU count and VRAM across in-scope InferenceServices; write
Status.UsedGPUCount / Status.UsedVRAMBytes within one reconcile.
- Owner/finalizer handling so GPUQuota deletion cleans up cleanly.
Scope
In: status aggregation reconciler + wiring in cmd//manager setup. Out: admission decisions (that is #416-C/#416-D). This story never rejects anything; it only reports usage.
Acceptance Criteria (provable in-workspace)
Dependencies
Priority
Feature Description
GPUQuotastatus reconciler that maintains liveStatus.UsedGPUCountandStatus.UsedVRAMBytesby summing the InferenceServices in the quota's scope. Story 2 of #416.Problem Statement
Proposed Solution
Add
internal/controller/gpuquota_controller.go:GPUQuotaplusInferenceService(map InferenceService events back to the matching GPUQuotas).NamespaceRef(single namespace) orSelector(label-matched namespaces). Reject specs that set both (belt-and-suspenders; primary validation is in the webhook story).Status.UsedGPUCount/Status.UsedVRAMByteswithin one reconcile.Scope
In: status aggregation reconciler + wiring in
cmd//manager setup. Out: admission decisions (that is #416-C/#416-D). This story never rejects anything; it only reports usage.Acceptance Criteria (provable in-workspace)
GPUQuotaand severalInferenceServices in scope; assertUsedGPUCount/UsedVRAMBytesaggregate correctly and update when an InferenceService is added/removed.GPUQuotareconciles cleanly (no leaked finalizer).make testandmake lintpass; cross-arch lint clean.Dependencies
GPUQuotatype). Do not start until [FEATURE] GPUQuota CRD types + validation (#416 story 1) #1092 is merged tomain.Priority