管理 Qdrant 集群
最简化的 QdrantCluster 配置是
apiVersion: qdrant.io/v1
kind: QdrantCluster
metadata:
name: qdrant-a7d8d973-0cc5-42de-8d7b-c29d14d24840
labels:
cluster-id: "a7d8d973-0cc5-42de-8d7b-c29d14d24840"
customer-id: "acme-industries"
spec:
id: "a7d8d973-0cc5-42de-8d7b-c29d14d24840"
version: "v1.11.3"
size: 1
resources:
cpu: 100m
memory: "1Gi"
storage: "2Gi"
id 在同一命名空间下的所有 Qdrant 集群中必须是唯一的,name 必须遵循上述模式,并且 cluster-id 和 customer-id 标签是强制性的。
还有更多配置选项用于配置调度、安全、网络等。有关完整详细信息,请参阅 Qdrant 私有云 API 参考。
扩展集群
要扩展集群,请更新 QdrantCluster 规范中的 CPU、内存和存储资源。Qdrant Operator 将自动调整集群配置。此操作在具有复制集合的多节点集群上具有高可用性。
升级 Qdrant 版本
要升级数据库集群的 Qdrant 版本,请更新 QdrantCluster 规范中的 version 字段。Qdrant Operator 将自动将集群升级到新版本。升级过程在具有复制集合的多节点集群上具有高可用性。
请注意,升级时不要跳过次要版本。例如,如果您正在运行 v1.11.3 版本,您可以升级到 v1.11.5 或 v1.12.6,但不能直接升级到 v1.13.0。
暴露集群
默认情况下,QdrantCluster 将通过内部 ClusterIP 服务暴露。要将集群暴露到外部,您可以创建 NodePort 服务、LoadBalancer 服务或 Ingress 资源。
这是一个如何使用 LoadBalancer 服务创建 QdrantCluster 的示例
apiVersion: qdrant.io/v1
kind: QdrantCluster
metadata:
name: qdrant-a7d8d973-0cc5-42de-8d7b-c29d14d24840
labels:
cluster-id: "a7d8d973-0cc5-42de-8d7b-c29d14d24840"
customer-id: "acme-industries"
spec:
id: "a7d8d973-0cc5-42de-8d7b-c29d14d24840"
version: "v1.11.3"
size: 1
resources:
cpu: 100m
memory: "1Gi"
storage: "2Gi"
service:
type: LoadBalancer
annotations:
service.beta.kubernetes.io/aws-load-balancer-type: nlb
特别是如果您创建 LoadBalancer 服务,您可能需要为负载均衡器配置提供注解。请参阅您的云提供商的文档以获取更多详细信息。
示例
- AWS EKS LoadBalancer 注解
- Azure AKS 公共 LoadBalancer 注解
- Azure AKS 内部 LoadBalancer 注解
- GCP GKE LoadBalancer 注解
认证与授权
认证信息由 Kubernetes secrets 提供。
一种创建 secret 的方法是使用 kubectl
kubectl create secret generic qdrant-api-key --from-literal=api-key=your-secret-api-key --from-literal=read-only-api-key=your-secret-read-only-api-key --namespace qdrant-private-cloud
生成的 secret 将如下所示
apiVersion: v1
data:
api-key: ...
read-only-api-key: ...
kind: Secret
metadata:
name: qdrant-api-key
namespace: qdrant-private-cloud
type: kubernetes.io/generic
您可以在 QdrantCluster 规范中引用该 secret
apiVersion: qdrant.io/v1
kind: QdrantCluster
metadata:
name: qdrant-a7d8d973-0cc5-42de-8d7b-c29d14d24840
labels:
cluster-id: "a7d8d973-0cc5-42de-8d7b-c29d14d24840"
customer-id: "acme-industries"
spec:
id: "a7d8d973-0cc5-42de-8d7b-c29d14d24840"
version: "v1.11.3"
size: 1
resources:
cpu: 100m
memory: "1Gi"
storage: "2Gi"
config:
service:
api_key:
secretKeyRef:
name: qdrant-api-key
key: api-key
read_only_api_key:
secretKeyRef:
name: qdrant-api-key
key: read-only-api-key
jwt_rbac: true
如果您设置了 jwt_rbac 标志,您还可以创建粒度化的 用于基于角色的访问控制的 JWT 令牌。
配置数据库访问的 TLS
如果您想为访问 Qdrant 数据库配置 TLS,有两种选择
- 您可以在 Ingress 或负载均衡器级别卸载 TLS。
- 您可以直接在 Qdrant 数据库中配置 TLS。
如果您想直接在 Qdrant 数据库中配置 TLS,您可以将其作为 secret 提供。
要创建这样的 secret,您可以使用 kubectl
kubectl create secret tls qdrant-tls --cert=mydomain.com.crt --key=mydomain.com.key --namespace the-qdrant-namespace
生成的 secret 将如下所示
apiVersion: v1
data:
tls.crt: ...
tls.key: ...
kind: Secret
metadata:
name: qdrant-tls
namespace: the-qdrant-namespace
type: kubernetes.io/tls
您可以在 QdrantCluster 规范中引用该 secret
apiVersion: qdrant.io/v1
kind: QdrantCluster
metadata:
name: test-cluster
spec:
id: "a7d8d973-0cc5-42de-8d7b-c29d14d24840"
version: "v1.11.3"
size: 1
resources:
cpu: 100m
memory: "1Gi"
storage: "2Gi"
config:
service:
enable_tls: true
tls:
cert:
secretKeyRef:
name: qdrant-tls
key: tls.crt
key:
secretKeyRef:
name: qdrant-tls
key: tls.key
配置集群间通信的 TLS
从 Operator v2.2.0 开始可用
如果您想加密 Qdrant 节点之间的通信,您需要通过提供证书、密钥和用于生成前者的根 CA 证书来启用 TLS。
类似于上一节中说明的,您需要创建一个 secret
kubectl create secret generic qdrant-p2p-tls \
--from-file=tls.crt=qdrant-nodes.crt \
--from-file=tls.key=qdrant-nodes.key \
--from-file=ca.crt=root-ca.crt
--namespace the-qdrant-namespace
生成的 secret 将如下所示
apiVersion: v1
data:
tls.crt: ...
tls.key: ...
ca.crt: ...
kind: Secret
metadata:
name: qdrant-p2p-tls
namespace: the-qdrant-namespace
type: Opaque
您可以在 QdrantCluster 规范中引用该 secret
apiVersion: qdrant.io/v1
kind: QdrantCluster
metadata:
name: test-cluster
labels:
cluster-id: "my-cluster"
customer-id: "acme-industries"
spec:
id: "my-cluster"
version: "v1.13.3"
size: 2
resources:
cpu: 100m
memory: "1Gi"
storage: "2Gi"
config:
service:
enable_tls: true
tls:
caCert:
secretKeyRef:
name: qdrant-p2p-tls
key: ca.crt
cert:
secretKeyRef:
name: qdrant-p2p-tls
key: tls.crt
key:
secretKeyRef:
name: qdrant-p2p-tls
key: tls.key
GPU 支持
从 Qdrant 1.13 和私有云版本 1.6.1 开始,您可以创建一个使用 GPU 来加速索引的集群。
作为先决条件,您需要一个支持 GPU 的 Kubernetes 集群。您可以查看 Kubernetes 文档 以获取有关 GPU 和 Kubernetes 的通用信息,或您特定 Kubernetes 发行版的文档。
示例
一旦您拥有一个支持 GPU 的 Kubernetes 集群,您就可以创建一个支持 GPU 的 QdrantCluster
apiVersion: qdrant.io/v1
kind: QdrantCluster
metadata:
name: qdrant-a7d8d973-0cc5-42de-8d7b-c29d14d24840
labels:
cluster-id: "a7d8d973-0cc5-42de-8d7b-c29d14d24840"
customer-id: "acme-industries"
spec:
id: "a7d8d973-0cc5-42de-8d7b-c29d14d24840"
version: "v1.13.4"
size: 1
resources:
cpu: 2
memory: "8Gi"
storage: "40Gi"
gpu:
gpuType: "nvidia"
一旦集群 Pod 启动,您可以在日志中检查是否检测到 GPU
$ kubectl logs qdrant-a7d8d973-0cc5-42de-8d7b-c29d14d24840-0
Starting initializing for pod 0
_ _
__ _ __| |_ __ __ _ _ __ | |_
/ _` |/ _` | '__/ _` | '_ \| __|
| (_| | (_| | | | (_| | | | | |_
\__, |\__,_|_| \__,_|_| |_|\__|
|_|
Version: 1.13.4, build: 7abc6843
Access web UI at https://:6333/dashboard
2025-03-14T10:25:30.509636Z INFO gpu::instance: Found GPU device: NVIDIA A16-2Q
2025-03-14T10:25:30.509679Z INFO gpu::instance: Found GPU device: llvmpipe (LLVM 15.0.7, 256 bits)
2025-03-14T10:25:30.509734Z INFO gpu::device: Create GPU device NVIDIA A16-2Q
...
有关更多 GPU 配置选项,请参阅 Qdrant 私有云 API 参考。
临时快照卷
如果您不 创建快照,或者在集群重启后不需要保持快照可用,可以将快照存储类名设置为 emptyDir
apiVersion: qdrant.io/v1
kind: QdrantCluster
metadata:
name: qdrant-a7d8d973-0cc5-42de-8d7b-c29d14d24840
labels:
cluster-id: "a7d8d973-0cc5-42de-8d7b-c29d14d24840"
customer-id: "acme-industries"
spec:
id: "a7d8d973-0cc5-42de-8d7b-c29d14d24840"
version: "v1.13.4"
size: 1
resources:
cpu: 2
memory: "8Gi"
storage: "40Gi"
storageClassNames:
snapshots: emptyDir
有关 k8s 节点临时存储如何分配和使用的更多详细信息,请参阅 Kubernetes emptyDir 卷文档。
自动分片再平衡
Qdrant 私有云支持自动分片再平衡。这意味着当您扩展或缩减集群中的节点数量时,Operator 将自动在可用节点之间重新分配分片,以确保数据均匀分布。
要启用自动分片再平衡,您可以在 QdrantCluster 规范中设置 rebalancestrategy 字段
apiVersion: qdrant.io/v1
kind: QdrantCluster
metadata:
name: qdrant-a7d8d973-0cc5-42de-8d7b-c29d14d24840
labels:
cluster-id: "a7d8d973-0cc5-42de-8d7b-c29d14d24840"
customer-id: "acme-industries"
spec:
id: "a7d8d973-0cc5-42de-8d7b-c29d14d24840"
version: "v1.15.1"
size: 3
rebalanceStrategy: by_count_and_size
resources:
cpu: 2
memory: "8Gi"
storage: "40Gi"
有关所有可用再平衡策略的列表,请参阅 Qdrant 私有云 API 参考。
重新分片
在 Qdrant Cloud 中,您可以在不从头重新创建集合的情况下更改现有集合中的分片数量。此功能称为重分片,允许您根据需要扩展或缩减集合。有关更多详细信息,请参阅 重分片。