开发模板规范

Helm Chart 是一种打包规范,将各种 Kubernetes 资源以配置文件的形式组织。更详细的介绍请参考 Chart 官网文档

Chart 文件结构

一个 Chart 包由以下几个配置文件组成:

  1. wordpress/
  2. Chart.yaml # Yaml文件,用于描述 Chart 的基本信息,包括名称版本等
  3. LICENSE # [可选] 文本格式的协议
  4. README.md # [可选] 应用介绍、使用说明
  5. requirements.yaml # [可选] 用于存放当前 Chart 依赖的其它 Chart 的说明文件
  6. values.yaml # Chart 的默认值配置文件
  7. charts/ # [可选] 该目录中放置当前 Chart 依赖的其它 Chart
  8. templates/ # [可选] 部署文件模版目录,模版填入 values.yaml 中相应值,生成最终的 kubernetes 配置文件
  9. templates/NOTES.txt # [可选] 使用指南

Chart.yaml 文件

  1. apiVersion: [必须] Chart API 版本,可用值 v1
  2. name: [必须] Chart 名称
  3. version: [必须] 版本,遵循 [SemVer 2 标准](https://semver.org/)
  4. kubeVersion: [可选] 兼容的 Kubernetes 版本,遵循 [SemVer 2 标准](https://semver.org/)
  5. description: [可选] 一句话的应用描述
  6. keywords:
  7. - [可选] 应用关键字列表
  8. home: [可选] 应用主页 URL
  9. sources:
  10. - [可选] 当前应用下载地址列表
  11. maintainers: [可选]
  12. - name: [必须] name
  13. email: [可选] email
  14. url: [可选] url
  15. engine: [可选] 模板引擎,默认值是 gotpl
  16. icon: [可选] SVG 或者 PNG 格式的图片地址
  17. appVersion: [可选] 应用版本
  18. deprecated: [可选] boolean 类型,是否不建议使用
  19. tillerVersion: [可选] Chart 需要的 Tiller 版本,遵循 [SemVer 2 标准](https://semver.org/),需要 ">2.0.0"

Requirements.yaml 文件和 Charts 目录

Chart支持两种方式表示依赖关系,可以写入 requirements.yaml 文件动态链接[推荐],也可以将依赖的 Chart 放入 charts 目录手动管理。

requirements.yaml 文件样例:

  1. dependencies:
  2. - name: apache
  3. version: 1.2.3
  4. repository: http://example.com/charts
  5. - name: mysql
  6. version: 3.2.1
  7. repository: http://another.example.com/charts
  • name:Chart 名称
  • version:Chart 版本
  • repository: Chart 仓库 URL 地址

有了 requirements.yaml 文件,可以运行 helm dependency update,依赖的 Chart 会被自动的下载到 charts 目录下。

Values.yaml 文件和 Templates 目录

values.yaml 文件中记录了模板中引用的默认值。templates 目录中存放了 Kubernetes 部署文件的模版,遵循 Go template 语法

templates 中模板文件样例:

  1. apiVersion: v1
  2. kind: ReplicationController
  3. metadata:
  4. name: deis-database
  5. namespace: deis
  6. labels:
  7. app.kubernetes.io/managed-by: deis
  8. spec:
  9. replicas: 1
  10. selector:
  11. app.kubernetes.io/name: deis-database
  12. template:
  13. metadata:
  14. labels:
  15. app.kubernetes.io/name: deis-database
  16. spec:
  17. serviceAccount: deis-database
  18. containers:
  19. - name: deis-database
  20. image: {{.Values.imageRegistry}}/postgres:{{.Values.dockerTag}}
  21. imagePullPolicy: {{.Values.pullPolicy}}
  22. ports:
  23. - containerPort: 5432
  24. env:
  25. - name: DATABASE_STORAGE
  26. value: {{default "minio" .Values.storage}}

上述样例是一个 Kubernetes 中 replication controller 的模板文件定义,其中引用了以下几个值(一般定义在 values.yaml 中)

  • imageRegistry:Docker 映像仓库
  • dockerTag: Docker 映像标签
  • pullPolicy: 下载映像策略
  • storage: 存储后端,默认值是 "minio"

values.yaml 文件样例:

  1. imageRegistry: "quay.io/deis"
  2. dockerTag: "latest"
  3. pullPolicy: "Always"
  4. storage: "s3"