使用 Milvus Operator 在 Kubernetes 中运行 Milvus
本页面介绍了如何使用Milvus Operator 在 Kubernetes 中启动一个 Milvus 实例。
概述
Milvus Operator 是一套解决方案,可帮助您在目标 Kubernetes(K8s)集群上部署和管理完整的 Milvus 服务栈。该服务栈包含所有 Milvus 组件以及相关依赖项,例如 etcd、Pulsar 和 MinIO。
先决条件
安装一个StorageClass。您可以通过以下方式查看已安装的 StorageClass。
$ 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。
$ 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
安装过程结束后,您将看到类似以下的输出。
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,请使用以下命令进行升级:
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
运行以下命令,通过kubectl 安装 Milvus Operator。
$ kubectl apply -f https://raw.githubusercontent.com/zilliztech/milvus-operator/main/deploy/manifests/deployment.yaml
安装过程结束后,您将看到类似以下的输出。
namespace/milvus-operator created
customresourcedefinition.apiextensions.k8s.io/milvusclusters.milvus.io created
serviceaccount/milvus-operator-controller-manager created
role.rbac.authorization.k8s.io/milvus-operator-leader-election-role created
clusterrole.rbac.authorization.k8s.io/milvus-operator-manager-role created
clusterrole.rbac.authorization.k8s.io/milvus-operator-metrics-reader created
clusterrole.rbac.authorization.k8s.io/milvus-operator-proxy-role created
rolebinding.rbac.authorization.k8s.io/milvus-operator-leader-election-rolebinding created
clusterrolebinding.rbac.authorization.k8s.io/milvus-operator-manager-rolebinding created
clusterrolebinding.rbac.authorization.k8s.io/milvus-operator-proxy-rolebinding created
configmap/milvus-operator-manager-config created
service/milvus-operator-controller-manager-metrics-service created
service/milvus-operator-webhook-service created
deployment.apps/milvus-operator-controller-manager created
您可以通过以下方式检查 Milvus Operator Pod 是否正在运行:
$ kubectl get pods -n milvus-operator
NAME READY STATUS RESTARTS AGE
milvus-operator-5fd77b87dc-msrk4 1/1 Running 0 46s
部署 Milvus
1. 部署 Milvus 集群
一旦 Milvus Operator Pod 开始运行,即可按以下步骤部署 Milvus 集群。
$ kubectl apply -f https://raw.githubusercontent.com/zilliztech/milvus-operator/main/config/samples/milvus_cluster_woodpecker.yaml
上述命令将部署一个 Milvus 集群,该集群使用Woodpecker作为消息队列(推荐用于 v3.0-beta 版本),并包含所有新的架构组件,包括流式处理节点。
此部署中的架构亮点:
- 消息队列:使用 Woodpecker(可减少基础设施维护工作)
- 流式处理节点:已启用,以增强数据处理能力
- Mix 协调器:整合了协调器组件,以提高效率
若需自定义这些设置,建议您使用Milvus 容量规划工具,根据实际数据规模调整配置,然后下载相应的 YAML 文件。有关配置参数的更多信息,请参阅《Milvus 系统配置检查清单》。
- 版本名称中仅应包含字母、数字和连字符。版本名称中不允许使用点号。
- 您还可以以独立模式部署 Milvus 实例,此时所有组件都包含在一个 Pod 中。要实现这一点,请将上述命令中的配置文件 URL 更改为
https://raw.githubusercontent.com/zilliztech/milvus-operator/main/config/samples/milvus_default.yaml
2. 检查 Milvus 集群状态
运行以下命令以检查 Milvus 集群状态
$ kubectl get milvus my-release -o yaml
当您的 Milvus 集群准备就绪后,上述命令的输出应类似于以下内容。如果“status.status ”字段仍显示为Unhealthy ,则说明您的 Milvus 集群仍在创建中。
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 的状态应与以下内容类似。
$ 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 集群的监听端口。
$ 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 的服务端口。
$ 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 地址。
$ 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 集群的配置:
运行以下命令可预览即将生效的配置。
以下示例假设您希望将
spec.components.disableMetric参数更新为false毫秒。$ kubectl patch milvus my-release --type='merge'\ -p '{"spec":{"components":{"disableMetric":false}}}' \ --dry-run=client -o yaml有关适用的配置项,请参阅“系统配置”。
更新配置。
$ 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 的端口转发到本地端口。
$ 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 集群。
$ kubectl delete milvus my-release
- 当您使用默认配置删除 Milvus 集群时,etcd、Pulsar 和 MinIO 等依赖项不会被删除。因此,下次安装相同的 Milvus 集群实例时,这些依赖项将被再次使用。
- 若要随 Milvus 集群一并删除依赖项和持久卷声明 (PVC),请参阅配置文件。
卸载 Milvus Operator
卸载 Milvus Operator 也有两种方法。
使用 Helm 卸载
$ helm -n milvus-operator uninstall milvus-operator
使用 kubectl 卸载
$ kubectl delete -f https://raw.githubusercontent.com/zilliztech/milvus-operator/v1.3.7/deploy/manifests/deployment.yaml
下一步
在 Docker 中安装 Milvus 后,您可以:
查看“Hello Milvus”以了解 Milvus 的功能。
学习 Milvus 的基本操作:
在云端部署您的 Milvus 集群:
探索Milvus WebUI——一个用于 Milvus 可观测性和管理的直观 Web 界面。
探索Milvus Backup,一款用于 Milvus 数据备份的开源工具。
了解Birdwatcher——一款用于调试 Milvus 并进行动态配置更新的开源工具。
探索Attu——一款用于直观管理 Milvus 的开源图形用户界面工具。