Milvus Semantic Cache
本指南涵盖在 Kubernetes 中部署 Milvus 作为 Semantic Router 的 Semantic Cache 后端。与默认的 memory cache 相比,Milvus 提供了持久化、可扩展的向量存储。
Milvus 是可选的。Router 开箱即用,默认使用 memory backend。当您需要持久化、水平扩展或在 Router 副本之间共享缓存时,请使用 Milvus。
部署选项
有两种方法可用:
- Helm: 快速启动和参数化部署
- Milvus Operator: 生产级生命周期管理、滚动升级、健康检查和依赖编排
前提条件
- 配置了
kubectl的 Kubernetes 集群 - 可用的默认
StorageClass - 安装了 Helm 3.x
默认 Helm 值启用了 ServiceMonitor 以进行 Prometheus 指标收集,这需要先安装 Prometheus Operator。
对于没有 Prometheus Operator 的测试,请使用 --set metrics.serviceMonitor.enabled=false 禁用 ServiceMonitor(参见下面的部署命令)。
使用 Helm 部署
单机模式 (Standalone Mode)
适用于开发和小规模部署:
helm repo add milvus https://zilliztech.github.io/milvus-helm/
helm repo update
无 Prometheus Operator (用于测试/开发):
helm install milvus-semantic-cache milvus/milvus \
--set cluster.enabled=false \
--set etcd.replicaCount=1 \
--set minio.mode=standalone \
--set pulsar.enabled=false \
--set metrics.serviceMonitor.enabled=false \
--namespace vllm-semantic-router-system --create-namespace
有 Prometheus Operator (用于带监控的生产环境):
helm install milvus-semantic-cache milvus/milvus \
--set cluster.enabled=false \
--set etcd.replicaCount=1 \
--set minio.mode=standalone \
--set pulsar.enabled=false \
--namespace vllm-semantic-router-system --create-namespace
集群模式 (Cluster Mode)
推荐用于具有高可用性的生产环境:
helm repo add milvus https://zilliztech.github.io/milvus-helm/
helm repo update
Milvus 2.4+ 默认使用 Pulsar v3。下面的值禁用了旧版 Pulsar 以避免冲突。
无 Prometheus Operator (用于测试):
helm install milvus-semantic-cache milvus/milvus \
--set cluster.enabled=true \
--set etcd.replicaCount=3 \
--set minio.mode=distributed \
--set pulsar.enabled=false \
--set pulsarv3.enabled=true \
--set metrics.serviceMonitor.enabled=false \
--namespace vllm-semantic-router-system --create-namespace
有 Prometheus Operator (用于带监控的生产环境):
helm install milvus-semantic-cache milvus/milvus \
--set cluster.enabled=true \
--set etcd.replicaCount=3 \
--set minio.mode=distributed \
--set pulsar.enabled=false \
--set pulsarv3.enabled=true \
--namespace vllm-semantic-router-system --create-namespace
使用 Milvus Operator 部署
-
按照 官方说明 安装 Milvus Operator
-
应用自定义资源 (Custom Resource):
单机 (Standalone):
kubectl apply -n vllm-semantic-router-system -f - <<EOF
apiversion: milvus.io/v1beta1
kind: Milvus
metadata:
name: milvus-standalone
spec:
mode: standalone
components:
disableMetrics: false
dependencies:
storage:
inCluster:
values:
mode: standalone
deletionPolicy: Delete
pvcDeletion: true
etcd:
inCluster:
values:
replicaCount: 1
config: {}
EOF
集群 (Cluster):
kubectl apply -n vllm-semantic-router-system -f - <<EOF
apiversion: milvus.io/v1beta1
kind: Milvus
metadata:
name: milvus-cluster
spec:
mode: cluster
components:
disableMetrics: false
dependencies:
storage:
inCluster:
values:
mode: distributed
deletionPolicy: Retain
pvcDeletion: false
etcd:
inCluster:
values:
replicaCount: 3
pulsar:
inCluster:
values:
broker:
replicaCount: 1
config: {}
EOF
配置 Semantic Router
应用 Milvus 客户端配置
kubectl apply -n vllm-semantic-router-system -f - <<EOF
apiversion: v1
kind: ConfigMap
metadata:
name: milvus-client-config
data:
milvus.yaml: |
connection:
host: "milvus-semantic-cache.vllm-semantic-router-system.svc.cluster.local"
port: 19530
timeout: 60
auth:
enabled: false
tls:
enabled: false
collection:
name: "semantic_cache"
description: "Semantic cache"
vector_field:
name: "embedding"
dimension: 384
metric_type: "IP"
index:
type: "HNSW"
params:
M: 16
efConstruction: 64
search:
params:
ef: 64
topk: 10
consistency_level: "Session"
development:
auto_create_collection: true
verbose_errors: true
EOF
更新路由配置
确保您的路由配置中有这些设置:
semantic_cache:
backend_type: "milvus"
backend_config_path: "config/semantic-cache/milvus.yaml"
网络和安全
网络策略
限制对 Milvus 的访问:
kubectl apply -n vllm-semantic-router-system -f - <<EOF
apiversion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
name: allow-router-to-milvus
spec:
podSelector:
matchLabels:
app.kubernetes.io/name: milvus
policyTypes:
- Ingress
ingress:
- from:
- namespaceSelector:
matchLabels:
kubernetes.io/metadata.name: vllm-semantic-router-system
podSelector:
matchLabels:
app.kubernetes.io/name: semantic-router
ports:
- protocol: TCP
port: 19530
EOF
TLS 和身份验证
- 为凭据和证书创建 secret:
# 身份验证凭据
kubectl create secret generic milvus-auth -n vllm-semantic-router-system \
--from-literal=username="YOUR_USERNAME" \
--from-literal=password="YOUR_PASSWORD"
# TLS 证书
kubectl create secret generic milvus-tls -n vllm-semantic-router-system \
--from-file=ca.crt=/path/to/ca.crt \
--from-file=client.crt=/path/to/client.crt \
--from-file=client.key=/path/to/client.key
- 更新 Milvus 客户端配置:
connection:
host: "milvus-cluster.vllm-semantic-router-system.svc.cluster.local"
port: 19530
timeout: 60
auth:
enabled: true
username: "${MILVUS_USERNAME}"
password: "${MILVUS_PASSWORD}"
tls:
enabled: true
将环境变量或投影的 Secret 卷连接到路由部署,并在配置中引用它们。
存储
确保存在默认的 StorageClass。Milvus Helm Chart 和 Operator 会自动为 etcd 和 MinIO 创建必要的 PVC。
监控
ServiceMonitor 需要在您的集群中安装 Prometheus Operator。默认 Helm 值已启用 ServiceMonitor。
安装 Prometheus Operator
如果尚未安装:
kubectl apply -f https://raw.githubusercontent.com/prometheus-operator/prometheus-operator/main/bundle.yaml
# 等待 CRD 准备就绪
kubectl wait --for condition=established --timeout=60s \
crd/servicemonitors.monitoring.coreos.com