管理 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-idcustomer-id 标签是强制性的。

还有更多配置选项用于配置调度、安全、网络等。有关完整详细信息,请参阅 Qdrant 私有云 API 参考

扩展集群

要扩展集群,请更新 QdrantCluster 规范中的 CPU、内存和存储资源。Qdrant Operator 将自动调整集群配置。此操作在具有复制集合的多节点集群上具有高可用性。

升级 Qdrant 版本

要升级数据库集群的 Qdrant 版本,请更新 QdrantCluster 规范中的 version 字段。Qdrant Operator 将自动将集群升级到新版本。升级过程在具有复制集合的多节点集群上具有高可用性。

请注意,升级时不要跳过次要版本。例如,如果您正在运行 v1.11.3 版本,您可以升级到 v1.11.5v1.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 服务,您可能需要为负载均衡器配置提供注解。请参阅您的云提供商的文档以获取更多详细信息。

示例

认证与授权

认证信息由 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 中,您可以在不从头重新创建集合的情况下更改现有集合中的分片数量。此功能称为重分片,允许您根据需要扩展或缩减集合。有关更多详细信息,请参阅 重分片

此页面有用吗?

感谢您的反馈!🙏

很抱歉听到这个消息。😔 您可以在 GitHub 上编辑此页面,或者创建一个 GitHub 问题。