chart repo是一個可用來存儲index.yaml與打包的chart文件的HTTP server。當要分享chart時,需要上傳chart文件到chart倉庫,任何一個能夠提供yaml與tar文件的HTTP server都可以當作chart倉庫,比如自己的web服務器。官方的chart倉庫由kubernetes Charts維護,helm允許我們創建私有的chart倉庫。
一個chart倉庫由一個chart包與index.yaml文件組成,index.yaml記錄了chart倉庫中全部chart的索引,一個本地chart倉庫的布局例子如下:
apiVersion: v1 entries: test-chart: - apiVersion: v1 appVersion: "1.0" created: "2019-07-29T15:15:25.7848643+08:00" description: A Helm chart for Kubernetes digest: 5e3215c970b7e9ca58522104bce7fe107a891cca3363af174fda7c7d69ae042a name: test-chart urls: - http://127.0.0.1:8879/test-chart-0.1.0.tgz version: 0.1.0 test-chart2: - apiVersion: v1 appVersion: "1.0" created: "2019-07-29T15:19:25.9210099+08:00" description: A Helm chart for Kubernetes digest: sha256:e33bab5a2be0738e2fbe9800348d2d250d63938d223c9e3d29a8e5b12f23f4a3 name: test-chart2 urls: - http://127.0.0.1:8879/charts/test-chart2-0.1.0.tgz version: 0.1.0 generated: "2019-07-29T15:15:25.7827829+08:00"
~\.helm\repository\local\index.yaml文件中記錄了chart的各種信息,例如:名稱、版本、url等。
1. 創建一個helm
$ helm create test-chart
Creating test-chart
2. 目錄結構如下
├─test-chart
├── charts
├── Chart.yaml
├── templates
│ ├── deployment.yaml
│ ├── _helpers.tpl
│ ├── NOTES.txt
│ └── service.yaml
└── values.yaml
3. 編輯values文件
replicaCount: 1 image: repository: daemonza/test tag: latest pullPolicy: IfNotPresent service: name: test type: ClusterIP internalport: 80 externalPort: 80 resources: limits: cpu: 100m memory: 128Mi requests: cpu: 100m memory: 128Mi
3. 到test-chart目錄下,對Chart進行校驗
$ helm lint ==> Linting . [INFO] Chart.yaml: icon is recommended [ERROR] templates/: render error in "test-chart/templates/NOTES.txt": template: test-chart/templates/NOTES.txt:2:14: executing "test-chart/templates/NOTES.txt" at <.Values.ingress.enabled>: nil pointer evaluating interface {}.enabled Error: 1 chart(s) linted, 1 chart(s) failed
根據提示進行修改,直到校驗成功,會出現如下輸出
$ helm lint ==> Linting . [INFO] Chart.yaml: icon is recommended 1 chart(s) linted, no failures
4. 退出test-chart目錄,對Chart進行打包
(根據輸出可以看到Chart被打包成了一個壓縮包:test-chart-0.1.0.tgz,同時被save到了helm的本地倉儲中)
$ helm package test-chart --debug Successfully packaged chart and saved it to: D:\zhuojian-projects\rubik-T\health-doc\詳細設計\helm\test-chart-0.1.0.tgz [debug] Successfully saved D:\zhuojian-projects\rubik-T\health-doc\詳細設計\helm\test-chart-0.1.0.tgz to C:\Users\YFZX-MY-1715\.helm\repository\local
5. 此時,repository目錄中的Chart已經被helm進行管理,使用命令可以找到生成的Chart包
$ helm search test NAME CHART VERSION APP VERSION DESCRIPTION local/test-chart 0.1.0 1.0 A Helm chart for Kubernetes
6. 本地啟動一個repository server
如果使用helm search test發現找不到生成的Chart包,可以在本地啟動一個repository server,並將其加入到helm repo列表中
$ helm serve& Now serving you on 127.0.0.1:8879
將本地倉儲加入到helm repo列表中
$ helm repo add local http://127.0.0.1:8879 "local" has been added to your repositories
查看倉儲列表
$ helm repo list NAME URL stable https://aliacs-app-catalog.oss-cn-hangzhou.aliyuncs.com/charts/ local http://127.0.0.1:8879 incubator https://aliacs-app-catalog.oss-cn-hangzhou.aliyuncs.com/charts-incubator/
再次查找test chart包,就能夠找到了
$ helm search test NAME CHART VERSION APP VERSION DESCRIPTION local/test-chart 0.1.0 1.0 A Helm chart for Kubernetes