定义Mychart
一个 chart 包就是一个文件夹的集合,文件夹名称就是 chart 包的名称,比如创建一个 mychart 的 chart 包:
1 | [root@master101 sy]# helm create mychart |
templates 目录下面的文件:
- NOTES.txt:chart 的 “帮助文本”。这会在用户运行 helm install 时显示给用户。
- deployment.yaml:创建 Kubernetes deployment 的基本 manifest
- service.yaml:为 deployment 创建 service 的基本 manifest
- ingress.yaml: 创建 ingress 对象的资源清单文件
- _helpers.tpl:放置模板助手的地方,可以在整个 chart 中重复使用
创建简单模板
1 | [root@master101 sy]# rm -rf mychart/templates/* |
创建configmap.yaml:
1 | [root@master101 sy]# cat mychart/templates/configmap.yaml |
需要注意的是kubernetes
资源对象的 labels 和 name 定义被限制在63个字符,所以需要注意名称的定义。
1 | Labels are key/value pairs. Valid label keys have two segments: an optional prefix and name, separated by a slash (/). The name segment is required and must be 63 characters or less, beginning and ending with an alphanumeric character ([a-z0-9A-Z]) with dashes (-), underscores (_), dots (.), and alphanumerics between. The prefix is optional. If specified, the prefix must be a DNS subdomain: a series of DNS labels separated by dots (.), not longer than 253 characters in total, followed by a slash (/). |
调试
--dry-run --debug
这个可选参数
1 | [root@master101 sy]# helm install --dry-run --debug ./mychart |
内置对象
Release:这个对象描述了 release 本身。它里面有几个对象:
- Release.Name:release 名称
- Release.Time:release 的时间
- Release.Namespace:release 的 namespace(如果清单未覆盖)
- Release.Service:release 服务的名称(始终是 Tiller)。
- Release.Revision:此 release 的修订版本号,从1开始累加。
- Release.IsUpgrade:如果当前操作是升级或回滚,则将其设置为 true。
- Release.IsInstall:如果当前操作是安装,则设置为 true。
Values:从values.yaml
文件和用户提供的文件传入模板的值。默认情况下,Values 是空的。
1 | 例子: |
Chart:Chart.yaml的内容。chart版本可以从Chart.Version和维护人员 Chart.Maintainers一起获得。
1 | apiVersion: The chart API version, always "v1" (必须参数) |
Files:这提供对 chart 中所有非特殊文件的访问。虽然无法使用它来访问模板,但可以使用它来访问 chart 中的其他文件。请参阅 “访问文件” 部分。
- Files.Get 是一个按名称获取文件的函数(.Files.Get config.ini)
- Files.GetBytes 是将文件内容作为字节数组而不是字符串获取的函数。这对于像图片这样的东西很有用。
Capabilities:这提供了关于 Kubernetes 集群支持的功能的信息。
- Capabilities.APIVersions 是一组版本信息。
- Capabilities.APIVersions.Has $version 指示是否在群集上启用版本(batch/v1)。
- Capabilities.KubeVersion 提供了查找 Kubernetes 版本的方法。它具有以下值:Major,Minor,GitVersion,GitCommit,GitTreeState,BuildDate,GoVersion,Compiler,和 Platform。
Capabilities.TillerVersion 提供了查找 Tiller 版本的方法。它具有以下值:SemVer,GitCommit,和 GitTreeState。
Template:包含有关正在执行的当前模板的信息
- Name:到当前模板的文件路径(例如 mychart/templates/mytemplate.yaml)
- BasePath:当前 chart 模板目录的路径(例如 mychart/templates)。
values文件
1 | values对象的值四种来源: |
chart 的 values.yaml 提供的值可以被用户提供的 values 文件覆盖,而该文件同样可以被--set
提供的参数所覆盖。
1 | [root@master101 mychart]# cat values.yaml |
在上面的 templates/configmap.yaml 模板文件中就可以使用这个值了:(configmap.yaml)
1 | apiVersion: v1 |
debug看下:
1 | [root@master101 sy]# helm install --dry-run --debug ./mychart |
通过--set
参数来轻松的覆盖 course 的值:
1 | [root@master101 sy]# helm install --dry-run --debug --set course=python ./mychart |
由于--set
比默认 values.yaml 文件具有更高的优先级,所以我们的模板生成为 course: python。
value多结构化内容
1 | [root@master101 sy]# cat mychart/values.yaml |
1 | [root@master101 sy]# cat mychart/templates/configmap.yaml |
1 | [root@master101 sy]# helm install --dry-run --debug mychart/ |