内置对象¶
前面我们介绍了 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 团队,选择仅使用首字母小写,以区分本地名称和内置名称,这里我们也会遵循该约定。