背景
前一陣兒,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 生產化落地的首選平台。
<!-- 這是一張圖片,ocr 內容為: -->
而且在 v2ex 和 linux.do 等各種技術論壇和交流羣中,也總是能看到有關 “如何在 K8s 上部署 Dify” 的相關問題。
<!-- 這是一張圖片,ocr 內容為: -->
因此,我們這次又更新了一個《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
<!-- 這是一張圖片,ocr 內容為:DITY 口如鋼庫 了工具 探索應用 使用這些樓板應用程序,減想據模板自定義您自己的應用程序. CRALCHING CUSTER SERVION Q.控家 FILE TRANSTATION URL-TO-CROSE-PLATFONM-CEPRWRITING DEEPRESEARCH CHANRU AN AN ANT LETS YNE UPBAD FHES AND VANSATE DEN INSS ANS ANPUAFE YHE YHE NOED DE N BON DO N . CUSTOMER REVIEW ANALYSIS WORKFICW YOUTUBE CHANNEL DATE ANALYSIS MEETING MINSTES AND SUMMARY RESEARCH AGENT PRECESS FLOW -->
使用 Dify 構建 AI 應用
至於接下來如何通過 Dify 構建 AI 應用,就不是本文的重點內容了,大家可以參考 OceanBase 社區公眾號之前發佈的幾篇文章:
-
通過 Dify 構建基礎 AI 應用
- seekdb 簡介
-
使用 Dify Marketplace 中的 PowerMem 插件,讓 AI 應用獲得長期記憶
- PowerMem 簡介
- PowerMem 快速上手
説明:
- 上面在 K8s 上部署的 Dify 中,seekdb 就是被 Dify 依賴的向量數據庫和元數據庫~
- PowerMem[3] 是一個 AI 記憶系統,支持讓開發者快速集成到項目中,歡迎大家試用~
<!-- 這是一張圖片,ocr 內容為: -->
參考資料
[1] Dify: https://github.com/langgenius/dify
[2] seekdb: https://github.com/oceanbase/seekdb
[3] PowerMem: https://github.com/oceanbase/powermem/tree/main