使用 Helm 在 Kubernetes 中執行 Milvus

本頁面說明如何使用Milvus Helm 圖表在 Kubernetes 中啟動 Milvus 實例。

概述

Helm 使用一種稱為「charts」的封裝格式。charts 是一組檔案的集合,用以描述一組相關的 Kubernetes 資源。Milvus 提供了一組 charts,以協助您部署 Milvus 的依賴項與組件。

先決條件

若在拉取映像檔時遇到任何問題,請透過community@zilliz.com聯絡我們,並提供問題詳情,我們將為您提供必要的支援。

安裝 Milvus Helm Chart

在安裝 Milvus Helm Chart 之前,您需要新增 Milvus Helm 儲存庫。

helm repo add zilliztech https://zilliztech.github.io/milvus-helm/

位於https://github.com/milvus-io/milvus-helm 的 Milvus Helm Charts 儲存庫已歸檔。我們現在使用位於https://github.com/zilliztech/milvus-helm 的新儲存庫。歸檔的儲存庫仍可提供 4.0.31 及更早版本的 Charts,但後續版本請使用新儲存庫。

接著請依照以下步驟從儲存庫取得 Milvus Helm Charts:

$ helm repo update

您隨時可執行此指令以取得最新的 Milvus Helm 圖表。

線上安裝

1. 部署 Milvus 叢集

安裝 Helm 圖表後,即可在 Kubernetes 上啟動 Milvus。本節將引導您部署 Milvus 叢集。

需要獨立部署嗎?

若您希望以獨立模式(單節點)部署 Milvus 進行開發或測試,請使用以下指令:

helm install my-release zilliztech/milvus \
  --set image.all.tag=v3.0.3 \
  --set cluster.enabled=false \
  --set pulsarv3.enabled=false \
  --set standalone.messageQueue=woodpecker \
  --set woodpecker.enabled=true \
  --set streaming.enabled=true

注意:獨立模式預設使用 Woodpecker 作為訊息佇列,並啟用「串流節點」元件。獨立部署會將 Woodpecker內嵌於Milvus Pod 中執行;專用的 Woodpecker服務(獨立 Pod)僅適用於分散式/叢集部署。詳細資訊請參閱《架構概覽》與《Woodpecker》。

部署 Milvus 叢集:

若採用 Woodpecker 服務模式,建議使用 Milvus 3.0.3 或更新版本,並搭配 Woodpecker v0.1.46 或更新版本。

以下指令將部署一個針對 v3.0.3 進行過最佳化設定的 Milvus 叢集,並使用 Woodpecker 作為建議的消息佇列:

helm install my-release zilliztech/milvus \
  --set image.all.tag=v3.0.3 \
  --set woodpecker.enabled=true \
  --set woodpecker.image.tag=v0.1.46 \
  --set streaming.enabled=true \
  --set streaming.woodpecker.embedded=false \
  --set indexNode.enabled=false

此命令的功能:

  • 使用Woodpecker作為訊息佇列(建議採用以減少維護工作)
  • 將Woodpecker 作為專用服務(獨立的 StatefulSet)運行,而非嵌入至串流節點中
  • 啟用新的串流節點 (Streaming Node) 元件以提升效能
  • 停用舊版索引節點(相關功能現由資料節點處理)

Milvus 2.6.x 中的架構變更:

  • 訊息佇列:現建議使用Woodpecker(相較於 Pulsar,可減少基礎架構維護工作)
  • 新元件:引入「串流節點」,並預設啟用
  • 整合的元件:索引節點與資料節點已合併為單一的資料節點

完整的架構詳情,請參閱《架構概覽》。

替代訊息佇列:若要使用 Pulsar、Kafka 或 RocksMQ 取代 Woodpecker 進行部署,請參閱「可選依賴項」。

後續步驟: 上述指令會以建議的設定部署 Milvus。若要投入生產環境使用:

重要注意事項:

  • 版本命名規則:僅可使用字母、數字和連字號(不允許使用點號)

如需更多資訊,請參閱Milvus Helm Chart及Helm 文件。

2. 檢查 Milvus 叢集狀態

透過檢查 Pod 狀態來確認部署是否成功:

kubectl get pods

請等待所有 Pod 顯示「Running」狀態。採用 v3.0.3 配置時,您應會看到類似以下的 Pod:

NAME                                             READY  STATUS   RESTARTS  AGE
my-release-etcd-0                                1/1    Running   0        3m23s
my-release-etcd-1                                1/1    Running   0        3m23s
my-release-etcd-2                                1/1    Running   0        3m23s
my-release-milvus-datanode-68cb87dcbd-4khpm      1/1    Running   0        3m23s
my-release-milvus-mixcoord-7fb9488465-dmbbj      1/1    Running   0        3m23s
my-release-milvus-proxy-6bd7f5587-ds2xv          1/1    Running   0        3m24s
my-release-milvus-querynode-5cd8fff495-k6gtg     1/1    Running   0        3m24s
my-release-milvus-streamingnode-7b8cfc769c-mqmsm  1/1    Running   0        3m24s
my-release-milvus-woodpecker-0                   1/1    Running   0        3m24s
my-release-milvus-woodpecker-1                   1/1    Running   0        3m24s
my-release-milvus-woodpecker-2                   1/1    Running   0        3m24s
my-release-milvus-woodpecker-3                   1/1    Running   0        3m24s
my-release-minio-0                               1/1    Running   0        3m23s
my-release-minio-1                               1/1    Running   0        3m23s
my-release-minio-2                               1/1    Running   0        3m23s
my-release-minio-3                               1/1    Running   0        3m23s

需驗證的關鍵元件:

  • Milvus 元件:mixcoord 、datanode 、querynode 、proxy 、streamingnode
  • 依賴項:etcd (元資料)、minio (物件儲存)、woodpecker (訊息佇列)

透過streaming.woodpecker.embedded=false ,Woodpecker會以專用的 StatefulSet形式運行(my-release-milvus-woodpecker ,預設為 4 個複本 — 3 個節點的法定人數加上 1 個備用節點以確保容錯; 請勿將woodpecker.replicaCount 設定低於 3)並由無頭服務作為前端,採用 MinIO 作為儲存後端——因此該叢集擁有獨立的woodpecker Pod 集合,與串流節點相互區隔。

設定完畢端口轉發後(請參閱下一步),您亦可透過http://127.0.0.1:9091/webui/ 存取Milvus WebUI。詳細資訊請參閱Milvus WebUI。

3. 連線至 Milvus

若要從 Kubernetes 外部連線至您的 Milvus 叢集,您需要設定端口轉發。

設定端口轉發:

kubectl port-forward service/my-release-milvus 27017:19530

此指令會將您的本地端埠27017 轉發至 Milvus 埠19530 。您應會看到:

Forwarding from 127.0.0.1:27017 -> 19530

連線詳細資訊:

  • 本地端連線:localhost:27017
  • Milvus 預設埠:19530

端口轉發選項:

  • 自動指派本地端口:使用:19530 取代27017:19530 ,讓 kubectl 自行選擇可用端口
  • 監聽所有介面:新增--address 0.0.0.0 以允許來自其他機器的連線:
    kubectl port-forward --address 0.0.0.0 service/my-release-milvus 27017:19530
    
  • 獨立部署:若使用獨立模式,服務名稱保持不變

使用 Milvus 時請保持此終端機開啟。現在您可以透過任何 Milvus SDK 連線至localhost:27017 來存取 Milvus。

(可選)更新 Milvus 設定

您可以透過編輯 `values.yaml ` 檔案並重新套用,來更新 Milvus 叢集的設定。

  1. 建立一個包含所需設定的values.yaml 檔案。

    以下假設您希望啟用proxy.http 。

    extraConfigFiles:
      user.yaml: |+
        proxy:
          http:
            enabled: true
    

    有關適用的設定項目,請參閱《系統設定》。

  2. 套用values.yaml 檔案。

helm upgrade my-release zilliztech/milvus --namespace my-namespace -f values.yaml
  1. 檢查已更新的設定。

    helm get values my-release
    

    輸出結果應顯示已更新的設定。

存取 Milvus WebUI

Milvus 內建名為 Milvus WebUI 的圖形化使用者介面工具,您可透過瀏覽器存取。Milvus WebUI 透過簡單直覺的介面,提升系統的可觀察性。您可以使用 Milvus WebUI 觀察 Milvus 各元件與依賴項的統計資料和指標、檢查資料庫與收集項的詳細資訊,並列出詳細的 Milvus 配置。 有關 Milvus WebUI 的詳細資訊,請參閱Milvus WebUI

若要啟用對 Milvus WebUI 的存取,您需要將代理 pod 進行端口轉發至本機端口。

$ kubectl port-forward --address 0.0.0.0 service/my-release-milvus 27018:9091
Forwarding from 0.0.0.0:27018 -> 9091

現在,您可透過http://localhost:27018 存取 Milvus WebUI。

離線安裝

若您身處網路受限環境,請依照本節的步驟啟動 Milvus 叢集。

1. 取得 Milvus 配置檔

執行以下指令以取得 Milvus 配置檔。

$ helm template my-release zilliztech/milvus > milvus_manifest.yaml

上述命令會為 Milvus 叢集渲染圖表範本,並將輸出結果儲存至名為milvus_manifest.yaml 的清單檔案中。透過此清單,您可以安裝一個 Milvus 叢集,其各組件與依賴項將分別置於不同的 Pod 中。

  • 若要以獨立模式安裝 Milvus 實例(即所有 Milvus 元件均包含於單一 Pod 內),則應執行helm template my-release --set cluster.enabled=false --set etcd.replicaCount=1 --set minio.mode=standalone --set pulsarv3.enabled=false --set standalone.messageQueue=woodpecker --set woodpecker.enabled=true --set streaming.enabled=true zilliztech/milvus > milvus_manifest.yaml ,以渲染獨立模式下 Milvus 實例的圖表範本。
  • 若要變更 Milvus 設定,請下載 value.yaml 範本,在其中填入您所需的設定,並使用helm template -f values.yaml my-release zilliztech/milvus > milvus_manifest.yaml 據此渲染對應的 manifests 檔案。

2. 下載映像檔拉取腳本

映像拉取腳本以 Python 開發。您應將該腳本及其依賴項一併下載至requirement.txt 檔案中。

$ wget https://raw.githubusercontent.com/milvus-io/milvus/master/deployments/offline/requirements.txt
$ wget https://raw.githubusercontent.com/milvus-io/milvus/master/deployments/offline/save_image.py

3. 拉取並儲存映像檔

執行以下指令以拉取並儲存所需的影像。

$ pip3 install -r requirements.txt
$ python3 save_image.py --manifest milvus_manifest.yaml

圖片將被拉取至當前目錄下名為images 的子資料夾中。

4. 載入圖像

現在您可以依照以下步驟,將影像載入至網路受限環境中的主機:

$ for image in $(find . -type f -name "*.tar.gz") ; do gunzip -c $image | docker load; done

5. 部署 Milvus

$ kubectl apply -f milvus_manifest.yaml

至此,您可以依照線上安裝指南的步驟2和3,檢查叢集狀態並將本機埠轉發至 Milvus。

升級正在運行的 Milvus 叢集

執行以下指令,將您正在運行的 Milvus 叢集升級至最新版本:

$ helm repo update
$ helm upgrade my-release zilliztech/milvus --reset-then-reuse-values

解除安裝 Milvus

執行以下指令以解除安裝 Milvus。

$ helm uninstall my-release

可選的依賴項

此部署使用Woodpecker作為訊息佇列、etcd作為元資料儲存,以及MinIO作為物件儲存。若要使用其他訊息佇列,或連接外部物件儲存/元資料,請參閱:

Storage V3 預設為停用狀態。在使用依賴此功能的特性之前,請先啟用它。有關需求與相容性考量,請參閱Storage V3。

下一步

在 Docker 中安裝 Milvus 後,您可以: