暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

搭建Helm仓库

铁花盆的小世界 2021-06-21
5195

出了渔归城的西门,往北再走一里之地,便是冷冷清清的余家村了,天空中飘着濛濛细雨,一个小女孩头扎红绳,一身青衣,约莫八九岁的年纪,一蹦一跳的走了过来,天真烂漫,甚是可爱,我仔细一看,正是小艾。

我喊住小艾,给她看我写的上一篇文章《使用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.com
        jared@vbox:~/my-helm-repo$ ls
        hellok8s-0.1.0.tgz index.yaml
        jared@vbox:~/my-helm-repo$ cat index.yaml
        apiVersion: v1
        entries:
        hellok8s:
        - apiVersion: v2
        appVersion: v4
        created: "2020-04-19T09:53:54.197456268+08:00"
        description: A Helm chart for Kubernetes
        digest: 123484f5ab5950e21c7102e178d4bc61e13aee1ee04c9977f93f7ce22da4676c
        name: hellok8s
        type: application
        urls:
        - http://tiehuapen-charts.oss-cn-beijing.aliyuncs.com/hellok8s-0.1.0.tgz
        version: 0.1.0
        generated: "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 repositories


          jared@vbox:~$ helm repo list
          NAME URL
          stable https://kubernetes-charts.storage.googleapis.com/
          bitnami https://charts.bitnami.com/bitnami
          tiehuapen http://tiehuapen-charts.oss-cn-beijing.aliyuncs.com


          jared@vbox:~$ helm search repo hellok8s
          NAME CHART VERSION APP VERSION DESCRIPTION
          tiehuapen/hellok8s 0.1.0 v4 A Helm chart for Kubernetes

          我们可以用 helm install 命令将hellok8s图表部署到k8s,如下所示:

            jared@vbox:~$ helm install hellok8s tiehuapen/hellok8s -n demo
            NAME: hellok8s
            LAST DEPLOYED: Sun Apr 19 11:57:00 2020
            NAMESPACE: demo
            STATUS: deployed
            REVISION: 1
            NOTES:
            1. Get the application URL by running these commands:
            http://hellok8s.local/


            jared@vbox:~$ kubectl get all -n demo
            NAME READY STATUS RESTARTS AGE
            pod/hellok8s-67f4f49fb9-5zg66 1/1 Running 0 15s
            pod/hellok8s-67f4f49fb9-j4zpf 1/1 Running 0 15s


            NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
            service/hellok8s NodePort 10.97.174.117 <none> 80:30412/TCP 15s


            NAME READY UP-TO-DATE AVAILABLE AGE
            deployment.apps/hellok8s 2/2 2 2 15s


            NAME DESIRED CURRENT READY AGE
            replicaset.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$ ls
              hellok8s-0.1.0.tgz index.yaml rabbitmq-6.18.1.tgz
              jared@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 update
                Hang tight while we grab the latest from your chart repositories...
                ...Successfully got an update from the "tiehuapen" chart repository


                jared@vbox:~$ helm search repo tiehuapen
                NAME CHART VERSION APP VERSION DESCRIPTION
                tiehuapen/hellok8s 0.1.0 v4 A Helm chart for Kubernetes
                tiehuapen/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



                  文章转载自铁花盆的小世界,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

                  评论