到 Day 19 為止,我們已經學了很多 Kubernetes 資源:Deployment、Service、Ingress、ConfigMap、Secret、PV / PVC、StorageClass、StatefulSet、PriorityClass、Namespace……
當一個應用越來越完整時,往往需要同時管理多個 YAML 檔案。
這會帶來幾個問題:
這時候,就可以使用 Helm。
Helm 是 Kubernetes 的套件管理工具,可以把一整組 Kubernetes 資源整理成一個套件,並透過參數化的方式管理不同環境的設定。
今天我們來學:
以下操作皆在 master 節點 執行。
| 名詞 | 說明 | 類比 |
|---|---|---|
| Chart | 一組打包好的 Kubernetes 資源模板與設定,描述一個應用需要部署哪些資源 | .deb / .rpm 安裝包 |
| Release | Chart 安裝到 Kubernetes 叢集後產生的一個實例;同一個 Chart 可以安裝多次,建立不同的 Release | 安裝後的一份應用實例 |
| Repository | 用來存放與分享 Helm Chart 的倉庫,可以是公開或私有 | apt / yum 的軟體來源 |
Helm 就像 Kubernetes 的套件管理工具:
apt install nginx → helm install my-nginx bitnami/nginx
apt upgrade nginx → helm upgrade my-nginx bitnami/nginx
apt remove nginx → helm uninstall my-nginx
/etc/apt/sources.list(軟體來源)→ helm repo add(Chart Repository).deb / .rpm 套件 → Chart
Chart 是套件,Release 是安裝後的實例,Repository 是存放套件的地方。
這次練習使用 Helm 3。
Helm 是一個 CLI 工具,可以透過官方提供的安裝 Script 進行安裝:
curl https://raw.githubusercontent.com/helm/helm/main/scripts/get-helm-3 | bash
版本提醒
Helm 4 已經推出,但本篇使用 Helm 3 進行練習;本文介紹的基本操作與核心概念仍然適用。
安裝完成後,可以用以下指令確認版本:
helm version
如果安裝成功,就會看到 Helm 的版本資訊

注意
Helm 3 不需要額外安裝 Tiller,Tiller 是 Helm 2 使用的元件。
Helm 3 會直接使用目前的
kubeconfig與 Kubernetes 叢集溝通,使用方式和kubectl類似。
接下來我們使用 Bitnami 的公開 Helm Repository 來示範。
Bitnami 提供許多常見應用的 Helm Chart,例如:
我們會用它來練習 Helm 最常見的操作流程:
helm repo add bitnami https://charts.bitnami.com/bitnami
helm repo update
💡
helm repo update是做什麼?可以把它想成
apt update—— 更新本機保存的 Chart Repository 索引,讓 Helm 取得最新的 Chart 清單與版本資訊。
# 搜尋已加入的 Repository
helm search repo nginx
這會搜尋目前已經加入 Helm 的 Repository,例如前面加入的 Bitnami。

也可以搜尋 Artifact Hub:
helm search hub nginx
兩者的差別:
helm search repo:搜尋本機已加入的 Repository
helm search hub:搜尋 Artifact Hub 上公開的 Charthelm install my-nginx bitnami/nginx
💡指令格式
helm install <release-name> <chart>
my-nginx:這次安裝的 Release 名稱,可以自行命名bitnami/nginx:要安裝的 Chart,格式是<repository>/<chart>
安裝完成後,Helm 會顯示部署結果與一些使用說明,例如如何存取這個 Service。
# 列出所有 Release
helm list
# 查看特定 Release 的狀態
helm status my-nginx
# 查看這個 Release 實際使用的 Kubernetes YAML
helm get manifest my-nginx
同時也可以用 kubectl 確認 Helm 建立的 Kubernetes 資源:
kubectl get all -l app.kubernetes.io/instance=my-nginx

假設你想把 Replica 數量調整成 3:
helm upgrade my-nginx bitnami/nginx --set replicaCount=3
升級完成後,可以確認 Release 狀態:
helm list
再查看 Pod 數量是否已經變成 3:
kubectl get pods -l app.kubernetes.io/instance=my-nginx

💡Revision 是什麼?
每次執行
helm upgrade,Helm 都會產生新的 Revision(修訂版本)。可以用以下指令查看歷史紀錄:
helm history my-nginx
如果升級後發現有問題,可以使用 helm rollback 回到之前的 Revision。
先查看版本歷史:
helm history my-nginx
再回滾到指定版本:
helm rollback my-nginx 1

💡 指令格式
helm rollback <release> <revision>
my-nginx:Release 名稱1:要回滾到的 Revision回滾本身也會產生一個新的 Revision,因此 Helm 的版本歷史會持續保留下來。
如果這個 Release 不再需要,可以使用:
helm uninstall my-nginx
Helm 會移除這個 Release,並刪除由這個 Release 管理的 Kubernetes 資源。
移除後可以確認:
helm list
也可以再檢查相關資源是否已經被刪除:
kubectl get all -l app.kubernetes.io/instance=my-nginx
Helm Chart 很重要的一個特色就是參數化。
同一個 Chart 可以透過不同的 values,產生不同的部署設定,不需要為 Dev、Staging、Prod 各維護一整套幾乎相同的 YAML。
# 查看 Chart 提供哪些可設定的參數
helm show values bitnami/nginx
輸出通常會很長,你會看到類似這樣的設定:
replicaCount: 1
image:
registry: docker.io
repository: bitnami/nginx
tag: latest
service:
type: LoadBalancer
port: 80
resources:
limits:
cpu: 150m
memory: 128Mi
requests:
cpu: 100m
memory: 64Mi
--set 覆寫少量參數如果只想快速修改幾個設定,可以直接在指令後面使用 --set:
helm install my-nginx bitnami/nginx \
--set replicaCount=3 \
--set service.type=ClusterIP
這表示:
replicaCount=3:建立 3 個副本service.type=ClusterIP:把 Service 類型改成 ClusterIP
這種方式適合快速測試或只需要修改少量參數的情況。

-f 指定自訂 values 檔案如果要修改的參數比較多,可以另外建立一份自訂的 values 檔案:
vim my-values.yaml
replicaCount: 3
service:
type: ClusterIP
port: 8080
resources:
requests:
cpu: 200m
memory: 128Mi
安裝時透過 -f 指定這份設定:
helm install my-nginx bitnami/nginx -f my-values.yaml

💡 實務上怎麼選?
- 少量參數 → 使用
--set- 多個參數或需要放進版本控制 → 使用
-f values.yaml- 也可以疊加多個 values 檔案:
helm install my-nginx bitnami/nginx \ -f base.yaml \ -f prod.yaml如果同一個參數重複出現,後面的 values 檔案會覆蓋前面的設定。
--dry-run 預覽,不實際部署如果想先確認 Helm 最後會產生哪些 Kubernetes YAML,可以加上 --dry-run:
helm install my-nginx bitnami/nginx -f my-values.yaml --dry-run
Helm 會顯示渲染後的 Manifest,但不會真的建立資源。
這很適合在正式部署前先檢查 values 是否有套用正確。
如果想確認某個 Release 實際使用了哪些 values,可以使用:
helm get values my-nginx
這會顯示你在安裝或升級時另外覆寫的 values。
如果想連 Chart 的預設值一起看,可以使用:
helm get values my-nginx --all
這在除錯時很有用,可以確認某個參數最後實際套用的是什麼值。

| 指令 | 用途 |
|---|---|
helm repo add <name> <url> |
加入 Chart Repository |
helm repo update |
更新 Repository 索引 |
helm search repo <keyword> |
搜尋 Chart |
helm install <release> <chart> |
安裝 Chart |
helm list |
查看目前的 Release |
helm status <release> |
查看 Release 狀態 |
helm upgrade <release> <chart> |
升級 Release |
helm history <release> |
查看 Revision 歷史 |
helm rollback <release> <revision> |
回滾到指定 Revision |
helm uninstall <release> |
移除 Release |
helm show values <chart> |
查看 Chart 預設 values |
helm get values <release> |
查看 Release 使用的 values |
今天我們學了 Helm —— Kubernetes 的套件管理工具:
| 重點 | 說明 |
|---|---|
| Chart | 打包好的 Kubernetes 資源模板與設定 |
| Release | Chart 安裝到叢集後產生的一個實例,同一個 Chart 可以安裝多次 |
| Repository | 存放與分享 Chart 的倉庫,例如 Bitnami |
| values.yaml | 用參數控制部署設定,同一個 Chart 可以套用到不同環境 |
| 升級與回滾 | 透過 helm upgrade、helm rollback 管理 Release 的版本變更 |
今天我們學會了怎麼使用別人提供的 Helm Chart 來部署應用。
但如果想把自己的應用程式也打包成 Chart 呢?
明天我們來學 打造你的第一個 Helm Chart,從建立 Chart 結構開始,逐步理解模板語法與 values 的使用方式!