Helm 通过模板创建 Kubernetes 能够理解的 YAML 格式的资源配置文件,我们将通过例子来学习如何使用模板。

以 templates/secrets.yaml 为例:

从结构看,文件的内容非常像 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 二者名字拼接组成。

根据 chart 的最佳实践,所有资源的名称都应该保持一致,对于我们这个 chart,无论 Secret 还是 Deployment、PersistentVolumeClaim、Service,它们的名字都是子模板 mysql.fullname 的值。

② Chart 和 Release 是 Helm 预定义的对象,每个对象都有自己的属性,可以在模板中使用。如果使用下面命令安装 chart:

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,即随机生成密码。

randAlphaNumb64encquote 都是 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,相信会有更多收获。

书籍:

1.《每天5分钟玩转Kubernetes》
https://item.jd.com/26225745440.html

2.《每天5分钟玩转Docker容器技术》
https://item.jd.com/16936307278.html

3.《每天5分钟玩转OpenStack》
https://item.jd.com/12086376.html

转载于:https://www.cnblogs.com/CloudMan6/p/9006203.html

chart 模板 - 每天5分钟玩转 Docker 容器技术(165)相关推荐

  1. 开发自己的 chart - 每天5分钟玩转 Docker 容器技术(167)

    Kubernetes 给我们提供了大量官方 chart,不过要部署微服务应用,还是需要开发自己的 chart,下面就来实践这个主题. 创建 chart 执行 helm create mychart 的 ...

  2. 再次实践 MySQL chart - 每天5分钟玩转 Docker 容器技术(166)

    学习了 chart 结构和模板的知识后,现在重新实践一次 MySQL chart,相信会有更多收获. chart 安装前的准备 作为准备工作,安装之前需要先清楚 chart 的使用方法.这些信息通常记 ...

  3. Helm 架构 - 每天5分钟玩转 Docker 容器技术(161)

    在实践之前,我们先来看看 Helm 的架构. Helm 有两个重要的概念:chart 和 release. chart 是创建一个应用的信息集合,包括各种 Kubernetes 对象的配置模板.参数定 ...

  4. k8s 创建资源的两种方式 - 每天5分钟玩转 Docker 容器技术(124)

    命令 vs 配置文件 Kubernetes 支持两种方式创建资源: 1. 用 kubectl 命令直接创建,比如: kubectl run nginx-deployment --image=nginx ...

  5. 定时执行 Job - 每天5分钟玩转 Docker 容器技术(135)

    Linux 中有 cron 程序定时执行任务,Kubernetes 的 CronJob 提供了类似的功能,可以定时执行 Job.CronJob 配置文件示例如下: ① batch/v2alpha1 是 ...

  6. 使用 Helm - 每天5分钟玩转 Docker 容器技术(163)

    2019独角兽企业重金招聘Python工程师标准>>> Helm 安装成功后,可执行 helm search 查看当前可安装的 chart. 这个列表很长,这里只截取了一部分.大家不 ...

  7. 用 label 控制 Pod 的位置 - 每天5分钟玩转 Docker 容器技术(128)

    默认配置下,Scheduler 会将 Pod 调度到所有可用的 Node.不过有些情况我们希望将 Pod 部署到指定的 Node,比如将有大量磁盘 I/O 的 Pod 部署到配置了 SSD 的 Nod ...

  8. 3、《每天5分钟玩转Docker容器技术》学习-Docker架构

    ------------------------------------重要说明------------------------------------ 本文内容都是参考Cloudman系列进行学习, ...

  9. 用 Label 控制 Service 的位置 - 每天5分钟玩转 Docker 容器技术(106)

    上一节我们讨论了 Service 部署的两种模式:global mode 和 replicated mode.无论采用 global mode 还是 replicated mode,副本运行在哪些节点 ...

最新文章

  1. 聚类和EM算法——K均值聚类
  2. 成功解决./nvidia-installer: invalid option: ‐‐no‐opengl‐files ERROR: Invalid commandline, please run `
  3. CentOS添加一个新的硬盘、添加分区到挂载的过程
  4. 巨头入局,华为云将给音视频行业带来什么?
  5. SAP Spartacus的登录验证机制 - user login Authentication
  6. Android使用token维持登陆状态的方法
  7. Linux系统下,MySQL以及禅道的安装/卸载
  8. 编写一个脚本判断某个用户是否处在活动模式_使用 TypeScript 编写爬虫
  9. CAutoupdater通用 自动升级组件用户手册
  10. Java判断文件是否为图片
  11. python 数据流中的移动平均值_Python实现数据流中的中位数【堆】
  12. 如何用好谷歌等搜索引擎?
  13. 宠物合成养成游戏养猫养牛流量主小程序开发
  14. 我的第一篇论文诞生的故事
  15. 移动页面HTML5自适应手机屏幕宽度几种办法
  16. cat()函数的用法
  17. pthread_cont_wait和pthread_cont_signal
  18. 【以太网硬件TCP/IP协议栈】硬件协议栈W5500应用
  19. shp文件的可视化与编辑
  20. 空指针-Base on windows Writeup -- 最新版DZ3.4实战渗透

热门文章

  1. python初学者可以做的金融小程序-Python入门 —— 用pycharm写一个简单的小程序3...
  2. python常用内置模块-Python-常用的内置模块
  3. python 代码-20个Python代码段,你需要立刻学会,好用到哭!
  4. python3.6.2安装教程-CentOS 7.2下安装Python 3.6.2
  5. python变量类型-【干货】Python基础语法之变量类型
  6. vscode使用教程python-用VSCode写python的正确姿势
  7. 零基础自学python的app-零基础入门免费学Python 课程和APP推荐
  8. python 程序流程控制结构-Python基础—程序控制结构
  9. python 制作gif-怎样用Python制作好玩的GIF动图
  10. python3哪个教程好-Python3 教程