Helm 规范

Helm Chart 是一种打包格式。Chart 是一个描述一组 Kubernetes 相关资源的文件集合。有关更多信息,请参见 Helm 文档

结构

Chart 的所有相关文件都存储在一个目录中,该目录通常包含:

  1. chartname/
  2. Chart.yaml # 包含 Chart 基本信息(例如版本和名称)的 YAML 文件。
  3. LICENSE # (可选)包含 Chart 许可证的纯文本文件。
  4. README.md # (可选)应用说明和使用指南。
  5. values.yaml # 该 Chart 的默认配置值。
  6. values.schema.json # (可选)向 values.yaml 文件添加结构的 JSON Schema。
  7. charts/ # 一个目录,包含该 Chart 所依赖的任意 Chart。
  8. crds/ # 自定义资源定义。
  9. templates/ # 模板的目录,若提供相应值便可以生成有效的 Kubernetes 配置文件。
  10. templates/NOTES.txt # (可选)包含使用说明的纯文本文件。

Chart.yaml 文件

您必须为 Chart 提供 chart.yaml 文件。下面是一个示例文件,每个字段都有说明。

  1. apiVersion: (必需)Chart API 版本。
  2. name: (必需)Chart 名称。
  3. version: (必需)版本,遵循 SemVer 2 标准。
  4. kubeVersion: (可选)兼容的 Kubernetes 版本,遵循 SemVer 2 标准。
  5. description: (可选)对应用的一句话说明。
  6. type: (可选)Chart 的类型。
  7. keywords:
  8. - (可选)关于应用的关键字列表。
  9. home: (可选)应用的 URL
  10. sources:
  11. - (可选)应用源代码的 URL 列表。
  12. dependencies: (可选)Chart 必要条件的列表。
  13. - name: Chart 的名称,例如 nginx
  14. version: Chart 的版本,例如 "1.2.3"
  15. repository: 仓库 URL ("https://example.com/charts") 或别名 ("@repo-name")。
  16. condition: (可选)解析为布尔值的 YAML 路径,用于启用/禁用 Chart (例如 subchart1.enabled)。
  17. tags: (可选)
  18. - 用于将 Chart 分组,一同启用/禁用。
  19. import-values: (可选)
  20. - ImportValues 保存源值到待导入父键的映射。每一项可以是字符串或者一对子/父子列表项。
  21. alias: (可选)Chart 要使用的别名。当您要多次添加同一个 Chart 时,它会很有用。
  22. maintainers: (可选)
  23. - name: (必需)维护者姓名。
  24. email: (可选)维护者电子邮件。
  25. url: (可选)维护者 URL
  26. icon: (可选)要用作图标的 SVG PNG 图片的 URL
  27. appVersion: (可选)应用版本。不需要是 SemVer
  28. deprecated: (可选,布尔值)该 Chart 是否已被弃用。
  29. annotations:
  30. example: (可选)按名称输入的注解列表。

备注

  • dependencies 字段用于定义 Chart 依赖项,v1 Chart 的依赖项都位于单独文件 requirements.yaml 中。有关更多信息,请参见 Chart 依赖项
  • type 字段用于定义 Chart 的类型。允许的值有 applicationlibrary。有关更多信息,请参见 Chart 类型

Values.yaml 和模板

Helm Chart 模板采用 Go 模板语言编写并存储在 Chart 的 templates 文件夹。有两种方式可以为模板提供值:

  1. 在 Chart 中创建一个包含可供引用的默认值的 values.yaml 文件。
  2. 创建一个包含必要值的 YAML 文件,通过在命令行使用 helm install 命令来使用该文件。

下面是 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 中定义 ReplicationController 模板,其中引用的一些值已在 values.yaml 文件中进行定义。

  • imageRegistry:Docker 镜像仓库。
  • dockerTag:Docker 镜像标签 (tag)。
  • pullPolicy:镜像拉取策略。
  • storage:存储后端,默认为 minio

下面是 values.yaml 文件的示例:

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

参考

Helm 文档

Chart