你寫過幾份 YAML?
開一個 MySQL 服務,最少要寫幾份 YAML?
- Deployment / StatefulSet(跑 MySQL 容器)
- Service(讓別人連得到)
- Secret(密碼)
- ConfigMap(my.cnf 設定)
- PVC(資料儲存)
如果你的專案有 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\
\\\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 Compose | Helm | |
|---|---|---|
| 用在哪 | 單機 Docker | K8s 集群 |
| 一份 YAML | docker-compose.yml | 整個 Chart |
| 多環境 | 自己抽 .env | values-dev.yaml / values-prod.yaml |
| 版本管理 | 沒有 | helm history / rollback |
| 共享生態 | 沒有官方 registry | Bitnami / ArtifactHub |
重點整理
- Helm = K8s 的 apt / brew / npm:一個指令裝好整套服務
- Chart:模板包;Release:安裝後的實例;Repository:倉庫;values.yaml:參數
- \
helm install / upgrade / rollback\:版本管理三劍客 - 生產環境必備:手寫 YAML 沒辦法做版本回滾
- Bitnami Chart 品質高:MySQL、Redis、PostgreSQL 等開箱即用
下一步
到目前為止,你已經會「部署應用」了。但部署只是開始——上線後會遇到一堆問題:
- 應用卡住了,K8s 怎麼知道?
- 應用記憶體爆了,K8s 怎麼處理?
- 流量突然變大,怎麼自動擴容?
- 不該動的人在亂動我的 Pod,怎麼擋?
📅 下一篇:Probe — K8s 怎麼判斷你的應用還活著?
Liveness / Readiness / Startup 三個 probe 一次講清楚——上線後第一個踩的坑。
📚 完整系列總覽:K8s 系列教學首頁(共 40 課,按學習路徑順序排)