喂饭级教程(番外篇)—— 在 K8s 上部署 Dify
背景
前一阵儿,OceanBase 联合 Dify[1] 在 v1.10.1 版本中完成了 MySQL 兼容开发。同时,Dify 也在这一版本中,也开始尝试通过一体化数据库来解决多组件架构带来的 Scale 复杂性,并选择了 OceanBase seekdb[2] 作为首个实践对象,详情请见:《Dify x OceanBase seekdb 使用指南》。
在上面这篇文章中,我们已经为大家介绍如何配置 Dify 的元数据库 / 向量数据库为 seekdb,以及如何通过 Dify 构建 AI 应用。
最近,我们又注意到一个趋势:越来越多的企业,都会选择在 K8s 上部署 Dify。无论是为了实现高可用、弹性伸缩,还是为了与企业内部 DevOps 体系打通,K8s 已成为 Dify 生产化落地的首选平台。

而且在 v2ex 和 linux.do 等各种技术论坛和交流群中,也总是能看到有关 “如何在 K8s 上部署 Dify” 的相关问题。

因此,我们这次又更新了一个《Dify x OceanBase seekdb》的番外篇,再为大家介绍一下如何在 K8s 上部署和使用 Dify。
欢迎大家关注 OceanBase 社区公众号 “老纪的技术唠嗑局”,在这个公众号中,会持续为大家更新与 #数据库、#AI、#OceanBase 相关的技术内容!
在 K8s 上部署和使用 Dify
这个教程,会为大家介绍使用 Helm(K8s 包管理工具),通过三条命令,在 K8s 上部署一个配置了 seekdb 作为向量数据库和元数据库的 Dify。
说明:
如果还没有安装过 helm / kubectl,需要事先安装一下。不同操作系统的安装方式可能会略有不同。
- 需要先有一个可以用于连接和测试的 K8s 集群。然后在 kubeconfig 配置文件(通常在 ~/.kube/config)中,已经配置过如何连接和操作这个 K8s 集群。
Desktop-of-Zlatan .kube % pwd && ls
/Users/liboyang/.kube
cache config
- 通过第一条命令,添加一个 Helm 仓库,这个仓库里存放了 Dify 应用的 chart(Helm Chart 是 K8s 应用的打包格式,包含部署所需的模板和配置)。
helm repo add dify https://chris-sun-star.github.io/dify-helm
- 通过第二条命令,更新本地 Helm 仓库的索引,确保获取最新的 Chart 列表和版本信息。
helm repo update
- 通过第三条命令,安装 Dify 应用到 K8s 集群中。这条命令会根据 Chart 中定义的模板,在 K8s 中创建资源,部署 Dify 应用。
helm install dify -n dify --create-namespace dify/dify
说明:
这个 Helm 仓库里 Chart 的默认配置会把 Service 类型设为 NodePort。
也可以在上面 helm install 命令中,通过指定 —set service.type=LoadBalancer,创建 LoadBalancer 类型的 Service。
- 这里会输出一个 NOTES,复制并执行 NOTES 里面的 commands,就可以看到可以用于在浏览器里访问 Dify 服务的网页链接了(需要等待所有 Pod 都启动完成)。
NAME: dify
LAST DEPLOYED: Thu Dec 25 11:33:45 2025
NAMESPACE: dify
STATUS: deployed
REVISION: 1
NOTES:
1. Get the application URL by running these commands:
export NODE_PORT=$(kubectl get --namespace dify -o jsonpath="{.spec.ports[0].nodePort}" services dify)
export NODE_IP=$(kubectl get nodes --namespace dify -o jsonpath="{.items[0].status.addresses[0].address}")
echo http://$NODE_IP:$NODE_PORT
- 可以通过 kubectl 命令,在名为 dify 的命名空间中,列出所有正在运行的 Pod。
kubectl get pods -n dify
- 这里可能需要等待几分钟,直到所有 Pod 全都处于 Running 状态。如果有 STATUS 异常的 Pod,会自动重启,直到成功为止。
liboyang@Desktop-of-Zlatan .kube % kubectl get pods -n dify
NAME READY STATUS RESTARTS AGE
dify-api-6f7647c56f-wqp8g 0/1 Running 4 (70s ago) 7m46s
dify-plugin-daemon-74894f6f58-xlpsp 0/1 CrashLoopBackOff 6 (96s ago) 7m46s
dify-proxy-55cf79f668-4srmb 1/1 Running 0 7m46s
dify-redis-master-0 1/1 Running 0 7m46s
dify-redis-replicas-0 1/1 Running 0 7m46s
dify-redis-replicas-1 1/1 Running 0 7m6s
dify-redis-replicas-2 1/1 Running 0 6m40s
dify-sandbox-56f4df9558-zdvtf 1/1 Running 0 7m46s
dify-seekdb-0 1/1 Running 0 7m46s
dify-web-849c44cf64-csjwb 1/1 Running 0 7m46s
dify-worker-5ddfcd95d7-22fjp 0/1 Init:0/1 0 7m46s
- 如果某个 Pod 响应慢,重启次数较多,则每次重启的时间间隔会依次递增,可以手动重启异常 Pod。
kubectl delete pod -n dify dify-plugin-daemon-74894f6f58-xlpsp
- 最终预期的结果应该是:
liboyang@Desktop-of-Zlatan .kube % kubectl get pods -n dify
NAME READY STATUS RESTARTS AGE
dify-api-6f7647c56f-ndmnb 1/1 Running 1 (5h15m ago) 5h17m
dify-plugin-daemon-74894f6f58-2rgf4 1/1 Running 0 5h18m
dify-proxy-55cf79f668-4srmb 1/1 Running 0 5h29m
dify-redis-master-0 1/1 Running 0 5h29m
dify-redis-replicas-0 1/1 Running 0 5h29m
dify-redis-replicas-1 1/1 Running 0 5h29m
dify-redis-replicas-2 1/1 Running 0 5h28m
dify-sandbox-56f4df9558-zdvtf 1/1 Running 0 5h29m
dify-seekdb-0 1/1 Running 0 5h29m
dify-web-849c44cf64-csjwb 1/1 Running 0 5h29m
dify-worker-5ddfcd95d7-22fjp 1/1 Running 0 5h29m
- 最后,复制并执行 NOTES 里的 commands,获取网页链接地址,就可以在 K8s 上使用 Dify 构建应用了~
export NODE_PORT=$(kubectl get --namespace dify -o jsonpath="{.spec.ports[0].nodePort}" services dify)
export NODE_IP=$(kubectl get nodes --namespace dify -o jsonpath="{.items[0].status.addresses[0].address}")
echo http://$NODE_IP:$NODE_PORT

使用 Dify 构建 AI 应用
至于接下来如何通过 Dify 构建 AI 应用,就不是本文的重点内容了,大家可以参考 OceanBase 社区公众号之前发布的几篇文章:
说明:
- 上面在 K8s 上部署的 Dify 中,seekdb 就是被 Dify 依赖的向量数据库和元数据库~
- PowerMem[3] 是一个 AI 记忆系统,支持让开发者快速集成到项目中,欢迎大家试用~

参考资料
[1] Dify: https://github.com/langgenius/dify
[2] seekdb: https://github.com/oceanbase/seekdb
[3] PowerMem: https://github.com/oceanbase/powermem/tree/main
浙公网安备 33010602011771号