chart 是 Helm 的应用打包格式。chart 由一系列文件组成,这些文件描述了 Kubernetes 部署应用时所需要的资源,比如 Service、Deployment、PersistentVolumeClaim、Secret、ConfigMap 等。
单个的 chart 可以非常简单,只用于部署一个服务,比如 Memcached;chart 也可以很复杂,部署整个应用,比如包含 HTTP Servers、 Database、消息中间件、cache 等。
chart 将这些文件放置在预定义的目录结构中,通常整个 chart 被打成 tar 包,而且标注上版本信息,便于 Helm 部署。
下面我们将详细讨论 chart 的目录结构以及包含的各类文件。
chart 目录结构
以前面 MySQL chart 为例。一旦安装了某个 chart,我们就可以在 ~/.helm/cache/archive 中找到 chart 的 tar 包。
解压后,MySQL chart 目录结构如下:
目录名就是 chart 的名字(不带版本信息),这里是 mysql
,包含如下内容:
Chart.yaml
YAML 文件,描述 chart 的概要信息。
name
和 version
是必填项,其他都是可选。
README.md
Markdown 格式的 README 文件,相当于 chart 的使用文档,此文件为可选。
LICENSE
文本文件,描述 chart 的许可信息,此文件为可选。
requirements.yaml
chart 可能依赖其他的 chart,这些依赖关系可通过 requirements.yaml 指定,比如:
在安装过程中,依赖的 chart 也会被一起安装。
values.yaml
chart 支持在安装的时根据参数进行定制化配置,而 values.yaml 则提供了这些配置参数的默认值。
templates 目录
各类 Kubernetes 资源的配置模板都放置在这里。Helm 会将 values.yaml 中的参数值注入到模板中生成标准的 YAML 配置文件。
模板是 chart 最重要的部分,也是 Helm 最强大的地方。模板增加了应用部署的灵活性,能够适用不同的环境,我们后面会详细讨论。
templates/NOTES.txt
chart 的简易使用文档,chart 安装成功后会显示此文档内容。
与模板一样,可以在 NOTE.txt 中插入配置参数,Helm 会动态注入参数值。
下一节我们详细讨论 chart 模板的用法。