哈囉大家好,歡迎來到 K8s 的第九天!
在昨天的 Day 15,我們已經使用 Ingress
為 OTA 專案建立了統一的流量入口。到目前為止,我們已經掌握了部署完整 K8s 應用所需的核心元件。
不過,專案資料夾裡的 deployment.yaml
、service.yaml
、configmap.yaml
、secret.yaml
、ingress.yaml
等檔案越來越多,管理變得複雜。更新應用時,往往需要同時修改多個 YAML 檔案;要部署到其他環境時,也需要手動修改 Image Tag、網址、密碼等設定;而想分享給其他團隊或開源社群,也不方便。這種情況在社群中被稱為「YAML 地獄」。
今天,我們要介紹 Kubernetes 中常用的工具 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,就如同...
它的核心任務,就是將構成一個應用程式的所有 K8s 資源(那一堆 YAML 檔案),打包成一個標準化的、可重複使用的單元,這個單元就叫做 Chart。
一個 Helm Chart 是一個有固定結構的資料夾,裡面包含了部署應用所需的所有資源。主要組成有:
values-dev.yaml
, values-test.yaml
。values.yaml
的值生成最終 YAML。當管理員執行 helm install
時 (步驟 1),Helm CLI 首先會到 Chart Repository 下載所需的 Chart(步驟 2)。接著,Helm 會將 Chart 與 values.yaml 的設定組合,生成 Kubernetes 所需的 YAML 物件,並交給API Server(步驟 3)。API Server 再由控制平面協調,將 Release 部署到 Worker Nodes 中,最後以 Pod 的形式執行。
加入 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 應用程式進行標準化的打包與管理。
values.yaml
和 {{ .Values }}
語法,讓我們的應用配置變得極度靈活。install
, upgrade
, uninstall
, list
。