博客 / 詳情

返回

餵飯級教程(番外篇)—— 在 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 生產化落地的首選平台。

<!-- 這是一張圖片,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,需要事先安裝一下。不同操作系統的安裝方式可能會略有不同。

  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

<!-- 這是一張圖片,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

user avatar
0 位用戶收藏了這個故事!

發佈 評論

Some HTML is okay.