Helm 经过模板建立 Kubernetes 可以理解的 YAML 格式的资源配置文件,咱们将经过例子来学习如何使用模板。mysql
以 templates/secrets.yaml
为例:sql
从结构看,文件的内容很是像 Secret 配置,只是大部分属性值变成了{{ xxx }}
。这些 {{ xxx }}
其实是模板的语法。Helm 采用了 Go 语言的模板来编写 chart。Go 模板很是强大,支持变量、对象、函数、流控制等功能。下面咱们经过解析 templates/secrets.yaml
快速学习模板。函数
① {{ template "mysql.fullname" . }}
定义 Secret 的 name
。
关键字 template
的做用是引用一个子模板 mysql.fullname
。这个子模板是在 templates/_helpers.tpl
文件中定义的。学习
这个定义仍是很复杂的,由于它用到了模板语言中的对象、函数、流控制等概念。如今看不懂不要紧,这里咱们学习的重点是:若是存在一些信息多个模板都会用到,则可在 templates/_helpers.tpl
中将其定义为子模板,而后经过 templates
函数引用。编码
这里 mysql.fullname
是由 release 与 chart 两者名字拼接组成。code
根据 chart 的最佳实践,全部资源的名称都应该保持一致,对于咱们这个 chart,不管 Secret 仍是 Deployment、PersistentVolumeClaim、Service,它们的名字都是子模板 mysql.fullname
的值。对象
② Chart
和 Release
是 Helm 预约义的对象,每一个对象都有本身的属性,能够在模板中使用。若是使用下面命令安装 chart:blog
helm install stable/mysql -n my
那么:{{ .Chart.Name }}
的值为 mysql
。{{ .Chart.Version }}
的值为 0.3.0
。{{ .Release.Name }}
的值为 my
。{{ .Release.Service }}
始终取值为 Tiller
。{{ template "mysql.fullname" . }}
计算结果为 my-mysql
。资源
③ 这里指定 mysql-root-password
的值,不过使用了 if-else
的流控制,其逻辑为:
若是 .Values.mysqlRootPassword
有值,则对其进行 base64 编码;不然随机生成一个 10 位的字符串并编码。文档
Values
也是预约义的对象,表明的是 values.yaml
文件。而 .Values.mysqlRootPassword
则是 values.yaml
中定义的 mysqlRootPassword
参数:
由于 mysqlRootPassword
被注释掉了,没有赋值,因此逻辑判断会走 else
,即随机生成密码。
randAlphaNum
、b64enc
、quote
都是 Go 模板语言支持的函数,函数之间能够经过管道 |
链接。{{ randAlphaNum 10 | b64enc | quote }}
的做用是首先随机产生一个长度为 10 的字符串,而后将其 base64 编码,最后两边加上双引号。
templates/secrets.yaml
这个例子展现了 chart 模板主要的功能,咱们最大的收获应该是:模板将 chart 参数化了,经过 values.yaml
能够灵活定制应用。
不管多复杂的应用,用户均可以用 Go 模板语言编写出 chart。无非是使用到更多的函数、对象和流控制。对于初学者,个人建议是尽可能参考官方的 chart。根据二八定律,这些 chart 已经覆盖了绝大部分状况,并且采用了最佳实践。如何遇到不懂的函数、对象和其余语法,可参考官网文档 https://docs.helm.sh
有了上面 chart 结构和模板的知识后,下节咱们将从新实践一次 MySQL chart,相信会有更多收获。