喂饭级教程(番外篇)—— 在 K8s 上部署 Dify
<h1 id="背景"><strong>背景</strong></h1><p>前一阵儿,OceanBase 联合 <strong>Dify</strong> 在 v1.10.1 版本中完成了 MySQL 兼容开发。同时,Dify 也在这一版本中,也开始尝试通过一体化数据库来解决多组件架构带来的 Scale 复杂性,并选择了 OceanBase <strong>seekdb</strong> 作为首个实践对象,详情请见:《Dify x OceanBase seekdb 使用指南》。</p>
<p>在上面这篇文章中,我们已经为大家介绍如何配置 Dify 的元数据库 / 向量数据库为 seekdb,以及如何通过 Dify 构建 AI 应用。</p>
<p>最近,我们又注意到一个趋势:<strong>越来越多的企业,都会选择在 K8s 上部署 Dify。无论是为了实现高可用、弹性伸缩,还是为了与企业内部 DevOps 体系打通,K8s 已成为 Dify 生产化落地的首选平台。</strong></p>
<p><img alt="" loading="lazy" data-src="https://img2024.cnblogs.com/blog/3648227/202601/3648227-20260104203229037-1235443834.png" ></p>
<p>而且在 v2ex 和 linux.do 等各种技术论坛和交流群中,也总是能看到有关 “如何在 K8s 上部署 Dify” 的相关问题。</p>
<p><img alt="" loading="lazy" data-src="https://img2024.cnblogs.com/blog/3648227/202601/3648227-20260104203229002-207915556.png" ></p>
<p>因此,我们这次又更新了一个《Dify x OceanBase seekdb》的番外篇,再为大家介绍一下如何在 K8s 上部署和使用 Dify。</p>
<p>欢迎大家关注 OceanBase 社区公众号 “老纪的技术唠嗑局”,在这个公众号中,会持续为大家更新与 #数据库、#AI、#OceanBase 相关的技术内容!</p>
<h1 id="在-k8s-上部署和使用-dify"><strong>在 K8s 上部署和使用 Dify</strong></h1>
<p>这个教程,会为大家介绍使用 Helm(K8s 包管理工具),通过三条命令,在 K8s 上部署一个配置了 seekdb 作为向量数据库和元数据库的 Dify。</p>
<p>说明:</p>
<p>如果还没有安装过 helm / kubectl,需要事先安装一下。不同操作系统的安装方式可能会略有不同。</p>
<ol>
<li>需要先有一个可以用于连接和测试的 K8s 集群。然后在 kubeconfig 配置文件(通常在 ~/.kube/config)中,已经配置过如何连接和操作这个 K8s 集群。</li>
</ol>
<code >Desktop-of-Zlatan .kube % pwd && ls
/Users/liboyang/.kube
cacheconfig
</code>
<ol start="2">
<li>通过第一条命令,添加一个 Helm 仓库,这个仓库里存放了 Dify 应用的 chart(Helm Chart 是 K8s 应用的打包格式,包含部署所需的模板和配置)。</li>
</ol>
<code >helm repo add dify https://chris-sun-star.github.io/dify-helm
</code>
<ol start="3">
<li>通过第二条命令,更新本地 Helm 仓库的索引,确保获取最新的 Chart 列表和版本信息。</li>
</ol>
<code >helm repo update
</code>
<ol start="4">
<li>通过第三条命令,安装 Dify 应用到 K8s 集群中。这条命令会根据 Chart 中定义的模板,在 K8s 中创建资源,部署 Dify 应用。</li>
</ol>
<code >helm install dify -n dify --create-namespace dify/dify
</code>
<p>说明:</p>
<p>这个 Helm 仓库里 Chart 的默认配置会把 Service 类型设为 NodePort。</p>
<p>也可以在上面 helm install 命令中,通过指定 —set service.type=LoadBalancer,创建 LoadBalancer 类型的 Service。</p>
<ol start="5">
<li>这里会输出一个 NOTES,复制并执行 NOTES 里面的commands,就可以看到可以用于在浏览器里访问 Dify 服务的网页链接了(需要等待所有 Pod 都启动完成)。</li>
</ol>
<code >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.nodePort}" services dify)
export NODE_IP=$(kubectl get nodes --namespace dify -o jsonpath="{.items.status.addresses.address}")
echo http://$NODE_IP:$NODE_PORT
</code>
<ol start="6">
<li>可以通过 kubectl 命令,在名为 dify 的命名空间中,列出所有正在运行的 Pod。</li>
</ol>
<code >kubectl get pods -n dify
</code>
<ol start="7">
<li>这里可能需要等待几分钟,直到所有 Pod 全都处于 Running 状态。如果有 STATUS 异常的 Pod,会自动重启,直到成功为止。</li>
</ol>
<code >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
</code>
<ol start="8">
<li>如果某个 Pod 响应慢,重启次数较多,则每次重启的时间间隔会依次递增,可以手动重启异常 Pod。</li>
</ol>
<code >kubectl delete pod -n dify dify-plugin-daemon-74894f6f58-xlpsp
</code>
<ol start="9">
<li>最终预期的结果应该是:</li>
</ol>
<code >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
</code>
<ol start="10">
<li>最后,复制并执行 NOTES 里的 commands,获取网页链接地址,就可以在 K8s 上使用 Dify 构建应用了~</li>
</ol>
<code >export NODE_PORT=$(kubectl get --namespace dify -o jsonpath="{.spec.ports.nodePort}" services dify)
export NODE_IP=$(kubectl get nodes --namespace dify -o jsonpath="{.items.status.addresses.address}")
echo http://$NODE_IP:$NODE_PORT
</code>
<p><img alt="" loading="lazy" data-src="https://img2024.cnblogs.com/blog/3648227/202601/3648227-20260104203228937-1902966538.png" ></p>
<h1 id="使用-dify-构建-ai-应用"><strong>使用 Dify 构建 AI 应用</strong></h1>
<p>至于接下来如何通过 Dify 构建 AI 应用,就不是本文的重点内容了,大家可以参考 OceanBase 社区公众号之前发布的几篇文章:</p>
<ul>
<li>通过 Dify 构建基础 AI 应用
<ul>
<li>seekdb 简介</li>
</ul>
</li>
<li>使用 Dify Marketplace 中的 PowerMem 插件,让 AI 应用获得长期记忆
<ul>
<li>PowerMem 简介</li>
<li>PowerMem 快速上手</li>
</ul>
</li>
</ul>
<p>说明:</p>
<ul>
<li>上面在 K8s 上部署的 Dify 中,seekdb 就是被 Dify 依赖的向量数据库和元数据库~</li>
<li>PowerMem 是一个 AI 记忆系统,支持让开发者快速集成到项目中,欢迎大家试用~</li>
</ul>
<p><img alt="" loading="lazy" data-src="https://img2024.cnblogs.com/blog/3648227/202601/3648227-20260104203228964-1022694048.png" ></p>
<p><strong>参考资料</strong></p>
<p> Dify: <em>https://github.com/langgenius/dify</em></p>
<p> seekdb: <em>https://github.com/oceanbase/seekdb</em></p>
<p> PowerMem: <em>https://github.com/oceanbase/powermem/tree/main</em></p><br>来源:程序园用户自行投稿发布,如果侵权,请联系站长删除<br>免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作! 东西不错很实用谢谢分享 谢谢楼主提供! yyds。多谢分享 感谢发布原创作品,程序园因你更精彩 前排留名,哈哈哈 分享、互助 让互联网精神温暖你我
页:
[1]