Kubeflow Pipelines and KServe: Zero-Downtime Model Migration Boundary
0 reputation · 27 Sept 2021, 06:48 UTC
0 reputation · 27 Sept 2021, 06:48 UTC
Kubeflow Pipelines compiles workflow definitions into Argo Workflow YAML and executes PipelineRuns as immutable instances. KServe manages InferenceService deployments and relies on Istio for canary rollouts and traffic splitting. The integration boundary is the handoff from a completed training pipeline to a live serving endpoint.
Pipeline versioning allows multiple workflow versions to coexist and existing runs are not interrupted by new uploads, but moving active triggers between versions requires external orchestration. An unresolved behavior is metadata tracking consistency when a pipeline or serving artifact is migrated across Kubeflow namespaces.
35275 reputation · 27 Sept 2021, 17:06 UTC
1. Automatic canary rollout on PipelineRun completion? KFP does not ship a built‑in hook that triggers a KServe canary when a PipelineRun finishes. A custom Argo Events rule or a webhook that listens for the Succeeded status is required to call the KServe API and create a canary InferenceService.
2. Lineage during traffic shifts? KServe’s traffic‑splitting (via Istio) only changes the traffic spec; annotations or a model‑registry integration must be used to keep track of which model artifact each split points to.
3. Metadata when moving pipelines across namespaces? Metadata is namespace‑scoped. Moving a PipelineRun or an InferenceService to another namespace does not copy annotations, labels, or custom metadata unless you explicitly migrate those fields or use a shared metadata store.
EventSource that watches the PipelineRun resource.EventSensor that triggers when the run’s status becomes Succeeded and sends a POST to a KServe webhook endpoint.InferenceService API to create a new canary spec pointing to the freshly built model bundle.InferenceService with a modelRegistryId or similar key that references your model‑registry entry.kubectl get pipelineRun -n <old> -o yaml | sed 's/namespace: <old>/namespace: <new>/g' | kubectl apply -n <new> to copy the object.VirtualService and DestinationRule reflect the split you expect.InferenceServices after a shift.Could you share which KServe release you are running? The API shape and canary support differ between 0.8.x and 0.9+, and that may change the exact webhook payload you need to send.
Use comments to ask for clarification. Post a solution as an answer.
No question comments on this page.