
想像你要在 Kubernetes 上部署一個完整的 Web 應用,你需要:
如果每個環境(開發、測試、正式)都要手動寫這些 YAML,你會發現:
❌ 問題一:檔案爆炸
❌ 問題二:參數混亂
nginx:1.20
,正式用 nginx:1.21
❌ 問題三:版本管理困難
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
✅ 版本管理與回滾
helm rollback my-app 2
立即回滾✅ 豐富的生態圈
簡單說: Helm 讓你在 K8s 上部署應用就像安裝手機 App 一樣簡單!
my-web-app/ ├── Chart.yaml # 應用資訊(名稱、版本) ├── values.yaml # 預設設定 ├── templates/ # YAML 模板 │ ├── deployment.yaml │ ├── service.yaml │ └── ingress.yaml └── charts/ # 其他依賴的應用
模板檔案(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
開發環境(dev-values.yaml):
replicas: 1 image: "nginx" tag: "1.20"
正式環境(prod-values.yaml):
replicas: 3 image: "nginx" tag: "1.21"
# macOS brew install helm # Linux curl https://raw.githubusercontent.com/helm/helm/main/scripts/get-helm-3 | bash # Windows choco install kubernetes-helm
helm repo add elastic https://helm.elastic.co helm repo update
helm install elasticsearch elastic/elasticsearch
就這樣!Elasticsearch 開始部署了。
# 查看所有已安裝的應用 helm list # 查看 Elasticsearch 的詳細狀態 helm status elasticsearch # 查看部署歷史 helm history elasticsearch
# 升級到新版本 helm upgrade elasticsearch elastic/elasticsearch --set imageTag=8.5.0 # 如果出問題,回滾到上一個版本 helm rollback elasticsearch
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 install nginx bitnami/nginx --set replicaCount=1,imageTag=1.20 # 正式環境 helm install nginx bitnami/nginx --set replicaCount=3,imageTag=1.21
差異對比:
項目 | 純 YAML | Helm |
---|---|---|
檔案數量 | 環境數 × 資源數 | 1 個 Chart |
參數管理 | 手動修改每個檔案 | 統一 values.yaml |
版本控制 | 手動記錄 | 自動版本管理 |
回滾 | 手動重建 | helm rollback |
生態圈 | 自己寫 | 數千個現成 Chart |
# 基本操作 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
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 應用部署變得:
如果你還在手寫一堆 YAML 檔案,建議試試 Helm,會發現新世界!