iT邦幫忙

2026 iThome 鐵人賽

DAY 25
0
Kubernetes

從零開始的 Kubernetes 基礎觀念與實作系列 第 25 篇

從零開始的 Kubernetes 基礎觀念與實作 DAY25

  • 分享至 

  • xImage
  •  

Helm:Kubernetes 套件管理

前面的文章透過 YAML 建立 Deployment、Service 等 Kubernetes 資源。當一個應用程式需要多份 YAML,或要部署到不同環境時,手動管理檔案和設定可能會變得不方便。

Helm 是 Kubernetes 的套件管理工具,可以把一組 Kubernetes 資源整理成 Chart,再透過參數設定部署內容。這篇會介紹 Chart、Release 和 Values,並建立一個簡單的 Chart。

Helm 的基本概念

Helm 常見的三個名詞是:

  • Chart:一套 Kubernetes 部署範本與相關設定,可以視為應用程式的安裝套件。
  • Release:Chart 安裝到 Kubernetes 後建立的實例。同一個 Chart 可以安裝多次,形成不同的 Release。
  • Values:用來調整 Chart 設定的參數,例如映像版本、副本數或 Service 類型。

可以把它們理解成:Chart 是套件,Values 是安裝設定,Release 則是安裝後在叢集中運作的實例。

安裝 Helm

Windows 可以透過 winget 安裝 Helm:

winget install Helm.Helm

安裝完成後,開啟新的終端機並確認版本:

helm version

Helm 版本資訊

接著確認 kubectl 能連線到 Minikube:

kubectl get nodes

建立 Chart

使用 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 和範本保持精簡、對應。

檢查並安裝 Chart

在安裝前,先使用 helm template 檢查 Helm 產生的 Kubernetes YAML:

helm template web-demo .\web-demo

確認輸出的內容包含預期的 Deployment 和 Service 後,安裝 Chart:

helm install web-demo .\web-demo

查看 Helm Release:

helm list

Helm Release 清單

查看建立的 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

不修改 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

Deployment 副本數

也可以建立自訂 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

查看某個 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 確認輸出,最後安裝到叢集中。


上一篇
從零開始的 Kubernetes 基礎觀念與實作 DAY24
下一篇
從零開始的 Kubernetes 基礎觀念與實作 DAY26
系列文
從零開始的 Kubernetes 基礎觀念與實作 共 30 篇
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言