使用 github 打造自己的 helm 仓库
云原生 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 仓库
- 通过某一目录配置项目
- 通过特定的分支配置项目
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