✏️ 作者簡介:
宗玉芬,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 Chart 或 Helm;如果不包含我們想修改的引數,則可以考慮下文介紹的小方法:
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,型別是 configMap
的 Volume
,並且 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 配置更新。在新版本誕生前,希望這篇文件介紹的臨時修改方案能對大家有所幫助!