一、环境准备
1.1 基础环境要求
- Kubernetes 集群:v1.20+,推荐 v1.24+
- Docker 或 Containerd:确保容器运行时正常
- Helm:v3.5.0+,用于 Milvus 部署
- 存储系统:
- 元数据:etcd 集群(v3.5.0+,3 节点以上)
- 对象存储:MinIO 集群(4 节点以上)或云存储(S3、GCS 等)
- 消息队列:Pulsar 集群(v2.8.0+,3 节点以上)
1.2 资源规划
根据业务规模,建议生产环境资源配置:
| 组件 | CPU | 内存 | 存储 | 副本数 |
|---|---|---|---|---|
| Milvus Proxy | 4C+ | 8G+ | 无 | 2+ |
| Milvus QueryNode | 8C+ | 16G+ | 无 | 3+ |
| Milvus DataNode | 4C+ | 8G+ | 无 | 3+ |
| Milvus IndexNode | 8C+ | 16G+ | 无 | 2+ |
| Milvus RootCoord | 2C+ | 4G+ | 无 | 1(主)+1(备) |
| Milvus QueryCoord | 2C+ | 4G+ | 无 | 1(主)+1(备) |
| Milvus DataCoord | 2C+ | 4G+ | 无 | 1(主)+1(备) |
| Milvus IndexCoord | 2C+ | 4G+ | 无 | 1(主)+1(备) |
二、Milvus 架构简介
Milvus 2.x 采用微服务架构,主要组件包括:
- Proxy:接收客户端请求,负载均衡
- Coordinator 组件:RootCoord(元数据管理)、QueryCoord(查询节点管理)、DataCoord(数据节点管理)、IndexCoord(索引节点管理)
- Worker 组件:QueryNode(向量查询)、DataNode(数据持久化)、IndexNode(索引构建)
- 依赖组件:etcd(元数据存储)、MinIO/S3(对象存储)、Pulsar/Kafka(消息队列)
三、部署前配置
3.1 配置存储系统
3.1.1 部署 etcd 集群
# 使用 Helm 部署 etcd 集群
helm repo add bitnami https://charts.bitnami.com/bitnami
helm install etcd bitnami/etcd \
--set replicaCount=3 \
--set auth.rbac.create=false \
--set persistence.size=50Gi \
--namespace milvus
3.1.2 部署 MinIO 集群
helm install minio bitnami/minio \
--set mode=distributed \
--set replicas=4 \
--set persistence.size=100Gi \
--set auth.rootUser=minioadmin \
--set auth.rootPassword=minioadmin \
--namespace milvus
3.1.3 部署 Pulsar 集群
helm repo add apache https://pulsar.apache.org/charts
helm install pulsar apache/pulsar \
--set components={broker,bookkeeper,zookeeper} \
--set zookeeper.replicaCount=3 \
--set bookkeeper.replicaCount=3 \
--set broker.replicaCount=3 \
--namespace milvus
3.2 创建命名空间
kubectl create namespace milvus
四、使用 Helm 部署 Milvus 集群
4.1 添加 Milvus Helm 仓库
helm repo add milvus https://zilliztech.github.io/milvus-helm/
helm repo update
4.2 自定义配置文件
创建 values.yaml 文件,配置高可用参数:
# values.yaml
cluster:
enabled: true
image:
tag: v2.4.5
minio:
enabled: false # 使用外部 MinIO
externalMinio:
host: minio.milvus.svc.cluster.local
port: 9000
accessKey: minioadmin
secretKey: minioadmin
bucketName: milvus-bucket
etcd:
enabled: false # 使用外部 etcd
externalEtcd:
endpoints:
- etcd.milvus.svc.cluster.local:2379
pulsar:
enabled: false # 使用外部 Pulsar
externalPulsar:
broker: pulsar-broker.milvus.svc.cluster.local:6650
webServiceURL: http://pulsar-broker.milvus.svc.cluster.local:8080
# 高可用配置
proxy:
replicas: 2
resources:
requests:
cpu: 4
memory: 8Gi
limits:
cpu: 8
memory: 16Gi
queryNode:
replicas: 3
resources:
requests:
cpu: 8
memory: 16Gi
limits:
cpu: 16
memory: 32Gi
dataNode:
replicas: 3
resources:
requests:
cpu: 4
memory: 8Gi
limits:
cpu: 8
memory: 16Gi
indexNode:
replicas: 2
resources:
requests:
cpu: 8
memory: 16Gi
limits:
cpu: 16
memory: 32Gi
# Coordinator 组件高可用
rootCoord:
replicas: 2
queryCoord:
replicas: 2
dataCoord:
replicas: 2
indexCoord:
replicas: 2
# 持久化配置
persistence:
enabled: true
storageClass: "your-storage-class" # 替换为实际存储类
# 服务配置
service:
type: LoadBalancer # 生产环境推荐使用 LoadBalancer 或 NodePort
port: 19530
4.3 部署 Milvus 集群
helm install milvus milvus/milvus \
-f values.yaml \
--namespace milvus
4.4 验证部署
# 检查 Pod 状态
kubectl get pods -n milvus
# 检查服务状态
kubectl get svc -n milvus
# 验证 Milvus 服务
curl -s http://<milvus-service-ip>:19530/api/v1/health | jq
五、高可用配置优化
5.1 副本策略
- Proxy 副本:建议 2-3 个,通过 LoadBalancer 负载均衡
- Worker 节点副本:根据数据量和查询负载调整,建议 3+
- Coordinator 副本:采用主备模式,确保元数据服务高可用
5.2 数据备份策略
- etcd 备份:定期使用
etcdctl snapshot save备份元数据 - 对象存储备份:配置 MinIO/S3 跨区域复制或定期快照
- Pulsar 备份:启用 Pulsar 持久化存储和定期备份
5.3 故障转移配置
- 启用 K8s 节点亲和性,避免单点故障
- 配置 Pod 中断预算(PDB),确保服务可用性
- 监控关键指标,设置自动扩缩容
六、性能优化
6.1 资源调优
- 根据实际负载调整 CPU 和内存限制
- 为 IndexNode 分配更多资源,加速索引构建
- 为 QueryNode 配置足够内存,减少查询延迟
6.2 索引优化
- 选择合适的索引类型(如 IVF_FLAT、IVF_SQ8、HNSW)
- 调整索引参数(nlist、nprobe 等)
- 启用增量索引构建,减少索引维护开销
6.3 查询优化
- 使用连接池管理客户端连接
- 批量查询替代单条查询
- 合理设置查询参数(topk、nprobe 等)
七、监控与日志
7.1 集成 Prometheus 和 Grafana
# 启用 Milvus 监控
helm upgrade milvus milvus/milvus \
-f values.yaml \
--set metrics.enabled=true \
--namespace milvus
# 导入 Milvus Grafana 仪表盘
# 仪表盘 ID:15048(官方提供)
7.2 日志收集
- 配置 Fluentd/Filebeat 收集 Milvus 日志
- 集成 ELK Stack 或 Loki 进行日志分析
- 设置日志保留策略,避免存储溢出
八、维护与升级
8.1 日常维护
- 定期检查 Pod 状态和资源使用情况
- 监控查询延迟和错误率
- 清理过期数据和索引
8.2 版本升级
# 备份数据
# 升级 Helm Chart
helm repo update
helm upgrade milvus milvus/milvus \
-f values.yaml \
--namespace milvus
8.3 扩缩容
# 水平扩缩容 QueryNode
kubectl scale statefulset milvus-querynode -n milvus --replicas=5
# 垂直扩缩容,修改 values.yaml 后执行
helm upgrade milvus milvus/milvus \
-f values.yaml \
--namespace milvus
九、安全配置
9.1 认证授权
- 启用 Milvus 内置认证(username/password)
- 配置 RBAC,限制用户权限
- 集成外部认证服务(如 LDAP)
9.2 网络安全
- 使用 K8s NetworkPolicy 限制 Pod 间通信
- 配置 TLS 加密,保护数据传输
- 限制 Milvus 服务访问范围
十、常见问题排查
-
Pod 启动失败:
kubectl logs <pod-name> -n milvus kubectl describe pod <pod-name> -n milvus -
连接超时:
- 检查服务暴露方式
- 验证网络策略
- 检查防火墙规则
-
查询性能差:
- 检查资源使用情况
- 优化索引参数
- 调整查询参数
十一、总结
通过 Docker 和 Kubernetes 部署高可用 Milvus 集群,需要关注以下关键要点:
- 合理规划资源,确保各组件性能
- 配置可靠的存储系统,保障数据安全
- 启用监控和日志,便于问题排查
- 实施备份策略,防止数据丢失
- 定期维护和升级,确保系统稳定性
生产环境部署需根据实际业务需求调整配置,建议先在测试环境验证,再逐步迁移到生产环境。
以上配置方案基于 Milvus v2.4.5,实际部署时请参考官方最新文档。

1298

被折叠的 条评论
为什么被折叠?



