helm中的--set 命令模式
使用 helm show values 可以查看 chart 中的可配置选项
helm show values bitnami/wordpress
然后,你可以使用 YAML 格式的文件覆盖上述任意配置项,并在安装过程中使用该文件。
$ echo '{mariadb.auth.database: user0db, mariadb.auth.username: user0}' > values.yaml
$ helm install -f values.yaml bitnami/wordpress --generate-name
上述命令将为 MariaDB 创建一个名称为 user0 的默认用户,并且授予该用户访问新建的 user0db 数据库的权限。chart 中的其他默认配置保持不变。
安装过程中有两种方式传递配置数据:
- --values (或 -f):使用 YAML 文件覆盖配置。可以指定多次,优先使用最右边的文件。
- --set:通过命令行的方式对指定项进行覆盖。
如果同时使用两种方式,则 --set 中的值会被合并到 --values 中,但是 --set 中的值优先级更高。在--set 中覆盖的内容会被保存在 ConfigMap 中。可以通过 helm get values 来查看指定 release 中 --set 设置的值。也可以通过运行 helm upgrade 并指定 --reset-values 字段来清除 --set 中设置的值。
--set 的格式和限制
--set 选项使用0或多个 name/value 对。最简单的用法类似于:--set name=value,等价于如下 YAML 格式:
name: value
多个值使用逗号分割,因此 --set a=b,c=d 的 YAML 表示是:
a: b
c: d
支持更复杂的表达式。例如,--set outer.inner=value 被转换成了:
outer:
inner: value
列表使用花括号({})来表示。例如,--set name={a, b, c} 被转换成了:
name:
- a
- b
- c
从 2.5.0 版本开始,可以使用数组下标的语法来访问列表中的元素。例如 --set servers[0].port=80 就变成了:
servers:
- port: 80
多个值也可以通过这种方式来设置。--set servers[0].port=80,servers[0].host=example 变成了:
servers:
- port: 80
host: example
如果需要在 --set 中使用特殊字符,你可以使用反斜线来进行转义;--set name=value1,value2 就变成了:
name: "value1,value2"
类似的,你也可以转义点序列(英文句号)。这可能会在 chart 使用 toYaml 函数来解析 annotations,labels,和 node selectors 时派上用场。--set nodeSelector."kubernetes.io/role"=master 语法就变成了:
nodeSelector:
kubernetes.io/role: master
深层嵌套的数据结构可能会很难用 --set 表达。我们希望 Chart 的设计者们在设计 values.yaml 文件的格式时,考虑到 --set 的使用。(更多内容请查看 Values 文件)