當我們要在 Kubernetes 上部署一個完整的專案時,往往不只是單一個 Pod 就能完成任務,而是需要 Deployment、Service、ConfigMap、Ingress、RBAC、甚至 CRD 等等元件一起協作,才能讓應用「真的能運作」。
如果每次都要自己一個一個寫 YAML、再一個一個 apply,不僅速度慢,而且容易出錯,也很難管理版本差異。於是,Helm Chart 誕生了。它把這些部署所需的 YAML 模板、參數化設定、版本控制包在一起,就像 「Kubernetes 世界的套件管理工具」。
除了「加速安裝」之外,它更重要的價值在於:
因此 Helm Chart 不只是「安裝快」,而是 讓複雜系統的部署可重現、可版本化 的核心工具。
Helm 可以想成是 Kubernetes 的套件管理工具,而 Chart 就是套件的「藍圖」。
一個 Chart 包含:
用一個比喻:
以一個最小的 Chart 為例:
mychart/
Chart.yaml # chart 基本資訊 (name, version, description)
values.yaml # 預設參數
templates/ # Kubernetes YAML 模板
deployment.yaml
service.yaml
在 values.yaml
裡定義:
replicaCount: 2
image:
repository: nginx
tag: 1.27
在 templates/deployment.yaml
裡用 Go template 語法:
...
spec:
replicas: {{ .Values.replicaCount }}
containers:
- name: nginx
image: "{{ .Values.image.repository }}:{{ .Values.image.tag }}"
Helm 會把 values.yaml
的參數套進模板,最後輸出合法的 Kubernetes manifest。
常見的操作:
CRD、Helm Chart、Addon 其實有不少共通點:它們都是為了 降低 Kubernetes 應用部署的複雜度,並且都建立在 Kubernetes 的宣告式模型之上,最終仍是透過 YAML 或 API 來維護狀態。更重要的是,三者常常會互相搭配使用,例如 CRD 透過 Helm Chart 發布,或 Addon 的底層實作就是 Helm 與 CRD。而什麼時機該選擇哪個工具,確實是很多人實務上會困惑的問題。
我們先來釐清一下三種元件的定義:
因此,假設我要部署一個 Observability 方案:
LogPipeline
資源,好讓使用者只要寫 YAML 就能描述「收集哪些 log,送去哪裡」。特性 | CRD | Helm Chart | Addon |
---|---|---|---|
用途 | 定義新 API 與資源型態 | 打包一組應用部署 | 雲端廠商托管的套件 |
使用者角色 | 開發者/平台團隊 | SRE/DevOps/使用者 | 雲平台用戶 |
維運責任 | 自行維護 | 自行維護(或搭配 GitOps) | 雲端廠商維護 |
彈性 | 高度可客製化 | 中等,取決於 Chart | 低,受限於平台 |
學習成本 | 高(要設計 API) | 中(學 Helm 基礎) | 低(按下安裝即可) |
常見案例 | ArgoCD Application, Istio CRDs | Nginx Ingress Controller, Prometheus Stack | EKS VPC CNI, EBS CSI Driver |
今天我們用不同角度看待 Helm Chart,不只是理解 Chart、Values、Release 的三角關係,也比較了 Helm Chart、CRD、Addon 的定位。
Helm Chart 解決的是「怎麼方便、可控地部署一整組元件」的問題,而不是重新定義 API。
明天開始,我們會把這些概念帶到 Argo CD,看看 GitOps 是如何利用 Helm 來完成「宣告式、可回溯、跨環境一致」的部署流程。