云原生 k8s 的用户,经常会在某个开源软件的基础上封装成 helm chart 部署到 k8s。只是一个人本地开发,可以完全使用本地的模式,如:helm install my-app ../custom-charts/my-app
更进一步,多台设备,或者多人协作的情况下,就需要一个远程的 helm 仓库,保存自己自定义的各种 chart。

低成本(最好免费)的远程仓库,可选的也有很多,如 腾讯 coding。但,最合适的,还是莫过于 github。通过 Github Action 可以更好的做到自动化。

本文就介绍如何使用 github 打造自己的 helm chart 仓库。

主要原理

  • GitHub 提供两种静态 web 页面,可以利用这个能力,打造自己的 helm chart 仓库
    1. 通过某一目录配置项目
    2. 通过特定的分支配置项目
  • Github Action 监听代码的提交,自动打包成 helm chart,发布到 Release,实现 .tar.gz 包的下载
  • 遵守 Helm 仓库的协议,生成 helm index.yaml 文件

步骤

创建 charts 仓库

创建公开仓库,仓库命名不限定。

创建的 gh-pages 分支

git checkout -b gh-pages

设置 Page

Source 选择 Deploy from a branch。分支选择刚刚创建的 gh-pages,路径为 /(root)

提交仓库代码

结构路径如下,charts 文件夹统一存放多个 chart

❯ tree -L 2
.
├── LICENSE
├── README.md
├── README_zh-CN.md
└── charts
    ├── blinko
    ├── grafana-stack
    ├── keycloak
    ├── my-traefik
    └── umami

Github Action workflow 的编写

参考 helm 官方给的文档:https://helm.sh/zh/docs/howto/chart_releaser_action/

对于有子 chart 的情况,还需要新增一个 job:

- name: Update Helm Dependencies
        run: |
          helm repo add traefik https://traefik.github.io/charts
          helm repo add jetstack https://charts.jetstack.io

          for dir in $(ls -d charts/*); do
            helm dependency update $dir;
          done

提交代码 触发 Action

效果

效果如 Traefik 的 github 仓库:https://traefik.github.io/charts

就可以通过 helm repo add 使用仓库了。

helm repo add phantom-lab https://phantommaa.github.io/charts
helm repo update