喂饭级教程(番外篇)—— 在 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,需要事先安装一下。不同操作系统的安装方式可能会略有不同。

  1. 需要先有一个可以用于连接和测试的 K8s 集群。然后在 kubeconfig 配置文件(通常在 ~/.kube/config)中,已经配置过如何连接和操作这个 K8s 集群。
Desktop-of-Zlatan .kube % pwd && ls
/Users/liboyang/.kube
cache  config
  1. 通过第一条命令,添加一个 Helm 仓库,这个仓库里存放了 Dify 应用的 chart(Helm Chart 是 K8s 应用的打包格式,包含部署所需的模板和配置)。
helm repo add dify https://chris-sun-star.github.io/dify-helm
  1. 通过第二条命令,更新本地 Helm 仓库的索引,确保获取最新的 Chart 列表和版本信息。
helm repo update
  1. 通过第三条命令,安装 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。

  1. 这里会输出一个 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
  1. 可以通过 kubectl 命令,在名为 dify 的命名空间中,列出所有正在运行的 Pod。
kubectl get pods -n dify
  1. 这里可能需要等待几分钟,直到所有 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
  1. 如果某个 Pod 响应慢,重启次数较多,则每次重启的时间间隔会依次递增,可以手动重启异常 Pod。
kubectl delete pod -n dify dify-plugin-daemon-74894f6f58-xlpsp
  1. 最终预期的结果应该是:
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
  1. 最后,复制并执行 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

posted on 2026-01-04 20:32  老纪的技术唠嗑局  阅读(47)  评论(0)    收藏  举报