agent-platform release v4.27.0
Added
modelServing.gpuPool: the GPU node pool’s taint as a toleration and its label as a node selector on everything the serving layer schedules onto the pool, published for model-manager; the model-manager line moves to >=0.23.0 (giantswarm/agent-platform#315; bumblebee-plans#46, the plan’s D3/D5; epic giantswarm/giantswarm#37639). A GPU node pool created through the platform (the gpu-node-pool chart) arrives tainted nvidia.com/gpu NoSchedule and labelled giantswarm.io/machine-pool=<cluster>-<pool>; the serving layer tolerated no taint, so the vLLM runtime and every preset’s predictor would land nowhere on such a pool. New: modelServing.gpuPool.taint (key, value, effect; the default is the pool chart’s taint — nvidia.com/gpu NoSchedule with no value, tolerated with operator: Exists, so a pool whose taint carries a value is covered too; a value narrows it to Equal; an empty key is an untainted pool and renders nothing) and modelServing.gpuPool.nodeSelector (the pool’s label, per pool and empty by default — the serving slice’s values set it). The connectivity chart applies both to the ClusterServingRuntime (KServe copies them onto every predictor pod of the runtime; runtime.tolerations come after, runtime.nodeSelector keys win) and to every published preset’s scheduling block (the pool’s toleration first, the preset’s own after it, an equal entry once; the pool’s selector under the preset’s own keys) through one helper (agent-platform.modelServing.poolScheduling), and publishes them in the discovery ConfigMap as spec.gpuPool.taint.{key,value,effect} and spec.gpuPool.nodeSelector — the keys model-manager 0.23.0 reads (giantswarm/model-manager#86) to schedule the LLMInferenceServices it composes, its download Jobs and its inventory scan pods by the same input (a registered backend document may override it). Platform components never carry it. Three render guards: the effect is one of the three taint effects, the key a qualified name, every selector value a string. components.model-manager.versionRange moves to >=0.23.0 <1.0.0 (the floor: the release that reads the keys) and the example BOM pins 0.23.0. make verify-gpu-pool (tests/verify-gpu-pool.py, fixture ci/test-model-serving-gpu-pool-values.yaml) asserts the three sites in the default, pool-selected, valued and untainted shapes, the guards, the meta chart’s forwarding, and that an empty taint key leaves the serving render byte-identical to origin/main but for the discovery block. The default render is unchanged (model serving is off by default). Every installation with model serving on rolls its predictors once (the runtime gains the toleration and KServe reconciles every InferenceService of it; the models reload from the cache) and model-manager once (0.23.0). README of the connectivity chart, “The GPU node pool”.