iT邦幫忙

2026 iThome 鐵人賽

DAY 20
0
Kubernetes

從零到 CKA:30 天掌握 Kubernetes 核心觀念與實作系列 第 20

Day 20|Helm — Kubernetes 的套件管理工具

  • 分享至 

  • xImage
  •  

前言

到 Day 19 為止,我們已經學了很多 Kubernetes 資源:Deployment、Service、Ingress、ConfigMap、Secret、PV / PVC、StorageClass、StatefulSet、PriorityClass、Namespace……

當一個應用越來越完整時,往往需要同時管理多個 YAML 檔案。

這會帶來幾個問題:

  • 管理困難 —— 多個 YAML 分散在不同地方,不容易看出哪些資源屬於同一個應用
  • 版本追蹤 —— 很難快速確認目前部署的是哪個版本、做過哪些變更
  • 環境差異 —— Dev 和 Prod 可能只差幾個設定,卻要維護多份幾乎相同的 YAML
  • 升級與回滾 —— 如果要更新或退回上一個版本,手動管理多個資源會越來越麻煩

這時候,就可以使用 Helm

Helm 是 Kubernetes 的套件管理工具,可以把一整組 Kubernetes 資源整理成一個套件,並透過參數化的方式管理不同環境的設定。

今天我們來學:

  1. 核心概念 — Chart、Release、Repository 是什麼?
  2. 用比喻理解 — Helm 就像 Kubernetes 的套件管理工具
  3. 安裝 Helm — 建立基本使用環境
  4. 基本操作 — 搜尋、安裝、查看、升級、回滾與移除
  5. values.yaml 與客製化 — 用參數調整不同環境的部署設定
  6. 實用指令整理 — 整理常用的 Helm 操作

以下操作皆在 master 節點 執行。


一、核心概念

三個關鍵名詞

名詞 說明 類比
Chart 一組打包好的 Kubernetes 資源模板與設定,描述一個應用需要部署哪些資源 .deb / .rpm 安裝包
Release Chart 安裝到 Kubernetes 叢集後產生的一個實例;同一個 Chart 可以安裝多次,建立不同的 Release 安裝後的一份應用實例
Repository 用來存放與分享 Helm Chart 的倉庫,可以是公開或私有 apt / yum 的軟體來源

用比喻理解

Helm 就像 Kubernetes 的套件管理工具:

  • apt install nginxhelm install my-nginx bitnami/nginx
  • apt upgrade nginxhelm upgrade my-nginx bitnami/nginx
  • apt remove nginxhelm uninstall my-nginx
  • /etc/apt/sources.list(軟體來源)→ helm repo add(Chart Repository)
  • .deb / .rpm 套件 → Chart
  • 安裝後的一份應用實例 → Release

Chart 是套件,Release 是安裝後的實例,Repository 是存放套件的地方。

Helm 的運作流程

  1. Repository 取得 Chart
  2. 結合你提供的 values(參數),渲染出最終的 Kubernetes YAML
  3. Helm 將這些資源提交到 Kubernetes API,並建立一個 Release
  4. Helm 會記錄每次安裝與升級的版本歷史,方便後續查看與回滾

二、安裝 Helm

這次練習使用 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 的版本資訊

https://ithelp.ithome.com.tw/upload/images/20260820/20181928MN08pjVzS4.png

注意

Helm 3 不需要額外安裝 Tiller,Tiller 是 Helm 2 使用的元件。

Helm 3 會直接使用目前的 kubeconfig 與 Kubernetes 叢集溝通,使用方式和 kubectl 類似。


三、基本操作

接下來我們使用 Bitnami 的公開 Helm Repository 來示範。

Bitnami 提供許多常見應用的 Helm Chart,例如:

  • Nginx
  • Redis
  • MySQL
  • PostgreSQL

我們會用它來練習 Helm 最常見的操作流程:

Step 1:加入 Repository

helm repo add bitnami https://charts.bitnami.com/bitnami
helm repo update

💡 helm repo update 是做什麼?

可以把它想成 apt update —— 更新本機保存的 Chart Repository 索引,讓 Helm 取得最新的 Chart 清單與版本資訊。

Step 2:搜尋 Chart

# 搜尋已加入的 Repository
helm search repo nginx

這會搜尋目前已經加入 Helm 的 Repository,例如前面加入的 Bitnami。

https://ithelp.ithome.com.tw/upload/images/20260820/20181928uTpqnV4X21.png

也可以搜尋 Artifact Hub:

helm search hub nginx

兩者的差別:

  • helm search repo:搜尋本機已加入的 Repository
  • helm search hub:搜尋 Artifact Hub 上公開的 Chart

Step 3:安裝 Chart(建立 Release)

helm install my-nginx bitnami/nginx

💡指令格式

helm install <release-name> <chart>
  • my-nginx:這次安裝的 Release 名稱,可以自行命名
  • bitnami/nginx:要安裝的 Chart,格式是 <repository>/<chart>

安裝完成後,Helm 會顯示部署結果與一些使用說明,例如如何存取這個 Service。

Step 4:查看 Release

# 列出所有 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

https://ithelp.ithome.com.tw/upload/images/20260820/20181928fiVD3O0a6N.png

Step 5:升級 Release

假設你想把 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

https://ithelp.ithome.com.tw/upload/images/20260820/20181928mySbEbY78w.png

💡Revision 是什麼?

每次執行 helm upgrade,Helm 都會產生新的 Revision(修訂版本)

可以用以下指令查看歷史紀錄:

helm history my-nginx

Step 6:回滾 Release

如果升級後發現有問題,可以使用 helm rollback 回到之前的 Revision。

先查看版本歷史:

helm history my-nginx

再回滾到指定版本:

helm rollback my-nginx 1

https://ithelp.ithome.com.tw/upload/images/20260820/20181928f5REmgjgoT.png

💡 指令格式

helm rollback <release> <revision>
  • my-nginx:Release 名稱
  • 1:要回滾到的 Revision

回滾本身也會產生一個新的 Revision,因此 Helm 的版本歷史會持續保留下來。

Step 7:移除 Release

如果這個 Release 不再需要,可以使用:

helm uninstall my-nginx

Helm 會移除這個 Release,並刪除由這個 Release 管理的 Kubernetes 資源。

移除後可以確認:

helm list

也可以再檢查相關資源是否已經被刪除:

kubectl get all -l app.kubernetes.io/instance=my-nginx

四、values.yaml 與客製化

Helm Chart 很重要的一個特色就是參數化

同一個 Chart 可以透過不同的 values,產生不同的部署設定,不需要為 Dev、Staging、Prod 各維護一整套幾乎相同的 YAML。

查看 Chart 的預設值

# 查看 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

這種方式適合快速測試或只需要修改少量參數的情況。

https://ithelp.ithome.com.tw/upload/images/20260820/20181928LUsBg2F5cZ.png

方式二:用 -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

https://ithelp.ithome.com.tw/upload/images/20260820/20181928GeWzavZLFs.png

💡 實務上怎麼選?

  • 少量參數 → 使用 --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

如果想確認某個 Release 實際使用了哪些 values,可以使用:

helm get values my-nginx

這會顯示你在安裝或升級時另外覆寫的 values

如果想連 Chart 的預設值一起看,可以使用:

helm get values my-nginx --all

這在除錯時很有用,可以確認某個參數最後實際套用的是什麼值。

https://ithelp.ithome.com.tw/upload/images/20260820/20181928mVztapi3Dc.png


六、常用指令整理

指令 用途
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 upgradehelm rollback 管理 Release 的版本變更

今天我們學會了怎麼使用別人提供的 Helm Chart 來部署應用。

但如果想把自己的應用程式也打包成 Chart 呢?

明天我們來學 打造你的第一個 Helm Chart,從建立 Chart 結構開始,逐步理解模板語法與 values 的使用方式!


參考資源


上一篇
Day 19|Namespace — Kubernetes 的資源隔離與多租戶管理
系列文
從零到 CKA:30 天掌握 Kubernetes 核心觀念與實作20
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言