Mark Ku's Blog
首頁 關於我
用 Helm 佈署應用:為什麼選 Helm、怎麼裝、和純 YAML 的差異
DevOps
用 Helm 佈署應用:為什麼選 Helm、怎麼裝、和純 YAML 的差異
Mark Ku
Mark Ku
September 24, 2025
1 min

Helm Chart:Kubernetes 的套件管理器

什麼是 Helm?為什麼需要它?

想像你要在 Kubernetes 上部署一個完整的 Web 應用,你需要:

  • Deployment(Pod 管理)
  • Service(網路服務)
  • Ingress(外部存取)
  • ConfigMap(設定檔)
  • Secret(密碼)

如果每個環境(開發、測試、正式)都要手動寫這些 YAML,你會發現:

問題一:檔案爆炸

  • 開發環境:5 個 YAML 檔案
  • 測試環境:5 個 YAML 檔案
  • 正式環境:5 個 YAML 檔案
  • 總共 15 個檔案要維護!

問題二:參數混亂

  • 開發用 nginx:1.20,正式用 nginx:1.21
  • 開發 1 個副本,正式 3 個副本
  • 每次改版都要手動修改一堆檔案

問題三:版本管理困難

  • 出問題時不知道要回滾到哪個版本
  • 沒有清楚的部署歷史記錄

Helm 如何解決這些問題?

Helm 就像 Kubernetes 的「套件管理器」,把多個 YAML 檔案打包成一個「Chart」:

一個 Chart 搞定所有環境

  • values.yaml 控制不同環境的參數
  • 開發環境:helm install my-app ./my-chart -f dev-values.yaml
  • 正式環境:helm install my-app ./my-chart -f prod-values.yaml

版本管理與回滾

  • 每次部署都有版本號(REVISION 1, 2, 3…)
  • 出問題時:helm rollback my-app 2 立即回滾

豐富的生態圈

  • 不用自己寫 Chart,直接使用現成的(MySQL、Redis、Nginx 等)
  • 就像手機的 App Store,有數千個現成的應用

簡單說: Helm 讓你在 K8s 上部署應用就像安裝手機 App 一樣簡單!

Helm 是怎麼運作的?

1. Chart 就像一個「應用包」

my-web-app/
├── Chart.yaml          # 應用資訊(名稱、版本)
├── values.yaml         # 預設設定
├── templates/          # YAML 模板
│   ├── deployment.yaml
│   ├── service.yaml
│   └── ingress.yaml
└── charts/             # 其他依賴的應用

2. 模板 + 設定 = 最終的 YAML

模板檔案(templates/deployment.yaml):

apiVersion: apps/v1
kind: Deployment
metadata:
  name: {{ .Values.app.name }}    # 這裡會被替換
spec:
  replicas: {{ .Values.replicas }} # 這裡會被替換
  template:
    spec:
      containers:
      - name: {{ .Values.app.name }}
        image: {{ .Values.image }}:{{ .Values.tag }}

設定檔案(values.yaml):

app:
  name: "my-web-app"
replicas: 3
image: "nginx"
tag: "1.21"

最終產生的 YAML:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: my-web-app
spec:
  replicas: 3
  template:
    spec:
      containers:
      - name: my-web-app
        image: nginx:1.21

3. 不同環境用不同設定檔

開發環境(dev-values.yaml):

replicas: 1
image: "nginx"
tag: "1.20"

正式環境(prod-values.yaml):

replicas: 3
image: "nginx"
tag: "1.21"

實際操作:5 分鐘部署 Elasticsearch

步驟 1:安裝 Helm

# macOS
brew install helm

# Linux
curl https://raw.githubusercontent.com/helm/helm/main/scripts/get-helm-3 | bash

# Windows
choco install kubernetes-helm

步驟 2:加入 Elastic 的應用商店

helm repo add elastic https://helm.elastic.co
helm repo update

步驟 3:一鍵安裝 Elasticsearch

helm install elasticsearch elastic/elasticsearch

就這樣!Elasticsearch 開始部署了。

步驟 4:查看部署狀態

# 查看所有已安裝的應用
helm list

# 查看 Elasticsearch 的詳細狀態
helm status elasticsearch

# 查看部署歷史
helm history elasticsearch

步驟 5:升級或回滾

# 升級到新版本
helm upgrade elasticsearch elastic/elasticsearch --set imageTag=8.5.0

# 如果出問題,回滾到上一個版本
helm rollback elasticsearch

Helm vs 純 YAML:實際比較

用純 YAML 部署 Nginx

deployment.yaml:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-dev
spec:
  replicas: 1
  template:
    spec:
      containers:
      - name: nginx
        image: nginx:1.20

service.yaml:

apiVersion: v1
kind: Service
metadata:
  name: nginx-dev-service
spec:
  selector:
    app: nginx-dev
  ports:
  - port: 80

正式環境還要再寫一套類似的檔案…

用 Helm 部署 Nginx

一個命令搞定:

# 開發環境
helm install nginx bitnami/nginx --set replicaCount=1,imageTag=1.20

# 正式環境  
helm install nginx bitnami/nginx --set replicaCount=3,imageTag=1.21

差異對比:

項目純 YAMLHelm
檔案數量環境數 × 資源數1 個 Chart
參數管理手動修改每個檔案統一 values.yaml
版本控制手動記錄自動版本管理
回滾手動重建helm rollback
生態圈自己寫數千個現成 Chart

常用的 Helm 指令

# 基本操作
helm list                    # 查看已安裝的應用
helm status <app-name>       # 查看應用狀態
helm history <app-name>      # 查看部署歷史

# 安裝與升級
helm install <name> <chart>   # 安裝應用
helm upgrade <name> <chart>  # 升級應用
helm uninstall <name>        # 刪除應用

# 回滾
helm rollback <name> <revision>  # 回滾到指定版本
helm rollback <name>             # 回滾到上一個版本

# 查看與下載
helm search repo <keyword>   # 搜尋可用的 Chart
helm pull <chart>            # 下載 Chart 到本地
helm template <chart>        # 預覽會產生的 YAML

哪裡可以找到現成的 Chart?

1. Artifact Hub(最推薦)

  • 網址:https://artifacthub.io/
  • 就像 Helm 的「App Store」
  • 有數千個現成的應用可以直接使用

2. Bitnami Charts(品質很高)

3. 官方 Charts

如何選擇好的 Chart?

  1. 看維護狀況:最近 6 個月有更新
  2. 看下載量:下載量高的通常比較穩定
  3. 看文件:有完整的使用說明
  4. 看社群:GitHub 上有活躍的討論

實務建議

1. 從簡單開始

  • 先試用現成的 Chart(如 Nginx、Redis)
  • 熟悉後再考慮自建 Chart

2. 環境分離

  • 開發、測試、正式環境用不同的 values.yaml
  • 不要直接修改 Chart 的原始檔案

3. 版本控制

  • 把 values.yaml 放到 Git 管理
  • 每次部署都記錄版本號

4. 備份重要資料

  • 資料庫等重要服務要定期備份
  • Helm 只管理應用部署,不負責資料備份

常見問題

Q: Helm 會影響現有的 Kubernetes 資源嗎? A: 不會。Helm 只是管理工具,不會影響已經存在的資源。

Q: 可以同時使用 Helm 和 kubectl 嗎? A: 可以。Helm 最終還是透過 kubectl 與 Kubernetes 互動。

Q: 如果 Chart 出問題怎麼辦? A: 用 helm rollback 回滾,或 helm uninstall 刪除後重新安裝。

Q: 自建 Chart 很複雜嗎? A: 一開始可能有點複雜,但熟悉後會比手寫 YAML 簡單很多。

總結

Helm 讓 Kubernetes 應用部署變得:

  • 更簡單:一個命令部署複雜應用
  • 更安全:版本管理與快速回滾
  • 更高效:重用現成的 Chart,不用重複造輪子

如果你還在手寫一堆 YAML 檔案,建議試試 Helm,會發現新世界!

參考資源


Tags

Mark Ku

Mark Ku

Software Developer

10年以上豐富網站開發經驗,開發過各種網站,電子商務、平台網站、直播系統、POS系統、SEO 優化、金流串接、AI 串接,Infra 出身,帶過幾次團隊,也加入過大團隊一起開發。

Expertise

前端(React)
後端(C#)
網路管理
DevOps
溝通
領導

Social Media

facebook github website

Related Posts

Docker 及 K8s 如何拉取映像檔
Docker 及 K8s 如何拉取映像檔
September 02, 2025
1 min

Quick Links

關於我

Social Media