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 epositorylocalindex.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 ubik-Thealth-doc详细设计helm est-chart-0.1.0.tgz [debug] Successfully saved D:zhuojian-projects ubik-Thealth-doc详细设计helm est-chart-0.1.0.tgz to C:UsersYFZX-MY-1715.helm epositorylocal
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