使用 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 部署栈,以确保其可扩展性和高可用性。
前提条件
- 确保您可以通过
kubectl
或helm
访问 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 使用的端口。您也可以省略指定的端口,使用 :19530
让 kubectl
为您分配一个本地端口,这样您就不必管理端口冲突。
$ 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 后,您可以:
- 查看 Hello Milvus,运行不同 SDK 的示例代码,了解 Milvus 的功能。
- 学习 Milvus 的基本操作:
- 使用 Milvus Operator 升级 Milvus
- 探索 Milvus Backup,一个用于 Milvus 数据备份的开源工具
- 探索 Birdwatcher,一个用于调试 Milvus 和动态配置更新的开源工具
- 探索 Attu,一个用于直观管理 Milvus 的开源 GUI 工具
- 使用 Prometheus 监控 Milvus