ARTICLE DETAIL

资讯详情

深耕商务建站与企业官网运营的一线实战洞察。

Helm Chart 最小示例深度解析:以 signtest/alpine 为例理解 Chart 结构、模板与安装流程

Helm Chart 最小示例深度解析:以 signtest/alpine 为例理解 Chart 结构、模板与安装流程 Helm Chart 最小示例深度解析以 signtest/alpine 为例理解 Chart 结构、模板与安装流程【免费下载链接】helmThe Kubernetes Package Manager项目地址: https://gitcode.com/GitHub_Trending/hel/helm导读本文以 HelmThe Kubernetes Package Manager仓库中一个专用于签名验证的最小示例 Chart——alpine为切入点完整拆解一个标准 Helm Chart 的文件骨架与工作机理。你将看到Chart.yaml元数据、values.yaml默认值、templates/模板引擎三者如何相互协作理解helm create生成的骨架长什么样并掌握helm install ./alpine这样的本地目录安装方式以及它被用作签名验证测试样本时的真实场景。一、示例 Chart 的来龙去脉helm create alpine该示例由命令helm create alpine生成这是 Helm 内置的 Chart 脚手架命令。生成器对应的实现位于 pkg/chart/v3/util/create.go它会一次性产出标准的 Chart 目录结构包括Chart.yamlChart 的元数据文件声明名称、版本、描述等values.yaml默认配置值templates/渲染 Kubernetes 资源的 Go template 文件README.mdChart 的使用说明。在本文示例中该目录被放置在 pkg/cmd/testdata/testcharts/signtest/alpine/作为signtest测试 Chart 的一个子 Chart 与签名验证样本。二、标准 Chart 骨架三个核心文件逐一拆解2.1 Chart.yaml元数据声明apiVersion: v1 description: Deploy a basic Alpine Linux pod home: https://helm.sh/helm name: alpine sources: - https://github.com/helm/helm version: 0.1.0apiVersion: v1声明 Chart API 版本对应 Helm 3 及以上的 Chart 格式v2 与 v3 的兼容逻辑可参考 pkg/chart/v3/util/compatible.godescription一句话描述 Chart 用途——部署一个基础的 Alpine Linux Podname: alpineChart 名称同时会被模板以{{.Chart.Name}}注入version: 0.1.0Chart 语义化版本模板中以{{.Chart.Version}}访问home/sources项目主页与源码地址等辅助信息。2.2 values.yaml默认值注入# The pod name name: my-alpinevalues.yaml是整个 Chart 的“默认值仓库”。模板渲染时Helm 会把命令行传入的--set/-f值与这份默认值做合并合并实现位于 pkg/chart/v3/util/expand.go。本示例只有一个顶层键name供模板引用。2.3 templates/alpine-pod.yaml模板驱动的 Pod 资源apiVersion: v1 kind: Pod metadata: name: {{.Release.Name}}-{{.Chart.Name}} labels: app.kubernetes.io/managed-by: {{.Release.Service}} chartName: {{.Chart.Name}} chartVersion: {{.Chart.Version | quote}} spec: restartPolicy: {{default Never .restart_policy}} containers: - name: waiter image: alpine:3.3 command: [/bin/sleep,9000]这份模板展示了 Helm 模板引擎的四个核心能力内置对象注入{{.Release.Name}}本次安装的 release 名、{{.Chart.Name}}、{{.Chart.Version}}、{{.Release.Service}}固定为Helm均为 Helm 预置的模板对象管道与函数{{.Chart.Version | quote}}把版本号交给quote函数加引号避免 YAML 解析歧义函数集定义于 pkg/engine/funcs.godefault 函数兜底{{default Never .restart_policy}}表示当用户未提供restart_policy值时默认使用Never用户值引用values.yaml中的值在模板中以.开头的路径引用如.restart_policy。需要说明的是虽然示例默认值是name: my-alpine但模板中并未直接引用.Values.name实际资源名称由{{.Release.Name}}-{{.Chart.Name}}拼接而成这也说明模板是 Chart 作者完全自定义的。三、如何安装这个示例 ChartREADME 给出的安装命令是helm install ./alpine注意这里安装的是 Chart 所在目录路径Helm 会通过 pkg/chart/v3/loader/load.go 加载本地目录并渲染模板。如果希望更贴近真实场景可以指定 release 名称并配合--generate-namehelm install my-release ./alpine helm install --generate-name ./alpine渲染后的资源大致为Pod 名称my-release-alpine镜像alpine:3.3容器启动后执行/bin/sleep 9000保持运行。四、示例的更深层用途签名验证测试样本alpine示例并非孤立存在。它位于signtest测试 Chart 之下同级的还有pkg/cmd/testdata/testcharts/signtest/Chart.yaml外层signtestChartpkg/cmd/testdata/testcharts/signtest/templates/pod.yaml外层模板打包产物signtest-0.1.0.tgz及其签名文件signtest-0.1.0.tgz.prov。helm verify命令正是用于校验 Chart 的 provenance来源证明文件其命令描述与--keyring参数定义在 pkg/cmd/verify.goProvenance files provide cryptographic verification that a chart has not been tampered with, and was packaged by a trusted provider.验证命令示例helm verify testdata/testcharts/signtest-0.1.0.tgz --keyring testdata/helm-test-key.pub对应测试用例位于 pkg/cmd/verify_test.go其中同时覆盖了对未签名 Chart 目录verify testdata/testcharts/signtest的校验。此外helm install、helm pull等命令也支持--verify标志走同一套校验逻辑生成签名包则使用helm package --sign实现位于 pkg/provenance/sign.go。五、从示例到实战创建并自定义你自己的 Charthelm create mychart # 生成标准骨架 cd mychart # 修改 Chart.yaml 中的 name / version / description # 按需编辑 values.yaml 与 templates/ 下的资源模板 helm lint ./mychart # 静态检查 helm package ./mychart # 打包为 mychart-0.1.0.tgz helm install mychart-0.1.0.tgz模板渲染测试可用helm template ./mychart输出渲染后的 YAML便于在不安装的情况下检查输出结果。六、小结signtest/alpine虽然只是几行文件的极简示例却完整承载了 Helm 的三层核心概念文件作用Chart.yaml描述 Chart 身份与元数据values.yaml提供可被覆盖的默认配置templates/基于 Go template 渲染 Kubernetes 资源它既是helm create生成骨架的标准形态也是helm verify签名验证流程的最小可复现样本。理解它就理解了 Helm Chart 从编写、渲染、打包到验证的完整生命周期。【免费下载链接】helmThe Kubernetes Package Manager项目地址: https://gitcode.com/GitHub_Trending/hel/helm创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表
PREV
查看更多资讯
NEXT
返回资讯列表