Values文件
在上一节中我们简单的提到了Helm模板提供的内置对象。其中的一个内置对象是Values。我们可以通过这个对象来访问传递给chart的值。Values对象的内容可以通过多种方式进行设置:
- Chart中的values.yaml文件
- 如果这是一个子chart的话,可以通过父chart中的values.yaml文件进行设置。
- 在helm install或helm upgrade命令上通过-f标志设置values文件(helm install -f myvals.yaml ./mychart)
- 通过–set配置的独立的参数(比如:helm install --set foo=bar
./mychart)
上面的列表是按照从低到高的优先级顺序排列的:values.yaml是默认值,它可以被父chart的values.yaml覆盖;而父chart的values.yaml提供的值可以被用户提供的values文件所覆盖;用户提供的values文件的值也可以被–set参数所设置的值覆盖。
Values文件是普通的YAML文件。让我们首先编辑mychart/values.yaml文件,然后编辑我们的ConfigMap模板。
删除默认的values.yaml文件,在这里我们仅仅只设置一个参数:
favoriteDrink: coffee
现在我们可以在模板中使用这个参数值了。
apiVersion: v1
kind: ConfigMap
metadata:
name: {{ .Release.Name }}-configmap
data:
myvalue: "Hello World"
drink: {{ .Values.favoriteDrink }}
我们在最后一行通过{{ .Values.favoriteDrink }}访问了favoriteDrink值。
让我们看一下这是如何渲染的。
$ helm install --dry-run --debug good-puppy ./mychart
SERVER: "localhost:44134"
CHART PATH: /Users/mattbutcher/Code/Go/src/helm.sh/helm/_scratch/mychart
NAME: good-puppy
TARGET NAMESPACE: default
CHART: mychart 0.1.0
MANIFEST:
---
# Source: mychart/templates/configmap.yaml
apiVersion: v1
kind: ConfigMap
metadata:
name: good-puppy-configmap
data:
myvalue: "Hello World"
drink: coffee
因为favoriteDrink在默认的values.yaml文件被设置为coffee,这也正是在模板中显示的值。
我们可以通过在helm install命令中简单的添加一个–set标志来覆盖掉这个值:
helm install --dry-run --debug --set favoriteDrink=slurm good-puppy ./mychart
SERVER: "localhost:44134"
CHART PATH: /Users/mattbutcher/Code/Go/src/helm.sh/helm/_scratch/mychart
NAME: good-puppy
TARGET NAMESPACE: default
CHART: mychart 0.1.0
MANIFEST:
---
# Source: mychart/templates/configmap.yaml
apiVersion: v1
kind: ConfigMap
metadata:
name: good-puppy-configmap
data:
myvalue: "Hello World"
drink: slurm
由于–set比默认的values.yaml有更高的优先级,所以我们的模板中生成了“drink:slurm”。
Values文件中页可以包含更多结构化的内容。比如:我们将在values.yaml文件中创建一个favorite小节,并添加几个keys:
favorite:
drink: coffee
food: pizza
现在,我们必须稍微修改下我们的模板:
apiVersion: v1
kind: ConfigMap
metadata:
name: {{ .Release.Name }}-configmap
data:
myvalue: "Hello World"
drink: {{ .Values.favorite.drink }}
food: {{ .Values.favorite.food }}
虽然以这种方式构造数据是可能的,但仍然建议您保持较浅的层次,更倾向于平铺的结构。当我们学习到如何为子chart赋值时,我们将看到如何使用树结构来命名我们的values。
删除默认的key
如果你需要从默认的values中删除一个key,你可以覆盖这个key的值为null,在这种情况下,Helm将从覆盖的值合并中删除这个key。
例如:Drupal chart允许你配置liveness probe, 在这种情况下你可以配置一个自定义的镜像。下边是默认的值:
livenessProbe:
httpGet:
path: /user/login
port: http
initialDelaySeconds: 120
如果你想要将livenessProbe的处理器httpGet覆盖为exec,你可以使用 --set livenessProbe.exec.command=[cat,docroot/CHANGELOG.txt],Helm会将默认键和覆盖键合并在一起,产生如下YAML:
livenessProbe:
httpGet:
path: /user/login
port: http
exec:
command:
- cat
- docroot/CHANGELOG.txt
initialDelaySeconds: 120
然而,执行上边的模板是会报错的,因为你不可以声明两个以上的livenessProbe处理器。为了解决这个问题,你可以通过设置livenessProbe.httpGet为null来指示Helm删除掉它:
helm install stable/drupal --set image=my-registry/drupal:0.1.0 --set livenessProbe.exec.command=[cat,docroot/CHANGELOG.txt] --set livenessProbe.httpGet=null
至此,我们已经看到了几个内置对象,并使用它们将信息注入到模板中。接下来我们来看一下模板引擎的另一个方面:函数和管道。