Helm-Chart模版

1,059次阅读
没有评论

先创建一个名为 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

Helm-Chart 模版

内置对象

对象从模板引擎传递到模板中。你的代码也可以传递对象。(我们在使用 withrange语句时,会看到示例)。甚至于有几种方式可以在你的模板中创建新对象,比如说我们后面会看到的 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 模板。

正文完
 
评论(没有评论)