管理 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 和 private-cloud 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 http://localhost: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 卷的文档。