Skip to content

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, revision v0.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=True post-bump: nsfw-detector, nudenet-detector, qwen3-8b, qwen3-embed, qwen3-vl (ns ai), each with IngressReady=True PredictorReady=True.

Per-workaround verdict

# Workaround (where) Verdict Evidence (live + upstream)
1 S3 flat IR instead of OCI modelcarstorageUri: 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: RawDeployment is now a deprecated legacy alias in v0.19 (LegacyRawDeployment → normalized to Standard by ParseDeploymentMode). The chart value in argocd-apps/ai/kserve.yaml and the live deploy.defaultDeploymentMode still say RawDeployment and keep working; renaming to Standard is cosmetic — fold into the next KServe-touching PR rather than churning a working controller config.

References