• chart 模板【转】


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

  • 相关阅读:
    [协同过滤] : 交替最小二乘法
    Hadoop 学习笔记3 Develping MapReduce
    Spark MLib 基本统计汇总 2
    Spark MLib 基本统计汇总 1
    MySQL 语句遇到关键字
    Spark MLib 数据类型
    Android中的文件下载——DownLoadManager
    [UWP]了解模板化控件(4):TemplatePart
    [UWP]了解模板化控件(5):VisualState
    [UWP]了解模板化控件(5.1):TemplatePart vs. VisualState
  • 原文地址:https://www.cnblogs.com/twobrother/p/11133162.html
Copyright © 2020-2023  润新知