New to KubeDB? Please start here.
Update Version of Milvus
This guide will show you how to use the KubeDB Ops-manager operator to update the version of a Milvus database.
Before You Begin
You should be familiar with the following
KubeDBconcepts:Complete the dependency setup from Prepare Dependencies. It installs MinIO and creates the object-storage secrets (
milvus-storage-configformilvus-standalone,milvus-cluster-storage-configformilvus-cluster).
Note: The yaml files used in this tutorial are stored in docs/guides/milvus/update-version/yamls folder in GitHub repository kubedb/docs.
Available Versions
$ kubectl get milvusversions
NAME VERSION DB_IMAGE DEPRECATED AGE
2.6.11 2.6.11 ghcr.io/appscode-images/milvus:2.6.11 21h
2.6.15 2.6.15 ghcr.io/appscode-images/milvus:2.6.15 21h
2.6.15-gpu 2.6.15 ghcr.io/appscode-images/milvus:2.6.15-gpu 21h
2.6.7 2.6.7 ghcr.io/appscode-images/milvus:2.6.7 21h
2.6.9 2.6.9 ghcr.io/appscode-images/milvus:2.6.9 21h
3.0.0 3.0.0 ghcr.io/appscode-images/milvus:3.0.0 21h
3.0.0-gpu 3.0.0 ghcr.io/appscode-images/milvus:3.0.0-gpu 21h
Update Version of Standalone Milvus
Deploy a standalone Milvus at version 2.6.9 and wait until it is Ready. update-version/yamls/standalone.yaml is the standalone quickstart manifest with spec.version: "2.6.9" (the quickstart itself uses 2.6.11, which would make the update below a no-op):
If you deleted a Milvus of the same name in an earlier guide, delete its object-storage prefix first, as shown in Prepare Dependencies. Otherwise the new database can hang in
Provisioning.
$ kubectl apply -f https://github.com/kubedb/docs/raw/v2026.10.12/docs/guides/milvus/update-version/yamls/standalone.yaml
milvus.kubedb.com/milvus-standalone created
$ kubectl get milvuses.kubedb.com milvus-standalone -n demo
NAME VERSION STATUS AGE
milvus-standalone 2.6.9 Ready 46s
Apply the UpdateVersion OpsRequest
update-version-standalone.yaml
apiVersion: ops.kubedb.com/v1alpha1
kind: MilvusOpsRequest
metadata:
name: milvus-update-version
namespace: demo
spec:
type: UpdateVersion
databaseRef:
name: milvus-standalone
updateVersion:
targetVersion: 2.6.11
timeout: 5m
apply: IfReady
Here, spec.updateVersion.targetVersion is the name of the target MilvusVersion (2.6.11).
$ kubectl apply -f https://github.com/kubedb/docs/raw/v2026.10.12/docs/guides/milvus/update-version/yamls/update-version-standalone.yaml
milvusopsrequest.ops.kubedb.com/milvus-update-version created
Watch Progress
$ kubectl get milvusopsrequest milvus-update-version -n demo
NAME TYPE STATUS AGE
milvus-update-version UpdateVersion Successful 77s
$ kubectl describe milvusopsrequest milvus-update-version -n demo
...
Status:
Conditions:
Message: Milvus ops-request has started to update version
Reason: UpdateVersion
Type: UpdateVersion
Message: successfully reconciled the Milvus with updated version
Reason: UpdatePetSets
Type: UpdatePetSets
Message: check pod running; ConditionStatus:True; PodName:milvus-standalone-0
Type: CheckPodRunning--milvus-standalone-0
Message: Successfully Restarted Milvus nodes
Reason: RestartPods
Type: RestartPods
Message: Successfully completed update ... version
Reason: Successful
Type: Successful
Phase: Successful
Verify the New Version
$ kubectl get milvuses.kubedb.com milvus-standalone -n demo
NAME VERSION STATUS AGE
milvus-standalone 2.6.11 Ready 2m3s
The pod now runs the 2.6.11 image:
$ kubectl get pods -n demo -l app.kubernetes.io/instance=milvus-standalone -o custom-columns=NAME:.metadata.name,IMAGE:.spec.containers[0].image
Update Version of Distributed Milvus
For a distributed Milvus, point spec.databaseRef.name at the distributed database (milvus-cluster). The operator updates the image of every distributed role and restarts each one.
Deploy a distributed Milvus at version 2.6.9 (the distributed quickstart manifest with spec.version: "2.6.9") and wait until it is Ready:
$ kubectl apply -f https://github.com/kubedb/docs/raw/v2026.10.12/docs/guides/milvus/update-version/yamls/distributed.yaml
milvus.kubedb.com/milvus-cluster created
$ kubectl get milvuses.kubedb.com milvus-cluster -n demo -w
The distributed sample reuses the OpsRequest name of the standalone one, so delete the standalone OpsRequest first:
$ kubectl delete milvusopsrequest -n demo milvus-update-version
update-version-distributed.yaml
apiVersion: ops.kubedb.com/v1alpha1
kind: MilvusOpsRequest
metadata:
name: milvus-update-version
namespace: demo
spec:
type: UpdateVersion
databaseRef:
name: milvus-cluster
updateVersion:
targetVersion: 2.6.11
timeout: 5m
apply: IfReady
Apply it the same way, pointing at the distributed database:
$ kubectl apply -f https://github.com/kubedb/docs/raw/v2026.10.12/docs/guides/milvus/update-version/yamls/update-version-distributed.yaml
milvusopsrequest.ops.kubedb.com/milvus-update-version created
The distributed flow is mechanically identical to the standalone flow shown above: the operator validates the target MilvusVersion, pauses the database, updates the container image of each distributed role (mixcoord, datanode, querynode, streamingnode, proxy), restarts them one workload at a time, and resumes the database. Because apply: IfReady is set, the ops request runs only once the database is Ready, after which it reports Successful.
Afterwards, every role pod runs the 2.6.11 image:
$ kubectl get pods -n demo -l app.kubernetes.io/instance=milvus-cluster -o custom-columns=NAME:.metadata.name,IMAGE:.spec.containers[0].image
Cleaning up
$ kubectl delete milvusopsrequest -n demo milvus-update-version
$ kubectl patch -n demo milvus.kubedb.com milvus-standalone -p '{"spec":{"deletionPolicy":"WipeOut"}}' --type="merge"
$ kubectl patch -n demo milvus.kubedb.com milvus-cluster -p '{"spec":{"deletionPolicy":"WipeOut"}}' --type="merge"
$ kubectl delete milvus.kubedb.com -n demo milvus-standalone milvus-cluster
$ kubectl delete ns demo
Next Steps
- Learn about vertical scaling of a Milvus database.
- Learn how the Recommendation Engine suggests version updates automatically.
- Want to hack on KubeDB? Check our contribution guidelines.
































