使用K8S部署分布式qdrant向量召回服务

使用K8S部署分布式qdrant向量召回服务里

    • Qdrant集群部署说明
    • 使用K8S部署Qdrant分布式服务

Qdrant集群部署说明

从 v0.8.0 版本开始,Qdrant 支持分布式部署的实验模式。在这种模式下,多个 Qdrant 服务相互通信以在对等方之间分发数据,以扩展存储能力并提高稳定性。

要启用分布式部署 - 在配置中启用集群模式:

    cluster:consensus:tick_period_ms: 100enabled: truep2p:port: 6335

说明:在默认配置下,Qdrant 将使用端口6335进行内部通信。所有对等点都应该可以从集群内部访问此端口,但请确保将此端口与外部访问隔离,因为它可能用于执行写入操作。

此外,应该向集群的第一个对等节点提供其 URL,以便它可以告诉其他节点应该如何到达它。使用uriCLI 参数向对等方提供 URL:

./qdrant --uri 'http://qdrant_node_1:6335'

集群中的后续节点必须至少知道现有集群的一个节点,才能通过它与集群的其余部分进行同步。为此,需要为它们提供引导 URL:

./qdrant --bootstrap 'http://qdrant_node_1:6335'

使用K8S部署Qdrant分布式服务

通过上面的说明我们知道qdrant分布式服务需要指定bootstrapurl,qdrant服务我们通过有状态控制器来部署,可以使用脚本来判断当前服务副本数量,先定义一个configmap定义判断脚本和配置文件:

# https://qdrant.tech/documentation/distributed_deployment/
apiVersion: v1
kind: ConfigMap
metadata:name: qdrant-config
data:initialize.sh: |#!/bin/shSET_INDEX=${HOSTNAME##*-}echo "Starting initializing for pod $SET_INDEX"if [ "$SET_INDEX" = "0" ]; then./qdrant --uri 'http://qdrant-0.qdrant-headless:6335'else./qdrant --bootstrap 'http://qdrant-0.qdrant-headless:6335' --uri 'http://qdrant-'"$SET_INDEX"'.qdrant-headless:6335'fiproduction.yaml: |cluster:consensus:tick_period_ms: 100enabled: truep2p:port: 6335

具体的部署文件

apiVersion: apps/v1
kind: StatefulSet
metadata:name: qdrantlabels:app: qdrantapp.kubernetes.io/name: qdrantapp.kubernetes.io/instance: qdrantapp.kubernetes.io/version: "0.9.1"
spec:replicas: 3selector:matchLabels:app: qdrantapp.kubernetes.io/name: qdrantapp.kubernetes.io/instance: qdrantserviceName: qdrant-headlesstemplate:metadata:labels:app: qdrantapp.kubernetes.io/name: qdrantapp.kubernetes.io/instance: qdrantspec:containers:- name: qdrantimage: "qdrant/qdrant:v0.9.1"imagePullPolicy: IfNotPresentcommand: ["/bin/sh", "-c"]args: ["./config/initialize.sh"]ports:- name: restcontainerPort: 6333protocol: TCP- name: grpccontainerPort: 6334protocol: TCP- name: p2pcontainerPort: 6335protocol: TCPlivenessProbe:httpGet:path: /port: 6333initialDelaySeconds: 5timeoutSeconds: 1periodSeconds: 10successThreshold: 1failureThreshold: 3readinessProbe:httpGet:path: /port: 6333initialDelaySeconds: 5timeoutSeconds: 1periodSeconds: 10successThreshold: 1failureThreshold: 3resources:limits:memory: 2048Mirequests:cpu: 100mmemory: 128MivolumeMounts:- name: qdrant-storagemountPath: /qdrant/storage- name: qdrant-configmountPath: /qdrant/config/initialize.shsubPath: initialize.sh- name: qdrant-configmountPath: /qdrant/config/production.yamlsubPath: production.yamlvolumes:- name: qdrant-configconfigMap:name: qdrant-configdefaultMode: 0755volumeClaimTemplates:- metadata:name: qdrant-storagelabels:app: qdrantspec:# 通过存储类来提供动态PV卷storageClassName: ali-csi accessModes:- "ReadWriteOnce"resources:requests:storage: "20Gi"

定义一个无头服务文件,供集群访问

apiVersion: v1
kind: Service
metadata:name: qdrant-headlesslabels:app: qdrantapp.kubernetes.io/name: qdrantapp.kubernetes.io/instance: qdrantapp.kubernetes.io/version: "0.9.1"
spec:clusterIP: Noneports:- name: restport: 6333targetPort: 6333protocol: TCP- name: grpcport: 6334targetPort: 6334protocol: TCP- name: p2pport: 6335targetPort: 6335protocol: TCPselector:app: qdrantapp.kubernetes.io/name: qdrantapp.kubernetes.io/instance: qdrant


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部