Skip to content

Add Milvus guides#936

Open
tamalsaha wants to merge 1 commit into
masterfrom
milvus-docs
Open

Add Milvus guides#936
tamalsaha wants to merge 1 commit into
masterfrom
milvus-docs

Conversation

@tamalsaha

@tamalsaha tamalsaha commented Jun 30, 2026

Copy link
Copy Markdown
Member

Summary

Adds user-facing documentation for KubeDB managed Milvus, covering both Standalone and Distributed topologies. Every guide embeds live output collected from a running cluster.

Pages added (docs/guides/milvus/)

  • Quickstart — standalone and distributed deployment (PetSets/Services/PVCs, auth secret, defaulted distributed roles)
  • Monitoring — Prometheus Operator (stats service + ServiceMonitor)
  • TLS — overview + deployment-time configuration (cert-manager issuer, cert secrets, /milvus/tls mounts)
  • Reconfigure — applying custom milvus.yaml
  • Restart
  • Reconfigure TLS — add / rotate / change-issuer / remove
  • Update Version
  • Scaling — vertical (per role) and horizontal (distributed-only)
  • Rotate Auth — incl. rotateAfter/activeFrom and recommendation relationship
  • Volume Expansion — offline + online (streamingnode for distributed)
  • Storage Migrationlocal-pathlonghorn-custom
  • Recommendation Engine — RotateAuth / ReconfigureTLS / UpdateVersion
  • Autoscaler — compute (VPA recommendation → VerticalScaling ops) and storage

Notes

  • Milvus-specific behavior is documented throughout: mandatory object storage, internal etcd metadata, distributed defaulting of mixcoord/datanode/querynode/proxy when only streamingnode is specified, and streamingnode as the sole persistent-storage role for distributed storage operations.
  • The distributed UpdateVersion page transparently notes a test-cluster limitation: the 2.6.9 distributed instance's read-write health check did not stabilize on the single-node test cluster, so that live run is represented via the standalone capture; the operation completes on standalone and on a healthy distributed cluster.

Summary by CodeRabbit

  • Documentation
    • Added comprehensive Milvus documentation for quickstart, monitoring, TLS setup and reconfiguration, authentication rotation, version updates, restart, scaling, storage migration, volume expansion, and autoscaling.
    • Expanded the docs navigation with new Milvus guide sections and overview pages.
    • Included updated example manifests and step-by-step walkthroughs for both standalone and distributed deployments.

Add user-facing documentation for KubeDB managed Milvus covering both
Standalone and Distributed topologies:

- Quickstart (standalone + distributed deployment)
- Monitoring (Prometheus Operator)
- TLS configuration and reconfigure-TLS (add/rotate/change-issuer/remove)
- Reconfigure, Restart, Update Version
- Vertical and Horizontal scaling
- Rotate Auth, Volume Expansion, Storage Migration
- Recommendation Engine and Compute/Storage Autoscaling

All guides embed live output collected from a running cluster.

Signed-off-by: Tamal Saha <tamal@appscode.com>
@coderabbitai

coderabbitai Bot commented Jun 30, 2026

Copy link
Copy Markdown

Review Change Stack

📝 Walkthrough

Walkthrough

This PR adds a comprehensive set of new documentation pages under docs/guides/milvus, covering quickstart, monitoring, TLS configuration/reconfiguration, reconfigure, restart, rotate-auth, scaling (horizontal/vertical), storage migration, volume expansion, update-version, autoscaling (compute/storage), and recommendation engine guides, along with associated front-matter index pages and example YAML manifests.

Changes

Milvus Documentation

Layer / File(s) Summary
Index/front-matter pages
docs/guides/milvus/_index.md, docs/guides/milvus/*/​_index.md
Adds navigation front-matter pages defining titles and versioned menu placement for each Milvus guide section.
Quickstart
docs/guides/milvus/quickstart/...
Adds standalone and distributed deployment quickstart guides with manifests, verification, and cleanup steps.
Monitoring
docs/guides/milvus/monitoring/...
Adds monitoring overview and Prometheus Operator integration guide, plus example manifests.
TLS configure & reconfigure
docs/guides/milvus/tls/..., docs/guides/milvus/reconfigure-tls/...
Adds TLS overview/configure docs and the reconfigure-tls guide covering add/rotate/change-issuer/remove flows with manifests.
Reconfigure & restart
docs/guides/milvus/reconfigure/..., docs/guides/milvus/restart/...
Adds reconfiguration and restart overview/guides with example secrets, ops requests, and manifests.
Rotate authentication
docs/guides/milvus/rotate-auth/...
Adds rotate-auth overview/guide for standalone and distributed credential rotation with manifests.
Scaling
docs/guides/milvus/scaling/...
Adds horizontal scaling (distributed-only) and vertical scaling overview/guides with manifests.
Storage migration & volume expansion
docs/guides/milvus/storage-migration/..., docs/guides/milvus/volume-expansion/...
Adds storage migration and volume expansion overview/guides with manifests for standalone/distributed.
Update version
docs/guides/milvus/update-version/...
Adds update-version overview/guide and manifests for standalone/distributed upgrades.
Autoscaler
docs/guides/milvus/autoscaler/...
Adds compute and storage autoscaler overview/guides with example manifests.
Recommendation engine
docs/guides/milvus/recommendation/...
Adds recommendation engine guide and example manifests.

Estimated code review effort

🎯 2 (Simple) | ⏱️ ~20 minutes

Suggested reviewers

  • kodiak-appscode

A rabbit hopped through docs anew,
Stacking pages, guide by guide, in view —
TLS, scaling, restart, and more,
Carrots of knowledge for KubeDB's lore.
🐇📚✨ Hop on, reader, the trail is clear!

🚥 Pre-merge checks | ✅ 5
✅ Passed checks (5 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed The title is concise and accurately reflects the main change: adding a suite of Milvus documentation guides.
Docstring Coverage ✅ Passed No functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check.
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch milvus-docs

Warning

Review ran into problems

🔥 Problems

Git: Failed to clone repository. Please run the @coderabbitai full review command to re-trigger a full review. If the issue persists, set path_filters to include or exclude specific files.


Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 14

🧹 Nitpick comments (5)
docs/guides/milvus/monitoring/yamls/distributed.yaml (1)

30-38: 📐 Maintainability & Code Quality | 🔵 Trivial | ⚡ Quick win

Consider whether TLS belongs in the monitoring manifest.

The monitoring guide's distributed manifest includes a TLS configuration. If the monitoring guide is meant to be standalone, users will need the milvus-issuer Issuer from the TLS guide to exist. Either add a prerequisite note or remove TLS from this manifest to keep concerns separated. This also applies to the standalone monitoring manifest.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@docs/guides/milvus/monitoring/yamls/distributed.yaml` around lines 30 - 38,
The distributed monitoring manifest currently embeds TLS configuration that
depends on the milvus-issuer Issuer from the TLS guide, which makes the
monitoring guide non-standalone. Update the monitoring YAMLs by either removing
the tls section from the distributed and standalone manifests, or add an
explicit prerequisite note in the monitoring guide that points users to the TLS
guide and the milvus-issuer dependency. Use the tls block in distributed.yaml as
the locating symbol and apply the same decision consistently to the standalone
monitoring manifest.
docs/guides/milvus/monitoring/yamls/standalone.yaml (1)

28-36: 📐 Maintainability & Code Quality | 🔵 Trivial | ⚡ Quick win

Same TLS-in-monitoring-manifest concern as distributed.yaml: confirm TLS prerequisite or separate concerns.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@docs/guides/milvus/monitoring/yamls/standalone.yaml` around lines 28 - 36,
The TLS block in the monitoring manifest mixes certificate issuer setup with the
monitoring service TLS settings, so please separate or guard these concerns in
the standalone YAML. Update the standalone monitoring manifest to either confirm
the TLS prerequisite explicitly or move the issuerRef setup into the appropriate
cert-management configuration, keeping the TLS modes under the monitoring config
and using the existing tls, issuerRef, external, and internal sections as the
anchors.
docs/guides/milvus/monitoring/using-prometheus-operator.md (1)

153-158: 📐 Maintainability & Code Quality | 🔵 Trivial | ⚡ Quick win

Cleanup section is incomplete for distributed users.

The cleanup only shows deleting milvus-standalone. If a user followed the distributed path, they would also need to delete milvus-cluster. Consider adding both commands or making it generic (e.g., kubectl delete milvus.kubedb.com -n demo --all).

♻️ Suggested cleanup commands
 $ kubectl delete milvus.kubedb.com -n demo milvus-standalone
+ $ kubectl delete milvus.kubedb.com -n demo milvus-cluster
 $ kubectl delete ns demo
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@docs/guides/milvus/monitoring/using-prometheus-operator.md` around lines 153
- 158, The cleanup instructions only cover the standalone Milvus resource, so
users who deployed via the distributed path may leave `milvus-cluster` behind.
Update the “Cleaning up” section to use the same resource type referenced in the
docs and either include both cleanup targets (`milvus-standalone` and
`milvus-cluster`) or switch to a generic deletion approach in the cleanup
commands so both deployment modes are handled.
docs/guides/milvus/autoscaler/compute/guide.md (1)

167-168: 📐 Maintainability & Code Quality | 🔵 Trivial | 💤 Low value

Use simpler resource kind in cleanup command.

kubectl delete milvus.kubedb.com is technically valid but non-idiomatic. Prefer kubectl delete milvus -n demo milvus-standalone for consistency with other KubeDB docs and better readability.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@docs/guides/milvus/autoscaler/compute/guide.md` around lines 167 - 168, The
cleanup command uses the fully qualified resource name, which is valid but
inconsistent with the rest of the docs; update the kubectl delete invocation in
the guide to use the simpler resource kind with the existing milvus-standalone
resource name and namespace, keeping it aligned with other KubeDB examples and
easier to read.
docs/guides/milvus/volume-expansion/guide.md (1)

69-69: 📐 Maintainability & Code Quality | 🔵 Trivial | 💤 Low value

Use consistent kubectl apply style for YAML sources.

Line 69 uses a full GitHub raw URL with the version parameter, but Line 107 uses a local filename volume-expansion-online-standalone.yaml. For consistency and copy-paste reliability, use the same GitHub raw URL pattern for both:

- $ kubectl apply -f volume-expansion-online-standalone.yaml
+ $ kubectl apply -f https://github.com/kubedb/docs/raw/{{< param "info.version" >}}/docs/guides/milvus/volume-expansion/yamls/volume-expansion-online-standalone.yaml

Or if the local filename is intentional (e.g., user downloaded files), add a note explaining when to use which.

Also applies to: 107-107

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@docs/guides/milvus/volume-expansion/guide.md` at line 69, The Milvus
volume-expansion guide uses two different kubectl apply source styles, so make
them consistent in the relevant apply commands referenced by the guide. Update
the standalone offline and online examples so they both use the same GitHub raw
URL pattern with the version parameter, or if you intend to keep the local
filename in the online example, add a short note in the guide explaining when to
use the downloaded file versus the raw URL. Refer to the kubectl apply commands
for volume-expansion-offline-standalone and volume-expansion-online-standalone
when making the change.
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In `@docs/guides/milvus/autoscaler/compute/guide.md`:
- Line 109: The docs snippet contains an unexplained 500m resource request
reference that does not appear in the example manifests, so update the
autoscaler guide text in the Milvus autoscaler compute section to either add the
standalone resource request to the referenced example or remove/rephrase the
“500m request” mention; use the surrounding MilvusOpsRequest and
compute-standalone example context to keep the explanation consistent.

In `@docs/guides/milvus/quickstart/standalone.md`:
- Around line 96-104: The quickstart manifest references the milvus-issuer TLS
issuer even though it is never created in this guide. Update the standalone
quickstart example around the tls section to either remove TLS by default, add a
clear prerequisite step that creates the issuer, or explicitly point readers to
the TLS guide as a required dependency. Keep the guidance aligned with the
existing tls.external and tls.internal configuration so the example is runnable
as written.
- Around line 179-190: The quickstart text hardcodes the rendered config secret
name with an auto-generated hash, which will vary by deployment and break
copy-paste commands. Update the examples around the secret lookup in the
standalone guide to use a dynamic selection method instead of the fixed
milvus-standalone-42559a name, ideally by filtering the Milvus config secret via
labels or a template/jsonpath approach, and keep the surrounding explanation
aligned with the rendered configuration secret and TLS secret names.

In `@docs/guides/milvus/reconfigure-tls/guide.md`:
- Around line 319-325: The cleanup section is incomplete for the distributed
workflow because it only removes the standalone Milvus resource. Update the
cleanup instructions in the “Cleaning up” section to also delete the distributed
Milvus resource created by the cluster flow, using the existing kubectl delete
pattern alongside the current milvus-standalone removal; if needed, split the
cleanup into standalone and distributed variants so both workflows are covered.

In `@docs/guides/milvus/reconfigure/guide.md`:
- Around line 39-251: The reconfigure guide reuses the same MilvusOpsRequest
name, `reconfigure-1`, for both the standalone and distributed examples in the
same namespace, which creates a collision when the second manifest is applied.
Update the distributed example to use a distinct OpsRequest identity (for
example, rename the `MilvusOpsRequest` resource and matching YAML reference) so
it does not conflict with the standalone `reconfigure-1` flow; use the
`reconfigure-standalone.yaml` and `reconfigure-distributed.yaml` examples as the
symbols to adjust.

In `@docs/guides/milvus/restart/guide.md`:
- Around line 107-126: The distributed restart example reuses the same
MilvusOpsRequest name as the standalone section, causing a conflict when the
guide is followed sequentially. Update the distributed restart example in the
restart guide so its MilvusOpsRequest metadata.name is unique from the
standalone restart manifest, and rename the referenced YAML file accordingly;
use the restart-distributed example and the MilvusOpsRequest manifest as the key
symbols to update.

In `@docs/guides/milvus/rotate-auth/guide.md`:
- Around line 128-208: The distributed rotation example reuses the same Secret
and MilvusOpsRequest names as the standalone example, so a sequential reader
will hit name collisions. Update the Milvus rotate-auth guide so the distributed
section uses distinct resource names or add cleanup between the standalone and
distributed walkthroughs, and make sure the final cleanup also deletes the
distributed Milvus resource referenced by milvus-cluster. Check the
rotate-auth-distributed.yaml example, the MilvusOpsRequest name, and the cleanup
commands together so the documented “created” outputs remain accurate.

In `@docs/guides/milvus/scaling/horizontal-scaling/guide.md`:
- Around line 45-46: The horizontal-scaling guide has a replica-count mismatch
between the prose and the YAML example; update the text around the walkthrough
to match the actual `proxy` and `streamingnode` values shown in the manifest, or
adjust the manifest to match the intended counts. Use the surrounding section in
the guide and the YAML snippet for the scale-up example to ensure the
description consistently reflects whether the sample starts at 1 or requests 2
replicas.

In
`@docs/guides/milvus/scaling/horizontal-scaling/yamls/horizontal-scaling-distributed.yaml`:
- Around line 12-13: The replica counts in the distributed Milvus scaling YAML
are inconsistent with the guide examples and verification output. Update the
values in the horizontal-scaling-distributed configuration so they match the
expected scaled state used elsewhere in the guide, or make the guide’s inline
example and verification section consistently reflect the same replica count.
Use the matching symbols proxy and streamingnode to align all references to one
value.

In `@docs/guides/milvus/tls/configure/index.md`:
- Around line 163-213: The inline distributed Milvus manifest in the TLS guide
is missing the monitoring configuration present in the referenced YAML, so
update the manifest block to match the `distributed.yaml` source or explicitly
call out the omission. Use the `spec.topology.distributed` section in this doc
snippet as the place to add the `monitor` settings, ensuring the copied example
produces the same deployment as the linked YAML.
- Around line 215-221: The cleanup section is incomplete because it only removes
the standalone Milvus resources and leaves the distributed deployment artifacts
behind. Update the “Cleaning up” commands in the TLS guide to also delete the
distributed Milvus objects created by the distributed workflow, using the same
resource names referenced in the distributed setup such as milvus-cluster and
milvus-cluster-issuer. Make the cleanup instructions comprehensive so they cover
both standalone and distributed deployments, keeping the same kubectl delete
pattern used in the existing cleanup block.

In `@docs/guides/milvus/update-version/guide.md`:
- Around line 121-135: The MilvusOpsRequest example in the distributed
update-version section reuses the same metadata.name as the standalone example,
which can cause a collision if both are applied in the same namespace. Update
the example name in the distributed scenario to a distinct value in the
MilvusOpsRequest manifest, or add a clear note that it is intentionally
separate; use the existing example block and metadata.name field as the location
to adjust.

In `@docs/guides/milvus/volume-expansion/guide.md`:
- Line 136: The distributed online MilvusOpsRequest currently reuses the same
name as the standalone example, causing a collision if both are applied in one
namespace. Rename the distributed OpsRequest in the volume-expansion guide to a
unique value, and update any surrounding guide text that refers to it so the
example names stay consistent. Also fix the cleanup instructions in the same
guide to remove the distributed resource as well as the standalone one by
updating the cleanup block around the volume-expansion section, using the
existing MilvusOpsRequest and milvus-cluster/milvus-standalone examples as the
reference points.

In `@docs/guides/milvus/volume-expansion/overview.md`:
- Around line 50-56: The volume expansion flow in the Milvus docs currently
implies every `MilvusOpsRequest` pauses and resumes the database, which is only
true for Offline mode. Update the overview steps to distinguish the `Offline`
and `Online` paths in the `MilvusOpsRequest` volume expansion flow: for Offline,
describe validate → pause → patch PVCs → update spec → resume → mark successful;
for Online, describe validate → patch PVCs without pausing → mark successful.
Use the existing step text in the overview section to reword step 2 and step 5
so they apply only to Offline expansion.

---

Nitpick comments:
In `@docs/guides/milvus/autoscaler/compute/guide.md`:
- Around line 167-168: The cleanup command uses the fully qualified resource
name, which is valid but inconsistent with the rest of the docs; update the
kubectl delete invocation in the guide to use the simpler resource kind with the
existing milvus-standalone resource name and namespace, keeping it aligned with
other KubeDB examples and easier to read.

In `@docs/guides/milvus/monitoring/using-prometheus-operator.md`:
- Around line 153-158: The cleanup instructions only cover the standalone Milvus
resource, so users who deployed via the distributed path may leave
`milvus-cluster` behind. Update the “Cleaning up” section to use the same
resource type referenced in the docs and either include both cleanup targets
(`milvus-standalone` and `milvus-cluster`) or switch to a generic deletion
approach in the cleanup commands so both deployment modes are handled.

In `@docs/guides/milvus/monitoring/yamls/distributed.yaml`:
- Around line 30-38: The distributed monitoring manifest currently embeds TLS
configuration that depends on the milvus-issuer Issuer from the TLS guide, which
makes the monitoring guide non-standalone. Update the monitoring YAMLs by either
removing the tls section from the distributed and standalone manifests, or add
an explicit prerequisite note in the monitoring guide that points users to the
TLS guide and the milvus-issuer dependency. Use the tls block in
distributed.yaml as the locating symbol and apply the same decision consistently
to the standalone monitoring manifest.

In `@docs/guides/milvus/monitoring/yamls/standalone.yaml`:
- Around line 28-36: The TLS block in the monitoring manifest mixes certificate
issuer setup with the monitoring service TLS settings, so please separate or
guard these concerns in the standalone YAML. Update the standalone monitoring
manifest to either confirm the TLS prerequisite explicitly or move the issuerRef
setup into the appropriate cert-management configuration, keeping the TLS modes
under the monitoring config and using the existing tls, issuerRef, external, and
internal sections as the anchors.

In `@docs/guides/milvus/volume-expansion/guide.md`:
- Line 69: The Milvus volume-expansion guide uses two different kubectl apply
source styles, so make them consistent in the relevant apply commands referenced
by the guide. Update the standalone offline and online examples so they both use
the same GitHub raw URL pattern with the version parameter, or if you intend to
keep the local filename in the online example, add a short note in the guide
explaining when to use the downloaded file versus the raw URL. Refer to the
kubectl apply commands for volume-expansion-offline-standalone and
volume-expansion-online-standalone when making the change.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro Plus

Run ID: 235d559a-de88-4e85-bdfa-35e9d8d48e45

📥 Commits

Reviewing files that changed from the base of the PR and between 405b88b and 4fee187.

📒 Files selected for processing (85)
  • docs/guides/milvus/_index.md
  • docs/guides/milvus/autoscaler/_index.md
  • docs/guides/milvus/autoscaler/compute/_index.md
  • docs/guides/milvus/autoscaler/compute/guide.md
  • docs/guides/milvus/autoscaler/compute/overview.md
  • docs/guides/milvus/autoscaler/compute/yamls/compute-distributed.yaml
  • docs/guides/milvus/autoscaler/compute/yamls/compute-standalone.yaml
  • docs/guides/milvus/autoscaler/storage/_index.md
  • docs/guides/milvus/autoscaler/storage/guide.md
  • docs/guides/milvus/autoscaler/storage/overview.md
  • docs/guides/milvus/autoscaler/storage/yamls/storage-distributed.yaml
  • docs/guides/milvus/autoscaler/storage/yamls/storage-standalone.yaml
  • docs/guides/milvus/monitoring/_index.md
  • docs/guides/milvus/monitoring/overview.md
  • docs/guides/milvus/monitoring/using-prometheus-operator.md
  • docs/guides/milvus/monitoring/yamls/distributed.yaml
  • docs/guides/milvus/monitoring/yamls/standalone.yaml
  • docs/guides/milvus/quickstart/_index.md
  • docs/guides/milvus/quickstart/distributed.md
  • docs/guides/milvus/quickstart/standalone.md
  • docs/guides/milvus/quickstart/yamls/distributed.yaml
  • docs/guides/milvus/quickstart/yamls/standalone.yaml
  • docs/guides/milvus/recommendation/_index.md
  • docs/guides/milvus/recommendation/guide.md
  • docs/guides/milvus/recommendation/yamls/distributed.yaml
  • docs/guides/milvus/recommendation/yamls/standalone.yaml
  • docs/guides/milvus/reconfigure-tls/_index.md
  • docs/guides/milvus/reconfigure-tls/guide.md
  • docs/guides/milvus/reconfigure-tls/overview.md
  • docs/guides/milvus/reconfigure-tls/yamls/issuer.yaml
  • docs/guides/milvus/reconfigure-tls/yamls/reconfigureTls-add-distributed.yaml
  • docs/guides/milvus/reconfigure-tls/yamls/reconfigureTls-add-new-issuer-distributed.yaml
  • docs/guides/milvus/reconfigure-tls/yamls/reconfigureTls-add-new-issuer-standalone.yaml
  • docs/guides/milvus/reconfigure-tls/yamls/reconfigureTls-add-standalone.yaml
  • docs/guides/milvus/reconfigure-tls/yamls/reconfigureTls-remove-distributed.yaml
  • docs/guides/milvus/reconfigure-tls/yamls/reconfigureTls-remove-standalone.yaml
  • docs/guides/milvus/reconfigure-tls/yamls/reconfigureTls-rotate-distributed.yaml
  • docs/guides/milvus/reconfigure-tls/yamls/reconfigureTls-rotate-standalone.yaml
  • docs/guides/milvus/reconfigure/_index.md
  • docs/guides/milvus/reconfigure/guide.md
  • docs/guides/milvus/reconfigure/overview.md
  • docs/guides/milvus/reconfigure/yamls/reconfigure-distributed.yaml
  • docs/guides/milvus/reconfigure/yamls/reconfigure-standalone.yaml
  • docs/guides/milvus/restart/_index.md
  • docs/guides/milvus/restart/guide.md
  • docs/guides/milvus/restart/yamls/restart-distributed.yaml
  • docs/guides/milvus/restart/yamls/restart-standalone.yaml
  • docs/guides/milvus/rotate-auth/_index.md
  • docs/guides/milvus/rotate-auth/guide.md
  • docs/guides/milvus/rotate-auth/overview.md
  • docs/guides/milvus/rotate-auth/yamls/rotate-auth-distributed.yaml
  • docs/guides/milvus/rotate-auth/yamls/rotate-auth-standalone.yaml
  • docs/guides/milvus/scaling/_index.md
  • docs/guides/milvus/scaling/horizontal-scaling/_index.md
  • docs/guides/milvus/scaling/horizontal-scaling/guide.md
  • docs/guides/milvus/scaling/horizontal-scaling/overview.md
  • docs/guides/milvus/scaling/horizontal-scaling/yamls/horizontal-scaling-distributed.yaml
  • docs/guides/milvus/scaling/vertical-scaling/_index.md
  • docs/guides/milvus/scaling/vertical-scaling/guide.md
  • docs/guides/milvus/scaling/vertical-scaling/overview.md
  • docs/guides/milvus/scaling/vertical-scaling/yamls/vertical-scaling-distributed.yaml
  • docs/guides/milvus/scaling/vertical-scaling/yamls/vertical-scaling-standalone.yaml
  • docs/guides/milvus/storage-migration/_index.md
  • docs/guides/milvus/storage-migration/guide.md
  • docs/guides/milvus/storage-migration/yamls/storage-migration-distributed.yaml
  • docs/guides/milvus/storage-migration/yamls/storage-migration-standalone.yaml
  • docs/guides/milvus/tls/_index.md
  • docs/guides/milvus/tls/configure/index.md
  • docs/guides/milvus/tls/configure/yamls/cluster-issuer.yaml
  • docs/guides/milvus/tls/configure/yamls/distributed.yaml
  • docs/guides/milvus/tls/configure/yamls/issuer.yaml
  • docs/guides/milvus/tls/configure/yamls/standalone.yaml
  • docs/guides/milvus/tls/overview.md
  • docs/guides/milvus/update-version/_index.md
  • docs/guides/milvus/update-version/guide.md
  • docs/guides/milvus/update-version/overview.md
  • docs/guides/milvus/update-version/yamls/update-version-distributed.yaml
  • docs/guides/milvus/update-version/yamls/update-version-standalone.yaml
  • docs/guides/milvus/volume-expansion/_index.md
  • docs/guides/milvus/volume-expansion/guide.md
  • docs/guides/milvus/volume-expansion/overview.md
  • docs/guides/milvus/volume-expansion/yamls/volume-expansion-offline-distributed.yaml
  • docs/guides/milvus/volume-expansion/yamls/volume-expansion-offline-standalone.yaml
  • docs/guides/milvus/volume-expansion/yamls/volume-expansion-online-distributed.yaml
  • docs/guides/milvus/volume-expansion/yamls/volume-expansion-online-standalone.yaml

}
```

Here the recommended `target` is `cpu: 143m` / `memory: 256Mi` (the standalone idles well below its `500m` request). Because the recommendation differs from the current request by more than `resourceDiffPercentage` (10%) and stays within `minAllowed`/`maxAllowed`, the autoscaler creates a `VerticalScaling` `MilvusOpsRequest`. This is recorded in the autoscaler status as a `CreateOpsRequest` condition:

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🎯 Functional Correctness | 🟡 Minor | ⚡ Quick win

Remove or explain the unexplained 500m reference.

The text says "the standalone idles well below its 500m request", but no 500m request is shown in the preceding compute-standalone.yaml or deployment output. Either add the initial resource request to the example manifest or remove this reference to avoid reader confusion.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@docs/guides/milvus/autoscaler/compute/guide.md` at line 109, The docs snippet
contains an unexplained 500m resource request reference that does not appear in
the example manifests, so update the autoscaler guide text in the Milvus
autoscaler compute section to either add the standalone resource request to the
referenced example or remove/rephrase the “500m request” mention; use the
surrounding MilvusOpsRequest and compute-standalone example context to keep the
explanation consistent.

Comment on lines +96 to +104
tls:
issuerRef:
name: milvus-issuer
kind: Issuer
apiGroup: "cert-manager.io"
external:
mode: mTLS
internal:
mode: TLS

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🎯 Functional Correctness | 🟠 Major | ⚡ Quick win

TLS issuer is not created in this guide.

The manifest references issuerRef.name: milvus-issuer, but this issuer is never created in the quickstart. A reader applying this YAML verbatim will fail because the issuer does not exist. Either add a prerequisite step to create the issuer (or reference the TLS guide more prominently as a hard dependency), or change the example to disable TLS by default and move the TLS-enabled variant to the TLS guide.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@docs/guides/milvus/quickstart/standalone.md` around lines 96 - 104, The
quickstart manifest references the milvus-issuer TLS issuer even though it is
never created in this guide. Update the standalone quickstart example around the
tls section to either remove TLS by default, add a clear prerequisite step that
creates the issuer, or explicitly point readers to the TLS guide as a required
dependency. Keep the guidance aligned with the existing tls.external and
tls.internal configuration so the example is runnable as written.

Comment on lines +179 to +190
$ kubectl get secret -n demo | grep milvus-standalone
milvus-standalone-42559a Opaque 2 92s
milvus-standalone-auth kubernetes.io/basic-auth 2 92s
milvus-standalone-client-cert kubernetes.io/tls 4 91s
milvus-standalone-server-cert kubernetes.io/tls 3 91s

$ kubectl get secret milvus-standalone-auth -n demo -o jsonpath='{.data.username}' | base64 -d
root
```

The other secrets are the rendered configuration secret (`milvus-standalone-42559a`, holding `milvus.yaml` and `glog.conf`) and the TLS certificate secrets (`-server-cert`, `-client-cert`).

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

📐 Maintainability & Code Quality | 🟠 Major | ⚡ Quick win

Do not hardcode the auto-generated config secret suffix.

Lines 180 and 222 reference milvus-standalone-42559a, where 42559a is an auto-generated hash that will differ for every deployment. Readers copy-pasting these commands will get "not found" errors. Replace with a dynamic lookup pattern, e.g.:

kubectl get secret -n demo -l app.kubernetes.io/instance=milvus-standalone | grep -E 'milvus-standalone-[a-z0-9]+'

or use jsonpath/go-template to select the config secret by label or type.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@docs/guides/milvus/quickstart/standalone.md` around lines 179 - 190, The
quickstart text hardcodes the rendered config secret name with an auto-generated
hash, which will vary by deployment and break copy-paste commands. Update the
examples around the secret lookup in the standalone guide to use a dynamic
selection method instead of the fixed milvus-standalone-42559a name, ideally by
filtering the Milvus config secret via labels or a template/jsonpath approach,
and keep the surrounding explanation aligned with the rendered configuration
secret and TLS secret names.

Comment on lines +319 to +325
## Cleaning up

```bash
$ kubectl delete milvusopsrequest -n demo mvops-add-tls mvops-rotate mv-change-issuer mvops-remove
$ kubectl delete milvus.kubedb.com -n demo milvus-standalone
$ kubectl delete ns demo
```

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

📐 Maintainability & Code Quality | 🟡 Minor | ⚡ Quick win

Incomplete cleanup instructions for distributed workflow.

The cleanup section only deletes milvus-standalone, but users following the distributed section would also have created milvus-cluster. Add milvus-cluster to the cleanup command or split into standalone/distributed cleanup steps.

  $ kubectl delete milvusopsrequest -n demo mvops-add-tls mvops-rotate mv-change-issuer mvops-remove
- $ kubectl delete milvus.kubedb.com -n demo milvus-standalone
+ $ kubectl delete milvus.kubedb.com -n demo milvus-standalone milvus-cluster
  $ kubectl delete ns demo
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
## Cleaning up
```bash
$ kubectl delete milvusopsrequest -n demo mvops-add-tls mvops-rotate mv-change-issuer mvops-remove
$ kubectl delete milvus.kubedb.com -n demo milvus-standalone
$ kubectl delete ns demo
```
## Cleaning up
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@docs/guides/milvus/reconfigure-tls/guide.md` around lines 319 - 325, The
cleanup section is incomplete for the distributed workflow because it only
removes the standalone Milvus resource. Update the cleanup instructions in the
“Cleaning up” section to also delete the distributed Milvus resource created by
the cluster flow, using the existing kubectl delete pattern alongside the
current milvus-standalone removal; if needed, split the cleanup into standalone
and distributed variants so both workflows are covered.

Comment on lines +39 to +251
## Reconfigure Standalone Milvus

### Deploy Milvus

Deploy a standalone Milvus and wait for it to become `Ready` (see the [standalone quickstart](/docs/guides/milvus/quickstart/standalone.md)):

```bash
$ kubectl get milvuses.kubedb.com -n demo milvus-standalone
NAME VERSION STATUS AGE
milvus-standalone 2.6.11 Ready 2m
```

### Apply the Reconfigure OpsRequest

We will apply a new configuration through a config secret and an inline `applyConfig`. The OpsRequest below first references a config secret (`mv-configuration`), then overrides part of it inline:

`reconfigure-standalone.yaml`

```yaml
---
apiVersion: v1
kind: Secret
metadata:
name: mv-configuration
namespace: demo
type: Opaque
stringData:
milvus.yaml: |
log:
level: debug
file:
maxAge: 20
queryNode:
gracefulTime: 10
dataNode:
segment:
maxSize: 400
---
apiVersion: ops.kubedb.com/v1alpha1
kind: MilvusOpsRequest
metadata:
name: reconfigure-1
namespace: demo
spec:
type: Reconfigure
databaseRef:
name: milvus-standalone
configuration:
removeCustomConfig: true
configSecret:
name: mv-configuration
applyConfig:
milvus.yaml: |
log:
level: info
file:
maxAge: 30
queryNode:
gracefulTime: 500
restart: "false"
timeout: 5m
apply: IfReady
```

Here,

- `spec.databaseRef.name` is the Milvus we are reconfiguring.
- `spec.configuration.configSecret` references a secret whose `milvus.yaml` holds configuration.
- `spec.configuration.applyConfig` merges an inline `milvus.yaml` on top — here the final, effective values for `log` and `queryNode`.
- `spec.configuration.removeCustomConfig: true` discards any previously applied custom configuration first.
- `spec.configuration.restart: "false"` requests the configuration be applied without forcing a restart.

```bash
$ kubectl apply -f https://github.com/kubedb/docs/raw/{{< param "info.version" >}}/docs/guides/milvus/reconfigure/yamls/reconfigure-standalone.yaml
secret/mv-configuration created
milvusopsrequest.ops.kubedb.com/reconfigure-1 created
```

### Watch Progress

```bash
$ kubectl get milvusopsrequest -n demo
NAME TYPE STATUS AGE
reconfigure-1 Reconfigure Successful 28s
```

```bash
$ kubectl describe milvusopsrequest reconfigure-1 -n demo
...
Status:
Conditions:
Message: Milvus ops-request has started to reconfigure Milvus nodes
Reason: Reconfigure
Type: Reconfigure
Message: Successfully prepared user provided apply configs
Reason: PrepareApplyConfig
Type: PrepareApplyConfig
Message: successfully reconciled the milvus with new configuration
Reason: UpdatePetSets
Type: UpdatePetSets
Message: Successfully completed reconfigure milvus
Reason: Successful
Type: Successful
Phase: Successful
Events:
Normal Starting Pausing Milvus databse: demo/milvus-standalone
Normal UpdatePetSets successfully reconciled the milvus with new configuration
Normal Starting Resuming Milvus database: demo/milvus-standalone
Normal Successful Successfully resumed Milvus database: demo/milvus-standalone for MilvusOpsRequest: reconfigure-1
```

### Verify the New Configuration

The applied values are rendered into the configuration secret's `milvus.yaml`:

```bash
$ CFG=$(kubectl get secret -n demo -o name | grep -oE 'milvus-standalone-[a-f0-9]{6}' | head -1)
$ kubectl get secret $CFG -n demo -o jsonpath='{.data.milvus\.yaml}' | base64 -d | grep -A3 -E '^log:|^queryNode:'
log:
file:
maxAge: 30
maxBackups: 20
maxSize: 300
...
level: info
queryNode:
gracefulTime: 500
port: 19536
```

The `log.level` is now `info`, `log.file.maxAge` is `30`, and `queryNode.gracefulTime` is `500` — exactly the values supplied through `applyConfig`.

## Reconfigure Distributed Milvus

For a distributed Milvus, the flow is identical; only `spec.databaseRef.name` points at the distributed database (`milvus-cluster`). The same `milvus.yaml` configuration is rendered into the configuration secret and propagated to every distributed role (`mixcoord`, `datanode`, `querynode`, `streamingnode`, `proxy`).

`reconfigure-distributed.yaml`

```yaml
---
apiVersion: v1
kind: Secret
metadata:
name: mv-configuration
namespace: demo
type: Opaque
stringData:
milvus.yaml: |
log:
level: debug
file:
maxAge: 20
queryNode:
gracefulTime: 10
dataNode:
segment:
maxSize: 400
---
apiVersion: ops.kubedb.com/v1alpha1
kind: MilvusOpsRequest
metadata:
name: reconfigure-1
namespace: demo
spec:
type: Reconfigure
databaseRef:
name: milvus-cluster
configuration:
removeCustomConfig: true
configSecret:
name: mv-configuration
applyConfig:
milvus.yaml: |
log:
level: info
file:
maxAge: 30
queryNode:
gracefulTime: 500
restart: "false"
timeout: 5m
apply: IfReady
```

```bash
$ kubectl apply -f https://github.com/kubedb/docs/raw/{{< param "info.version" >}}/docs/guides/milvus/reconfigure/yamls/reconfigure-distributed.yaml
secret/mv-configuration created
milvusopsrequest.ops.kubedb.com/reconfigure-1 created

$ kubectl get milvusopsrequest reconfigure-1 -n demo
NAME TYPE STATUS AGE
reconfigure-1 Reconfigure Successful 21s
```

The applied configuration is rendered into the cluster's configuration secret and propagated to all roles:

```bash
$ CFG=$(kubectl get secret -n demo -o name | grep -oE 'milvus-cluster-[a-f0-9]{6}' | head -1)
$ kubectl get secret $CFG -n demo -o jsonpath='{.data.milvus\.yaml}' | base64 -d | grep -A2 -E '^log:|^queryNode:|level:'
log:
file:
maxAge: 30
maxBackups: 20
...
level: info
queryNode:
enableDisk: true
gracefulTime: 500
port: 21123
```

As with standalone, `log.level` is now `info`, `log.file.maxAge` is `30`, and `queryNode.gracefulTime` is `500`.

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🎯 Functional Correctness | 🟠 Major | ⚡ Quick win

OpsRequest name reconfigure-1 reused without cleanup between standalone and distributed sections.

The standalone section creates a MilvusOpsRequest named reconfigure-1 targeting milvus-standalone. The distributed section then applies another manifest with the same name reconfigure-1 but databaseRef.name: milvus-cluster, in the same demo namespace, with no intermediate kubectl delete step. If a reader follows both sections sequentially (as written), the second kubectl apply will either fail due to immutable OpsRequest spec fields or silently confuse which database it targets.

📝 Suggested fix
 ## Reconfigure Distributed Milvus
+
+> Before running this section, clean up the standalone example's OpsRequest: `kubectl delete milvusopsrequest -n demo reconfigure-1`

Or rename the distributed OpsRequest (and its yaml file) to reconfigure-2 to avoid the collision entirely.

📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
## Reconfigure Standalone Milvus
### Deploy Milvus
Deploy a standalone Milvus and wait for it to become `Ready` (see the [standalone quickstart](/docs/guides/milvus/quickstart/standalone.md)):
```bash
$ kubectl get milvuses.kubedb.com -n demo milvus-standalone
NAME VERSION STATUS AGE
milvus-standalone 2.6.11 Ready 2m
```
### Apply the Reconfigure OpsRequest
We will apply a new configuration through a config secret and an inline `applyConfig`. The OpsRequest below first references a config secret (`mv-configuration`), then overrides part of it inline:
`reconfigure-standalone.yaml`
```yaml
---
apiVersion: v1
kind: Secret
metadata:
name: mv-configuration
namespace: demo
type: Opaque
stringData:
milvus.yaml: |
log:
level: debug
file:
maxAge: 20
queryNode:
gracefulTime: 10
dataNode:
segment:
maxSize: 400
---
apiVersion: ops.kubedb.com/v1alpha1
kind: MilvusOpsRequest
metadata:
name: reconfigure-1
namespace: demo
spec:
type: Reconfigure
databaseRef:
name: milvus-standalone
configuration:
removeCustomConfig: true
configSecret:
name: mv-configuration
applyConfig:
milvus.yaml: |
log:
level: info
file:
maxAge: 30
queryNode:
gracefulTime: 500
restart: "false"
timeout: 5m
apply: IfReady
```
Here,
- `spec.databaseRef.name` is the Milvus we are reconfiguring.
- `spec.configuration.configSecret` references a secret whose `milvus.yaml` holds configuration.
- `spec.configuration.applyConfig` merges an inline `milvus.yaml` on top — here the final, effective values for `log` and `queryNode`.
- `spec.configuration.removeCustomConfig: true` discards any previously applied custom configuration first.
- `spec.configuration.restart: "false"` requests the configuration be applied without forcing a restart.
```bash
$ kubectl apply -f https://github.com/kubedb/docs/raw/{{< param "info.version" >}}/docs/guides/milvus/reconfigure/yamls/reconfigure-standalone.yaml
secret/mv-configuration created
milvusopsrequest.ops.kubedb.com/reconfigure-1 created
```
### Watch Progress
```bash
$ kubectl get milvusopsrequest -n demo
NAME TYPE STATUS AGE
reconfigure-1 Reconfigure Successful 28s
```
```bash
$ kubectl describe milvusopsrequest reconfigure-1 -n demo
...
Status:
Conditions:
Message: Milvus ops-request has started to reconfigure Milvus nodes
Reason: Reconfigure
Type: Reconfigure
Message: Successfully prepared user provided apply configs
Reason: PrepareApplyConfig
Type: PrepareApplyConfig
Message: successfully reconciled the milvus with new configuration
Reason: UpdatePetSets
Type: UpdatePetSets
Message: Successfully completed reconfigure milvus
Reason: Successful
Type: Successful
Phase: Successful
Events:
Normal Starting Pausing Milvus databse: demo/milvus-standalone
Normal UpdatePetSets successfully reconciled the milvus with new configuration
Normal Starting Resuming Milvus database: demo/milvus-standalone
Normal Successful Successfully resumed Milvus database: demo/milvus-standalone for MilvusOpsRequest: reconfigure-1
```
### Verify the New Configuration
The applied values are rendered into the configuration secret's `milvus.yaml`:
```bash
$ CFG=$(kubectl get secret -n demo -o name | grep -oE 'milvus-standalone-[a-f0-9]{6}' | head -1)
$ kubectl get secret $CFG -n demo -o jsonpath='{.data.milvus\.yaml}' | base64 -d | grep -A3 -E '^log:|^queryNode:'
log:
file:
maxAge: 30
maxBackups: 20
maxSize: 300
...
level: info
queryNode:
gracefulTime: 500
port: 19536
```
The `log.level` is now `info`, `log.file.maxAge` is `30`, and `queryNode.gracefulTime` is `500` — exactly the values supplied through `applyConfig`.
## Reconfigure Distributed Milvus
For a distributed Milvus, the flow is identical; only `spec.databaseRef.name` points at the distributed database (`milvus-cluster`). The same `milvus.yaml` configuration is rendered into the configuration secret and propagated to every distributed role (`mixcoord`, `datanode`, `querynode`, `streamingnode`, `proxy`).
`reconfigure-distributed.yaml`
```yaml
---
apiVersion: v1
kind: Secret
metadata:
name: mv-configuration
namespace: demo
type: Opaque
stringData:
milvus.yaml: |
log:
level: debug
file:
maxAge: 20
queryNode:
gracefulTime: 10
dataNode:
segment:
maxSize: 400
---
apiVersion: ops.kubedb.com/v1alpha1
kind: MilvusOpsRequest
metadata:
name: reconfigure-1
namespace: demo
spec:
type: Reconfigure
databaseRef:
name: milvus-cluster
configuration:
removeCustomConfig: true
configSecret:
name: mv-configuration
applyConfig:
milvus.yaml: |
log:
level: info
file:
maxAge: 30
queryNode:
gracefulTime: 500
restart: "false"
timeout: 5m
apply: IfReady
```
```bash
$ kubectl apply -f https://github.com/kubedb/docs/raw/{{< param "info.version" >}}/docs/guides/milvus/reconfigure/yamls/reconfigure-distributed.yaml
secret/mv-configuration created
milvusopsrequest.ops.kubedb.com/reconfigure-1 created
$ kubectl get milvusopsrequest reconfigure-1 -n demo
NAME TYPE STATUS AGE
reconfigure-1 Reconfigure Successful 21s
```
The applied configuration is rendered into the cluster's configuration secret and propagated to all roles:
```bash
$ CFG=$(kubectl get secret -n demo -o name | grep -oE 'milvus-cluster-[a-f0-9]{6}' | head -1)
$ kubectl get secret $CFG -n demo -o jsonpath='{.data.milvus\.yaml}' | base64 -d | grep -A2 -E '^log:|^queryNode:|level:'
log:
file:
maxAge: 30
maxBackups: 20
...
level: info
queryNode:
enableDisk: true
gracefulTime: 500
port: 21123
```
As with standalone, `log.level` is now `info`, `log.file.maxAge` is `30`, and `queryNode.gracefulTime` is `500`.
## Reconfigure Distributed Milvus
> Before running this section, clean up the standalone example's OpsRequest: `kubectl delete milvusopsrequest -n demo reconfigure-1`
For a distributed Milvus, the flow is identical; only `spec.databaseRef.name` points at the distributed database (`milvus-cluster`). The same `milvus.yaml` configuration is rendered into the configuration secret and propagated to every distributed role (`mixcoord`, `datanode`, `querynode`, `streamingnode`, `proxy`).
`reconfigure-distributed.yaml`
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@docs/guides/milvus/reconfigure/guide.md` around lines 39 - 251, The
reconfigure guide reuses the same MilvusOpsRequest name, `reconfigure-1`, for
both the standalone and distributed examples in the same namespace, which
creates a collision when the second manifest is applied. Update the distributed
example to use a distinct OpsRequest identity (for example, rename the
`MilvusOpsRequest` resource and matching YAML reference) so it does not conflict
with the standalone `reconfigure-1` flow; use the `reconfigure-standalone.yaml`
and `reconfigure-distributed.yaml` examples as the symbols to adjust.

Comment on lines +163 to +213
```yaml
apiVersion: kubedb.com/v1alpha2
kind: Milvus
metadata:
name: milvus-cluster
namespace: demo
spec:
version: "2.6.11"
objectStorage:
configSecret:
name: "my-release-minio"
topology:
mode: Distributed
distributed:
streamingnode:
storageType: Durable
storage:
accessModes:
- ReadWriteOnce
storageClassName: local-path
resources:
requests:
storage: 1Gi
tls:
issuerRef:
name: milvus-issuer
kind: Issuer
apiGroup: "cert-manager.io"
external:
mode: mTLS
internal:
mode: TLS
```

After it becomes `Ready`, the certificate secrets exist, the certificates are mounted into every role's pods, and the AppBinding scheme is `https`:

```bash
$ kubectl get secret -n demo | grep -E 'milvus-cluster-(server|client)-cert'
milvus-cluster-client-cert kubernetes.io/tls 4 4m
milvus-cluster-server-cert kubernetes.io/tls 3 4m

$ kubectl exec -n demo milvus-cluster-mixcoord-0 -c milvus -- ls /milvus/tls
ca.pem
client.key
client.pem
server.key
server.pem

$ kubectl get appbinding milvus-cluster -n demo -o jsonpath='{.spec.clientConfig.service.scheme}'
https
```

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

📐 Maintainability & Code Quality | 🟡 Minor | ⚡ Quick win

Distributed manifest in doc omits monitoring present in referenced YAML.

The inline distributed manifest (lines 163-195) does not include the monitor section, but the actual distributed.yaml file in the yamls folder includes Prometheus Operator monitoring configuration. Users copying from the inline code block will get a different deployment than those using the linked YAML file. Align the inline manifest with the referenced YAML or add a note explaining the difference.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@docs/guides/milvus/tls/configure/index.md` around lines 163 - 213, The inline
distributed Milvus manifest in the TLS guide is missing the monitoring
configuration present in the referenced YAML, so update the manifest block to
match the `distributed.yaml` source or explicitly call out the omission. Use the
`spec.topology.distributed` section in this doc snippet as the place to add the
`monitor` settings, ensuring the copied example produces the same deployment as
the linked YAML.

Comment on lines +215 to +221
## Cleaning up

```bash
$ kubectl delete milvus.kubedb.com -n demo milvus-standalone
$ kubectl delete issuer -n demo milvus-issuer
$ kubectl delete secret -n demo milvus-ca
$ kubectl delete ns demo

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

📐 Maintainability & Code Quality | 🟡 Minor | ⚡ Quick win

Cleanup section only removes standalone resources, not distributed.

The guide demonstrates both standalone and distributed TLS-secured Milvus deployments, but the cleanup commands only delete milvus-standalone, milvus-issuer, milvus-ca, and the namespace. If a user followed the distributed section, milvus-cluster and milvus-cluster-issuer (from cluster-issuer.yaml) would remain. Add cleanup commands for the distributed resources or make the cleanup section comprehensive.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@docs/guides/milvus/tls/configure/index.md` around lines 215 - 221, The
cleanup section is incomplete because it only removes the standalone Milvus
resources and leaves the distributed deployment artifacts behind. Update the
“Cleaning up” commands in the TLS guide to also delete the distributed Milvus
objects created by the distributed workflow, using the same resource names
referenced in the distributed setup such as milvus-cluster and
milvus-cluster-issuer. Make the cleanup instructions comprehensive so they cover
both standalone and distributed deployments, keeping the same kubectl delete
pattern used in the existing cleanup block.

Comment on lines +121 to +135
```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
```

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🎯 Functional Correctness | 🟡 Minor | ⚡ Quick win

OpsRequest name collides with standalone example.

The distributed MilvusOpsRequest uses name: milvus-update-version, identical to the standalone example (lines 54-68). If a user works through both sections in the same namespace, the second apply would overwrite the first. Use a distinct name like milvus-update-version-distributed to avoid collision, or add a note that these are separate scenarios.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@docs/guides/milvus/update-version/guide.md` around lines 121 - 135, The
MilvusOpsRequest example in the distributed update-version section reuses the
same metadata.name as the standalone example, which can cause a collision if
both are applied in the same namespace. Update the example name in the
distributed scenario to a distinct value in the MilvusOpsRequest manifest, or
add a clear note that it is intentionally separate; use the existing example
block and metadata.name field as the location to adjust.

apiVersion: ops.kubedb.com/v1alpha1
kind: MilvusOpsRequest
metadata:
name: volume-expansion-online

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🎯 Functional Correctness | 🟡 Minor | ⚡ Quick win

Fix OpsRequest name collision and incomplete cleanup.

The distributed online MilvusOpsRequest is also named volume-expansion-online (line 136), which collides with the standalone online OpsRequest. If a user runs both examples in the same namespace, the second apply would overwrite the first. Rename the distributed example:

-  name: volume-expansion-online
+  name: volume-expansion-online-distributed

And update the guide text and cleanup accordingly.

Additionally, the cleanup section (lines 168-174) only removes milvus-standalone but not milvus-cluster. Add:

kubectl delete milvus.kubedb.com -n demo milvus-cluster

Or add a note that cleanup depends on which topology was deployed.

Also applies to: 168-174

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@docs/guides/milvus/volume-expansion/guide.md` at line 136, The distributed
online MilvusOpsRequest currently reuses the same name as the standalone
example, causing a collision if both are applied in one namespace. Rename the
distributed OpsRequest in the volume-expansion guide to a unique value, and
update any surrounding guide text that refers to it so the example names stay
consistent. Also fix the cleanup instructions in the same guide to remove the
distributed resource as well as the standalone one by updating the cleanup block
around the volume-expansion section, using the existing MilvusOpsRequest and
milvus-cluster/milvus-standalone examples as the reference points.

Comment on lines +50 to +56
The flow is:

1. A user creates a `MilvusOpsRequest` of type `VolumeExpansion`.
2. The operator validates the request and pauses the `Milvus` database.
3. The operator patches the PVCs to the new size and waits for the CSI driver to complete the resize.
4. The new size is reflected in `spec.storage` (standalone) or `spec.topology.distributed.streamingnode.storage` (distributed).
5. The operator resumes the database and marks the `MilvusOpsRequest` as `Successful`.

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🎯 Functional Correctness | 🟡 Minor | ⚡ Quick win

Clarify that pause/resume only applies to Offline expansion.

The flow states the operator "pauses the Milvus database" (step 2) and "resumes the database" (step 5). For mode: Online, the volume is expanded without taking the pod down, so describing a pause/resume cycle is misleading. Please distinguish the flows:

  • Offline: validate → pause → patch PVC → update spec → resume → mark successful.
  • Online: validate → patch PVC (no pause) → mark successful.

Or reword step 2 to say the operator "validates the request and, for Offline mode, pauses the database."

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@docs/guides/milvus/volume-expansion/overview.md` around lines 50 - 56, The
volume expansion flow in the Milvus docs currently implies every
`MilvusOpsRequest` pauses and resumes the database, which is only true for
Offline mode. Update the overview steps to distinguish the `Offline` and
`Online` paths in the `MilvusOpsRequest` volume expansion flow: for Offline,
describe validate → pause → patch PVCs → update spec → resume → mark successful;
for Online, describe validate → patch PVCs without pausing → mark successful.
Use the existing step text in the overview section to reword step 2 and step 5
so they apply only to Offline expansion.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant