使用 Milvus Operator 在 Kubernetes 中執行 Milvus
本頁面說明如何使用Milvus Operator 在 Kubernetes 中啟動 Milvus 實例。
概述
Milvus Operator 是一套解決方案,可協助您在目標 Kubernetes (K8s) 叢集中部署並管理完整的 Milvus 服務堆疊。該堆疊包含所有 Milvus 元件及相關依賴項(如 etcd 和 MinIO),並內建 Woodpecker 作為訊息佇列。
先決條件
安裝StorageClass。您可以透過以下方式檢查已安裝的 StorageClass。
$ kubectl get sc NAME PROVISIONER RECLAIMPOLICY VOLUMEBIINDINGMODE ALLOWVOLUMEEXPANSION AGE standard (default) k8s.io/minikube-hostpath Delete Immediate false安裝前請先確認硬體與軟體需求。
在安裝 Milvus 之前,建議使用Milvus 規格規劃工具,根據您的資料量估算硬體需求。這有助於確保您的 Milvus 安裝能獲得最佳效能與資源分配。
若在拉取映像檔時遇到任何問題,請透過community@zilliz.com聯絡我們,並提供問題詳情,我們將為您提供必要的支援。
安裝 Milvus Operator
Milvus Operator 基於Kubernetes 自訂資源(Custom Resources)定義了 Milvus 叢集的自訂資源。定義自訂資源後,您即可透過宣告式方式使用 K8s API,並管理 Milvus 部署堆疊,以確保其可擴展性與高可用性。
執行以下指令,透過 Helm 安裝 Milvus Operator。
$ helm install milvus-operator \
-n milvus-operator --create-namespace \
--wait --wait-for-jobs \
https://github.com/zilliztech/milvus-operator/releases/download/v1.3.7/milvus-operator-1.3.7.tgz
安裝程序結束後,您將看到類似以下的輸出結果。
NAME: milvus-operator
LAST DEPLOYED: Thu Jul 7 13:18:40 2022
NAMESPACE: milvus-operator
STATUS: deployed
REVISION: 1
TEST SUITE: None
NOTES:
Milvus Operator Is Starting, use `kubectl get -n milvus-operator deploy/milvus-operator` to check if its successfully installed
If Operator not started successfully, check the checker's log with `kubectl -n milvus-operator logs job/milvus-operator-checker`
Full Installation doc can be found in https://github.com/zilliztech/milvus-operator/blob/main/docs/installation/installation.md
Quick start with `kubectl apply -f https://raw.githubusercontent.com/zilliztech/milvus-operator/main/config/samples/milvus_minimum.yaml`
More samples can be found in https://github.com/zilliztech/milvus-operator/tree/main/config/samples
CRD Documentation can be found in https://github.com/zilliztech/milvus-operator/tree/main/docs/CRD
若您先前已安裝 Milvus Operator,請使用以下命令進行升級:
helm upgrade milvus-operator \
-n milvus-operator --create-namespace \
--wait --wait-for-jobs \
https://github.com/zilliztech/milvus-operator/releases/download/v1.3.7/milvus-operator-1.3.7.tgz
執行以下命令,透過kubectl 安裝 Milvus Operator。
$ kubectl apply -f https://raw.githubusercontent.com/zilliztech/milvus-operator/main/deploy/manifests/deployment.yaml
安裝程序結束後,您將看到類似以下的輸出內容。
namespace/milvus-operator created
customresourcedefinition.apiextensions.k8s.io/milvusclusters.milvus.io created
serviceaccount/milvus-operator-controller-manager created
role.rbac.authorization.k8s.io/milvus-operator-leader-election-role created
clusterrole.rbac.authorization.k8s.io/milvus-operator-manager-role created
clusterrole.rbac.authorization.k8s.io/milvus-operator-metrics-reader created
clusterrole.rbac.authorization.k8s.io/milvus-operator-proxy-role created
rolebinding.rbac.authorization.k8s.io/milvus-operator-leader-election-rolebinding created
clusterrolebinding.rbac.authorization.k8s.io/milvus-operator-manager-rolebinding created
clusterrolebinding.rbac.authorization.k8s.io/milvus-operator-proxy-rolebinding created
configmap/milvus-operator-manager-config created
service/milvus-operator-controller-manager-metrics-service created
service/milvus-operator-webhook-service created
deployment.apps/milvus-operator-controller-manager created
您可以透過以下方式檢查 Milvus Operator Pod 是否正在運行:
$ kubectl get pods -n milvus-operator
NAME READY STATUS RESTARTS AGE
milvus-operator-5fd77b87dc-msrk4 1/1 Running 0 46s
部署 Milvus
1. 部署 Milvus 叢集
一旦 Milvus Operator Pod 開始運作,即可依照以下步驟部署 Milvus 叢集。
$ kubectl apply -f https://raw.githubusercontent.com/zilliztech/milvus-operator/main/config/samples/milvus_cluster_woodpecker.yaml
上述指令會部署一個以Woodpecker作為訊息佇列(建議用於 v3.0.0)的 Milvus 叢集,並包含所有新的架構元件,包括串流節點。
此部署中的架構重點:
- 訊息佇列:使用 Woodpecker(可減少基礎架構維護工作)
- 串流節點:已啟用以強化資料處理能力
- Mix 協調器:整合協調器元件以提升效率
若要自訂這些設定,建議您使用Milvus 規格規劃工具,根據實際資料量調整配置,然後下載對應的 YAML 檔案。如需進一步了解配置參數,請參閱《Milvus 系統配置檢查清單》。
- 版本名稱僅應包含字母、數字和連字號。版本名稱中不允許出現點號。
- 您亦可將 Milvus 實例部署於獨立模式,此時所有元件皆包含於單一 Pod 之中。若要執行此操作,請將上述指令中的配置檔案 URL 變更為
https://raw.githubusercontent.com/zilliztech/milvus-operator/main/config/samples/milvus_default.yaml
2. 檢查 Milvus 叢集狀態
執行以下指令以檢查 Milvus 叢集狀態
$ kubectl get milvus my-release -o yaml
當您的 Milvus 叢集準備就緒時,上述命令的輸出應類似於以下內容。若「status.status 」欄位仍顯示為「Unhealthy 」,表示您的 Milvus 叢集仍在建立中。
apiVersion: milvus.io/v1alpha1
kind: Milvus
metadata:
...
status:
conditions:
- lastTransitionTime: "xxxx-xx-xxTxx:xx:xxZ"
reason: StorageReady
status: "True"
type: StorageReady
- lastTransitionTime: "xxxx-xx-xxTxx:xx:xxZ"
message: Etcd endpoints is healthy
reason: EtcdReady
status: "True"
type: EtcdReady
- lastTransitionTime: "xxxx-xx-xxTxx:xx:xxZ"
message: All Milvus components are healthy
reason: MilvusClusterHealthy
status: "True"
type: MilvusReady
endpoint: my-release-milvus.default:19530
status: Healthy
Milvus Operator 會先建立 Milvus 的依賴項(例如 etcd 和 MinIO),接著再建立 Milvus 組件(例如代理、協調器及節點)。
當您的 Milvus 叢集準備就緒後,Milvus 叢集中所有 Pod 的狀態應類似如下所示。
$ kubectl get pods
NAME READY STATUS RESTARTS AGE
my-release-etcd-0 1/1 Running 0 2m36s
my-release-etcd-1 1/1 Running 0 2m36s
my-release-etcd-2 1/1 Running 0 2m36s
my-release-milvus-datanode-58955c65b9-j4j7s 1/1 Running 0 92s
my-release-milvus-mixcoord-686f84968f-jcv5d 1/1 Running 0 92s
my-release-milvus-proxy-646f48fc7c-4lctb 1/1 Running 0 92s
my-release-milvus-querynode-0-d89d7677b-x7j7q 1/1 Running 0 91s
my-release-milvus-streamingnode-556bdcc87c-2qwcc 1/1 Running 0 92s
my-release-minio-0 1/1 Running 0 2m36s
my-release-minio-1 1/1 Running 0 2m36s
my-release-minio-2 1/1 Running 0 2m35s
my-release-minio-3 1/1 Running 0 2m35s
3. 將本地埠轉發至 Milvus
執行以下指令以取得您的 Milvus 叢集所使用的端口。
$ kubectl get pod my-release-milvus-proxy-84f67cdb7f-pg6wf --template
='{{(index (index .spec.containers 0).ports 0).containerPort}}{{"\n"}}'
19530
輸出結果顯示,Milvus 實例在預設埠19530 上提供服務。
若您是以獨立模式部署 Milvus,請將 Pod 名稱從my-release-milvus-proxy-xxxxxxxxxx-xxxxx 變更為my-release-milvus-xxxxxxxxxx-xxxxx 。
接著,執行以下指令,將本地端埠轉發至 Milvus 的服務埠。
$ kubectl port-forward service/my-release-milvus 27017:19530
Forwarding from 127.0.0.1:27017 -> 19530
若需,您可在上述指令中使用:19530 取代27017:19530 ,讓kubectl 為您自動分配一個本地端埠,如此便無需自行處理埠號衝突問題。
預設情況下,kubectl 的端口轉發僅監聽localhost 。若要讓 Milvus 監聽選定的或所有 IP 位址,請使用address 標誌。以下指令會讓端口轉發監聽主機上的所有 IP 位址。
$ kubectl port-forward --address 0.0.0.0 service/my-release-milvus 27017:19530
Forwarding from 0.0.0.0:27017 -> 19530
現在,您可以透過轉發的埠連接至 Milvus。
(可選)更新 Milvus 設定
您可以透過以下方式呼叫patch 指令,來檢視及更新 Milvus 叢集的設定:
執行以下命令以預覽即將套用的設定。
以下範例假設您要將 `
spec.components.disableMetric` 參數更新為false毫秒。$ kubectl patch milvus my-release --type='merge'\ -p '{"spec":{"components":{"disableMetric":false}}}' \ --dry-run=client -o yaml有關適用的設定項目,請參閱《系統設定》。
更新設定。
$ kubectl patch milvus my-release --type='merge'\ -p '{"spec":{"components":{"disableMetric":false}}}'
存取 Milvus WebUI
Milvus 內建名為 Milvus WebUI 的圖形化使用者介面 (GUI) 工具,您可透過瀏覽器存取。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
執行以下指令以解除安裝 Milvus 叢集。
$ kubectl delete milvus my-release
- 當您使用預設設定刪除 Milvus 叢集時,etcd 和 MinIO 等依賴項並不會被刪除。因此,下次安裝相同的 Milvus 叢集實例時,這些依賴項將會再次被使用。
- 若要連同 Milvus 叢集一併刪除依賴項和持久化卷請求 (PVC),請參閱配置檔案。
解除安裝 Milvus Operator
此外,還有兩種方式可解除安裝 Milvus Operator。
使用 Helm 解除安裝
$ helm -n milvus-operator uninstall milvus-operator
使用 kubectl 解除安裝
$ kubectl delete -f https://raw.githubusercontent.com/zilliztech/milvus-operator/v1.3.7/deploy/manifests/deployment.yaml
可選依賴項
此部署使用Woodpecker作為訊息佇列、etcd作為元資料儲存,以及MinIO作為物件儲存,所有資源均由 Milvus Operator 進行配置。若要搭配 Operator 使用其他後端,請參閱:
- 訊息佇列:Woodpecker(預設)·Pulsar·Kafka·RocksMQ
- 物件儲存:透過 Milvus Operator 配置物件儲存
- 元資料:透過 Milvus Operator 配置 etcd
Storage V3 預設為停用狀態。在使用依賴此功能的服務前,請先啟用它。有關需求與相容性考量,請參閱Storage V3。
下一步
在 Docker 中安裝 Milvus 後,您可以:
參閱《Hello Milvus》以了解 Milvus 的功能。
學習 Milvus 的基本操作:
在雲端部署您的 Milvus 叢集:
探索Milvus WebUI,這是專為 Milvus 可觀察性與管理設計的直覺式網頁介面。
探索Milvus Backup,這是一款用於 Milvus 資料備份的開源工具。
探索Birdwatcher,這是一款用於 Milvus 除錯與動態配置更新的開源工具。
探索Attu,這是一款用於直觀管理 Milvus 的開源 GUI 工具。