helm charts 入门指南(1)

简介: helm charts 入门指南(1)

文章目录

1. charts 文件结构

2. Chart.yaml 文件

3. Charts and Versioning

3.1 apiVersion领域_

3.2 appVersion领域_

3.3 kubeVersion领域_

3.4 Deprecating Charts

4. Chart Types

5. Chart LICENSE, README and NOTES

6. Chart Dependencies

7. Alias field in dependencies

8. 依赖项中的标签和条件字段

9. 通过依赖项导入子值

9.1 exports 格式

9.2 使用子父格式

10. charts/通过目录手动管理依赖项

11. 使用依赖项的操作方面

12. 模板和值

12.1 模板文件

12.2 预定义值

12.3 Values files

12.4 Scope, Dependencies, and Values

12.5 Global Values

12.6 架构 Files

13. 自定义资源定义 (CRD)

13.1 CRD 的限制

Helm 使用一种称为图表的打包格式。图表是描述一组相关 Kubernetes 资源的文件的集合。单个图表可用于部署简单的东西,例如 memcached pod,或复杂的东西,例如带有 HTTP 服务器、数据库、缓存等的完整 Web 应用程序堆栈。


图表被创建为放置在特定目录树中的文件。它们可以打包到版本化档案中进行部署。


如果您想下载并查看已发布图表的文件,而不安装它,您可以使用helm pull chartrepo/chartname.

1. charts 文件结构

描述 WordPress 的图表将存储在wordpress/目录中。

wordpress/
  Chart.yaml          # A YAML file containing information about the chart
  LICENSE             # OPTIONAL: A plain text file containing the license for the chart
  README.md           # OPTIONAL: A human-readable README file
  values.yaml         # The default configuration values for this chart
  values.schema.json  # OPTIONAL: A JSON Schema for imposing a structure on the values.yaml file
  charts/             # A directory containing any charts upon which this chart depends.
  crds/               # Custom Resource Definitions
  templates/          # A directory of templates that, when combined with values,
                      # will generate valid Kubernetes manifest files.
  templates/NOTES.txt # OPTIONAL: A plain text file containing short usage notes

2. Chart.yaml 文件

apiVersion: The chart API version (required)
name: The name of the chart (required)
version: A SemVer 2 version (required)
kubeVersion: A SemVer range of compatible Kubernetes versions (optional)
description: A single-sentence description of this project (optional)
type: The type of the chart (optional)
keywords:
  - A list of keywords about this project (optional)
home: The URL of this projects home page (optional)
sources:
  - A list of URLs to source code for this project (optional)
dependencies: # A list of the chart requirements (optional)
  - name: The name of the chart (nginx)
    version: The version of the chart ("1.2.3")
    repository: (optional) The repository URL ("https://example.com/charts") or alias ("@repo-name")
    condition: (optional) A yaml path that resolves to a boolean, used for enabling/disabling charts (e.g. subchart1.enabled )
    tags: # (optional)
      - Tags can be used to group charts for enabling/disabling together
    import-values: # (optional)
      - ImportValues holds the mapping of source values to parent key to be imported. Each item can be a string or pair of child/parent sublist items.
    alias: (optional) Alias to be used for the chart. Useful when you have to add the same chart multiple times
maintainers: # (optional)
  - name: The maintainers name (required for each maintainer)
    email: The maintainers email (optional for each maintainer)
    url: A URL for the maintainer (optional for each maintainer)
icon: A URL to an SVG or PNG image to be used as an icon (optional).
appVersion: The version of the app that this contains (optional). Needn't be SemVer. Quotes recommended.
deprecated: Whether this chart is deprecated (optional, boolean)
annotations:
  example: A list of annotations keyed by name (optional).

v3.3.2 开始,不允许使用其他字段。推荐的方法是在annotations.

3. Charts and Versioning

每个图表都必须有一个版本号。版本必须遵循SemVer 2标准。与 Helm Classic 不同,Helm v2 及更高版本使用版本号作为发布标记。存储库中的包由名称加版本标识。

例如,nginx版本字段设置为的图表version: 1.2.3将被命名为:

nginx-1.2.3.tgz

还支持更复杂的 SemVer 2 名称,例如version: 1.2.3-alpha.1+ef365. 但是系统明确禁止非 SemVer 名称。


注意: Helm Classic 和 Deployment Manager 在图表方面都非常面向 GitHub,而 Helm v2及更高版本不依赖或不需要 GitHub 甚至 Git。因此,它根本不使用 Git SHA 进行版本控制。


许多 Helm 工具(包括 CLI)使用内部的version字段。Chart.yaml生成包时,该helm package命令将使用它在 中找到的版本Chart.yaml作为包名称中的标记。系统假定图表包名称中的版本号与Chart.yaml. 不满足此假设将导致错误。

3.1 apiVersion领域_

该apiVersion字段应该v2用于至少需要 Helm 3 的 Helm 图表。支持先前 Helm 版本的图表有一个apiVersion设置,v1并且仍然可以由 Helm 3 安装。


从更改v1为v2:


定义图表依赖项的dependencies字段,位于图表的单独requirements.yaml文件中v1(请参阅图表依赖项)。

字段,type区分应用程序和库图表(请参阅图表类型)。

3.2 appVersion领域_

请注意,该appVersion字段与该字段无关version。这是一种指定应用程序版本的方法。例如,drupal图表可能有一个appVersion: "8.2.1",表示图表中包含的 Drupal 版本(默认)是8.2.1。此字段是信息性的,对图表版本计算没有影响。强烈建议将版本用引号括起来。它强制 YAML 解析器将版本号视为字符串。在某些情况下,不加引号可能会导致解析问题。例如,YAML 解释1.0为浮点值,而 git commit SHA则解释1234e10为科学记数法。


从 Helm v3.5.0 开始,helm create将默认appVersion字段包含在引号中。

3.3 kubeVersion领域_

可选kubeVersion字段可以定义支持的 Kubernetes 版本的 semver 约束。Helm 将在安装图表时验证版本约束,如果集群运行不受支持的 Kubernetes 版本,则会失败。

版本约束可能包括空格分隔的 AND 比较,例如

>= 1.13.0 < 1.15.0

它们本身可以与 OR||运算符组合,如下例所示

>= 1.13.0 < 1.14.0 || >= 1.14.1 < 1.15.0

在此示例中,版本1.14.0被排除在外,如果已知某些版本中的错误会阻止图表正常运行,这可能是有意义的。


除了使用运算符= != > < >= <=的版本约束之外,还支持以下速记符号


闭合区间的连字符范围,其中1.1 - 2.3.4等价于>= 1.1 <= 2.3.4.

通配符x, Xand *, where1.2.x等价于>= 1.2.0 < 1.3.0.

波浪号范围(允许更改补丁版本),~1.2.3相当于>= 1.2.3 < 1.3.0.

插入符号范围(允许进行较小的版本更改),其中^1.2.3相当于>= 1.2.3 < 2.0.0.

有关支持的 semver 约束的详细说明,请参阅Masterminds/semver。

3.4 Deprecating Charts

在图表存储库中管理图表时,有时需要弃用图表。中的可选deprecated字段Chart.yaml可用于将图表标记为已弃用。如果存储库中图表的最新版本被标记为已弃用,则整个图表被视为已弃用。稍后可以通过发布未标记为已弃用的较新版本来重用图表名称。弃用图表的工作流程是:


更新图表Chart.yaml以将图表标记为已弃用,更新版本

在 Chart Repository 中发布新的图表版本

从源存储库中删除图表(例如 git)

4. Chart Types

该type字段定义图表的类型。有两种类型:application和library。应用程序是默认类型,它是可以完全操作的标准图表。库图表为图表构建器提供实用程序或功能。库图表与应用程序图表不同,因为它不可安装并且通常不包含任何资源对象。


注意:应用程序图表可以用作库图表。这可以通过将类型设置为来启用library。然后该图表将呈现为可以利用所有实用程序和功能的库图表。图表的所有资源对象都不会被渲染。

5. Chart LICENSE, README and NOTES

图表还可以包含描述图表的安装、配置、使用和许可证的文件。


许可证是包含图表许可证的纯文本文件。该图表可以包含许可证,因为它可能在模板中具有编程逻辑,因此不仅仅是配置。如果需要,图表安装的应用程序也可以有单独的许可证。


图表的 README 应采用 Markdown (README.md) 格式,通常应包含:


图表提供的应用程序或服务的描述

运行图表的任何先决条件或要求

选项中的描述values.yaml和默认值

可能与图表的安装或配置相关的任何其他信息

当集线器和其他用户界面显示有关图表的详细信息时,该详细信息是从README.md文件中的内容中提取的。


该图表还可以包含一个简短的纯文本templates/NOTES.txt文件,该文件将在安装后以及查看版本状态时打印出来。此文件作为模板进行评估,可用于显示使用说明、后续步骤或与图表发布相关的任何其他信息。例如,可以提供连接到数据库或访问 Web UI 的说明。由于此文件在运行时会打印到 STDOUThelm install或helm status,因此建议保持内容简短并指向 README 以获得更多详细信息。

6. Chart Dependencies

在 Helm 中,一个图表可能依赖于任意数量的其他图表。这些依赖关系可以使用dependencies字段动态链接Chart.yaml或引入charts/目录并手动管理。

dependencies使用字段管理依赖项

当前图表所需的图表在dependencies字段中定义为列表。

dependencies:
 - name: apache
    version: 1.2.3
    repository: https://example.com/charts
 - name: mysql
    version: 3.2.1
    repository: https://another.example.com/charts
  • name字段是您想要的图表的名称。
  • version字段是您想要的图表版本。
  • repository字段是图表存储库的完整 URL。请注意,您还必须使用helm repo add在本地添加该存储库。
  • 您可以使用 repo 的名称而不是 URL
$ helm repo add fantastic-charts https://fantastic-charts.storage.googleapis.com
dependencies:
  - name: awesomeness
    version: 1.0.0
    repository: "@fantastic-charts"

一旦你定义了依赖,你可以运行helm dependency update它,它会使用你的依赖文件为你下载所有指定的图表到你的charts/目录中。

$ helm dep up foochart
Hang tight while we grab the latest from your chart repositories...
...Successfully got an update from the "local" chart repository
...Successfully got an update from the "stable" chart repository
...Successfully got an update from the "example" chart repository
...Successfully got an update from the "another" chart repository
Update Complete. Happy Helming!
Saving 2 charts
Downloading apache from repo https://example.com/charts
Downloading mysql from repo https://another.example.com/charts

检索图表时helm dependency update,会将其作为图表存档存储在charts/目录中。因此,对于上面的示例,人们希望在图表目录中看到以下文件:

charts/
  apache-1.2.3.tgz
  mysql-3.2.1.tgz

7. Alias field in dependencies

除了上面的其他字段之外,每个需求条目都可能包含可选字段alias

为依赖关系图表添加别名会将图表放入依赖关系中,使用别名作为新依赖关系的名称。

可以alias在他们需要访问具有其他名称的图表的情况下使用。

# parentchart/Chart.yaml
dependencies:
  - name: subchart
    repository: http://localhost:10191
    version: 0.1.0
    alias: new-subchart-1
  - name: subchart
    repository: http://localhost:10191
    version: 0.1.0
    alias: new-subchart-2
  - name: subchart
    repository: http://localhost:10191
    version: 0.1.0

在上面的示例中,我们将获得 3 个依赖项parentchart

subchart
new-subchart-1
new-subchart-2

实现此目的的手动方法是在charts/目录中多次复制/粘贴相同的图表,但名称不同。

8. 依赖项中的标签和条件字段

除了上述其他字段外,每个需求条目都可能包含可选字段tags和condition.


默认加载所有图表。如果tags或condition字段存在,它们将被评估并用于控制它们应用到的图表的加载。


条件 - 条件字段包含一个或多个 YAML 路径(以逗号分隔)。如果此路径存在于顶级父级的值中并解析为布尔值,则将根据该布尔值启用或禁用图表。仅评估列表中找到的第一个有效路径,如果不存在路径,则条件无效。


标签 - 标签字段是与此图表关联的标签的 YAML 列表。在顶部父级的值中,所有带有标签的图表都可以通过指定标签和布尔值来启用或禁用。

# parentchart/Chart.yaml
dependencies:
  - name: subchart1
    repository: http://localhost:10191
    version: 0.1.0
    condition: subchart1.enabled, global.subchart1.enabled
    tags:
      - front-end
      - subchart1
  - name: subchart2
    repository: http://localhost:10191
    version: 0.1.0
    condition: subchart2.enabled,global.subchart2.enabled
    tags:
      - back-end
      - subchart2
# parentchart/values.yaml
subchart1:
  enabled: true
tags:
  front-end: false
  back-end: true

在上面的示例中,所有带有标签的图表front-end都将被禁用,但由于subchart1.enabled路径在父值中的计算结果为“真”,因此条件将覆盖front-end标签并subchart1启用。


由于subchart2被标记back-end并且该标记评估为true,subchart2将被启用。另请注意,虽然subchart2指定了条件,但父值中没有对应的路径和值,因此条件无效。


使用带有标签和条件的 CLI

  • --set可以像往常一样使用该参数来更改标签和条件值。
helm install --set tags.front-end=true --set subchart2.enabled=false

标签和条件解析

  • 条件(当在值中设置时)总是覆盖标签。存在的第一个条件路径获胜,该图表的后续条件路径将被忽略。
  • 标签被评估为“如果图表的任何标签为真,则启用图表”。
  • 标签和条件值必须设置在最高父级的值中。
  • values 中的tags:键必须是顶级键。tags:当前不支持全局和嵌套表。
相关实践学习
容器服务Serverless版ACK Serverless 快速入门:在线魔方应用部署和监控
通过本实验,您将了解到容器服务Serverless版ACK Serverless 的基本产品能力,即可以实现快速部署一个在线魔方应用,并借助阿里云容器服务成熟的产品生态,实现在线应用的企业级监控,提升应用稳定性。
云原生实践公开课
课程大纲 开篇:如何学习并实践云原生技术 基础篇: 5 步上手 Kubernetes 进阶篇:生产环境下的 K8s 实践 相关的阿里云产品:容器服务&nbsp;ACK 容器服务&nbsp;Kubernetes&nbsp;版(简称&nbsp;ACK)提供高性能可伸缩的容器应用管理能力,支持企业级容器化应用的全生命周期管理。整合阿里云虚拟化、存储、网络和安全能力,打造云端最佳容器化应用运行环境。 了解产品详情:&nbsp;https://www.aliyun.com/product/kubernetes
相关文章
|
8月前
|
关系型数据库 MySQL Perl
入门Helm(2)
入门Helm(2)
45 2
|
9月前
|
存储 Kubernetes 容器
入门Helm
入门Helm
209 2
|
9月前
|
Kubernetes 关系型数据库 容器
Helm入门
Helm入门
208 0
|
9月前
|
机器学习/深度学习 前端开发 数据可视化
Streamlit 入门教程:构建一个Dashboard
Streamlit 是一个用于创建数据科学和机器学习应用程序的开源 Python 库。它的主要目标是使开发人员能够以简单的方式快速构建交互式的数据应用,而无需过多的前端开发经验。Streamlit 提供了一种简单的方法来转换数据脚本或分析代码为具有可视化界面的应用程序,这些应用程序可以通过网络浏览器访问。
379 2
|
域名解析 Kubernetes JavaScript
如何开发一个完整的Helm charts应用实例(1)
如何开发一个完整的Helm charts应用实例(1)
如何开发一个完整的Helm charts应用实例(1)
|
10月前
|
存储 Kubernetes 监控
Helm Dashboard GUI 工具解析
Hello folks,今天我们介绍一下由 Komodor 推出的开源项目 Helm-Dashboard。也是继 ValidKube 之后的第二个开源项目。
117 0
|
存储 Kubernetes Go
helm chart编写入门
helm chart编写入门
1877 0
|
存储 Kubernetes 关系型数据库
helm charts 入门指南(2)
helm charts 入门指南(2)
|
存储 Kubernetes Linux
如何开发一个完整的Helm charts应用实例(2)
如何开发一个完整的Helm charts应用实例(2)
如何开发一个完整的Helm charts应用实例(2)
|
存储 Kubernetes 算法
helm v3.8.0 命令入门指南
helm v3.8.0 命令入门指南