如何修改 Milvus 進階設定
宗玉芬,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 Chart和Helm。
如果您期望修改的參數不在清單上,您可以按照下面的指示進行修改。
在以下步驟中,為了示範目的,要修改/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 更新配置。但在此之前,我希望這篇文章可以幫助您作為臨時的解決方案。
參與我們的開源碼社群:
- 技術背景
- 在 Kubernetes 上修改 Milvus 的配置
- 參與我們的開源碼社群:
On This Page
Try Managed Milvus for Free
Zilliz Cloud is hassle-free, powered by Milvus and 10x faster.
Get StartedLike the article? Spread the word