K8s · 設定與儲存 · 第 29 課 · · 9min read

Helm 是什麼?K8s 的 npm,一個指令裝好整套服務

一份 MySQL 部署可能要 5 個 YAML(Deployment、Service、Secret、ConfigMap、PVC)。Helm 把它們打包成一個 Chart,helm install 一個指令搞定。

#Kubernetes #Helm #Chart #套件管理
章節目錄 · 9

你寫過幾份 YAML?

開一個 MySQL 服務,最少要寫幾份 YAML?

  • Deployment / StatefulSet(跑 MySQL 容器)
  • Service(讓別人連得到)
  • Secret(密碼)
  • ConfigMap(my.cnf 設定)
  • PVC(資料儲存)
5 份 YAML,只為了一個 MySQL

如果你的專案有 MySQL、Redis、RabbitMQ、Elasticsearch,就要寫 20 份 YAML。每個環境(dev / staging / prod)還要再複製一份,改幾個 namespace 跟密碼。

這就是 Helm 要解決的問題

Helm 是什麼?

Helm = Kubernetes 的套件管理器

如果你用過:

  • Ubuntu \apt install nginx\
  • macOS \brew install postgresql\
  • Node.js \npm install express\
  • Python \pip install requests\
那 Helm 就是 K8s 版本:

\\\bash
helm install my-mysql bitnami/mysql
\
\\

一行指令,背後幫你建好 Deployment + Service + Secret + ConfigMap + PVC,全部都裝好。

四個核心概念

1. Chart — 套件包

一個 Chart 就是「一包 YAML 模板 + 預設參數」。例如 \bitnami/mysql\ 這個 Chart,裡面已經寫好 MySQL 部署需要的所有 K8s 資源模板。

2. Release — 安裝後的實例

當你 \helm install my-mysql bitnami/mysql\,這個 \my-mysql\ 就是 Release 名字。

同一個 Chart 可以裝很多次,每次給不同的 Release 名稱:

\\\bash
helm install mysql-dev bitnami/mysql
helm install mysql-staging bitnami/mysql
helm install mysql-prod bitnami/mysql
\
\\

三個 Release,三組獨立的 MySQL,互不干擾。

3. Repository — Chart 倉庫

就像 npm registry、Docker Hub,Helm 也有官方/第三方倉庫。最知名的是 Bitnami(VMware 出的,品質高)。

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

加完之後,就可以搜尋裡面有什麼:

\\\bash
helm search repo bitnami | grep -i mysql
\
\\

4. values.yaml — 參數設定檔

Chart 是模板,不同人裝會有不同需求:要多少記憶體、密碼是什麼、要不要開 metrics。

這些都寫在 \values.yaml\ 給 Helm 吃:

\\\yaml
# values.yaml
auth:
rootPassword: "MySecretPassword123"
database: "myapp"
primary:
persistence:
size: 10Gi
metrics:
enabled: true
\
\\

\\\bash
helm install my-mysql bitnami/mysql -f values.yaml
\
\\

實作:用 Helm 裝 MySQL

從零開始走一遍:

\\\bash
# 1. 加倉庫
helm repo add bitnami https://charts.bitnami.com/bitnami
helm repo update

# 2. 看看 Chart 長什麼樣
helm show values bitnami/mysql > mysql-values.yaml

# 3. 改你要的設定(如資料庫名稱、密碼)
vim mysql-values.yaml

# 4. 安裝
helm install my-mysql bitnami/mysql -f mysql-values.yaml

# 5. 看安裝了什麼
kubectl get all -l app.kubernetes.io/instance=my-mysql
\
\\

你會看到一次冒出 StatefulSet、Service、Secret、ConfigMap、PVC——全部一氣呵成

升級與回滾

Helm 最香的地方在這。

升級

改了 values.yaml?\helm upgrade\ 一行搞定:

\\\bash
helm upgrade my-mysql bitnami/mysql -f mysql-values.yaml
\
\\

看版本歷史

\\\bash
helm history my-mysql
# REVISION STATUS DESCRIPTION
# 1 deployed Install complete
# 2 deployed Upgrade complete
# 3 deployed Upgrade complete
\
\\

回滾

升級壞掉?回到上一版:

\\\bash
helm rollback my-mysql 2
\
\\

這就是套件管理器的威力。手寫 YAML 沒這個能力——你只能自己 git revert 然後 kubectl apply。

常用指令清單

指令作用
\helm repo add\加倉庫
\helm search repo\搜尋 Chart
\helm show values\看 Chart 預設參數
\helm install\安裝
\helm list\看裝過哪些 Release
\helm upgrade\升級
\helm history\看版本歷史
\helm rollback\回滾
\helm uninstall\移除

Helm vs Docker Compose

很多人會比較這兩個:

Docker ComposeHelm
用在哪單機 DockerK8s 集群
一份 YAMLdocker-compose.yml整個 Chart
多環境自己抽 .envvalues-dev.yaml / values-prod.yaml
版本管理沒有helm history / rollback
共享生態沒有官方 registryBitnami / ArtifactHub
Compose 是給開發用的,Helm 是生產等級的部署工具

重點整理

  • Helm = K8s 的 apt / brew / npm:一個指令裝好整套服務
  • Chart:模板包;Release:安裝後的實例;Repository:倉庫;values.yaml:參數
  • \helm install / upgrade / rollback\:版本管理三劍客
  • 生產環境必備:手寫 YAML 沒辦法做版本回滾
  • Bitnami Chart 品質高:MySQL、Redis、PostgreSQL 等開箱即用

下一步

到目前為止,你已經會「部署應用」了。但部署只是開始——上線後會遇到一堆問題:

  • 應用卡住了,K8s 怎麼知道?
  • 應用記憶體爆了,K8s 怎麼處理?
  • 流量突然變大,怎麼自動擴容?
  • 不該動的人在亂動我的 Pod,怎麼擋?
下一篇進入 Group 5:生產就緒。先從第一個問題開始:Probe — K8s 怎麼判斷你的應用還活著?
📅 下一篇Probe — K8s 怎麼判斷你的應用還活著?
Liveness / Readiness / Startup 三個 probe 一次講清楚——上線後第一個踩的坑。
📚 完整系列總覽K8s 系列教學首頁(共 40 課,按學習路徑順序排)