Values文件

在上一部分我们了解了Helm模板提供的内置对象。其中一个是Values对象。该对象提供了传递到chart的方法,其内容来自多个位置:

1、chart中的values.yaml文件

2、如果是子chart,就是父chart中的values.yaml文件

3、使用-f参数(helm install -f myvals.yaml ./mychart )传递到 helm install 或 helm upgrade的values文件

4、使用--set(比如 helm install --set foo=bar ./mychart )传递的单个参数

以上列表有明确顺序:默认使用values.yaml,可以被父chart的values.yaml覆盖,继而被用户提供values文件覆盖,最后会被--set参数覆盖,优先级为values.yaml最低,--set参数最高。

values文件是普通的YAML文件。现在编辑mychart/values.yaml然后编辑配置映射ConfigMap目标那。

删除values.yaml中的默认内容,仅设置一个参数:

favoriteDrink: coffee

favoriteDrink: coffee

现在可以在模板中使用它:

apiVersion: v1

kind: ConfigMap

metadata:

  name: {{ .Release.Name }}-configmap

data:

  myvalue: "Hello  World"

  drink: {{ .Values.favoriteDrink }}

piVersion: v1
kind: ConfigMap
metadata:
  name: {{ .Release.Name }}-configmap
data:
  myvalue: "Hello World"
  drink: {{ .Values.favoriteDrink }}

注意最后一行,favoriteDrink是Values的一个属性: {{ .Values.favoriteDrink }}。

$ helm install geared-marsupi ./mychart --dry-run --debug

$ helm install geared-marsupi ./mychart --dry-run --debug
install.go:158: [debug] Original chart version: ""
install.go:175: [debug] CHART PATH: /home/bagratte/src/playground/mychart

NAME: geared-marsupi
LAST DEPLOYED: Wed Feb 19 23:21:13 2020
NAMESPACE: default
STATUS: pending-install
REVISION: 1
TEST SUITE: None
USER-SUPPLIED VALUES:
{}

COMPUTED VALUES:
favoriteDrink: coffee

HOOKS:
MANIFEST:
---
# Source: mychart/templates/configmap.yaml
apiVersion: v1
kind: ConfigMap
metadata:
  name: geared-marsupi-configmap
data:
  myvalue: "Hello World"
  drink: coffee

由于默认的values.yaml文件中设置了favoriteDrink的值为coffee,则这个显示在了模板中。可以在调用helm install 时设置--set,很容易就能覆盖这个值。

$ helm install solid-vulture ./mychart --dry-run --debug --set

$ helm install solid-vulture ./mychart --dry-run --debug --set favoriteDrink=slurm
install.go:158: [debug] Original chart version: ""
install.go:175: [debug] CHART PATH: /home/bagratte/src/playground/mychart

NAME: solid-vulture
LAST DEPLOYED: Wed Feb 19 23:25:54 2020
NAMESPACE: default
STATUS: pending-install
REVISION: 1
TEST SUITE: None
USER-SUPPLIED VALUES:
favoriteDrink: slurm

COMPUTED VALUES:
favoriteDrink: slurm

HOOKS:
MANIFEST:
---
# Source: mychart/templates/configmap.yaml
apiVersion: v1
kind: ConfigMap
metadata:
  name: solid-vulture-configmap
data:
  myvalue: "Hello World"
  drink: slurm

由于--set比默认的values.yaml文件优先级更高,模板就生成了drink: slurm。

values文件也可以包含更多结构话的内容。比如我们可以在values.yaml文件中创建一个favoriate项,然后添加一些key:

favorite:

  drink: coffee

  food: pizza

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 }}

apiVersion: v1
kind: ConfigMap
metadata:
  name: {{ .Release.Name }}-configmap
data:
  myvalue: "Hello World"
  drink: {{ .Values.favorite.drink }}
  food: {{ .Values.favorite.food }}

虽然可以这样构造数据,但还是建议构建更加平坦的浅层树。以后想要给子chart赋值时,会看到如何使用树结构给value命名。

删除默认的key

如果需要从默认的values中删除key,可以将key设置为null,Helm将在覆盖的value合并时删除这个key。

比如,稳定的Drupal允许在配置自定义镜像时配置活动探针。默认值为httpget:

livenessProbe:

  httpGet:

    path: /user/login

    port: http

  initialDelaySeconds: 120

livenessProbe:
  httpGet:
    path: /user/login
    port: http
  initialDelaySeconds: 120

如果您想替换掉httpGet用exec重写活动探针,使用--set livenessProbe.exec.command=[cat,docroot/CHANGELOG.txt],Helm会把默认的key和重写的key合并在一起,从而生成以下YAML:

livenessProbe:

  httpGet:

    path: /user/login

    port: http

  exec:

    command:

    - cat

    - docroot/CHANGELOG.txt

  initialDelaySeconds: 120

livenessProbe:
  httpGet:
    path: /user/login
    port: http
  exec:
    command:
    - cat
    - docroot/CHANGELOG.txt
  initialDelaySeconds: 120

因为Kubernetes中不能声明多个活动探针句柄,从而应用发布会失败。为了解决这个问题,Helm可以指定通过设定null来删除livenessProbe.httpGet:

helm install stable/drupal --set image=my-registry/drupal:0.1.0 --set livenessProbe.exec.command=[cat,docroot/CHANGELOG.txt] --set livenessProbe.httpGet=null

helm install stable/drupal --set image=my-registry/drupal:0.1.0 --set livenessProbe.exec.command=[cat,docroot/CHANGELOG.txt] --set livenessProbe.httpGet=null

在这之前我们已经看到了几个内置对象,并用它们将信息传递到模板中。现在来模板引擎的另一部分:方法和管道。

————————————

仅用于本人学习

来源:Helm | Docs

01-29 06:56