3

Kubernetes 中的应用参数配置案例详析

 2 years ago
source link: https://segmentfault.com/a/1190000040805298
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

✏️ 作者简介:
宗玉芬,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 ChartHelm;如果不包含我们想修改的参数,则可以考虑下文介绍的小方法:

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,类型是 configMapVolume,并且 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 配置更新。在新版本诞生前,希望这篇文档介绍的临时修改方案能对大家有所帮助!


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK