KServe v0.19.0 — re-validation of the v0.18 RawDeployment workarounds¶
Date: 2026-07-02 (evening CEST). Context: kserve-crd + kserve-resources
were bumped v0.18.0 → v0.19.0 (#2120 / #2121, bump audit #2107). This repo
carries four hard-won v0.18-era workarounds; each was re-checked against the
live cluster (read-only) and the v0.19.0 release notes / source.
Live state at validation time¶
- ArgoCD app
kserve:Synced Healthy, revisionv0.19.0. - Controller:
kserve/kserve-controller:v0.19.0, running ~5 h without restarts; log scan (5 h window) shows no reconcile/webhook errors. - All 5 InferenceServices
Ready=Truepost-bump:nsfw-detector,nudenet-detector,qwen3-8b,qwen3-embed,qwen3-vl(nsai), each withIngressReady=True PredictorReady=True.
Per-workaround verdict¶
| # | Workaround (where) | Verdict | Evidence (live + upstream) |
|---|---|---|---|
| 1 | S3 flat IR instead of OCI modelcar — storageUri: s3://… on all ISVCs (apps/ai/ovms/templates/inferenceservice-*.yaml, #1467/#1469; modelcar never injected under v0.18 RawDeployment) |
still-required | v0.19.0 release notes contain no modelcar/Standard-mode injection fix ("oci support for storageUris (plural)" #5261 is storage-URI parsing, not sidecar injection). Live s3:// path serves and is Ready under v0.19. Re-testing injection needs a new ISVC (cluster mutation) — not done here. |
| 2 | autoscalerClass: external for router scale-to-zero (ISVC annotations, #1482; none pinned replicas to minReplicas and reverted the router in ~10 s) |
still-required, still supported | external remains in AutoscalerAllowedClassList (v0.19.0 pkg/constants/constants.go). Live: qwen3-embed-predictor sits at replicas=0, qwen3-8b/qwen3-vl at 1 with ISVC minReplicas: 0 — the v0.19 controller does not revert router-set replicas. |
| 3 | storage-initializer memory raise (kserve.storage.resources in argocd-apps/ai/kserve.yaml, commit 8611b48f; chart default 100Mi/1Gi OOM-killed the qwen3-vl S3 copy) |
still-required, intact | Values flow into the ClusterStorageContainer/default CR (live: requests 200m/512Mi, limits 2/8Gi) and the running qwen3-vl pod's storage-initializer init container carries them. Note: the inferenceservice-config ConfigMap's storageInitializer block still shows chart defaults — inert while the CSC matches s3://; do not "fix" it. v0.19 also ships "prevent ClusterStorageContainer CRD deletion on helm upgrade" (#5539), protecting this on future bumps. |
| 4 | Numeric probe ports in the ServingRuntime (apps/ai/ovms/templates/servingruntime.yaml; KServe strips container ports, so named-port probes fail Atoi("rest")) |
still-required | v0.19 still strips ServingRuntime container ports: live predictor containers expose no ports[], and the numeric startupProbe port 8080 is intact with pods Ready. Release notes mention no probe/port schema change. |
| 5 | kserve-provision-location emptyDir 32Gi (Kyverno mutation cluster/kyverno/add-emptydir-sizelimit.yaml) |
still-required, intact | Volume name constant StorageInitializerVolumeName = "kserve-provision-location" unchanged in v0.19.0; live qwen3-vl pod shows emptyDir: {sizeLimit: 32Gi}. |
Nothing is BROKEN; no manifest fix required by the bump.
Optional simplifications (not applied)¶
deploymentMode: RawDeploymentis now a deprecated legacy alias in v0.19 (LegacyRawDeployment→ normalized toStandardbyParseDeploymentMode). The chart value inargocd-apps/ai/kserve.yamland the livedeploy.defaultDeploymentModestill sayRawDeploymentand keep working; renaming toStandardis cosmetic — fold into the next KServe-touching PR rather than churning a working controller config.
References¶
- Release notes: https://github.com/kserve/kserve/releases/tag/v0.19.0
- Constants checked:
pkg/constants/constants.goat tagv0.19.0(AutoscalerAllowedClassList, LegacyRawDeployment/Standard, StorageInitializerVolumeName).