🚀 免費嘗試 Zilliz Cloud,完全托管的 Milvus,體驗速度提升 10 倍!立即嘗試

milvus-logo
LFAI
  • Home
  • Blog
  • 如何修改 Milvus 進階設定

如何修改 Milvus 進階設定

  • Engineering
November 08, 2021
Zilliz

宗玉芬,Zilliz測試開發工程師,畢業於華中科技大學計算機技術碩士。目前從事Milvus向量資料庫的品質保證工作,包括但不限於介面整合測試、SDK測試、Benchmark測試等。余芬熱衷於Milvus的測試和開發中的問題解決,也是混沌工程理論和故障演練實踐的忠實粉絲。

技術背景

在使用Milvus向量資料庫時,需要修改預設配置以滿足不同場景的需求。之前,有一位 Milvus 用戶分享了如何修改使用 Docker Compose 部署的 Milvus 的配置。而在這篇文章中,我想和大家分享如何修改部署在 Kubernetes 上的 Milvus 的配置。

在 Kubernetes 上修改 Milvus 的配置

您可以根據想要修改的配置參數,選擇不同的修改方案。所有的 Milvus 配置文件都儲存在milvus/configs 下。在 Kubernetes 上安裝 Milvus 時,本機會新增一個 Milvus Helm Chart 儲存庫。透過執行helm show values milvus/milvus ,您可以直接使用 Chart 檢查可修改的參數。對於可使用 Chart 修改的參數,您可以使用--values--set 傳遞參數。如需更多資訊,請參閱Milvus Helm ChartHelm

如果您期望修改的參數不在清單上,您可以按照下面的指示進行修改。

在以下步驟中,為了示範目的,要修改/milvus/configs/advanced/root_coord.yaml中的參數rootcoord.dmlChannelNum 。Kubernetes 上 Milvus 的組態檔案管理是透過 ConfigMap 資源物件來實作。若要變更參數,必須先更新相對應 Chart 版本的 ConfigMap 物件,然後再修改相對應 Pod 的部署資源檔案。

請注意,此方法僅適用於已部署的 Milvus 應用程式的參數修改。若要在部署前修改/milvus/configs/advanced/*.yaml中的參數,您需要重新開發 Milvus Helm Chart。

修改 ConfigMap YAML

如下圖所示,您在 Kubernetes 上執行的 Milvus 版本對應於與版本同名的 ConfigMap 物件。ConfigMap 物件的data 部分僅包含milvus.yaml 中的配置。若要變更root_coord.yaml 中的rootcoord.dmlChannelNum ,您必須將root_coord.yaml中的參數新增至 ConfigMap YAML 中的data 區段,並變更特定參數。

kind: ConfigMap
apiVersion: v1
metadata:
  name: milvus-chaos
  ...
data:
  milvus.yaml: >
    ......
  root_coord.yaml: |
    rootcoord:
      dmlChannelNum: 128
      maxPartitionNum: 4096
      minSegmentSizeToEnableIndex: 1024
      timeout: 3600 # time out, 5 seconds
      timeTickInterval: 200 # ms

修改部署 YAML

儲存於 ConfigMap 的資料可以在 configMap 類型的卷中被引用,然後由在 Pod 中執行的容器化應用程式消耗。要將 pod 引導到新的組態檔案,您必須修改需要載入root_coord.yaml 中組態的 pod 模版。具體來說,您需要在部署 YAML 的spec.template.spec.containers.volumeMounts 區段下新增一個 mount 宣告。

以 rootcoord pod 的部署 YAML 為例,在.spec.volumes 部分指定了一個configMap 類型的 volume,名為milvus-config。此外,在spec.template.spec.containers.volumeMounts 段落中,該磁碟區被宣告要將您的 Milvus 版本的 milvus.yaml 掛載/milvus/configs/milvus.yaml。同樣地,您只需要特別為 rootcoord 容器新增一個掛載宣告,將root_coord.yaml 掛載/milvus/configs/advanced/root_coord.yaml 上,這樣容器就可以存取新的組態檔案。

spec:
  replicas: 1
  selector:
    ......
  template:
    metadata:
      ...
    spec:
      volumes:
        - name: milvus-config
          configMap:
            name: milvus-chaos
            defaultMode: 420
      containers:
        - name: rootcoord
          image: 'milvusdb/milvus-dev:master-20210906-86afde4'
          args:
            ...
          ports:
            ...
          resources: {}
          volumeMounts:
            - name: milvus-config
              readOnly: true
              mountPath: /milvus/configs/milvus.yaml
              subPath: milvus.yaml
            - name: milvus-config
              readOnly: true
              mountPath: /milvus/configs/advanced/`root_coord.yaml
              subPath: root_coord.yaml
          terminationMessagePath: /dev/termination-log
          terminationMessagePolicy: File
          imagePullPolicy: IfNotPresent
      restartPolicy: Always
      terminationGracePeriodSeconds: 30
      dnsPolicy: ClusterFirst
      securityContext: {}
      schedulerName: default-scheduler

驗證結果

kubelet 會在每次定期同步時檢查掛載的 ConfigMap 是否新鮮。當卷中消耗的 ConfigMap 更新時,投影的金鑰也會自動更新。當新的 Pod 再次執行時,您可以在 Pod 中驗證修改是否成功。檢查參數的指令rootcoord.dmlChannelNum 分享如下。

$ kctl exec -ti milvus-chaos-rootcoord-6f56794f5b-xp2zs -- sh
# cd configs/advanced
# pwd
/milvus/configs/advanced
# ls
channel.yaml  common.yaml  data_coord.yaml  data_node.yaml  etcd.yaml  proxy.yaml  query_node.yaml  root_coord.yaml
# cat root_coord.yaml
rootcoord:
  dmlChannelNum: 128
  maxPartitionNum: 4096
  minSegmentSizeToEnableIndex: 1024
  timeout: 3600 # time out, 5 seconds
  timeTickInterval: 200 # ms
# exit

以上是修改部署在 Kubernetes 上的 Milvus 進階配置的方法。未來的 Milvus 版本會將所有配置整合在一個檔案中,並支援透過 helm chart 更新配置。但在此之前,我希望這篇文章可以幫助您作為臨時的解決方案。

參與我們的開源碼社群:

  • GitHub 上尋找或貢獻 Milvus。

  • 透過論壇與社群互動。

  • Twitter 上與我們連線。

Try Managed Milvus for Free

Zilliz Cloud is hassle-free, powered by Milvus and 10x faster.

Get Started

Like the article? Spread the word

繼續閱讀