🚀 免费试用 Zilliz Cloud,完全托管的 Milvus,体验 10 倍的性能提升!立即试用>

milvus-logo
LFAI
  • Home
  • Blog
  • 如何修改 Milvus 高级配置

如何修改 Milvus 高级配置

  • Engineering
November 08, 2021
Zilliz

宗玉芬,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 ChartHelm

如果您希望修改的参数不在列表中,可以按照以下说明操作。

在以下步骤中,要修改/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-configconfigMap 类型卷。在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 图表更新配置。但在此之前,我希望这篇文章能作为临时解决方案帮到你。

加入我们的开源社区:

  • GitHub 上查找或为 Milvus 做贡献。

  • 通过论坛与社区互动。

  • Twitter 上与我们联系。

Try Managed Milvus for Free

Zilliz Cloud is hassle-free, powered by Milvus and 10x faster.

Get Started

Like the article? Spread the word

扩展阅读