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
- 更新所有图表仓库时:
$ helm repo update
-
更新依赖时(使用
--skip - refresh标志可禁用):
$ helm dependency update
-
从锁定文件构建依赖时(使用
--skip - refresh标志可禁用):
$ helm dependency build
-
使用
--dependency - update标志安装带有依赖的本地图表时:
$ helm install myapp . --dependency-update
3.
index.yaml
缓存版本的使用场景
一旦
index.yaml
被下载,它将存储在本地缓存中,并在你引用与仓库关联的唯一名称(例如 “myrepo”)时使用。Helm 在以下五种情况下会使用本地缓存的仓库索引:
1. 从仓库拉取图表时:
helm pull myrepo/mychart
- 从仓库安装图表时:
helm install myapp myrepo/mychart
- 基于仓库中的图表升级版本时:
helm upgrade myapp myrepo/mychart
- 搜索要使用的图表时:
helm search repo myrepo/
-
使用
--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
- 从仓库安装图表时:
helm install myapp myrepo/mychart
- 基于仓库中的图表升级版本时:
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
-
使用
--verify标志从仓库安装图表时:
helm install myapp myrepo/mychart --verify
-
使用
--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
-
客户端证书配置
:
- 生成客户端证书和私钥。
-
在
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 图表仓库,提高应用部署的效率和安全性。
超级会员免费看
914

被折叠的 条评论
为什么被折叠?



