1. values.yaml 文件与 Values 对象
在编写 Helm Chart 模板时,为了安装时的便捷性会使用变量的方式保存需要修改的配置项,默认使用 values.yaml 文件
来配置和保存变量,使用 .Values 对象
在模板中引用该变量。
[!NOTE|style:flat] 每个 Chart 都必须有 values.yaml 文件,路径
mychart/values.yaml
。
1.1. values.yaml 文件
values.yaml 的文件格式就是标准的 YAML 语法,可以支持对象、列表等功能。
例如,values.yaml 文件内容
$ cat mychart/values.yaml
favorite:
drink:coffee
food:pizza
1.1.1. 文件名自定义和优先级
values.yaml 文件
是 Helm 解析 Chart 包时默认的配置文件名称,也可以在安装或升级时使用 -f, --values
指定使用其他文件文件,如 config.yaml, ci.yaml 等等。
[!TIP|style:flat] 在安装时通过
-f, --values
指定 values.yaml 文件时右侧的优先级比左侧高,即右侧 values.yaml 中的变量会覆盖左侧的变量的值。
例如,有一个 myapp-v1.1.0.tgz 的 helm chart 包,同时有另外两个独立的配置文件,其内容如下:
- 安装包:myapp-v1.1.0.tgz (Helm Chart 包内有个默认的 values.yaml,testkey=v0000)
- 独立 values 文件1:v1-values.yaml (testkey=v1111)
- 独立 values 文件2:v2-values.yaml (testkey=v2222)
在安装时通过指定安装的
- 使用默认 values.yaml
helm install myapp ./myapp-v1.1.0.tgz
安装实际渲染值: testkey=v0000
- 指定一个配置文件
helm install myapp ./myapp-v1.1.0.tgz -f v1-values.yaml
安装实际渲染值: testkey=v1111
- 指定多个配置文件
helm install myapp ./myapp-v1.1.0.tgz -f v1-values.yaml -f v2-values.yaml
安装实际渲染值: testkey=v2222
1.1.2. global 全局变量
在 values.yaml 文件中在定义变量时在符合 YAML 语法外,还有 helm 要求的一些保留关键字和限制。
global
是保留的关键字,用来在有多个子 chart 时定义全局变量。全局变量可以在自身模板和所有的charts/
目录中的子 chart 使用,作用域范围时全局的。values.yaml 限制要求
- KEY 值可以使用字母、数字和下划线
_
,不能以数字开头,不可以使用中横线-
命名。如my-key: 123
是不合法的。
- KEY 值可以使用字母、数字和下划线
1.2. Values 对象
在 values.yaml 中定义好变量后,就可以在模板中引用该配置项
$ cat mychart/templates/configmap.yaml
apiVersion: v1
kind: ConfigMap
metadata:
name: myapp-configmap
data:
myvalue: "Hello World"
drink: {{ .Values.favorite.drink }}
food: {{ .Values.favorite.food }}
渲染后的结果
# Source: mychart/templates/configmap.yaml
apiVersion: v1
kind: ConfigMap
metadata:
name: myapp-configmap
data:
drink: "coffee"
food: "pizza"
1.2.1. .Values 对象 接受命令行传入的参数
helm 在安装和升级时,还可以通过命令行参数的传入或修改 values.yaml 中的值。
在安装和升级时可以支持传入多种数据类型
--set stringArray set values on the command line (can specify multiple or separate values with commas: key1=val1,key2=val2)
--set-file stringArray set values from respective files specified via the command line (can specify multiple or separate values with commas: key1=path1,key2=path2)
--set-string stringArray set STRING values on the command line (can specify multiple or separate values with commas: key1=val1,key2=val2)
对于 .Values 对象
识别 values.yaml 和命令行传入参数的方法是一样的。
可以指定 --set
参数多次,最右边的参数优先级最高,比如,bar 和 newbar 都设置了一个名为 foo 的可以,newbar 的值优先:
$ helm install --set foo=bar --set foo=newbar myredis ./mychart