对象与Values

模板语法

对象

对象从模板引擎传递到模板中。而且您的代码可以传递对象(在查看withrange语句时,我们将看到示例。甚至有几种方法可以在模板中创建新对象,例如稍后将介绍的元组功能。对象可以很简单,只有一个值。或者它们可以包含其他对象或功能。例如。Release对象包含多个对象(例如Release.Name,而Files对象具有一些功能。

内置对象

  • Release:这个对象描述了release本身。它里面有几个对象:

    • Release.Namerelease名称,即是 helm install --name 命令中指定的名称。
    • Release.Timerelease的时间
    • Release.Namespacereleasenamespace(如果清单未覆盖)
    • Release.Servicerelease服务的名称(始终是 Tiller
    • Release.Revision:此release的修订版本号。它从1开始,每 helm upgrade 一次增加一个。
    • Release.IsUpgrade:如果当前操作是升级或回滚,则将其设置为 true
    • Release.IsInstall:如果当前操作是安装,则设置为 true
  • Values:从 values.yaml 文件和用户提供的文件传入模板的值。默认情况下,Values是空的。

  • ChartChart.yaml 文件的内容。任何数据Chart.yaml将在这里访问。例如{{.Chart.Name}}-{{.Chart.Version}}将打印出来mychart-0.1.0chart指南中 Charts Guide 列出了可用字段

  • Files:这提供对chart中所有非特殊文件的访问。虽然无法使用它来访问模板,但可以使用它来访问chart中的其他文件。请参阅 “访问文件” 部分。

    • Files.Get 是一个按名称获取文件的函数(.Files.Get config.ini
    • Files.GetBytes 是将文件内容作为字节数组而不是字符串获取的函数。这对于像图片这样的东西很有用。
  • Capabilities:这提供了关于Kubernetes集群支持的功能的信息。

    • Capabilities.APIVersions 是一组版本信息。
    • Capabilities.APIVersions.Has $version 指示是否在群集上启用版本(batch/v1
    • Capabilities.KubeVersion 提供了查找Kubernetes版本的方法。它具有以下值:Major,Minor,GitVersion,GitCommit,GitTreeState,BuildDate,GoVersion,Compiler,和Platform
    • Capabilities.TillerVersion 提供了查找Tiller版本的方法。它具有以下值:SemVer,GitCommit,和GitTreeState
  • Template:包含有关正在执行的当前模板的信息

  • Name:到当前模板的namespace文件路径(例如 mychart/templates/mytemplate.yaml

  • BasePath:当前chart模板目录的namespace路径(例如mychart/templates

Values

Helm模板提供的内置对象。四个内置对象之一是Values,该对象提供对传入Chart的值的访问。其内容来自四个来源:

  • chart中的 values.yaml 文件
  • 如果这是一个子chart,来自父chartvalues.yaml 文件
  • value文件通过helm installhelm upgrade- f标志传入文件(helm install -f myvals.yaml ./mychart
  • 通过 --set(例如 helm install --set foo=bar ./mychart

上面的列表按照特定的顺序排列:values.yaml在默认情况下,父级chart的可以覆盖该默认级别,而该chart values.yaml又可以被用户提供的values文件覆盖,而该文件又可以被 –set参数覆盖。值文件是纯YAML文件。我们编辑mychart/values.yaml,然后来编辑我们的ConfigMap模板。

Values值使用

删除默认带的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 ./mychart
SERVER: "localhost:44134"
CHART PATH: /Users/mattbutcher/Code/Go/src/k8s.io/helm/_scratch/mychart
NAME:   geared-marsupi
TARGET NAMESPACE:   default
CHART:  mychart 0.1.0
MANIFEST:
---
# Source: mychart/templates/configmap.yaml
apiVersion: v1
kind: ConfigMap
metadata:
  name: geared-marsupi-configmap
data:
  myvalue: "Hello World"
  drink: coffee

由于 favoriteDrink 在默认 values.yaml 文件中设置为 coffee,这就是模板中显示的值。我们可以轻松地在我们的helm install命令中通过加一个 --set 添标志来覆盖:

helm install --dry-run --debug --set favoriteDrink=slurm ./mychart
SERVER: "localhost:44134"
CHART PATH: /Users/mattbutcher/Code/Go/src/k8s.io/helm/_scratch/mychart
NAME:   solid-vulture
TARGET NAMESPACE:   default
CHART:  mychart 0.1.0
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文件中可以创建 favorite 部分,然后在其中添加几个键:

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

虽然以这种方式构建数据是可以的,但建议保持value树浅一些,平一些。当我们看看为子chart分配值时,我们将看到如何使用树结构来命名值。

删除默认的Key

如果您需要从默认值中删除一个键,可以覆盖该键的值为null,在这种情况下,Helm将从覆盖值合并中删除该键。例如,stable版本的Drupal chart允许配置liveness探测器,如果你配置自定义的image。以下是默认值:

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

如果尝试覆盖liveness Probe处理程序 exec 而不是 httpGet,使用 --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

但是,Kubernetes会报错,因为无法声明多个liveness Probe处理程序。为了克服这个问题,你可以指示Helm过将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

到这里,我们已经看到了几个内置对象,并用它们将信息注入到模板中。

上一页
下一页