Milvus詳細設定の変更方法
Zillizテスト開発エンジニアのYufen Zongは、華中科技大学のコンピュータ技術修士号を取得。現在、Milvusベクトルデータベースの品質保証に従事しており、インターフェース統合テスト、SDKテスト、ベンチマークテストなどを含むが、これらに限定されない。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 タイプのボリュームで参照することができ、その後、ポッドで実行されているコンテナ化されたアプリケーションによって消費されます。新しい設定ファイルにポッドを誘導するには、root_coord.yaml 内の設定をロードする必要があるポッド・テンプレートを修正する必要があります。具体的には、デプロイメント YAML のspec.template.spec.containers.volumeMounts
セクションの下にマウント宣言を追加する必要があります。
rootcoord podのデプロイメントYAMLを例にとると、.spec.volumes
セクションにmilvus-configという configMap
タイプのボリュームが指定されています。また、spec.template.spec.containers.volumeMounts
セクションでは、milvusリリースのmilvus.yamlを /milvus/configigs/milvus.yamlにマウントすることが宣言されています。同様に、rootcoordコンテナ専用のマウント宣言を追加して、/milvus/configigs/advanced/root_coord.yamlに 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 が更新されると、投影されたキーも自動的に更新されます。新しいポッドが再び実行されると、ポッドで修正が成功したかどうかを確認できます。パラメータ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の将来のリリースでは、すべての設定が1つのファイルに統合され、helm chartによる設定の更新がサポートされる予定だ。しかしその前に、この記事が一時的な解決策としてお役に立てれば幸いです。
私たちのオープンソースコミュニティに参加してください:
Try Managed Milvus for Free
Zilliz Cloud is hassle-free, powered by Milvus and 10x faster.
Get StartedLike the article? Spread the word