手動建 Helm Chart 太累了?
管理 Kubernetes 應用時,如果涉及的資源物件比較多(Deployment、Service、ConfigMap、RBAC……),通常會用 Helm Chart 來統一管理。但從零開始建一個 Chart,把每個 YAML 檔改成 Go template 格式、抽出 values、維護 _helpers.tpl——說實話非常繁瑣。
Helmify 這個小工具可以自動完成這件事:它從標準輸入讀取 K8s 資源定義,直接輸出一個完整的 Helm Chart 目錄結構。
Helmify 支援的資源類型
| 資源類型 | 支援 |
|---|---|
| Deployment / DaemonSet | 是 |
| Service / Ingress | 是 |
| PersistentVolumeClaim | 是 |
| ConfigMap / Secret | 是 |
| ServiceAccount / Role / RoleBinding / ClusterRole / ClusterRoleBinding | 是 |
| Webhook 相關(Certificate, Issuer, ValidatingWebhookConfiguration) | 是 |
| CRD | 是 |
安裝
需要 Helm >= v3.6.0。
# 下載二進制檔(以 Linux x86_64 為例)
wget https://github.com/arttor/helmify/releases/download/v0.3.22/helmify_0.3.22_Linux_64-bit.tar.gz
tar -zxvf helmify_0.3.22_Linux_64-bit.tar.gz
chmod +x helmify
mv helmify /usr/local/bin/
# 驗證
helmify -version
用法一:從 YAML 檔轉成 Helm Chart
假設你有一個 dashboard 的 ServiceAccount + ClusterRoleBinding YAML:
apiVersion: v1
kind: ServiceAccount
metadata:
name: admin-user
namespace: kubernetes-dashboard
---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
name: admin-user
roleRef:
apiGroup: rbac.authorization.k8s.io
kind: ClusterRole
name: cluster-admin
subjects:
- kind: ServiceAccount
name: admin-user
namespace: kubernetes-dashboard
一行指令轉換:
cat dashboard-adminuser.yaml | helmify mychart
生成的目錄結構:
mychart/
├── Chart.yaml
├── templates/
│ ├── admin-user-rbac.yaml
│ ├── deployment.yaml
│ └── _helpers.tpl
└── values.yaml
用 helm template 驗證輸出:
helm template ./mychart
你會看到 helmify 自動做了幾件事:
- 資源名稱加上了 release name 前綴(
release-name-mychart-admin-user) - 自動加上標準的 Helm label(chart、name、instance、version、managed-by)
- namespace 和其他可變值被抽到 values.yaml
從整個目錄批次轉換
如果有一堆 YAML 散落在某個目錄:
awk 'FNR==1 && NR!=1 {print "---"}{print}' /path/to/yamls/*.yaml | helmify mychart
用法二:從 kustomize 輸出轉成 Helm Chart
很多專案用 kustomize 管理設定,但你可能想要 Helm Chart 的彈性。helmify 可以直接銜接 kustomize 的輸出。
簡單範例:ConfigMap
# kustomization.yaml
namespace: my-namespace
namePrefix: dev-
nameSuffix: "-001"
commonLabels:
app: my-app
configMapGenerator:
- name: example-configmap
literals:
- FOO=Bar
kustomize build ./ | helmify mychart
進階範例:Deployment + ConfigMap
# 用 -v 看詳細過程,-vv 看 debug 級別
kubectl kustomize ./ | helmify -v nginx-web
輸出的 Chart 結構:
nginx-web/
├── Chart.yaml
├── templates/
│ ├── deployment.yaml
│ ├── example-configmap.yaml
│ └── _helpers.tpl
└── values.yaml
helmify 會自動把 Deployment 中引用的 ConfigMap 名稱替換成帶有 release name 的模板變數,確保整個 Chart 內部的參照是一致的。
helmify 的實用價值
從我的使用經驗來看,helmify 最適合這些場景:
- 快速起步:已有一堆 YAML,想遷移到 Helm 管理,helmify 產出的 Chart 可以當起點,再手動微調
- kustomize → Helm 遷移:團隊決定從 kustomize 換到 Helm,helmify 省掉大量機械式的改寫工作
- 學習 Helm template:看看 helmify 把你的 YAML 轉成什麼樣的 template,是理解 Helm 模板化的好方式
不過要注意,自動產出的 Chart 不一定完美:
- values.yaml 中的變數命名可能不夠直覺,需要手動調整
- 複雜的條件邏輯(例如「某個元件要不要裝」)需要自己加 if/else
- 建議把 helmify 的輸出當成草稿,而非最終成品

發佈留言