Chart编写踩坑
文章目录
常用调试命令
--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的来源:
- chart 中的
values.yaml
文件 - 父 chart 的
values.yaml
文件 - helm install 或 helm upgrade 的 - f 标志传入文件
- 通过
--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) - 一个空的集合(
map
,slice
,tuple
,dict
,array
)
控制空格
{{-
(添加了破折号和空格)表示应该将格左移,而 -}}
意味着应该删除右空格。注意!换行符也是空格!
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
文章作者 子不语
上次更新 2019-09-06