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 是不合法的。

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

2. 相关阅读

Copyright © 温玉 2021 | 浙ICP备2020032454号 all right reserved,powered by Gitbook该文件修订时间: 2022-06-22 02:05:55

results matching ""

    No results matching ""