
出了渔归城的西门,往北再走一里之地,便是冷冷清清的余家村了,天空中飘着濛濛细雨,一个小女孩头扎红绳,一身青衣,约莫八九岁的年纪,一蹦一跳的走了过来,天真烂漫,甚是可爱,我仔细一看,正是小艾。
我喊住小艾,给她看我写的上一篇文章《使用Helm部署应用到Kubernetes》,她饶有兴趣的看完,然后问道:“鹿族的helm果真不错,不过我若开发了个helm图表,如何分享给我的小伙伴?甚至是落星之地的陌生人呢?难道没个仓库之地,任人自取吗?”
我心中一惊,心道:这丫头果真颇有悟性,如何分享真乃重要之事,Docker有镜像库,不知Helm是否有类似之库呢?
我拉着她的小手,坐在村东头的稻草堆下,从怀里掏出鹿族小郡主给的鹿族黄阶 helm 技法,展开和她一起查阅,看到后面,赫然正是搭建Helm仓库及分享Helm图表之法。

搭建Helm仓库
Helm仓库可以是任何一个HTTP服务器,只要它能支持yaml和tar格式文件访问,并且可以处理GET请求即可。所以在搭建自己的Helm图表仓库时,有很多选项,例如阿里云OSS bucket、Google Cloud Storage bucket、Amazon S3 bucket、GitHub页面,也可以创建自己的web服务器。
采用公有云上的对象存储bucket,是比较方便的选择,以阿里云OSS bucket为例,登录阿里云控制台进入对象存储OSS服务,创建一个bucket,并把bucket的读写权限设置为公共读,其余都采用默认配置即可。

可以看出,该bucket的访问URL为 http://tiehuapen-charts.oss-cn-beijing.aliyuncs.com ,这将会是我们要搭建的Helm仓库的URL地址。
搭建完成了,是不是很简单。不过它现在只是个空的bucket,里面一个文件也没有,我们需要把Helm图表打包并上传到这个仓库。

打包并分享图表到仓库
在将你的图表分享到仓库之前,你要先在本地创建一个repo目录,再将helm图表打包到该repo目录,再生成repo的index.yaml文件,最后再将repo目录下的所有内容(也就是index.yaml文件和图表包文件)上传到bucket中,然后别人就可以访问使用了。
1. 创建repo目录
jared@vbox:~$ mkdir my-helm-repo
2. 将helm图表打包到repo目录
使用helm package命令打包helm图表,hellok8s为图表目录,可以使用-d指定repo目录
jared@vbox:~$ helm package hellok8s/ -d ~/my-helm-repo/Successfully packaged chart and saved it to: home/jared/my-helm-repo/hellok8s-0.1.0.tgz
3. 生成repo的index.yaml文件
使用helm repo index命令生成repo的index.yaml文件,使用--url指定repo的URL地址,该命令会将repo URL地址写入到index.yaml文件中,如下所示:
jared@vbox:~/my-helm-repo$ helm repo index . --url http://tiehuapen-charts.oss-cn-beijing.aliyuncs.comjared@vbox:~/my-helm-repo$ lshellok8s-0.1.0.tgz index.yamljared@vbox:~/my-helm-repo$ cat index.yamlapiVersion: v1entries:hellok8s:- apiVersion: v2appVersion: v4created: "2020-04-19T09:53:54.197456268+08:00"description: A Helm chart for Kubernetesdigest: 123484f5ab5950e21c7102e178d4bc61e13aee1ee04c9977f93f7ce22da4676cname: hellok8stype: applicationurls:- http://tiehuapen-charts.oss-cn-beijing.aliyuncs.com/hellok8s-0.1.0.tgzversion: 0.1.0generated: "2020-04-19T09:53:54.197004916+08:00"
4. 上传文件到bucket
登录阿里云控制台进入对象存储OSS服务,将本地repo目录下的index.yaml文件和图表包文件都上传到之前创建好的bucket中,如下所示:

当bucket中有了repo的index.yaml文件和helm图表包文件后,这个helm仓库就已经完全就绪了。

访问Helm仓库中的图表
使用helm repo add命令将你的helm仓库添加到本地客户端,然后就可以查询到hellok8s图表了。
jared@vbox:~$ helm repo add tiehuapen http://tiehuapen-charts.oss-cn-beijing.aliyuncs.com"tiehuapen" has been added to your repositoriesjared@vbox:~$ helm repo listNAME URLstable https://kubernetes-charts.storage.googleapis.com/bitnami https://charts.bitnami.com/bitnamitiehuapen http://tiehuapen-charts.oss-cn-beijing.aliyuncs.comjared@vbox:~$ helm search repo hellok8sNAME CHART VERSION APP VERSION DESCRIPTIONtiehuapen/hellok8s 0.1.0 v4 A Helm chart for Kubernetes
我们可以用 helm install 命令将hellok8s图表部署到k8s,如下所示:
jared@vbox:~$ helm install hellok8s tiehuapen/hellok8s -n demoNAME: hellok8sLAST DEPLOYED: Sun Apr 19 11:57:00 2020NAMESPACE: demoSTATUS: deployedREVISION: 1NOTES:1. Get the application URL by running these commands:http://hellok8s.local/jared@vbox:~$ kubectl get all -n demoNAME READY STATUS RESTARTS AGEpod/hellok8s-67f4f49fb9-5zg66 1/1 Running 0 15spod/hellok8s-67f4f49fb9-j4zpf 1/1 Running 0 15sNAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGEservice/hellok8s NodePort 10.97.174.117 <none> 80:30412/TCP 15sNAME READY UP-TO-DATE AVAILABLE AGEdeployment.apps/hellok8s 2/2 2 2 15sNAME DESIRED CURRENT READY AGEreplicaset.apps/hellok8s-67f4f49fb9 2 2 2 15s
可以看到hellok8s所声明的资源在k8s上成功运行,打开浏览器访问 http://hellok8s.local/ (注意要添加域名解析,开发环境直接修改hosts文件即可),应该可以成功访问了。


添加更多的图表到Helm仓库
添加更多的图表到Helm仓库,或者从Helm仓库删除图表,其实和上面的步骤类似,只需先将新增图表包文件拷贝到本地repo目录,或者将要删除的图表包从本地repo目录移除,然后重新执行 helm repo index命令生成index.yaml文件,最后将新的index.yaml文件和新增的图表包文件上传到bucket即可。
下面示例将rabbitmq添加到Helm仓库,如下所示:
## 1. 把bitnami/rabbitmq chart拉到本地指定目录并解压jared@vbox:~/helm-charts$ helm pull bitnami/rabbitmq -d . --untar## 2. 根据需要编辑rabbitmq目录下的values.yaml或templates下的文件## 3. 将定制化之后的rabbitmq打包到本地repo目录下jared@vbox:~/helm-charts$ helm package rabbitmq/ -d ~/my-helm-repo/Successfully packaged chart and saved it to: home/jared/my-helm-repo/rabbitmq-6.18.1.tgz## 4. 进入repo目录并重新生成index.yaml文件jared@vbox:~/helm-charts$ cd ~/my-helm-repo/jared@vbox:~/my-helm-repo$ lshellok8s-0.1.0.tgz index.yaml rabbitmq-6.18.1.tgzjared@vbox:~/my-helm-repo$ helm repo index . --url http://tiehuapen-charts.oss-cn-beijing.aliyuncs.com
查看新生成的index.yaml文件,可以看到rabbitmq已经包含其中了,将index.yaml和rabbitmq图表包文件上传到bucket中即可。
helm客户端访问新增的rabbitmq之前,需要update一下,然后就可以search到并安装部署了。
jared@vbox:~$ helm repo updateHang tight while we grab the latest from your chart repositories......Successfully got an update from the "tiehuapen" chart repositoryjared@vbox:~$ helm search repo tiehuapenNAME CHART VERSION APP VERSION DESCRIPTIONtiehuapen/hellok8s 0.1.0 v4 A Helm chart for Kubernetestiehuapen/rabbitmq 6.18.1 3.8.2 Open source message broker software that implem...

Helm仓库相关命令
下面列出一些和repository相关的命令,供参考使用。
## 搜索helm hub,或者搜索hub中的某一chart$ helm search hub$ helm search hub <chart>## 在本地添加helm库$ helm repo add stable https://kubernetes-charts.storage.googleapis.com## AppHub把所有 Helm 官方Hub托管的应用自动同步到国内,并自动将Charts文件中的gcr.io等有网络访问问题的 URL替换成为稳定的国内镜像URL$ helm repo add apphub https://apphub.aliyuncs.com## 搜索本地已添加的helm库中的某一chart$ helm search repo <chart>## 更新本地已添加的helm库$ helm repo update## 查看本地已添加的helm库$ helm repo list## 删除本地已添加的某一helm库$ helm repo remove <repo>## 把一个chart拉到本地指定目录下,untar决定是否解压$ helm pull <repo>/<chart> -d <dir> [--untar]## 把一个chart目录打包成tgz文件$ helm package <chart-dir> [-d <target-dir>]## 在本地生成repo的index.yaml文件,然后手工上传到repo URL路径下$ helm repo index <repo-dir> --url <repo-url>

END






