前面的文章透過 YAML 建立 Deployment、Service 等 Kubernetes 資源。當一個應用程式需要多份 YAML,或要部署到不同環境時,手動管理檔案和設定可能會變得不方便。
Helm 是 Kubernetes 的套件管理工具,可以把一組 Kubernetes 資源整理成 Chart,再透過參數設定部署內容。這篇會介紹 Chart、Release 和 Values,並建立一個簡單的 Chart。
Helm 常見的三個名詞是:
可以把它們理解成:Chart 是套件,Values 是安裝設定,Release 則是安裝後在叢集中運作的實例。
Windows 可以透過 winget 安裝 Helm:
winget install Helm.Helm
安裝完成後,開啟新的終端機並確認版本:
helm version

接著確認 kubectl 能連線到 Minikube:
kubectl get nodes
使用 Helm 建立一個範例 Chart:
helm create web-demo
這會建立 web-demo 目錄,裡面包含 Chart 設定、Values 和 Kubernetes 資源範本。常見檔案如下:
web-demo/
├── Chart.yaml
├── values.yaml
└── templates/
├── deployment.yaml
├── hpa.yaml
├── ingress.yaml
├── service.yaml
└── ...
其中:
Chart.yaml:Chart 的名稱和版本等資訊。values.yaml:預設參數值。templates/:用 Values 產生 Kubernetes YAML 的範本。helm create 產生的範例 Chart 含有 ServiceAccount、Ingress、HTTPRoute、HPA 等其他範本。若只想練習 Deployment 和 Service,可以移除不需要的範本,讓本次 Chart 保持簡單,也避免留下不必要的設定依賴。
保留 templates/_helpers.tpl,並將 templates/ 整理為以下檔案:
web-demo/templates/
├── _helpers.tpl
├── deployment.yaml
└── service.yaml
刪除 templates/ 內其餘範本,例如 hpa.yaml、ingress.yaml、httproute.yaml、serviceaccount.yaml、NOTES.txt 和 tests/。_helpers.tpl 可保留,雖然以下兩個簡化範本沒有使用它。
templates/deployment.yaml:
apiVersion: apps/v1
kind: Deployment
metadata:
name: {{ .Release.Name }}
spec:
replicas: {{ .Values.replicaCount }}
selector:
matchLabels:
app: {{ .Release.Name }}
template:
metadata:
labels:
app: {{ .Release.Name }}
spec:
containers:
- name: nginx
image: "{{ .Values.image.repository }}:{{ .Values.image.tag }}"
ports:
- containerPort: 80
templates/service.yaml:
apiVersion: v1
kind: Service
metadata:
name: {{ .Release.Name }}
spec:
type: {{ .Values.service.type }}
selector:
app: {{ .Release.Name }}
ports:
- port: {{ .Values.service.port }}
targetPort: 80
將 values.yaml 改成:
replicaCount: 2
image:
repository: nginx
tag: "1.27"
service:
type: ClusterIP
port: 80
範本中的 {{ .Values.replicaCount }} 會讀取 values.yaml 裡的設定;{{ .Release.Name }} 則會帶入安裝時指定的 Release 名稱。
如果保留了其他範本,就必須一併提供那些範本所需的 Values。例如
hpa.yaml會讀取autoscaling.enabled,ingress.yaml會讀取ingress.enabled。缺少整個設定區塊時,可能會遇到nil pointer錯誤。本篇選擇移除不需要的範本,讓 Values 和範本保持精簡、對應。
在安裝前,先使用 helm template 檢查 Helm 產生的 Kubernetes YAML:
helm template web-demo .\web-demo
確認輸出的內容包含預期的 Deployment 和 Service 後,安裝 Chart:
helm install web-demo .\web-demo
查看 Helm Release:
helm list

查看建立的 Kubernetes 資源:
kubectl get deployments,services
kubectl get pods
也可以透過 port-forward 從本機瀏覽 Nginx:
kubectl port-forward svc/web-demo 8080:80
保持這個終端機執行,再開啟 http://127.0.0.1:8080。
不修改 values.yaml,也可以使用 --set 覆寫單一設定。例如將副本數改為 3:
helm upgrade web-demo .\web-demo --set replicaCount=3
helm upgrade 用來更新已存在的 Release;若 Release 尚未安裝,則使用 helm install。確認 Deployment 的副本數:
kubectl get deployment web-demo

也可以建立自訂 Values 檔,保存不同環境的設定。例如在 C:\Users\henry\Desktop\web-demo 目錄建立 values-dev.yaml:
replicaCount: 1
image:
repository: nginx
tag: "1.27"
service:
type: ClusterIP
port: 80
由於此檔案位於 Chart 目錄內,從 C:\Users\henry\Desktop 執行以下命令安裝:
helm install web-dev .\web-demo -f .\web-demo\values-dev.yaml
-f 後面必須是實際存在的 Values 檔案路徑。若尚未建立 values-dev.yaml,Helm 會顯示找不到檔案的錯誤。同一個 Chart 可搭配不同 Release 名稱和 Values 檔案,部署多份設定不同的實例。
查看某個 Release 自訂的 Values:
helm get values web-demo
若要包含 Chart 的預設 Values,可加上 --all:
helm get values web-demo --all
查看 Helm 套用後的 Kubernetes 資源內容:
helm get manifest web-demo
修改 Chart 或 Values 後,可以使用 helm upgrade 更新已安裝的 Release:
helm upgrade web-demo .\web-demo
Helm 將 Kubernetes 資源範本和設定整理成 Chart,並以 Release 管理安裝後的實例。透過 Values,可以調整副本數、映像版本等參數,讓同一個 Chart 用於不同設定。
本篇將範例 Chart 精簡為 Deployment 和 Service,目的是示範 Helm 的基本結構與操作流程。實際使用其他 Chart 時,應先檢查它的範本和 Values,再用 helm template 確認輸出,最後安裝到叢集中。