常用调试命令

--dry-run  渲染模板,但是不安装chart
--debug Debug 模式

内置对象

Release对象

这个对象描述了 release 本身。

对象名 含义
Release.Name release 名称
Release.Time release 的时间(?什么时间)
Release.Namespace release的命名空间
Release.Service release的服务名称(始终是Tiller)
Release.Revision release的revision号,从1开始,每upgrade一次增加一个
Release.IsUpgrade 当前操作是否是升级或回滚
Release.IsInstall 当前操作是否是安装

Value对象

values.yaml 文件和用户提供的文件传入模板的值。

Chart对象

Chart.yaml 文件的内容。任何数据 Chart.yaml 将在这里访问。

Files 对象

这提供对 chart 中所有非特殊文件的访问。虽然无法使用它来访问模板,但可以使用它来访问 chart 中的其他文件。

Capabilities

这提供了关于 Kubernetes 集群支持的功能的信息。

对象名 含义
Capabilities.APIVersions 一组版本信息
Capabilities.APIVersions.Has $version 指示是否在群集上启用版本(batch/v1
Capabilities.KubeVersion 提供了查找 Kubernetes 版本的方法。
Capabilities.TillerVersion 提供了查找 Tiller 版本的方法。它具有以下值:SemVer,GitCommit,和 GitTreeState。

Value规则

value的来源:

  1. chart 中的 values.yaml 文件
  2. 父 chart 的 values.yaml 文件
  3. helm install 或 helm upgrade 的 - f 标志传入文件
  4. 通过 --set(例如 helm install --set foo=bar ./mychart

上面的列表按照特定的顺序排列:values.yaml 在默认情况下,父级 chart 的可以覆盖该默认级别,而该 chart values.yaml 又可以被用户提供的 values 文件覆盖,而该文件又可以被 –set 参数覆盖。

模板函数与管道

模板函数语法

有时我们想要转换这些数据,使得他们对我们来说更有用。

functionName arg1 arg2...

管道语法

管道是一个链接在一起的一系列模板命令的工具,以紧凑地表达一系列转换。换句话说,管道是按顺序完成几件事情的有效方式。

.Values.favorite.drink | quote

default函数

drink: {{.Values.favorite.drink | default "tea" | quote}}

运算符函数

对于模板,运算符(eq,ne,lt,gt,and,or 等等)都是已实现的功能。在管道中,运算符可以用圆括号(())分组。

流程控制

控制结构

  • if/else 用于创建条件块

  • with 指定范围

  • range,它提供了一个 “for each” 风格的循环

使用命名模板

  • define 在模板中声明一个新的命名模板
  • template 导入一个命名模板
  • block 声明了一种特殊的可填写模板区域

if/else

{{if PIPELINE}}
  # Do something
{{else if OTHER PIPELINE}}
  # Do something else
{{else}}
  # Default case
{{end}}

如果值为如下情况,则管道评估为 false。

  • 一个布尔型的假
  • 一个数字零
  • 一个空的字符串
  • 一个 nil(空或 null)
  • 一个空的集合(mapslicetupledictarray

控制空格

{{-(添加了破折号和空格)表示应该将格左移,而 -}} 意味着应该删除右空格。注意!换行符也是空格!

with作用域

它控制着变量作用域。回想一下,. 是对当前范围的引用。因此,.Values 告诉模板在当前范围中查找 Values 对象。

{{with PIPELINE}}
  # restricted scope
{{end}}

范围可以改变。with 可以允许将当前范围(.)设置为特定的对象。

apiVersion: v1
kind: ConfigMap
metadata:
  name: {{.Release.Name}}-configmap
data:
  myvalue: "Hello World"
  {{- with .Values.favorite}}
  drink: {{.drink | default "tea" | quote}}
  food: {{.food | upper | quote}}
  {{- end}}

{{end}}. 复位其先前的范围。

但是请注意!在受限范围内,此时将无法从父范围访问其他对象。

YAML 语法

|- 声明一个多行字符串

range 语句

value.yaml

favorite:
  drink: coffee
  food: pizza
pizzaToppings:
  - mushrooms
  - cheese
  - peppers
  - onions
apiVersion: v1
kind: ConfigMap
metadata:
  name: {{.Release.Name}}-configmap
data:
  myvalue: "Hello World"
  {{- with .Values.favorite}}
  drink: {{.drink | default "tea" | quote}}
  food: {{.food | upper | quote}}
  {{- end}}
  toppings: |-
    {{- range .Values.pizzaToppings}}
    - {{. | title | quote}}
    {{- end}}

变量

语法

{{- $relname := .Release.Name -}}

与range一同使用

遍历list

    {{- range $index, $topping := .Values.pizzaToppings}}
      {{$index}}: {{ $topping }}
    {{- end}}

遍历map

  {{- range $key, $val := .Values.favorite}}
  {{$key}}: {{ $val | quote }}
  {{- end}}

全局变量根上下文$

$.Chart.Name