【Milvus】安装 Milvus:Docker、Docker Compose、Kubernetes
Milvus 提供了多种部署方式,包括 Docker(单机部署)、Docker Compose(单机多容器部署)以及 Kubernetes(分布式集群部署)。以下是对这三种安装方式的详细介绍,包括先决条件、步骤、配置文件和注意事项,帮助完成安装。
1. 先决条件
在安装 Milvus 之前,确保满足以下条件:
通用要求:
- 操作系统:Linux(推荐 Ubuntu 20.04 或 CentOS 7+)、macOS 或 Windows(需要 WSL2 支持)。
- 硬件要求:
- 单机模式(Docker 或 Docker Compose):至少 8GB 内存、4 核 CPU、50GB 磁盘空间。
- 分布式模式(Kubernetes):根据规模调整,建议每个节点至少 16GB 内存、8 核 CPU。
- 网络:确保安装环境可以访问 Docker Hub 或 Milvus 的镜像源。
- Milvus 版本:本文基于 Milvus 2.x(截至 2025 年 4 月的最新版本)。具体版本可参考 Milvus 官方文档 或 GitHub 仓库。
工具要求:
- Docker:版本 19.03 或更高。
- Docker Compose:版本 1.28 或更高(用于 Docker Compose 部署)。
- kubectl 和 Kubernetes 集群:Kubernetes 版本 1.16 或更高(用于 Kubernetes 部署)。
- Helm:版本 3.6 或更高(用于 Kubernetes 的 Helm 部署)。
检查工具版本:
# 检查 Docker
docker --version
# 检查 Docker Compose
docker-compose --version
# 检查 kubectl
kubectl version --client
# 检查 Helm
helm version
2. 安装 Milvus - Docker(单机模式)
Docker 部署是安装 Milvus 最简单的方式,适合快速测试或开发环境。Milvus 提供了一个单机镜像(milvusdb/milvus
),包含所有核心组件。
步骤:
-
安装 Docker:
- Ubuntu:
sudo apt update sudo apt install -y docker.io sudo systemctl start docker sudo systemctl enable docker
- macOS:下载 Docker Desktop 并安装。
- Windows:启用 WSL2 并安装 Docker Desktop。
- Ubuntu:
-
拉取 Milvus 镜像:
docker pull milvusdb/milvus:latest
-
创建数据持久化目录:
Milvus 需要持久化数据、日志和配置。创建以下目录:mkdir -p ~/milvus/data ~/milvus/logs ~/milvus/configs
-
运行 Milvus 容器:
使用以下命令启动 Milvus 单机模式:docker run -d --name milvus_standalone -p 19530:19530 -p 9091:9091 -v ~/milvus/data:/var/lib/milvus -v ~/milvus/logs:/var/lib/milvus/logs -v ~/milvus/configs:/var/lib/milvus/configs milvusdb/milvus:latest
- 端口说明:
19530
:Milvus 的 gRPC 服务端口,用于客户端连接。9091
:Milvus 的 RESTful API 和 Web 界面端口。
- 挂载目录:
/var/lib/milvus
:存储数据。/var/lib/milvus/logs
:存储日志。/var/lib/milvus/configs
:存储配置文件。
- 端口说明:
-
验证安装:
- 检查容器状态:
确保docker ps
milvus_standalone
容器处于Up
状态。 - 测试连接:
使用 Milvus 的 Python SDK 验证:pip install pymilvus
如果返回 Milvus 版本号(如from pymilvus import MilvusClient client = MilvusClient(uri="http://192.168.1.110:19530") print(client.get_server_version())
2.5.x
),说明安装成功。
- 检查容器状态:
-
访问 Web 界面(可选):
- 打开浏览器,访问
http://localhost:9091
。 - 如果 Milvus 包含 Web 界面(如 Attu 工具),可用于可视化管理。
- 打开浏览器,访问
注意事项:
- 资源分配:确保 Docker 有足够的内存(至少 8GB)和 CPU 资源。
- 防火墙:确保端口
19530
和9091
未被防火墙阻止。 - 持久化:不使用挂载目录会导致容器删除后数据丢失。
- 版本选择:使用
milvusdb/milvus:
指定版本(如milvusdb/milvus:v2.4.0
)。
3. 安装 Milvus - Docker Compose(单机多容器)
Docker Compose 部署将 Milvus 的组件(协调服务、查询节点、数据节点等)拆分为多个容器,模拟分布式架构,适合需要更高性能的单机环境或开发测试。
步骤:
-
安装 Docker Compose:
- Ubuntu:
sudo apt install -y docker-compose
- macOS/Windows:Docker Desktop 已包含 Docker Compose。
- Ubuntu:
-
下载 Milvus 的 Docker Compose 配置文件:
- 从 Milvus GitHub 仓库或官方文档获取
docker-compose.yml
文件:
或者手动创建以下wget https://github.com/milvus-io/milvus/releases/download/v2.4.0/milvus-standalone-docker-compose.yml -O docker-compose.yml
docker-compose.yml
文件:version: '3.8' services: etcd: container_name: milvus_etcd image: quay.io/coreos/etcd:v3.5.0 environment: - ETCD_AUTO_COMPACTION_MODE=revision - ETCD_AUTO_COMPACTION_RETENTION=1000 - ETCD_QUOTA_BACKEND_BYTES=4294967296 volumes: - ${DOCKER_VOLUME_DIRECTORY:-.}/volumes/etcd:/etcd command: etcd -advertise-client-urls=http://0.0.0.0:2379 -listen-client-urls http://0.0.0.0:2379 --data-dir=/etcd minio: container_name: milvus_minio image: minio/minio:RELEASE.2023-03-20T20-16-18Z environment: MINIO_ACCESS_KEY: minioadmin MINIO_SECRET_KEY: minioadmin volumes: - ${DOCKER_VOLUME_DIRECTORY:-.}/volumes/minio:/minio_data command: minio server /minio_data --console-address ":9001" healthcheck: test: ["CMD", "curl", "-f", "http://localhost:9000/minio/health/live"] interval: 30s timeout: 20s retries: 3 standalone: container_name: milvus_standalone image: milvusdb/milvus:v2.4.0 command: ["milvus", "run", "standalone"] environment: ETCD_ENDPOINTS: milvus_etcd:2379 MINIO_ADDRESS: milvus_minio:9000 volumes: - ${DOCKER_VOLUME_DIRECTORY:-.}/volumes/milvus:/var/lib/milvus ports: - "19530:19530" - "9091:9091" depends_on: - etcd - minio networks: default: name: milvus
- 从 Milvus GitHub 仓库或官方文档获取
-
创建持久化目录:
mkdir -p volumes/etcd volumes/minio volumes/milvus
-
启动 Milvus:
在包含docker-compose.yml
的目录下运行:docker-compose up -d
-
验证安装:
- 检查容器状态:
确保docker-compose ps
milvus_standalone
、milvus_etcd
和milvus_minio
容器均运行正常。 - 使用 Python SDK 测试连接(同 Docker 方式):
from milvus import MilvusClient client = MilvusClient(uri="http://localhost:19530") print(client.get_version())
- 检查容器状态:
-
访问 MinIO(可选):
- MinIO 提供对象存储,访问
http://localhost:9001
,使用默认凭据(minioadmin:minioadmin
)登录。
- MinIO 提供对象存储,访问
注意事项:
- 依赖服务:Docker Compose 部署需要 etcd(元数据存储)和 MinIO(对象存储)。
- 存储配置:确保
volumes
目录有足够磁盘空间。 - 环境变量:可通过修改
docker-compose.yml
中的环境变量调整配置(如 MinIO 凭据)。 - 版本一致性:确保
milvus
、etcd
和minio
镜像版本兼容。
4. 安装 Milvus - Kubernetes(分布式集群)
Kubernetes 部署适合生产环境或需要高可用性和可扩展性的场景。Milvus 提供 Helm Chart 来简化 Kubernetes 部署。
步骤:
-
准备 Kubernetes 集群:
- 本地测试:使用 Minikube 或 Kind 创建本地集群。
minikube start --cpus 4 --memory 8192
- 生产环境:使用云服务(如 AWS EKS、Google GKE、Azure AKS)或自建集群。
- 确保集群有足够的资源(建议每个节点 16GB 内存、8 核 CPU)。
- 本地测试:使用 Minikube 或 Kind 创建本地集群。
-
安装 kubectl 和 Helm:
- kubectl:
curl -LO "https://dl.k8s.io/release/$(curl -L -s https://dl.k8s.io/release/stable.txt)/bin/linux/amd64/kubectl" chmod +x kubectl sudo mv kubectl /usr/local/bin/
- Helm:
curl https://raw.githubusercontent.com/helm/helm/main/scripts/get-helm-3 | bash
- kubectl:
-
添加 Milvus Helm 仓库:
helm repo add milvus https://milvus-io.github.io/milvus-helm-charts/ helm repo update
-
创建自定义值文件:
创建values.yaml
文件,调整 Milvus 配置。例如:cluster: enabled: true etcd: replicaCount: 3 minio: mode: distributed replicas: 4 milvus: standalone: enabled: false proxy: replicas: 2 querynode: replicas: 4 datanode: replicas: 2 resources: limits: cpu: "4" memory: "16Gi" requests: cpu: "2" memory: "8Gi" persistence: enabled: true storageClass: "standard" size: 50Gi
- 说明:
cluster.enabled: true
:启用分布式模式。etcd.replicaCount
:etcd 副本数,确保高可用。minio.mode: distributed
:启用 MinIO 分布式存储。resources
:为每个组件分配 CPU 和内存。persistence
:启用持久化存储。
- 说明:
-
部署 Milvus:
helm install my-milvus milvus/milvus -f values.yaml
-
验证安装:
- 检查 Pod 状态:
确保所有 Milvus 相关 Pod(kubectl get pods
my-milvus-proxy
、my-milvus-querynode
等)处于Running
状态。 - 获取服务地址:
查找kubectl get svc
my-milvus
服务的 ClusterIP 或 LoadBalancer IP。 - 测试连接:
from milvus import MilvusClient client = MilvusClient(uri="http://
:19530" ) print(client.get_version())
- 检查 Pod 状态:
-
暴露服务(可选):
- 本地测试:使用端口转发:
kubectl port-forward svc/my-milvus 19530:19530
- 生产环境:配置 LoadBalancer 或 Ingress 暴露服务。
- 本地测试:使用端口转发:
注意事项:
- 存储类:确保 Kubernetes 集群有可用的 StorageClass(如
standard
)。 - 资源规划:根据数据规模调整副本数和资源分配。
- 高可用性:生产环境建议部署多个 etcd 和 MinIO 副本。
- 网络策略:配置 Kubernetes 网络策略以确保组件间通信。
- Helm 升级:使用
helm upgrade
更新 Milvus 配置。
5. 常见问题与故障排查
- 容器启动失败:
- 检查日志:
docker logs
或kubectl logs
。 - 确认端口未被占用、磁盘空间充足。
- 检查日志:
- 连接失败:
- 确保客户端连接的 IP 和端口正确。
- 检查防火墙或 Kubernetes 网络策略。
- 性能问题:
- 调整索引参数或增加查询节点副本。
- 确保硬件资源足够。
- 数据丢失:
- 确保持久化存储正确配置(如挂载目录或 PVC)。
6. 总结
- Docker:适合快速测试,单容器部署最简单。
- Docker Compose:适合开发环境,模拟分布式架构。
- Kubernetes:适合生产环境,支持高可用和分布式部署。