如何修改 Milvus 高级配置
宗玉芬,Zilliz 测试开发工程师,毕业于华中科技大学,获计算机技术硕士学位。她目前从事 Milvus 向量数据库的质量保证工作,包括但不限于接口集成测试、SDK 测试、Benchmark 测试等。于芬热衷于Milvus测试和开发中的问题解决,是混沌工程理论和故障演练实践的忠实粉丝。
背景介绍
在使用 Milvus 向量数据库时,需要修改默认配置以满足不同场景的需求。之前,有 Milvus 用户分享过《如何修改使用 Docker Compose 部署的 Milvus 的配置》。而在本文中,我想与大家分享如何修改部署在 Kubernetes 上的 Milvus 的配置。
修改 Milvus 在 Kubernetes 上的配置
你可以根据想要修改的配置参数选择不同的修改方案。所有 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
部分下添加挂载声明。
以 rootcoord pod 的部署 YAML 为例,在.spec.volumes
部分指定了名为milvus-config的configMap
类型卷。在spec.template.spec.containers.volumeMounts
部分,卷被声明为将 Milvus 发行版的 milvus.yaml挂载到/milvus/configs/milvus.yaml 上。同样,您只需专门为 rootcoord 容器添加一个 mount 声明,将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 图表更新配置。但在此之前,我希望这篇文章能作为临时解决方案帮到你。
加入我们的开源社区:
- 背景介绍
- 修改 Milvus 在 Kubernetes 上的配置
- 加入我们的开源社区:
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