Helm chart包目录结构¶
创建自定义chart模板
$ helm create my-template
查看目录结构
$ yum install -y tree
$ tree my-template
my-template
├── charts
├── Chart.yaml
├── templates
│ ├── deployment.yaml
│ ├── _helpers.tpl
│ ├── hpa.yaml
│ ├── ingress.yaml
│ ├── NOTES.txt
│ ├── serviceaccount.yaml
│ ├── service.yaml
│ └── tests
│ └── test-connection.yaml
└── values.yaml
说明:
- Chart.yaml:用于描述这个chart的基本信息,包括名字、描述信息、版本信息等。
- values.yaml:用于存储templates目录中模板文件中用到的变量信息,也就是说template中的模板文件引用的是values.yaml中的变量。
- templates:用于存放部署使用的yaml文件模板,这里面的yaml都是通过各种判断、流程控制、引用变量去调用values中设置的变量信息,最后完成部署。
- deployment.yaml:deployment资源yaml文件。
- ingress.yaml:ingress资源文件。
- NOTES.txt:用于接收chart的帮助信息,helm install部署完成后展示给用户,也可以时候helm status列出信息。
- _helpers.tpl:放置模板助手的地方,可以在整个chart中重复使用。
helm chart模板¶
Helm最核心的就是模板,即模板化的K8s清单文件(如,deployment, service等),模板经过渲染后会被提交到K8s中,本质上就是Go语言的template模板,模板文件位于template/目录中。
将K8s清单文件中可能经常变动的字段,通过指定一个变量,在安装的过程中该变量将被值value动态替换掉,这个过程就是模板的渲染。
变量的值定义在values.yaml文件中,该文件中定义了变量的缺省值,但可以在helm install命令中配置新的值来覆盖缺省值。
以下为模板内置对象
Release对象
Release 对象描述了版本发布自身的一些信息。
| Release.Name | Release名字 |
|---|---|
| Release.Namespace | Release所在命名空间 |
| Release.IsUpgrade | 如果当前操作是升级或回滚,则将其设置为true |
| Release.IsInstall | 如果当前操作是安装,则设置为true |
| Release.Revision | 此Release 的修订版本号 |
| Release.Service | 渲染此模板的服务,一般都是“Helm” |
Values对象
Values 对象描述的是 values.yaml 文件中的内容,默认为空。使用 Value 对象可以获取到 values.yaml 文件中已定义的任何数值。
Values对象的值有4个来源:
- chart包中的values.yaml文件;
- 父chart包的values.yaml文件;
- 通过helm install或者helm upgrade的-f 或者 --values参数传入的自定义的yaml文件(比如,helm install -f abc.yaml )
- 通过--set传递单个参数(比如,helm install --set image=nginx:1.23.2)
优先级:--set > -f > 父chart里的values.yaml > chart里的values.yaml
| Value 键值对 | 获取方式 |
|---|---|
| name: aaron | Values.name |
| info: name: aaron | Values.info.name |
Chart对象
Chart 对象用于获取 chart.yaml 文件中的内容
| Chart.Name | 获取Chart的名称 |
|---|---|
| Chart.Version | 获取Chart的版本 |
| Chart.apiVersion | 获取Chart的API版本 |
| Chart.description | 获取Chart的描述 |
| Chart.type | 获取Chart的类型 |
| Chart.keywords | 获取Chart的一组关键字 |
Capabilities对象
Capabilities 对象提供了关于 Kubernetes 集群相关的信息。
| Capabilities.APIVersions | 返回 Kubernetes 集群 API 版本信息集合 |
|---|---|
| Capabilities.APIVersions.Has $version | 用于检测指定的版本或资源在 Kubernetes 集群中是否可用,例如 batch/v1 或 apps/v1/Deployment |
| Capabilities.KubeVersion | 用于获取 Kubernetes 的版本号 |
| Capabilities.KubeVersion.Version | 用于获取 Kubernetes 的版本号 |
| Capabilities.KubeVersion.Major | Kubernetes 的主版本号 |
| Capabilities.KubeVersion.Minor | Kubernetes 的小版本号 |
Template对象
Template 对象用于获取当前模板的信息
| Template.Name | 用于获取当前模板的名称和路径(例如:mychart/templates/mytemplate.yaml) |
|---|---|
| Template.BasePath | 用于获取当前模板的路径(例如:mychart/templates) |
Files对象
Files对象在chart中提供访问所有非特殊文件的对象。你不能使它访问template对象,只能访问其它文件。
| Files.Get | 通过文件名获取文件的方法 |
|---|---|
| Files.GetBytes | 用字节数组代替字符串获取文件内容的方法,常用于图片类的文件 |
| Files.Glob | 用给定的shell glob模式匹配文件名返回文件列表的方法 |
| Files.Lines | 逐行读取文件内容的方法 |
| Files.AsSecrets | 使用Base64编码字符串返回文件体的方法 |
| Files.AsConfig | 使用YAML格式返回文件体的方法 |