跳到主要内容
版本:v2.6.x

使用 Milvus Operator 在 Kubernetes 中运行 Milvus

本页面介绍了如何使用 Milvus Operator 在 Kubernetes 中启动一个 Milvus 实例。

概述

Milvus Operator 是一套解决方案,可帮助您在目标 Kubernetes(K8s)集群中部署和管理完整的 Milvus 服务栈。该栈包含所有 Milvus 组件以及相关依赖项,例如 etcd、Pulsar 和 MinIO。

先决条件

  • 创建一个 K8s 集群

  • 安装一个 StorageClass。您可以通过以下方式查看已安装的 StorageClass。

    Text
    $ kubectl get sc

    NAME PROVISIONER RECLAIMPOLICY VOLUMEBIINDINGMODE ALLOWVOLUMEEXPANSION AGE
    standard (default) k8s.io/minikube-hostpath Delete Immediate false
  • 安装前请检查 硬件和软件要求

  • 在安装 Milvus 之前,建议使用 Milvus 规格规划工具, 根据您的数据规模估算硬件需求。这有助于确保您的 Milvus 安装获得最佳性能和资源分配。

说明

如果在拉取镜像时遇到问题,请通过 community@zilliz.com 联系我们并提供问题详情,我们将为你提供支持。

安装 Milvus Operator

Milvus Operator 在 Kubernetes 自定义资源 的基础上,定义了 Milvus 集群的自定义资源。定义自定义资源后,您可以通过声明式方式使用 K8s API 来管理 Milvus 部署堆栈,从而确保其可扩展性和高可用性。

运行以下命令,使用 Helm 安装 Milvus Operator。

Shell
helm install milvus-operator \
-n milvus-operator --create-namespace \
--wait --wait-for-jobs \
https://github.com/zilliztech/milvus-operator/releases/download/v1.3.7/milvus-operator-1.3.7.tgz

安装过程结束后,您将看到类似以下的输出。

Shell
NAME: milvus-operator
LAST DEPLOYED: Thu Jul 7 13:18:40 2022
NAMESPACE: milvus-operator
STATUS: deployed
REVISION: 1
TEST SUITE: None
NOTES:
Milvus Operator Is Starting, use `kubectl get -n milvus-operator deploy/milvus-operator` to check if its successfully installed
If Operator not started successfully, check the checker's log with `kubectl -n milvus-operator logs job/milvus-operator-checker`
Full Installation doc can be found in https://github.com/zilliztech/milvus-operator/blob/main/docs/installation/installation.md
Quick start with `kubectl apply -f https://raw.githubusercontent.com/zilliztech/milvus-operator/main/config/samples/milvus_minimum.yaml`
More samples can be found in https://github.com/zilliztech/milvus-operator/tree/main/config/samples
CRD Documentation can be found in https://github.com/zilliztech/milvus-operator/tree/main/docs/CRD

如果您之前已安装过 Milvus Operator,请使用以下命令进行升级:

Shell
helm upgrade milvus-operator \
-n milvus-operator --create-namespace \
--wait --wait-for-jobs \
https://github.com/zilliztech/milvus-operator/releases/download/v1.3.7/milvus-operator-1.3.7.tgz

部署 Milvus

1. 部署 Milvus 集群

一旦 Milvus Operator Pod 开始运行,即可按以下步骤部署 Milvus 集群。

Shell
kubectl apply -f https://raw.githubusercontent.com/zilliztech/milvus-operator/main/config/samples/milvus_cluster_woodpecker.yaml

上述命令将部署一个 Milvus 集群,该集群使用 Woodpecker 作为消息队列(推荐用于 v2.6.22),并包含所有新的架构组件,包括 Streaming Node。

此部署中的架构亮点

  • 消息队列使用 Woodpecker (可减少基础设施维护工作)
  • Streaming Node:已启用,可增强数据处理能力
  • Mix Coordinator:整合协调器组件,以提高效率

若需自定义这些设置,建议你使用 Milvus Sizing Tool 根据实际数据规模调整配置,然后下载相应的 YAML 文件。有关配置参数的更多信息,请参阅 Milvus 系统配置检查清单

说明
  • Release name 只能包含字母、数字和连字符,不能包含点号。
  • 你也可以以 standalone 模式部署 Milvus 实例,此时所有组件都包含在一个 Pod 中。为此,请将上述命令中的配置文件 URL 更改为 https://raw.githubusercontent.com/zilliztech/milvus-operator/main/config/samples/milvus_default.yaml

2. 检查 Milvus 集群状态

运行以下命令以检查 Milvus 集群状态

Shell
kubectl get milvus my-release -o yaml

当您的 Milvus 集群准备就绪后,上述命令的输出应类似于以下内容。如果“status.status ”字段仍显示为 Unhealthy,则说明您的 Milvus 集群仍在创建中。

YAML
apiVersion: milvus.io/v1alpha1
kind: Milvus
metadata:
...
status:
conditions:
- lastTransitionTime: "xxxx-xx-xxTxx:xx:xxZ"
reason: StorageReady
status: "True"
type: StorageReady
- lastTransitionTime: "xxxx-xx-xxTxx:xx:xxZ"
message: Pulsar is ready
reason: PulsarReady
status: "True"
type: PulsarReady
- lastTransitionTime: "xxxx-xx-xxTxx:xx:xxZ"
message: Etcd endpoints is healthy
reason: EtcdReady
status: "True"
type: EtcdReady
- lastTransitionTime: "xxxx-xx-xxTxx:xx:xxZ"
message: All Milvus components are healthy
reason: MilvusClusterHealthy
status: "True"
type: MilvusReady
endpoint: my-release-milvus.default:19530
status: Healthy

Milvus Operator 会先创建 Milvus 的依赖项(如 etcd、Pulsar 和 MinIO),然后创建 Milvus 组件(如代理、协调器和节点)。

一旦您的 Milvus 集群准备就绪,Milvus 集群中所有 Pod 的状态应与以下内容类似。

Shell
kubectl get pods

NAME READY STATUS RESTARTS AGE
my-release-etcd-0 1/1 Running 0 2m36s
my-release-etcd-1 1/1 Running 0 2m36s
my-release-etcd-2 1/1 Running 0 2m36s
my-release-milvus-datanode-58955c65b9-j4j7s 1/1 Running 0 92s
my-release-milvus-mixcoord-686f84968f-jcv5d 1/1 Running 0 92s
my-release-milvus-proxy-646f48fc7c-4lctb 1/1 Running 0 92s
my-release-milvus-querynode-0-d89d7677b-x7j7q 1/1 Running 0 91s
my-release-milvus-streamingnode-556bdcc87c-2qwcc 1/1 Running 0 92s
my-release-minio-0 1/1 Running 0 2m36s
my-release-minio-1 1/1 Running 0 2m36s
my-release-minio-2 1/1 Running 0 2m35s
my-release-minio-3 1/1 Running 0 2m35s

3. 将本地端口转发至 Milvus

运行以下命令以获取 Milvus 集群的监听端口。

Shell
kubectl get pod my-release-milvus-proxy-84f67cdb7f-pg6wf --template
='{{(index (index .spec.containers 0).ports 0).containerPort}}{{"\n"}}'
19530

输出结果显示,Milvus 实例在默认端口 19530 上提供服务。

说明

如果您以独立模式部署了 Milvus Standalone,请将 Pod 名称从 my-release-milvus-proxy-xxxxxxxxxx-xxxxx 更改为 my-release-milvus-xxxxxxxxxx-xxxxx

然后,运行以下命令将本地端口转发到 Milvus 的服务端口。

Shell
kubectl port-forward service/my-release-milvus 27017:19530
Forwarding from 127.0.0.1:27017 -> 19530

此外,您也可以在上述命令中使用 :19530 代替 27017:19530,让 kubectl 为您分配一个本地端口,从而无需手动处理端口冲突。

默认情况下,kubectl 的端口转发仅监听 localhost。若希望 Milvus 监听选定的或所有 IP 地址,请使用 address 标志。以下命令将使端口转发监听主机上的所有 IP 地址。

Shell
kubectl port-forward --address 0.0.0.0 service/my-release-milvus 27017:19530
Forwarding from 0.0.0.0:27017 -> 19530

现在,您可以通过转发端口连接到 Milvus。

(可选)更新 Milvus 配置

您可以通过如下方式调用 patch 命令来查看和更新 Milvus 集群的配置:

  1. 运行以下命令可预览即将生效的配置。

以下示例假设您希望将 spec.components.disableMetric 参数更新为 false 毫秒。

Shell
kubectl patch milvus my-release --type='merge'\
-p '{"spec":{"components":{"disableMetric":false}}}' \
--dry-run=client -o yaml

有关适用的配置项,请参阅 系统配置

  1. 更新配置。

    Shell
    kubectl patch milvus my-release --type='merge'\
    -p '{"spec":{"components":{"disableMetric":false}}}'

访问 Milvus WebUI

Milvus 随附了一个名为 Milvus WebUI 的内置 GUI 工具,您可以通过浏览器访问该工具。Milvus WebUI 通过简单直观的界面增强了系统可观察性。您可以使用 Milvus WebUI 观察 Milvus 组件及其依赖关系的统计数据和指标,检查数据库和 Collection 详情,并列出详细的 Milvus 配置。 有关 Milvus WebUI 的详细信息,请参阅 Milvus WebUI

要启用对 Milvus WebUI 的访问,您需要将代理 Pod 的端口转发到本地端口。

Shell
kubectl port-forward --address 0.0.0.0 service/my-release-milvus 27018:9091
Forwarding from 0.0.0.0:27018 -> 9091

现在,您可以通过 http://localhost:27018 访问 Milvus WebUI。

卸载 Milvus

运行以下命令以卸载 Milvus 集群。

Shell
kubectl delete milvus my-release
说明
  • 当您使用默认配置删除 Milvus 集群时,etcd、Pulsar 和 MinIO 等依赖项不会被删除。因此,下次安装相同的 Milvus 集群实例时,这些依赖项将被再次使用。
  • 若要随 Milvus 集群一并删除依赖项和持久卷声明 (PVC),请参阅 配置文件

卸载 Milvus Operator

卸载 Milvus Operator 也有两种方法。

使用 Helm 卸载

Shell
helm -n milvus-operator uninstall milvus-operator

使用 kubectl 卸载

Shell
kubectl delete -f https://raw.githubusercontent.com/zilliztech/milvus-operator/v1.3.7/deploy/manifests/deployment.yaml

接下来该做什么

在 Docker 中安装 Milvus 后,您可以: