使用 Milvus Operator 在 Kubernetes 中运行 Milvus
本页介绍如何使用 Milvus Operator 在 Kubernetes 中启动 Milvus 实例。
概述
Milvus Operator 是一个解决方案,可帮助您将完整的 Milvus 服务栈部署和管理到目标 Kubernetes (K8s) 集群。该栈包括所有 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 部署栈,以确保其可扩展性和高可用性。
您可以通过以下任一方式安装 Milvus Operator:
使用 Helm 安装
运行以下命令使用 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.2.0/milvus-operator-1.2.0.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 正在启动,使用 `kubectl get -n milvus-operator deploy/milvus-operator` 检查是否安装成功
如果 Operator 未成功启动,使用 `kubectl -n milvus-operator logs job/milvus-operator-checker` 检查检查器的日志
完整的安装文档可在 https://github.com/zilliztech/milvus-operator/blob/main/docs/installation/installation.md 找到
使用 `kubectl apply -f https://raw.githubusercontent.com/zilliztech/milvus-operator/main/config/samples/milvus_minimum.yaml` 快速开始
更多示例可在 https://github.com/zilliztech/milvus-operator/tree/main/config/samples 找到
CRD 文档可在 https://github.com/zilliztech/milvus-operator/tree/main/docs/CRD 找到
使用 kubectl 安装
运行以下命令使用 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_default.yaml
上述命令使用默认配置在单独的 pod 中部署带有组件和依赖项的 Milvus 集群。要自定义这些设置,我们建议您使用 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: "2021-11-02T05:59:41Z"
reason: StorageReady
status: "True"
type: StorageReady
- lastTransitionTime: "2021-11-02T06:06:23Z"
message: Pulsar is ready
reason: PulsarReady
status: "True"
type: PulsarReady
- lastTransitionTime: "2021-11-02T05:59:41Z"
message: Etcd endpoints is healthy
reason: EtcdReady
status: "True"
type: EtcdReady
- lastTransitionTime: "2021-11-02T06:12:36Z"
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 14m
my-release-etcd-1 1/1 Running 0 14m
my-release-etcd-2 1/1 Running 0 14m
my-release-milvus-datanode-5c686bd65-wxtmf 1/1 Running 0 6m
my-release-milvus-indexnode-5b9787b54-xclbx 1/1 Running 0 6m
my-release-milvus-proxy-84f67cdb7f-pg6wf 1/1 Running 0 6m
my-release-milvus-querynode-5bcb59f6-nhqqw 1/1 Running 0 6m
my-release-milvus-mixcoord-fdcccfc84-9964g 1/1 Running 0 6m
my-release-minio-0 1/1 Running 0 14m
my-release-minio-1 1/1 Running 0 14m
my-release-minio-2 1/1 Running 0 14m
my-release-minio-3 1/1 Running 0 14m
my-release-pulsar-bookie-0 1/1 Running 0 14m
my-release-pulsar-bookie-1 1/1 Running 0 14m
my-release-pulsar-bookie-init-h6tfz 0/1 Completed 0 14m
my-release-pulsar-broker-0 1/1 Running 0 14m
my-release-pulsar-broker-1 1/1 Running 0 14m
my-release-pulsar-proxy-0 1/1 Running 0 14m
my-release-pulsar-proxy-1 1/1 Running 0 14m
my-release-pulsar-pulsar-init-d2t56 0/1 Completed 0 14m
my-release-pulsar-recovery-0 1/1 Running 0 14m
my-release-pulsar-toolset-0 1/1 Running 0 14m
my-release-pulsar-zookeeper-0 1/1 Running 0 14m
my-release-pulsar-zookeeper-1 1/1 Running 0 13m
my-release-pulsar-zookeeper-2 1/1 Running 0 13m
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,请将 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 WebUI
Milvus 附带了一个名为 Milvus WebUI 的内置 GUI 工具,您可以通过浏览器访问它。Milvus Web UI 通过简单直观的界面增强了系统的可观察性。您可以使用 Milvus Web UI 观察 Milvus 组件和依赖项的统计信息和指标,检查数据库和集合详情,并列出详细的 Milvus 配置。有关 Milvus Web UI 的详细信息,请参见 Milvus WebUI。
要启用对 Milvus Web UI 的访问,您需要将代理 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 Web UI。
卸载 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.2.0/deploy/manifests/deployment.yaml
下一步
在 Docker 中安装 Milvus 后,您可以:
-
查看 Hello Milvus 了解 Milvus 的功能。
-
学习 Milvus 的基本操作:
-
在云上部署 Milvus 集群:
-
探索 Milvus WebUI,一个用于 Milvus 可观察性和管理的直观 Web 界面。
-
探索 Milvus Backup,一个用于 Milvus 数据备份的开源工具。
-
探索 Birdwatcher,一个用于调试 Milvus 和动态配置更新的开源工具。
-
探索 Attu,一个用于直观管理 Milvus 的开源 GUI 工具。