Helm Chart 是一种用来封装 Kubernetes 应用程序及关联配置的标准格式。每个 Chart 包含了一系列的 YAML 文件和其他辅助文件,它们共同定义了如何在 Kubernetes 集群上部署和配置一个应用。下面是一个典型的 Helm Chart 的基本结构:
my-chart/
|-- Chart.yaml # Chart 的基本信息文件,包含版本、名称、描述等元数据
|-- README.md # Chart 的说明文档
|-- requirements.yaml # 可选,列出此 Chart 所依赖的其他 Chart
|-- values.yaml # 默认配置文件,用户可以通过此文件覆盖默认值
|-- templates/ # 模板目录,存放 Kubernetes 资源清单文件模板
| |-- _helpers.tpl # 可选,全局 helper 函数
| |-- deployment.yaml
| |-- service.yaml
| |-- ingress.yaml
| |-- configmap.yaml
| |-- ...
|-- charts/ # 如果有子 Chart,放在此目录下
|-- .helmignore # 可选,指定哪些文件 Helm 不应处理
|-- files/ # 可选,包含非模板文件,如证书、配置文件等,将在渲染后直接复制到 Pod 中
-
Chart.yaml: 描述 Chart 的基本信息,如名称、版本、图标、维护者列表以及应用程序的版本等。
-
values.yaml: 提供了 Chart 的默认配置选项,用户可以根据需要在安装时覆盖这些值。这个文件里的键值对会被注入到模板文件中,以便动态生成 Kubernetes 资源。
-
requirements.yaml: 当 Chart 依赖其他 Chart 时,这里会列出依赖关系及其版本要求。
-
templates/: 这个目录下的文件都是 Go 的文本模板,它们会被 Helm 渲染成有效的 Kubernetes 资源清单(YAML 文件)。模板可以引用
values.yaml
中的数据。 -
charts/: 存放依赖的子 Chart。
-
.helmignore: 类似
.gitignore
,用于忽略不需要包含在 Chart 包中的文件。 -
files/: 非模板文件,这些文件会被原样复制到生成的 ConfigMap 或 Secret 中,或者通过特定的 Kubernetes 字段(如 ConfigMap volume projection)加载到 Pod 内部。
在开发过程中,你可以修改这些模板文件,添加配置项,并通过 helm lint
检查 Chart 是否符合规范,然后通过 helm package
打包 Chart,最后通过 helm install
或 helm upgrade
将 Chart 部署到 Kubernetes 集群中。