Values 文件

    其内容来自于多个位置:

    • chart中的values.yaml文件
    • 如果是子chart,就是父chart中的values.yaml文件
    • 使用-f参数(helm install -f myvals.yaml ./mychart)传递到 helm installhelm upgrade的values文件
    • 使用--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中的默认内容,仅设置一个参数:

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

    1. apiVersion: v1
    2. kind: ConfigMap
    3. metadata:
    4. name: {{ .Release.Name }}-configmap
    5. data:
    6. myvalue: "Hello World"
    7. drink: {{ .Values.favoriteDrink }}

    看看是如何渲染的:

    1. $ helm install geared-marsupi ./mychart --dry-run --debug
    2. install.go:158: [debug] Original chart version: ""
    3. install.go:175: [debug] CHART PATH: /home/bagratte/src/playground/mychart
    4. LAST DEPLOYED: Wed Feb 19 23:21:13 2020
    5. NAMESPACE: default
    6. REVISION: 1
    7. TEST SUITE: None
    8. USER-SUPPLIED VALUES:
    9. {}
    10. COMPUTED VALUES:
    11. favoriteDrink: coffee
    12. HOOKS:
    13. MANIFEST:
    14. ---
    15. # Source: mychart/templates/configmap.yaml
    16. apiVersion: v1
    17. kind: ConfigMap
    18. metadata:
    19. name: geared-marsupi-configmap
    20. data:
    21. myvalue: "Hello World"
    22. drink: coffee

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

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

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

    1. drink: coffee
    2. food: pizza

    现在需要稍微修改一些模板:

    1. apiVersion: v1
    2. kind: ConfigMap
    3. metadata:
    4. name: {{ .Release.Name }}-configmap
    5. data:
    6. myvalue: "Hello World"
    7. drink: {{ .Values.favorite.drink }}
    8. food: {{ .Values.favorite.food }}

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

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

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

    1. livenessProbe:
    2. httpGet:
    3. path: /user/login
    4. port: http
    5. exec:
    6. command:
    7. - cat
    8. - docroot/CHANGELOG.txt
    9. initialDelaySeconds: 120

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

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