agent-platform release v4.28.10

Fixed

  • The model-serving pod policies match LLMInferenceService workload pods (giantswarm/agent-platform#506): the connectivity chart’s model-serving Kyverno mutations (redirect-model-storage, storage-initializer-memory, add-cache-init, the Deployments’ progress-deadline), its network policies and the predictors’ PolicyException selected pods by serving.kserve.io/inferenceservice, the classic InferenceService predictor’s label; the workload pod the llm-d controller creates from an LLMInferenceService carries kserve.io/component=workload, app.kubernetes.io/part-of=llminferenceservice and app.kubernetes.io/name=<model> instead and serves from a container named main, so none of it applied — on gazelle (4.28.8, proof 1 of giantswarm/giantswarm#37639) the predictor composed from qwen3-4b-instruct downloaded 8 GB into an emptyDir with its storage-initializer OOMKilled twelve times at KServe’s 1Gi default, while the policies stood Ready beside it. The two pod shapes are one list now (agent-platform.modelServing.podShapes: selector, model-name label, runtime container), and every selector of the serving namespace renders from it: the mutations match both shapes, take the model’s name from whichever label the pod carries (the cache subdirectory), anchor the /mnt/models cache mount on the shape’s runtime container (kserve-container or main; an anchored entry never adds a container) and skip a pod that names no model; the network policies render one policy per shape (-model-serving-llmisvc-workload[-ingress|-egress] next to -predictor…) and the kagent agents’ egress admits both; the PolicyException matches both shapes’ Pods, ReplicaSets and Deployments by label next to the *-kserve* name. make verify-model-serving-policies (tests/verify-model-serving-policies.py) runs kyverno apply of the rendered policies over a fixture pod of each shape (tests/fixtures/model-serving-*-pod.yaml, the llm-d one as observed on gazelle) and asserts the claim mount and subPath on the initializer and the runtime, the 4Gi limit, hf-cache-init first, a pod without an initializer and a download-Job pod untouched, the Deployments’ deadline, and that the network policies, the agents’ egress and the PolicyException select exactly the same pods; the CI job installs the kyverno CLI for it. The live half — the workload pod’s volumes on a GPU cluster and a second load of the same preset downloading nothing — is the proof’s.