1. Helm — Kubernetes 的套件管理工具
Helm 架構:
┌──────────────────────────────────────────────────┐
│ Chart Repository (如 ArtifactHub) │
│ ┌──────────────┐ ┌──────────────┐ │
│ │ nginx-chart │ │ postgres-chart│ ... │
│ └──────┬───────┘ └──────────────┘ │
│ │ helm install │
│ ▼ │
│ ┌──────────────────────────────────────┐ │
│ │ Release(已安裝的 chart 實例) │ │
│ │ templates/ + values.yaml → K8s YAML │ │
│ └──────────────────────────────────────┘ │
└──────────────────────────────────────────────────┘
| 術語 | 說明 |
|---|---|
| Chart | Helm 套件(template + values + metadata) |
| Release | chart 的已安裝實例(可多次安裝同一 chart) |
| Repository | 儲存 chart 的倉庫(如 ArtifactHub) |
| Values | 自訂參數(覆蓋 chart 預設值) |
| Template | 帶有 Go template 語法的 K8s manifest 模板 |
2. 常用 Helm 指令
# 搜尋與新增 Repository
helm repo add bitnami https://charts.bitnami.com/bitnami
helm repo update
helm search repo nginx
helm search hub wordpress # 搜尋 ArtifactHub
# 安裝
helm install my-release bitnami/nginx
helm install my-release bitnami/nginx -f custom-values.yaml
helm install my-release bitnami/nginx --set replicaCount=3
# 查看
helm list # 列出所有 releases
helm status my-release # 查看 release 狀態
helm get values my-release # 查看實際使用的 values
helm get manifest my-release # 查看產生的 K8s YAML
# 升級與回滾
helm upgrade my-release bitnami/nginx --set replicaCount=5
helm rollback my-release 1 # 回滾到 revision 1
helm history my-release # 查看修訂歷史
# 移除
helm uninstall my-release
考試重點: CKAD 考試中 Helm 題目通常包含:安裝 chart、設定自訂 values(
--set或-f)、升級 release、回滾到特定版本。考試環境可參考 helm.sh/docs。記住helm install的語法是helm install RELEASE_NAME CHART。
3. Kustomize
Kustomize 使用 overlay 方式,無需模板語法即可客製化 K8s YAML。
目錄結構:
base/
├── kustomization.yaml
├── deployment.yaml
└── service.yaml
overlays/
├── dev/
│ ├── kustomization.yaml # 參照 base,套用 dev 修改
│ └── replica-patch.yaml
└── prod/
├── kustomization.yaml # 參照 base,套用 prod 修改
└── replica-patch.yaml
# base/kustomization.yaml
apiVersion: kustomize.config.k8s.io/v1beta1
kind: Kustomization
resources:
- deployment.yaml
- service.yaml
# overlays/dev/kustomization.yaml
apiVersion: kustomize.config.k8s.io/v1beta1
kind: Kustomization
resources:
- ../../base
namePrefix: dev-
commonLabels:
environment: dev
patches:
- path: replica-patch.yaml
# overlays/dev/replica-patch.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: myapp
spec:
replicas: 1
# 預覽產生的 YAML
kubectl kustomize overlays/dev/
# 套用
kubectl apply -k overlays/dev/
# 或直接套用目錄
kubectl apply -k base/
4. Helm vs Kustomize 比較
| 面向 | Helm | Kustomize |
|---|---|---|
| 方法 | 模板化(Go templates) | Overlay / Patch(純 YAML) |
| 學習曲線 | 中等(需學模板語法) | 低(純 YAML) |
| 打包分發 | 支援(chart repository) | 不支援(依賴 Git) |
| 版本管理 | Release 版本歷史 | 依賴 Git 版本控制 |
| kubectl 整合 | 需要 helm CLI | 內建(kubectl -k) |
| 適用場景 | 複雜套件、多環境部署 | 簡單覆蓋、無需額外工具 |
5. 速查表
| 任務 | 指令 |
|---|---|
| 安裝 chart | helm install name repo/chart |
| 自訂 values 安裝 | helm install name repo/chart --set k=v |
| 升級 release | helm upgrade name repo/chart |
| 回滾到版本 N | helm rollback name N |
| 查看所有 releases | helm list -A(所有 namespace) |
| Kustomize 預覽 | kubectl kustomize dir/ |
| Kustomize 套用 | kubectl apply -k dir/ |
6. 練習題
Q1: 您需要安裝 bitnami/nginx chart 作為名為 "web" 的 release,並設定 replicaCount 為 3。正確的指令是什麼?
- A)
helm install bitnami/nginx --name web --set replicaCount=3 - B)
helm install web bitnami/nginx --set replicaCount=3✓ - C)
helm create web bitnami/nginx --values replicaCount=3 - D)
helm deploy web --chart bitnami/nginx --set replicaCount=3
解析: Helm 3 的語法是 helm install RELEASE_NAME CHART [flags]。--name 是 Helm 2 的語法(已棄用)。--set 用於設定單一 value;多個 values 可用 -f values.yaml。
Q2: 下列哪個指令可以預覽 Kustomize 產生的 YAML 而不實際套用?
- A)
kubectl apply -k overlays/dev/ --dry-run - B)
kubectl kustomize overlays/dev/✓ - C)
kustomize build overlays/dev/ | kubectl apply -f - - D)
kubectl diff -k overlays/dev/
解析: kubectl kustomize 僅渲染最終的 YAML 輸出到 stdout,不會套用任何變更到叢集。這是預覽和檢查的最佳方式。kubectl diff -k 也能比較差異但需要叢集存取。
Q3: 您安裝了一個 Helm release,但發現設定有誤。您想回滾到 revision 2。正確的指令是什麼?
- A)
helm undo my-release --to-revision=2 - B)
helm rollback my-release 2✓ - C)
helm downgrade my-release --revision 2 - D)
helm restore my-release 2
解析: helm rollback RELEASE_NAME REVISION 是回滾到特定版本的正確語法。先用 helm history my-release 查看可用的修訂版本。回滾本身也會建立新的修訂版本。