跳到主要内容

使用 Milvus Operator 在 Kubernetes 中运行 Milvus

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

概述

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

前提条件

  • 创建 K8s 集群

  • 安装 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 后,您可以: