
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元數(shù)據(jù)、values.yaml默認值、templates/模板引擎三者如何相互協(xié)作理解helm create生成的骨架長什么樣并掌握helm install ./alpine這樣的本地目錄安裝方式以及它被用作簽名驗證測試樣本時的真實場景。一、示例 Chart 的來龍去脈helm create alpine該示例由命令helm create alpine生成這是 Helm 內置的 Chart 腳手架命令。生成器對應的實現(xiàn)位于 pkg/chart/v3/util/create.go它會一次性產(chǎn)出標準的 Chart 目錄結構包括Chart.yamlChart 的元數(shù)據(jù)文件聲明名稱、版本、描述等values.yaml默認配置值templates/渲染 Kubernetes 資源的 Go template 文件README.mdChart 的使用說明。在本文示例中該目錄被放置在 pkg/cmd/testdata/testcharts/signtest/alpine/作為signtest測試 Chart 的一個子 Chart 與簽名驗證樣本。二、標準 Chart 骨架三個核心文件逐一拆解2.1 Chart.yaml元數(shù)據(jù)聲明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值與這份默認值做合并合并實現(xiàn)位于 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 預置的模板對象管道與函數(shù){{.Chart.Version | quote}}把版本號交給quote函數(shù)加引號避免 YAML 解析歧義函數(shù)集定義于 pkg/engine/funcs.godefault 函數(shù)兜底{{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容器啟動后執(zhí)行/bin/sleep 9000保持運行。四、示例的更深層用途簽名驗證測試樣本alpine示例并非孤立存在。它位于signtest測試 Chart 之下同級的還有pkg/cmd/testdata/testcharts/signtest/Chart.yaml外層signtestChartpkg/cmd/testdata/testcharts/signtest/templates/pod.yaml外層模板打包產(chǎn)物signtest-0.1.0.tgz及其簽名文件signtest-0.1.0.tgz.prov。helm verify命令正是用于校驗 Chart 的 provenance來源證明文件其命令描述與--keyring參數(shù)定義在 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實現(xiàn)位于 pkg/provenance/sign.go。五、從示例到實戰(zhàn)創(chuàng)建并自定義你自己的 Charthelm create mychart # 生成標準骨架 cd mychart # 修改 Chart.yaml 中的 name / version / description # 按需編輯 values.yaml 與 templates/ 下的資源模板 helm lint ./mychart # 靜態(tài)檢查 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 身份與元數(shù)據(jù)values.yaml提供可被覆蓋的默認配置templates/基于 Go template 渲染 Kubernetes 資源它既是helm create生成骨架的標準形態(tài)也是helm verify簽名驗證流程的最小可復現(xiàn)樣本。理解它就理解了 Helm Chart 從編寫、渲染、打包到驗證的完整生命周期?!久赓M下載鏈接】helmThe Kubernetes Package Manager項目地址: https://gitcode.com/GitHub_Trending/hel/helm創(chuàng)作聲明:本文部分內容由AI輔助生成(AIGC),僅供參考