18、Helm Chart 仓库 API 详解

Helm Chart 仓库 API 详解

在云原生生态系统中,Helm 作为 Kubernetes 的包管理工具,为应用的部署和管理提供了极大的便利。本文将详细介绍 Helm 中与图表仓库相关的重要组成部分,包括 index.yaml 文件、 .tgz 文件和 .prov 文件的格式、下载场景以及使用方法。

1. index.yaml 文件格式

index.yaml 文件是 Helm 图表仓库的核心索引文件,它记录了仓库中所有可用图表的元数据信息。以下是一个简单的 index.yaml 文件示例:

apiVersion: v1 
entries: 
  superapp:
  - apiVersion: v2
    appVersion: 1.16.0
    created: "2020-04-28T10:12:22.507943-05:00" 
    description: A Helm chart for Kubernetes
    digest: 46f9ddeca12ec0bc257a702dac7d069af018aed2a87314d86b230454ac033672 
    name: superapp
    type: application
    urls: 
    - superapp-0.1.0.tgz
    version: 0.1.0
generated: "2020-04-28T11:34:26.779758-05:00" 

这个文件包含了以下关键信息:
- apiVersion :仓库 API 版本,必须为 v1
- entries :一个映射,将仓库中唯一的图表名称映射到所有可用版本的列表。
- created :使用 helm package 创建图表压缩包的时间戳。
- digest :图表压缩包的 SHA - 256 摘要。
- urls :图表可以下载的 URL 列表。这些 URL 可以是绝对的,甚至可以托管在不同的域名上。如果提供相对路径,则相对于 index.yaml 文件。通常每个图表版本只提供一个 URL 条目,但也可以提供多个,Helm 会尝试下载列表中的下一个条目,如果前一个无法访问。
- generated :此 index.yaml 文件生成的时间戳,采用 RFC 3339 格式。

除了 created digest urls 字段外,每个单独图表版本的所有字段都由图表 API 定义(如 name version 等)。

2. index.yaml 文件的下载场景

Helm 在以下五种情况下会下载或重新下载仓库索引:
1. 初始添加图表仓库时:

$ helm repo add myrepo https://charts.example.com
  1. 更新所有图表仓库时:
$ helm repo update
  1. 更新依赖时(使用 --skip - refresh 标志可禁用):
$ helm dependency update
  1. 从锁定文件构建依赖时(使用 --skip - refresh 标志可禁用):
$ helm dependency build
  1. 使用 --dependency - update 标志安装带有依赖的本地图表时:
$ helm install myapp . --dependency-update
3. index.yaml 缓存版本的使用场景

一旦 index.yaml 被下载,它将存储在本地缓存中,并在你引用与仓库关联的唯一名称(例如 “myrepo”)时使用。Helm 在以下五种情况下会使用本地缓存的仓库索引:
1. 从仓库拉取图表时:

helm pull myrepo/mychart
  1. 从仓库安装图表时:
helm install myapp myrepo/mychart
  1. 基于仓库中的图表升级版本时:
helm upgrade myapp myrepo/mychart
  1. 搜索要使用的图表时:
helm search repo myrepo/
  1. 使用 --skip - refresh 标志更新依赖(并且依赖包含别名子字段,如 @myrepo )时:
helm dependency update --skip-refresh
4. .tgz 文件

仓库中的 .tgz 文件表示单个图表版本,以压缩包的形式打包。这些文件的 URL 路径没有要求,只要它们在仓库中托管,并且在 Helm 请求时可以下载即可。响应的状态码必须为 200 OK,响应体应该是 .tgz 文件的二进制内容。

5. .tgz 文件的下载场景

Helm 在以下三种情况下会下载图表包 .tgz 文件:
1. 从仓库拉取图表时:

helm pull myrepo/mychart
  1. 从仓库安装图表时:
helm install myapp myrepo/mychart
  1. 基于仓库中的图表升级版本时:
helm upgrade myapp myrepo/mychart
6. .prov 文件

仓库中的 .prov 文件表示图表版本签名文件,使用 GNU Privacy Guard 签名。这些文件是可选的,用于验证目的。与 .tgz 文件不同, .prov 文件有唯一的 URL 路径要求。它们必须在关联的 .tgz 文件路径后加上 .prov 才能访问。例如,如果 .tgz 文件位于 https://charts.example.com/superapp - 0.1.0.tgz ,则 .prov 文件必须位于 https://charts.example.com/superapp - 0.1.0.tgz.prov 。响应的状态码必须为 200 OK,响应体应该是 .prov 文件的二进制内容。

7. .prov 文件的下载场景

Helm 在以下三种情况下会下载图表签名 .prov 文件:
1. 使用 --verify 标志从仓库拉取图表时:

helm pull myrepo/mychart --verify
  1. 使用 --verify 标志从仓库安装图表时:
helm install myapp myrepo/mychart --verify
  1. 使用 --verify 标志基于仓库中的图表升级版本时:
helm upgrade myapp myrepo/mychart --verify
8. 总结

通过上述内容,我们详细了解了 Helm 图表仓库中 index.yaml .tgz .prov 文件的格式、下载场景以及使用方法。这些文件在 Helm 的使用过程中起着至关重要的作用,合理利用它们可以提高图表管理和部署的效率。以下是一个简单的流程图,展示了 Helm 下载不同文件的场景:

graph LR
    classDef startend fill:#F5EBFF,stroke:#BE8FED,stroke-width:2px;
    classDef process fill:#E5F6FF,stroke:#73A6FF,stroke-width:2px;

    A([开始]):::startend --> B{操作类型}:::process
    B -->|添加/更新仓库| C(index.yaml 下载):::process
    B -->|拉取/安装/升级图表| D{是否有 --verify 标志}:::process
    D -->|是| E(.prov 文件下载):::process
    D -->|否| F(.tgz 文件下载):::process
    C --> G([结束]):::startend
    E --> G
    F --> G

同时,为了更清晰地展示不同文件的下载场景,我们可以使用表格进行总结:
| 文件类型 | 下载场景 | 命令示例 |
| ---- | ---- | ---- |
| index.yaml | 初始添加图表仓库、更新所有图表仓库、更新依赖、从锁定文件构建依赖、安装带有依赖的本地图表 | helm repo add helm repo update helm dependency update helm dependency build helm install --dependency - update |
| .tgz | 从仓库拉取图表、从仓库安装图表、基于仓库中的图表升级版本 | helm pull helm install helm upgrade |
| .prov | 使用 --verify 标志从仓库拉取图表、使用 --verify 标志从仓库安装图表、使用 --verify 标志基于仓库中的图表升级版本 | helm pull --verify helm install --verify helm upgrade --verify |

通过这些信息,你可以更好地理解和使用 Helm 图表仓库,确保图表的安全、高效部署。

Helm Chart 仓库 API 详解(续)

9. 图表仓库的安全与配置

图表仓库的安全和配置是确保 Helm 稳定运行的重要环节。以下是一些常见的安全和配置措施:
- 基本认证(Basic Auth) :在图表仓库和 Docker 本地注册表中,可以使用基本认证来控制访问。例如,在图表仓库中配置基本认证,需要在仓库的配置中设置用户名和密码。
- 客户端证书 :使用客户端证书可以增强仓库的安全性。在配置时,需要提供客户端证书和私钥,以进行身份验证。
- 相互 TLS 认证(mTLS) :mTLS 可以提供更高级别的安全保护,要求客户端和服务器都进行身份验证。

以下是一些常见的安全配置操作步骤:
1. 基本认证配置
- 在仓库配置文件中添加用户名和密码信息。
- 使用 helm repo add 命令添加仓库时,指定认证信息。

$ helm repo add myrepo https://charts.example.com --username myuser --password mypassword
  1. 客户端证书配置
    • 生成客户端证书和私钥。
    • helm repo add 命令中指定证书和私钥的路径。
$ helm repo add myrepo https://charts.example.com --cert-file /path/to/cert.pem --key-file /path/to/key.pem
10. 图表的安装与升级

图表的安装和升级是 Helm 的核心功能之一。以下是一些关键的操作和注意事项:
- 安装图表 :使用 helm install 命令可以安装图表。在安装过程中,可以使用各种标志来控制安装行为,如 atomic 标志确保安装的原子性, generate - name 标志自动生成名称等。

$ helm install myapp myrepo/mychart --atomic --generate-name
  • 升级图表 :使用 helm upgrade 命令可以升级已安装的图表。在升级时,可以更新配置,确保应用的最新版本部署。
$ helm upgrade myapp myrepo/mychart --set key=value

图表安装和升级的流程如下:

graph LR
    classDef startend fill:#F5EBFF,stroke:#BE8FED,stroke-width:2px;
    classDef process fill:#E5F6FF,stroke:#73A6FF,stroke-width:2px;

    A([开始]):::startend --> B{操作类型}:::process
    B -->|安装图表| C(选择图表和版本):::process
    B -->|升级图表| D(选择要升级的版本):::process
    C --> E(配置参数):::process
    D --> E
    E --> F(执行安装/升级命令):::process
    F --> G([结束]):::startend
11. 图表的依赖管理

图表的依赖管理是 Helm 的重要特性之一。通过 Chart.yaml 文件可以定义图表的依赖关系,使用 helm dependency 命令可以管理这些依赖。
- 定义依赖 :在 Chart.yaml 文件中,可以使用 dependencies 字段定义依赖。例如:

dependencies:
  - name: mydependency
    version: "1.0.0"
    repository: "https://charts.example.com"
  • 管理依赖 :使用 helm dependency update 命令可以更新依赖, helm dependency build 命令可以从锁定文件构建依赖。
$ helm dependency update
$ helm dependency build

依赖管理的步骤总结如下:
1. 在 Chart.yaml 文件中定义依赖。
2. 使用 helm dependency update 命令更新依赖。
3. 如果有锁定文件,使用 helm dependency build 命令从锁定文件构建依赖。

12. 图表的测试与验证

为了确保图表的质量和安全性,需要进行测试和验证。
- 测试图表 :使用 helm test 命令可以对已安装的图表进行测试。测试脚本可以在图表中定义,用于验证应用的功能。

$ helm test myapp
  • 验证图表 :使用 helm verify 命令可以验证图表的完整性和签名。需要提供公钥来进行验证。
$ helm verify myrepo/mychart --keyring /path/to/keyring.gpg

测试和验证的流程如下:

graph LR
    classDef startend fill:#F5EBFF,stroke:#BE8FED,stroke-width:2px;
    classDef process fill:#E5F6FF,stroke:#73A6FF,stroke-width:2px;

    A([开始]):::startend --> B{操作类型}:::process
    B -->|测试图表| C(选择要测试的版本):::process
    B -->|验证图表| D(选择要验证的版本):::process
    C --> E(执行测试命令):::process
    D --> F(提供公钥进行验证):::process
    E --> G([结束]):::startend
    F --> G
13. 总结与建议

通过对 Helm 图表仓库 API 的详细介绍,我们了解了 index.yaml .tgz .prov 文件的格式、下载场景,以及图表的安装、升级、依赖管理、测试和验证等方面的知识。以下是一些总结和建议:
- 合理使用缓存 index.yaml 的缓存版本可以提高操作效率,在不需要更新索引时,尽量使用缓存版本。
- 加强安全配置 :采取基本认证、客户端证书等安全措施,确保仓库的安全性。
- 严格依赖管理 :在 Chart.yaml 中准确定义依赖关系,并定期更新依赖,确保应用的稳定性。
- 定期测试验证 :定期对图表进行测试和验证,确保图表的质量和安全性。

以下是一个表格总结不同操作的关键命令:
| 操作类型 | 关键命令 |
| ---- | ---- |
| 仓库操作 | helm repo add helm repo update |
| 依赖管理 | helm dependency update helm dependency build |
| 图表安装 | helm install |
| 图表升级 | helm upgrade |
| 图表测试 | helm test |
| 图表验证 | helm verify |

通过遵循这些建议,你可以更好地管理和使用 Helm 图表仓库,提高应用部署的效率和安全性。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值