Kubernetes 中的應用參數配置案例詳析

✏️ 作者簡介: 宗玉芬,Zilliz 測試開發工程師,華中科技大學計算機技術工程碩士。目前專注於 Milvus 數據庫的質量保障工作,包括但不限於接口測試、SDK 測試、Benchmark 測試等。一個喜歡定位問題、熱愛探究混沌工程理論與故障演練實踐的測試開發小朋友。

如何修改 Milvus Advanced Configuration

背景

在使用 Milvus 時,我們可能希望修改默認參數,以滿足不同場景的需求。前不久,已有 Milvus 用戶分享瞭如何在使用 docker-compose 部署時修改配置文件(點擊閱讀:技術分享|如何對 Milvus 2.0 進行參數配置),本文將簡單介紹如何在使用 Kubernetes 部署 Milvus 時修改配置參數。

不同的參數配置可以選擇不同的修改方案。Milvus 所有的配置文件都位於 /milvus/configs/ 路徑下。當使用 Kubernetes 安裝 Milvus 應用時我們會添加 Milvus Chart 倉庫,添加後通過命令 helm show values milvus/milvus 查看 Chart 支持配置的參數項。如果這些參數項中包含我們想要修改的參數,則可以通過 --values--set 兩種方式傳遞配置數據,具體使用細節請參考 Milvus Helm ChartHelm;如果不包含我們想修改的參數,則可以考慮下文介紹的小方法:

Milvus 在 Kubernetes 中的配置文件管理是通過 ConfigMap 資源對象實現的。如果我們需要修改 Milvus Chart 可配置選項以外的參數,則需要先更新對應 Chart Release 的 ConfigMap 對象,然後修改相應 Pod 的 Deployment 資源文件。接下來,以修改 /milvus/configs/advanced/root_coord.yaml 文件中的 rootcoord.dmlChannelNum 參數爲例進行說明,按照先修改 ConfigMap 對象屬性再修改 Deployment 對象屬性兩個步驟進行,將其值從 256 修改爲 128

需要注意的是,該方法只針對已經部署的 Milvus 應用進行配置修改。如果需要在部署時或部署前修改 /milvus/configs/advanced/*.yaml 中的配置,我們需要對 Milvus Helm Chart 進行再開發。

修改 ConfigMap 清單文件

Kubernetes 中運行的 Release 對應着名爲 milvus-chaos 的 ConfigMap 對象,其 data 屬性只包含了 milvus.yaml 文件的配置。同理,我們需要將 rootcoord.dmlChannelNum 參數所在的 root_coord.yaml 配置到 data 屬性中,同時將 rootcoord.dmlChannelNum 修改爲 128 即可。

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

修改 Deployment 清單文件

ConfigMap 對象中存儲的數據可以被 configMap 類型的卷引用,然後向 Pod 注入配置數據,從而被 Pod 中運行的容器化應用使用。如果我們想讓 Pod 訪問新的配置文件,則需修改那些會加載 root_coord.yaml 配置的 Pod 模板,具體是在 Deployment 資源清單文件中的 spec.template.spec.containers.volumeMounts 下添加一個掛載聲明。以 rootcoord pod 的 Deployment 資源清單爲例,從 spec.template.spec.volumes 關鍵字可以看到 Pod 頂層聲明瞭一個名爲 milvus-config,類型是 configMapVolume,並且 Pod 中的 rootcoord 容器聲明將卷 milvus-chaos 的 milvus.yaml 文件掛載到路徑 /milvus/configs/milvus.yaml 下。同理,我們只需要將 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

驗證結果

完成上述兩步修改後,Pod 重新掛載了 ConfigMap 卷,且 ConfigMap 屬性的修改被檢測到後,Pod 會滾動更新。當新的 Pod 重新進入 Running 狀態後,我們可以進入 Pod 驗證是否修改成功,具體命令如下所示。可以看到 /milvus/configs/advanced/root_coord.yaml 文件中的rootcoord.dmlChannelNum 的值已經更新爲 128 了。

$ 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

至此,該修改 Milvus 配置的方法已經介紹完畢。在 Milvus 之後的版本中,我們會將用戶所關心的配置參數統一放置到一個文件中,且支持通過 Helm Chart 配置更新。在新版本誕生前,希望這篇文檔介紹的臨時修改方案能對大家有所幫助!

Arch Meetup 深圳站開始報名啦,點擊查看活動議程!

GitHub @Milvus-io|CSDN @Zilliz Planet|Bilibili @Zilliz-Planet

Zilliz 以重新定義數據科學爲願景,致力於打造一家全球領先的開源技術創新公司,並通過開源和雲原生解決方案爲企業解鎖非結構化數據的隱藏價值。

Zilliz 構建了 Milvus 向量數據庫,以加快下一代數據平臺的發展。Milvus 數據庫是 LF AI & Data 基金會的畢業項目,能夠管理大量非結構化數據集,在新藥發現、推薦系統、聊天機器人等方面具有廣泛的應用。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章