管理 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 和 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 卷的文档

本页面有帮助吗?

感谢您的反馈!🙏

很抱歉听到此消息。😔 您可以在 GitHub 上编辑此页面,或创建 GitHub issue。