先创建一个名为 mychart
的 chart,然后会在 chart 中创建一些模板。
$ helm create mychart
Creating mychart
如果你看看 mychart/templates/
目录,会注意到一些文件已经存在了:
NOTES.txt
: chart 的 ” 帮助文本 ”。这会在你的用户执行helm install
时展示给他们。deployment.yaml
: 创建 Kubernetes 工作负载 的基本清单service.yaml
: 为你的工作负载创建一个 service 终端 基本清单。_helpers.tpl
: 放置可以通过 chart 复用的模板辅助对象
然后我们要做的是 … 把它们全部删掉! 这样我们就可以从头开始学习我们的教程。我们在开始时会创造自己的 NOTES.txt
和_helpers.tpl
。
$ rm -rf mychart/templates/*
编制生产环境级别的 chart 时,有这些 chart 的基础版本会很有用。因此在日常编写中,你可能不想删除它们。
添加一个简单的模版调用
configmap.yaml
:
模板命令要括在 {{
和 }}
之间。
apiVersion: v1
kind: ConfigMap
metadata:
name: {{.Release.Name}}-configmap
data:
myvalue: "Hello World"
模板命令 {{.Release.Name}}
将发布名称注入了模板。值作为一个 命名空间对象 传给了模板,用点(.
) 分隔每个命名空间的元素。
Release
前面的点表示从作用域最顶层的命名空间开始(稍后会谈作用域)。这样 .Release.Name
就可解读为“通顶层命名空间开始查找 Release 对象,然后在其中找 Name 对象”。
Release
是一个 Helm 的内置对象。
$ helm install clunky-serval ./test_chart
NAME: clunky-serval
LAST DEPLOYED: Tue Nov 1 17:45:37 2016
NAMESPACE: default
STATUS: DEPLOYED
REVISION: 1
TEST SUITE: None
可以运行 helm get manifest clunky-serval
查看生成的完整的 YAML。
注意在 kubernetes 内的配置映射名称是 clunky-serval-configmap
,而不是之前的 mychart-configmap
。
内置对象
对象从模板引擎传递到模板中。你的代码也可以传递对象。(我们在使用 with
和range
语句时,会看到示例)。甚至于有几种方式可以在你的模板中创建新对象,比如说我们后面会看到的 tuple
功能。
对象可以是简单的且仅有一个值。或者可以包含其他对象或方法。比如,Release
对象包含一些对象(比如:Release.Name
)和 Files
对象有一组方法。
Release:该对象描述了版本发布本身。包含了以下对象:Release.Name:release 名称
Release.Namespace:版本中包含的命名空间(如果 manifest 没有覆盖的话)
Release.IsUpgrade:如果当前操作是升级或回滚的话,需要将该值设置为 true
Release.IsInstall:如果当前操作是安装的话,需要将该值设置为 true
Release.Revision:此次修订的版本号。安装时是 1,每次升级或回滚都会自增
Release.Service:该 service 用来渲染当前模板。Helm 里一般是 Helm
Values:Values 是从 values.yaml 文件和用户提供的文件传进模板的。Values 默认为空
Chart:Chart.yaml 文件内容。Chart.yaml 里的任意数据在这里都可以可访问的。比如 {{.Chart.Name}}-{{.Chart.Version}} 会打印出 mychart-0.1.0
Chart 指南 中列出了可用字段
Files:在 chart 中提供访问所有的非特殊文件。当你不能使用它访问模板时,你可以访问其他文件。请查看这个 文件访问部分了解更多信息
Files.Get 通过文件名获取文件的方法。(.Files.Getconfig.ini)Files.GetBytes 用字节数组代替字符串获取文件内容的方法。对图片之类的文件很有用
Files.Glob 用给定的 shell glob 模式匹配文件名返回文件列表的方法
Files.Lines 逐行读取文件内容的方法。迭代文件中每一行时很有用
Files.AsSecrets 使用 Base 64 编码字符串返回文件体的方法
Files.AsConfig 使用 YAML 格式返回文件体的方法
Capabilities:提供关于 Kubernetes 集群支持功能的信息
Capabilities.APIVersions 是一个版本集合
Capabilities.APIVersions.Has $version 说明集群中的版本 (e.g., batch/v1) 或是资源 (e.g., apps/v1/Deployment) 是否可用
Capabilities.KubeVersion 和 Capabilities.KubeVersion.Version 是 Kubernetes 的版本号
Capabilities.KubeVersion.Major Kubernetes 的主版本
Capabilities.KubeVersion.Minor Kubernetes 的次版本
Capabilities.HelmVersion 包含 Helm 版本详细信息的对象,和 helm version 的输出一致
Capabilities.HelmVersion.Version 是当前 Helm 版本的语义格式
Capabilities.HelmVersion.GitCommit Helm 的 git sha1 值
Capabilities.HelmVersion.GitTreeState 是 Helm git 树的状态
Capabilities.HelmVersion.GoVersion 是使用的 Go 编译器版本
Template:包含了已经被执行的当前模板信息
Template.Name: 当前模板的命名空间文件路径 (e.g. mychart/templates/mytemplate.yaml)
Template.BasePath: 当前 chart 模板目录的路径 (e.g. mychart/templates)
内置的值都是以大写字母开始。这是符合 Go 的命名惯例。当你创建自己的名称时,可以按照团队约定自由设置。就像很多你在 Artifact Hub 中看到的 chart,其团队选择使用首字母小写将本地名称与内置对象区分开,本指南中我们遵循该惯例。
Values 文件
参考文件:Values 文件
在上一部分我们了解了 Helm 模板提供的内置对象。其中一个是Values
。该对象提供了对传递到 chart 的值的访问方法,其内容源包括了多个位置:
- chart 中的
values.yaml
文件 - 如果是子 chart,就是父 chart 中的
values.yaml
文件 - 使用
-f
参数 (helm install -f myvals.yaml ./mychart
) 传递到helm install
或helm upgrade
的 values 文件 - 使用
--set
(比如helm install --set foo=bar ./mychart
) 传递的单个参数
以上列表有明确顺序:默认使用 values.yaml
,可以被父 chart 的values.yaml
覆盖,继而被用户提供 values 文件覆盖,最后会被 --set
参数覆盖。
values 文件是普通的 YAML 文件。现在编辑 mychart/values.yaml
然后编辑配置映射 ConfigMap 模板。