部署 Milvus
部署前准备
-
用于运行 Milvus 的节点,需要先加入 Kubernetes 集群,并确认节点状态为
Ready。 -
部署 Milvus 之前,需要先准备好外部依赖:
- Kafka
- etcd
- S3 对象存储(MinIO)
-
在 S3 对象存储(MinIO)中创建 Milvus 专用 bucket:
mdmilvusMilvus 使用对象存储保存数据文件,建议单独创建一个专用 bucket。下面以
mc连接 MinIO 为例,创建mdmilvusbucket:mc alias set minio http://MINIO_ENDPOINT MINIO_ACCESS_KEY MINIO_SECRET_KEYmc mb minio/mdmilvusmc ls minio-
MINIO_ENDPOINT替换为 MinIO 的实际访问地址,例如http://10.206.0.6:9000。 -
MINIO_ACCESS_KEY和MINIO_SECRET_KEY替换为实际的访问密钥和私有密钥。
-
-
检查节点状态
kubectl get nodes -o wide-
确认计划承载 Milvus 的节点已经加入 Kubernetes 集群。
-
确认节点状态为
Ready。
-
-
给 Milvus 专用工作节点打标签和污点
先将用于运行 Milvus 的 K8s 工作节点标记出来,并通过污点避免其他业务 Pod 误调度到这些节点。
kubectl label nodes <milvus-node-name> hap=milvuskubectl taint nodes <milvus-node-name> hap=milvus:NoSchedule-
hap=milvus是节点标签,用于标识 Milvus 专用工作节点。 -
hap=milvus:NoSchedule是节点污点,用于阻止未声明容忍的 Pod 调度到这些节点。 -
请将
<milvus-node-name>替换为实际的 Milvus 工作节点名称;如有多个节点,请分别为每个节点添加节点标签与污点。
-
-
在 Milvus 专用工作节点提前下载镜像
在开始安装
Milvus Operator和Milvus之前,请先在计划承载 Milvus 的 Kubernetes 工作节点上准备好对 应镜像。- 服务器支持访问互联网
- 服务器不支持访问互联网
crictl pull registry.cn-hangzhou.aliyuncs.com/mdpublic/mingdaoyun-milvus-operator:v1.3.6crictl pull registry.cn-hangzhou.aliyuncs.com/mdpublic/mingdaoyun-milvus:v2.6.17-
Milvus镜像包:-
amd64:https://pdpublic.mingdao.com/private-deployment/offline/common/mingdaoyun-milvus-linux-v2.6.17.tar.gz -
arm64:https://pdpublic.mingdao.com/private-deployment/offline/common/mingdaoyun-milvus-linux-v2.6.17.tar.gz
-
-
Milvus Operator镜像包:-
amd64:https://pdpublic.mingdao.com/private-deployment/offline/common/mingdaoyun-milvus-operator-linux-v1.3.6.tar.gz -
arm64:https://pdpublic.mingdao.com/private-deployment/offline/common/mingdaoyun-milvus-operator-linux-v1.3.6.tar.gz
-
-
以下以
amd64为例, 先下载镜像包,再解压并导入到本地容器运行时中:wget https://pdpublic.mingdao.com/private-deployment/offline/common/mingdaoyun-milvus-linux-v2.6.17.tar.gzwget https://pdpublic.mingdao.com/private-deployment/offline/common/mingdaoyun-milvus-operator-linux-v1.3.6.tar.gzgunzip -d mingdaoyun-milvus-linux-v2.6.17.tar.gzgunzip -d mingdaoyun-milvus-operator-linux-v1.3.6.tar.gzctr -n k8s.io image import mingdaoyun-milvus-linux-v2.6.17.tarctr -n k8s.io image import mingdaoyun-milvus-operator-linux-v1.3.6.tar
-
registry.cn-hangzhou.aliyuncs.com/mdpublic/mingdaoyun-milvus-operator:v1.3.6用于部署 Milvus Operator。 -
registry.cn-hangzhou.aliyuncs.com/mdpublic/mingdaoyun-milvus:v2.6.17用于部署 Milvus 集群工作负载。
部署 Milvus Operator
先部署 Milvus Operator,后续的 Milvus 自定义资源需要依赖它来创建工作负载。
为方便后续维护与复用,建议将本节涉及的
yaml文件统一放在 Kubernetes Master 01 节点的/data/mingdao/script/kubernetes/milvus/路径下,后续统一进入该目录后执行下载和部署命令。
-
准备
milvus-operator-deployment.yaml先在 Kubernetes Master 01 节点创建文件存放目录,并切换到该目录:
mkdir -p /data/mingdao/script/kubernetes/milvuscd /data/mingdao/script/kubernetes/milvus然后下载
milvus-operator-deployment.yaml到当前目录中。- 服务器支持访问互联网
- 服务器不支持访问互联网
wget https://pdpublic.mingdao.com/private-deployment/offline/common/milvus-operator-deployment.yaml# 请先在可联网环境中下载 milvus-operator-deployment.yaml,再上传到当前目录# 下载链接:https://pdpublic.mingdao.com/private-deployment/offline/common/milvus-operator-deployment.yaml -
应用 operator 资源
kubectl apply -f milvus-operator-deployment.yaml-
该步骤用于部署 Milvus Operator 控制器。
-
只有 operator 正常运行后,后续的
Milvus资源才会被解析和创建。
-
-
查看 operator 状态
kubectl get pod -n milvus-operator -o wide- 确认
Milvus OperatorPod 已正常启动。
- 确认
部署 Milvus
以下步骤基于 milvus.yaml 执行。
为方便后续维护与复用,建议将本节涉及的
yaml文件统一放在 Kubernetes Master 01 节点的/data/mingdao/script/kubernetes/milvus/路径下,后续统一进入该目录后执行创建和部署命令。
-
创建 Milvus 命名空间
kubectl create namespace milvus- 如果命名空间已存在,可忽略此命令。
-
创建 S3 凭据 Secret
Milvus 的存储依赖配置中使用了
secretRef: milvus-s3-secret,因此需要先在milvus命名空间创建对应 Secret。kubectl -n milvus create secret generic milvus-s3-secret \--from-literal=accessKey='请替换为S3访问密钥' \--from-literal=secretKey='请替换为S3私有密钥'-
accessKey对应对象存储访问密钥。 -
secretKey对应对象存储私有密钥。
-
-
准备
milvus.yaml先在 Kubernetes Master 01 节点的
/data/mingdao/script/kubernetes/milvus/目录下创建milvus.yaml文件,内容如下:apiVersion: milvus.io/v1beta1kind: Milvusmetadata:name: hap-ragnamespace: milvuslabels:app: milvusspec:mode: clustercomponents:image: registry.cn-hangzhou.aliyuncs.com/mdpublic/mingdaoyun-milvus:v2.6.17imagePullPolicy: IfNotPresentnodeSelector:hap: milvustolerations:- key: "hap"operator: "Equal"value: "milvus"effect: "NoSchedule"proxy:replicas: 2resources:requests:cpu: "250m"memory: "1Gi"limits:cpu: "2"memory: "4Gi"affinity:podAntiAffinity:preferredDuringSchedulingIgnoredDuringExecution:- weight: 100podAffinityTerm:topologyKey: kubernetes.io/hostnamelabelSelector:matchLabels:app.kubernetes.io/component: proxymixCoord:replicas: 2resources:requests:cpu: "250m"memory: "1Gi"limits:cpu: "4"memory: "8Gi"affinity:podAntiAffinity:preferredDuringSchedulingIgnoredDuringExecution:- weight: 100podAffinityTerm:topologyKey: kubernetes.io/hostnamelabelSelector:matchLabels:app.kubernetes.io/component: mixcoordstreamingNode:replicas: 2resources:requests:cpu: "250m"memory: "1Gi"limits:cpu: "6"memory: "12Gi"affinity:podAntiAffinity:preferredDuringSchedulingIgnoredDuringExecution:- weight: 100podAffinityTerm:topologyKey: kubernetes.io/hostnamelabelSelector:matchLabels:app.kubernetes.io/component: streamingnodequeryNode:replicas: 2resources:requests:cpu: "250m"memory: "1Gi"limits:cpu: "8"memory: "32Gi"affinity:podAntiAffinity:preferredDuringSchedulingIgnoredDuringExecution:- weight: 100podAffinityTerm:topologyKey: kubernetes.io/hostnamelabelSelector:matchLabels:app.kubernetes.io/component: querynodedataNode:replicas: 2resources:requests:cpu: "250m"memory: "1Gi"limits:cpu: "6"memory: "12Gi"affinity:podAntiAffinity:preferredDuringSchedulingIgnoredDuringExecution:- weight: 100podAffinityTerm:topologyKey: kubernetes.io/hostnamelabelSelector:matchLabels:app.kubernetes.io/component: datanodedependencies:msgStreamType: kafkakafka:external: truebrokerList: # 需修改,Kafka 地址- "192.168.10.31:9092"- "192.168.10.32:9092"- "192.168.10.33:9092"etcd:external: trueendpoints: # 需修改,etcd 地址- "http://192.168.10.31:2379"- "http://192.168.10.32:2379"- "http://192.168.10.33:2379"storage:external: truetype: S3endpoint: "cos.ap-nanjing.myqcloud.com:443" # 需修改,S3 对象存储地址secretRef: milvus-s3-secret # 需修改,S3 Secret 名称config:common:security:authorizationEnabled: truedefaultRootPassword: "<设置强密码>" # 需修改,设置 Milvus root 用户的密码mixCoord:enableActiveStandby: truemsgChannel:chanNamePrefix:cluster: milvusmq:type: kafkakafka:securityProtocol: PLAINTEXTetcd:rootPath: "milvus"metaSubPath: "meta"kvSubPath: "kv"auth:enabled: trueuserName: "root"password: "******" # 需修改,etcd 密码ssl:enabled: falseminio:cloudProvider: aws # 固定配置,S3 兼容bucketName: "mdmilvus" # 按需修改,bucket 名称rootPath: "milvus"useSSL: true # 按需修改,是否使用 HTTPS 访问 S3useVirtualHost: true-
dependencies.kafka.brokerList和dependencies.etcd.endpoints分别用于配置外部Kafka和etcd服务地址,部署前请确认这些地址都可以从Milvus工作节点正常访问。 -
dependencies.storage用于配置外部S3对象存储,其中endpoint、secretRef需要与实际环境保持一致。 -
config.common.security.authorizationEnabled已开启鉴权,defaultRootPassword需要设置为高强度的密码。 -
config.etcd.auth.userName和config.etcd.auth.password用于访问外部etcd,请替换为实际环境中的认证信息。 -
config.minio.bucketName当前设置为mdmilvus,代表使用的对象存储 bucket,rootPath保持为milvus,如对象存储地址或访问方式不同,请同步调整useSSL和useVirtualHost。
-
-
应用 Milvus 资源
kubectl apply -f milvus.yaml- 该步骤会基于 Milvus Operator 创建
hap-rag对应的 Milvus 集群。
- 该步骤会基于 Milvus Operator 创建
-
查看 Milvus 资源状态
kubectl get pods -n milvus -o widekubectl get svc -n milvus- 确认各组件 Pod 已正常调度并运行。
- 确认对外暴露的 Service 已创建完成。
-
访问 Milvus
部署完成后,
Milvus的访问地址如下:http://hap-rag-milvus.milvus:19530- 该地址仅限当前 Kubernetes 集群内的 Pod 访问。
接入 HAP 服务
在 HAP 服务的 config.yaml 中新增如下环境变量
ENV_RAG_ENABLE: "true"
ENV_MILVUS_URL: "http://hap-rag-milvus.milvus:19530"
ENV_MILVUS_DATABASE: "default"
ENV_MILVUS_USERNAME: "root"
ENV_MILVUS_PASSWORD: "your_password"
-
ENV_MILVUS_PASSWORD的值需要修改为前面自定义的Milvus密码。 -
保存配置后,重启
HAP微服务使配置生效。