Helm Chart 中通过 configMap 管理应用程序配置文件

本文介绍了如何使用Helm Chart和Kubernetes的configMap来管理和更新应用程序配置文件,以满足配置文件的修改、版本管理和自动触发rolling update的需求。通过示例展示了如何在Helm的values.yaml和templates文件中配置,以及如何利用configMap的hash来自动触发rolling update。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

背景

各种成熟软件的官方container image中,大多包含了默认的配置文件,在真正的生产部署中,一定需要灵活的方法管理这些配置文件,以满足下列需求:

  1. 能修改默认配置文件
  2. 对配置文件进行版本管理
  3. 修改配置文件能自动触发 rolling update

helm 作为 container 的编排工具,可以满足以上的需求,虽然有些有些并不那么直接。我们以 helm 官方的 cassandra chart (incubator repo)为基础,看看如何实现以上三个需求。


修改配置文件

配置文件可简单看做一堆配置项(Key: value) 的集合,在安装 chart 时作为参数传入并设置到 deployment 中。这是典型的给 helm chart 传参的过程,因此自然想到可以使用 chart values file – values.yaml 来存储你自定义的配置文件,通过下面的传递途径把值传入到container 中:
Untitled Diagram.png

cassandra chart 使用的 cassandra image 默认包含了下面一系列必备配置文件。其中,像 cassandra.yaml 这样的核心配置文件是我们在部署过程中常需要修改的,而且,修改后需要重启 cassandra instance 才能生效。

> kubectl exec po/cassandra-01-1 -- ls /etc/cassandra/
cassandra-env.ps1               hotspot_compiler
cassandra-env.sh                jvm.options
cassandra-jaas.config           logback-tools.xml
cassandra-rackdc.properties     logback.xml
cassandra-topology.properties   metrics-reporter-config-sample.yaml
cassandra.yaml                  README.txt
commitlog_archiving.properties  triggers
cqlshrc.sample

默认实现

官方 cassandra chart 中也确实提供了这种实现方式,你可以通过修改 values.yaml 中的这个参数,来覆盖container中的默认配置文件。

parameter Description Default
configOverrides Overrides config files in /etc/cassandra dir {}

如果你想覆盖哪个 config file,你必须在 configOverrides 这个参数下面,以该 config file 的名字为 key 粘贴上整个 config file 的内容,例如,以 cassandra.yaml 为例,你需要在 values.yaml 中添加如下内容:

# values.yaml
...
## Cassandra config files overrides
configOverrides:
  cassandra.yaml: |
    # Cassandra storage config YAML

    # NOTE:
    #   See http://wiki.apache.org/cassandra/StorageConfiguration for
    #   full explanations of configuration directives
    # /NOTE

    # The name of the cluster. This is mainly used to prevent machines in
    # one logical cluster from joining another.
    cluster_name: cassandra
    ...
    (整个config file的内容比如全部出现在这里)
...

只是这种修改的方法比较笨拙,由于 default helm chart 默认覆盖了整个 /etc/cassandra path,因此,你必须把所有 cassandra 启动必须的 config file 的所有内容都填入 values.yaml/configOverride 下,否则的话,该文件将不会出现在 container 中。首先,对于绝大多数我们不需要修改的配置文件,把默认内容贴在这完全是无意义的工作。其次,这会产生一个非常庞大的 values.yaml file,非常不便于维护。

更优雅的实现

针对上面的实现,我希望对现有 chart 做两点改进

  1. 只传入自定义的文件。无需修改的,自动使用 container 自带的默认配置文件。
  2. 自定义的配置文件存放在一个单独目录下,而不是堆放在 values.yaml 中。

实现方法,把你自定义的配置文件存放在 chart 根目录的 ./configs 文件夹下。在 values.yaml/configOverride 下以数组形式列出所有你希望覆盖的配置文件。整个数据传递过程变为:

Untitled Diagram (1).png
你可以从这里浏览本文使用的 sample_chart

values.yaml

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值