iT邦幫忙

2025 iThome 鐵人賽

DAY 16
0
Cloud Native

從 Docker 到 K8s:我的 30 天雲原生筆記系列 第 16

Day 16: 標準化包裝:Helm

  • 分享至 

  • xImage
  •  

哈囉大家好,歡迎來到 K8s 的第九天!

在昨天的 Day 15,我們已經使用 Ingress 為 OTA 專案建立了統一的流量入口。到目前為止,我們已經掌握了部署完整 K8s 應用所需的核心元件。

不過,專案資料夾裡的 deployment.yamlservice.yamlconfigmap.yamlsecret.yamlingress.yaml 等檔案越來越多,管理變得複雜。更新應用時,往往需要同時修改多個 YAML 檔案;要部署到其他環境時,也需要手動修改 Image Tag、網址、密碼等設定;而想分享給其他團隊或開源社群,也不方便。這種情況在社群中被稱為「YAML 地獄」。

今天,我們要介紹 Kubernetes 中常用的工具 Helm,幫助我們解決這些問題。

Helm 是什麼?

Helm 是 Kubernetes 官方的套件管理器,用來管理 Kubernetes 應用程式。官方說法是:

Helm helps you manage Kubernetes applications — Helm Charts help you define, install, and upgrade even the most complex Kubernetes application.
(Helm 幫助管理 Kubernetes 應用,Helm Charts 可以定義、安裝並升級複雜應用。)

如果這個概念聽起來有點抽象,你可以把它想像成你熟悉的工具:

Helm 對於 Kubernetes,就如同...

  • npmyarn 對於 Node.js
  • pip 對於 Python
  • Homebrew 對於 macOS

它的核心任務,就是將構成一個應用程式的所有 K8s 資源(那一堆 YAML 檔案),打包成一個標準化的、可重複使用的單元,這個單元就叫做 Chart

Helm Chart 結構

一個 Helm Chart 是一個有固定結構的資料夾,裡面包含了部署應用所需的所有資源。主要組成有:

  • Chart.yaml:定義 Chart 的名稱、版本和作者。
  • values.yaml:把變數都抽離在這裡統一設定,可以根據開發、測試、生產環境設定不同變數,例如 values-dev.yaml, values-test.yaml
  • templates/:放置 Kubernetes YAML 模板,會依據 values.yaml 的值生成最終 YAML。

Helm 的核心概念

  • Chart:標準化的應用包。
  • Repository:存放和分享 Charts 的地方。
  • Release:Chart 安裝到叢集後的一個實例,每個 Release 都有自己的設定和版本。

當管理員執行 helm install時 (步驟 1),Helm CLI 首先會到 Chart Repository 下載所需的 Chart(步驟 2)。接著,Helm 會將 Chart 與 values.yaml 的設定組合,生成 Kubernetes 所需的 YAML 物件,並交給API Server(步驟 3)。API Server 再由控制平面協調,將 Release 部署到 Worker Nodes 中,最後以 Pod 的形式執行。

https://ithelp.ithome.com.tw/upload/images/20250923/20178656xBVRwuGSkq.png

實際操作:用 Helm 安裝 Nginx

加入 Chart 倉庫並更新索引:
上面有提到 Helm 的 Chart 是一種「打包好的 Kubernetes 部署模板」,就像軟體的安裝包。Chart 放在倉庫(Repository)裡,Helm 可以從這些倉庫下載。bitnami 是這個倉庫的名字,官方提供很多穩定的應用 Chart,例如 Nginx、MySQL、Redis 等。

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

這兩行指令意思是:告訴 Helm:「我要從 Bitnami 倉庫拿套件」,並更新索引,確保 Helm 知道最新有哪些 Chart。

搜尋 Chart:
nginx 是這個倉庫裡的 Chart 名稱。所以 bitnami/nginx 就代表「從 bitnami 倉庫拿 nginx 這個 Chart」。

helm search repo bitnami/nginx

Helm 可以同時管理多個倉庫,如果你只寫 nginx,Helm 可能不知道去哪個倉庫找,加上 bitnami/就明確指定來源。

安裝 Chart(建立 Release)
幫這個安裝取個名字(例如 my-nginx),用來管理這次部署。bitnami/nginx 是指定要安裝的 Chart 來源。Helm 會自動依照 Chart 裡的設定建立 Deployment、Service、ConfigMap 等 Kubernetes 資源。

helm install my-nginx bitnami/nginx

客製化設定
如果預設值不符合需求,可以透過 --set來覆寫。例如,調整副本數到 3:

helm install my-nginx-ha bitnami/nginx --set replicaCount=3

管理 Release
查看目前安裝了哪些 Release,升級或刪除它們。

helm list
helm upgrade my-nginx-ha bitnami/nginx --set replicaCount=5
helm uninstall my-nginx-ha

結論

今天我們學會了如何使用 Helm,來為我們的 K8s 應用程式進行標準化的打包與管理。

  • 為何需要 Helm:為了解決管理大量、分散的 YAML 檔案的「YAML 地獄」問題。
  • Helm 的核心是 Chart:它將一個應用所需的所有 K8s 資源,打包成一個可重複使用的單元。
  • 模板化的威力:透過 values.yaml{{ .Values }} 語法,讓我們的應用配置變得極度靈活。
  • Helm 的基本操作install, upgrade, uninstall, list
    接下來我們將探討如何管理有狀態應用,例如資料庫,介紹 Kubernetes 的 StatefulSet。明天見!

上一篇
Day 15: Ingress & Ingress Controller
系列文
從 Docker 到 K8s:我的 30 天雲原生筆記16
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言