跳到主要内容

使用 Milvus Operator 安装 Milvus 单机版

Milvus Operator 是一个解决方案,可帮助您将完整的 Milvus 服务栈部署和管理到目标 Kubernetes (K8s) 集群。该栈包括所有 Milvus 组件和相关依赖,如 etcd、Pulsar 和 MinIO。本主题介绍如何使用 Milvus Operator 安装 Milvus 单机版。

前提条件

在安装之前,请检查硬件和软件要求

创建 K8s 集群

如果您已经部署了生产环境的 K8s 集群,可以跳过此步骤,直接进入部署 Milvus Operator。如果没有,您可以按照以下步骤快速创建一个用于测试的 K8s,然后使用它通过 Milvus Operator 部署 Milvus 集群。

使用 minikube 创建 K8s 集群

我们建议使用 minikube 在本地安装 K8s,这是一个允许您在本地运行 K8s 的工具。

minikube 只能在测试环境中使用。不建议在生产环境中使用这种方式部署 Milvus 分布式集群。

1. 安装 minikube

更多信息请参见安装 minikube

2. 使用 minikube 启动 K8s 集群

安装 minikube 后,运行以下命令启动 K8s 集群。

$ minikube start

3. 检查 K8s 集群状态

运行 $ kubectl cluster-info 检查您刚刚创建的 K8s 集群的状态。确保您可以通过 kubectl 访问 K8s 集群。如果您尚未在本地安装 kubectl,请参见在 minikube 中使用 kubectl

部署 Milvus Operator

Milvus Operator 在 Kubernetes Custom Resources 之上定义了 Milvus 集群自定义资源。定义自定义资源后,您可以以声明方式使用 K8s API 并管理 Milvus 部署栈,以确保其可扩展性和高可用性。

前提条件

  • 确保您可以通过 kubectlhelm 访问 K8s 集群。
  • 确保已安装 StorageClass 依赖,因为 Milvus 集群依赖默认 StorageClass 进行数据持久化。minikube 在安装时依赖默认 StorageClass。运行命令 kubectl get sc 检查依赖。如果已安装 StorageClass,您将看到以下输出。如果没有,请参见更改默认 StorageClass 获取更多信息。
NAME                  PROVISIONER                  RECLAIMPOLICY    VOLUMEBIINDINGMODE    ALLOWVOLUMEEXPANSION     AGE
standard (default) k8s.io/minikube-hostpath Delete Immediate false 3m36s

1. 安装 cert-manager

您可以使用 Helm 或 kubectl 命令安装 Milvus Operator。如果您选择使用 Helm,可以跳过此步骤,直接进入使用 Helm 命令安装

Milvus Operator 使用 cert-manager 为 webhook 服务器提供证书。运行以下命令安装 cert-manager。

$ kubectl apply -f https://github.com/jetstack/cert-manager/releases/download/v1.5.3/cert-manager.yaml

如果已安装 cert-manager,您将看到以下输出:

customresourcedefinition.apiextensions.k8s.io/certificaterequests.cert-manager.io created
customresourcedefinition.apiextensions.k8s.io/certificates.cert-manager.io created
customresourcedefinition.apiextensions.k8s.io/challenges.acme.cert-manager.io created
customresourcedefinition.apiextensions.k8s.io/clusterissuers.cert-manager.io created
customresourcedefinition.apiextensions.k8s.io/issuers.cert-manager.io created
customresourcedefinition.apiextensions.k8s.io/orders.acme.cert-manager.io created
namespace/cert-manager created
serviceaccount/cert-manager-cainjector created
serviceaccount/cert-manager created
serviceaccount/cert-manager-webhook created
clusterrole.rbac.authorization.k8s.io/cert-manager-cainjector created
clusterrole.rbac.authorization.k8s.io/cert-manager-controller-issuers created
clusterrole.rbac.authorization.k8s.io/cert-manager-controller-clusterissuers created
clusterrole.rbac.authorization.k8s.io/cert-manager-controller-certificates created
clusterrole.rbac.authorization.k8s.io/cert-manager-controller-orders created
clusterrole.rbac.authorization.k8s.io/cert-manager-controller-challenges created
clusterrole.rbac.authorization.k8s.io/cert-manager-controller-ingress-shim created
clusterrole.rbac.authorization.k8s.io/cert-manager-view created
clusterrole.rbac.authorization.k8s.io/cert-manager-edit created
clusterrole.rbac.authorization.k8s.io/cert-manager-controller-approve:cert-manager-io created
clusterrole.rbac.authorization.k8s.io/cert-manager-controller-certificatesigningrequests created
clusterrole.rbac.authorization.k8s.io/cert-manager-webhook:subjectaccessreviews created
clusterrolebinding.rbac.authorization.k8s.io/cert-manager-cainjector created
clusterrolebinding.rbac.authorization.k8s.io/cert-manager-controller-issuers created
clusterrolebinding.rbac.authorization.k8s.io/cert-manager-controller-clusterissuers created
clusterrolebinding.rbac.authorization.k8s.io/cert-manager-controller-certificates created
clusterrolebinding.rbac.authorization.k8s.io/cert-manager-controller-orders created
clusterrolebinding.rbac.authorization.k8s.io/cert-manager-controller-challenges created
clusterrolebinding.rbac.authorization.k8s.io/cert-manager-controller-ingress-shim created
clusterrolebinding.rbac.authorization.k8s.io/cert-manager-controller-approve:cert-manager-io created
clusterrolebinding.rbac.authorization.k8s.io/cert-manager-controller-certificatesigningrequests created
clusterrolebinding.rbac.authorization.k8s.io/cert-manager-webhook:subjectaccessreviews created
role.rbac.authorization.k8s.io/cert-manager-cainjector:leaderelection created
role.rbac.authorization.k8s.io/cert-manager:leaderelection created
role.rbac.authorization.k8s.io/cert-manager-webhook:dynamic-serving created
rolebinding.rbac.authorization.k8s.io/cert-manager-cainjector:leaderelection created
rolebinding.rbac.authorization.k8s.io/cert-manager:leaderelection created
rolebinding.rbac.authorization.k8s.io/cert-manager-webhook:dynamic-serving created
service/cert-manager created
service/cert-manager-webhook created
deployment.apps/cert-manager-cainjector created
deployment.apps/cert-manager created
deployment.apps/cert-manager-webhook created
mutatingwebhookconfiguration.admissionregistration.k8s.io/cert-manager-webhook created
validatingwebhookconfiguration.admissionregistration.k8s.io/cert-manager-webhook created

需要 cert-manager 1.13 或更高版本。

运行 $ kubectl get pods -n cert-manager 检查 cert-manager 是否正在运行。如果所有 pod 都在运行,您将看到以下输出:

NAME                                      READY   STATUS    RESTARTS   AGE
cert-manager-848f547974-gccz8 1/1 Running 0 70s
cert-manager-cainjector-54f4cc6b5-dpj84 1/1 Running 0 70s
cert-manager-webhook-7c9588c76-tqncn 1/1 Running 0 70s

2. 安装 Milvus Operator

在 K8s 上安装 Milvus Operator 有两种方式:

  • 使用 helm chart
  • 直接使用 kubectl 命令和原始清单

使用 Helm 命令安装

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

如果已安装 Milvus Operator,您将看到以下输出:

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 apply -f https://raw.githubusercontent.com/zilliztech/milvus-operator/main/deploy/manifests/deployment.yaml

如果已安装 Milvus Operator,您将看到以下输出:

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
certificate.cert-manager.io/milvus-operator-serving-cert created
issuer.cert-manager.io/milvus-operator-selfsigned-issuer created
mutatingwebhookconfiguration.admissionregistration.k8s.io/milvus-operator-mutating-webhook-configuration created
validatingwebhookconfiguration.admissionregistration.k8s.io/milvus-operator-validating-webhook-configuration created

运行 $ kubectl get pods -n milvus-operator 检查 Milvus Operator 是否正在运行。如果 Milvus Operator 正在运行,您将看到以下输出:

NAME                               READY   STATUS    RESTARTS   AGE
milvus-operator-5fd77b87dc-msrk4 1/1 Running 0 46s

安装 Milvus 单机版

1. 安装 Milvus

当 Milvus Operator 启动后,运行以下命令安装 Milvus。

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

2. 检查 Milvus 单机版的状态

运行以下命令检查您刚刚安装的 Milvus 的状态。

$ kubectl get milvus my-release -o yaml

当 Milvus 安装成功后,您可以学习如何管理 Collection

连接到 Milvus

验证 Milvus 服务器正在监听的本地端口。将 pod 名称替换为您自己的。

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

打开一个新终端并运行以下命令,将本地端口转发到 Milvus 使用的端口。您也可以省略指定的端口,使用 :19530kubectl 为您分配一个本地端口,这样您就不必管理端口冲突。

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

默认情况下,kubectl 的端口转发只监听 localhost。如果您希望 Milvus 服务器监听选定的 IP 或所有地址,请使用 address 标志。

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

卸载 Milvus 单机版

运行以下命令卸载 Milvus。

$ kubectl delete milvus my-release

卸载 Milvus Operator

在 K8s 上卸载 Milvus Operator 也有两种方式:

使用 Helm 命令卸载 Milvus Operator

$ helm -n milvus-operator uninstall milvus-operator

使用 kubectl 命令卸载 Milvus Operator

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

删除 K8s 集群

当您不再需要测试环境中的 K8s 集群时,可以运行 $ minikube delete 删除它。

下一步

安装 Milvus 后,您可以: