内置对象¶
前面我们介绍了 Helm Chart 的一些基本概念和使用,接下来我们重点介绍下 Chart 模板的编写。模板会渲染成 Kubernetes 的资源清单文件,下面我们将来学习下模板的结构,如何使用它们,如何编写 Go 模板以及如何调试。
对象从模板引擎传递到模板中,在代码中可以传递对象,也有一种方法可以在模板宏创建新的对象,比如 tuple
函数。对象可以很简单,也可以包含其他对象或函数,例如,Release 对象就包含几个对象(比如 Release.Name),Files 对象就包含几个函数。
前面提到过我们可以在模板中使用 {{ .Release.Name }}
获取 release 的名称,Release 是我们可以在模板中访问的几个顶级对象之一:
-
Release
:该对象描述了 release 本身的相关信息,它内部有几个对象:Release.Name
:release 名称Release.Namespace
:release 安装到的命名空间Release.IsUpgrade
:如果当前操作是升级或回滚,则该值为 trueRelease.IsInstall
:如果当前操作是安装,则将其设置为 trueRelease.Revision
:release 的 revision 版本号,在安装的时候,值为1,每次升级或回滚都会增加Reelase.Service
:渲染当前模板的服务,在 Helm 上,实际上该值始终为 Helm
-
Values
:从values.yaml
文件和用户提供的 values 文件传递到模板的 Values 值,默认情况下,Values 是空的。 Chart
:获取Chart.yaml
文件的内容,该文件中的任何数据都可以访问,例如{{ .Chart.Name }}-{{ .Chart.Version}}
可以渲染成mychart-0.1.0
,该对象下面可用的字段前面我们已经提到过了。-
Files
:可以访问 chart 中的所有非特殊文件,虽然无法使用它来访问模板文件,但是可以来访问 chart 中的其他文件。Files.Get
:用于根据名称获取文件(比如.Files.Get config.ini
)Files.GetBytes
:用于以 bytes 数组而不是字符串的形式来获取文件内容的函数,这对于类似于图片之类的东西很有用Files.Glob
:用于返回名称于给定的 shell glob 模式匹配的文件列表Files.Lines
:可以逐行读取文件的函数,对于遍历文件中的每行内容很有用Files.AsSecrets
:将文件内容以 Base64 编码的字符串返回的函数Files.AsConfig
:将文件正文作为 YAML 字典返回的函数
-
Capabilities
:提供了获取有关 Kubernetes 集群支持功能的信息的对象Capabilities.APIVersions
:支持的版本集合Capabilities.APIVersions.Has $version
:判断一个版本(比如batch/v1
)或资源(比如apps/v1/Deployment
)是否可用Capabilities.Kube.Version
:Kubernetes 的版本Capabilities.Kube
:是 Kubernetes 版本的缩写Capabilities.Kube.Major
:Kubernetes 主版本Capabilities.Kube.Minor
:Kubernetes 的次版本
-
Template
:包含当前正在执行的模板的相关信息Name
:当前模板的命名空间文件路径(比如mychart/templates/mytemplate.yaml
)BaePath
:当前 chart 的模板目录的命名空间路径(比如mychart/templates
)
需要注意的是内置的对象始终是以大写字母开头的,这也是符合 Go 的命名约定的,创建自己的名称的时候,可以自由使用适合你团队的约定,一些团队,比如 Kubernetes Charts 团队,选择仅使用首字母小写,以区分本地名称和内置名称,这里我们也会遵循该约定。