先创建一个名为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模板。
Comments NOTHING