kubernetes中dify高可用部署需api、数据库、缓存、向量库均多副本且持久化,使用nas共享存储(如sfs turbo),部署spilo+patroni postgresql三节点集群、redis哨兵、weaviate三副本集群及双副本api/worker服务,并配置ingress网关。
☞☞☞AI 智能聊天, 问答助手, AI 智能搜索, 多模态理解力帮你轻松跨越从0到1的创作门槛☜☜☜

在Kubernetes集群中实现Dify高可用分布式部署,需确保API服务、数据库、缓存、向量库等核心组件全部具备多副本容错能力,且数据不因Pod重建而丢失,网络层支持自动故障转移与负载均衡。
准备高可用基础设施
先确认Kubernetes集群版本≥v1.23,工作节点不少于3台,全部位于同一VPC内;若使用华为云CCE,启用自动弹性伸缩并绑定至少两个可用区。
创建专用命名空间:kubectl create ns dify。
【必须使用NAS类共享存储】块存储无法被多个Pod同时挂载,会导致PostgreSQL主从同步失败或Weaviate数据不一致;华为云SFS Turbo、阿里云NAS、腾讯云CFS均符合要求。
部署StorageClass,名称必须为nfs(大小写敏感),其provisioner字段需与云厂商CSI驱动匹配,例如华为云为everest-csi-provisioner;reclaimPolicy设为Retain,避免误删生产数据。
部署高可用PostgreSQL集群
采用Spilo+Patroni方案构建三节点HA集群,所有Pod挂载同一NAS PV,通过etcd或Kubernetes内置leader选举实现主从自动切换。
执行命令部署:kubectl apply -n dify -f https://raw.githubusercontent.com/Winson-030/dify-kubernetes/main/dify-database-HA-setup/postgres-statefulset.yaml。
检查状态:kubectl -n dify get pods -l application=spilo,应看到3个Running状态的Pod,其中1个带role: master标签,其余为replica;若全部为replica,说明PVC未正确绑定或storageClassName填写错误。
验证连接:进入任意Pod执行psql -h dify-pg-ha -U postgres -d dify,能成功登录即表示集群通信正常。
部署Redis哨兵模式
方法一:使用Bitnami Helm Chart快速部署
helm repo add bitnami https://charts.bitnami.com/bitnami → helm install redis-sentinel bitnami/redis-sentinel -n dify --set architecture=replication,replica.replicaCount=2,sentinel.sentinelCount=3。
方法二:直接应用YAML清单
下载dify/database/redis-sentinel.yaml,确认其中sentinelConfig节已配置quorum=2,且所有StatefulSet副本数≥2;应用前替换namespace为dify,再执行kubectl apply -f。
针对 Kubernetes 仪表板和 Web UI 的浏览器自动化。适用于与 Kubernetes Dashboard、Grafana、ArgoCD UI 或其他 Web 界面交互。需要设置 MCP_BROWSER_ENABLED=true。
哨兵模式下客户端必须连接Sentinel地址(如redis-sentinel:26379),而非直接连Redis Pod IP;否则故障转移时连接将中断。
部署Weaviate向量数据库集群
第一步:创建专用ServiceAccount与RBAC权限,Weaviate需访问Kubernetes API获取节点信息用于分片调度。
第二步:配置Weaviate StatefulSet,副本数设为3,volumeClaimTemplates引用前述nfs StorageClass,storage: 50Gi。
第三步:设置环境变量CLUSTER_DISCOVERY=statefulset和CLUSTER_HOSTNAME=weaviate,确保各Pod能通过DNS发现彼此。
第四步:应用清单:kubectl apply -n dify -f https://raw.githubusercontent.com/Winson-030/dify-kubernetes/main/dify-database-HA-setup/weaviate-statefulset.yaml。
等待所有Pod Ready后,访问http://weaviate.dify.svc.cluster.local/v1/meta返回{"version":"1.24.0"}即表示集群就绪。
部署Dify核心服务与网关
① 应用API服务Deployment,副本数≥2,确保readinessProbe检测/healthz端点返回200;livenessProbe间隔设为30秒,避免频繁重启。
② 部署Worker服务,concurrency参数根据CPU核数设定(建议8~16),并通过envFrom挂载Redis哨兵地址与PostgreSQL连接串。
③ Web前端使用Nginx Deployment,静态资源由ConfigMap注入,index.html中API_BASE_URL必须指向内部Service名http://dify-api.dify.svc.cluster.local,不可写成NodePort或Ingress域名。
④ 配置Ingress资源,host字段填入企业域名(如ai.example.com),TLS secret需提前导入;backend service name必须与API Service一致,端口为80。
⑤ 若使用华为云ELB,需在Ingress annotation中添加nginx.ingress.kubernetes.io/service-upstream: "true",否则流量无法透传到Pod。
执行最终部署:kubectl apply -n dify -f https://raw.githubusercontent.com/Winson-030/dify-kubernetes/main/dify-deployment.yaml。








