Kustomize 與 Overlays
Vibe Prompt
「幫我建立 Kustomize 目錄結構:base/(共通設定) + overlays/dev/ + overlays/prod/。」
目錄結構
k8s/
├── base/
│ ├── deployment.yaml
│ ├── service.yaml
│ ├── ingress.yaml
│ └── kustomization.yaml
└── overlays/
├── dev/
│ ├── kustomization.yaml
│ └── patch-replicas.yaml
└── production/
├── kustomization.yaml
├── patch-replicas.yaml
└── patch-ingress.yaml
base/kustomization.yaml
apiVersion: kustomize.config.k8s.io/v1beta1
kind: Kustomization
resources:
- deployment.yaml
- service.yaml
- ingress.yaml
overlays/production/kustomization.yaml
apiVersion: kustomize.config.k8s.io/v1beta1
kind: Kustomization
resources:
- ../../base
patches:
- path: patch-replicas.yaml
- path: patch-ingress.yaml
overlays/production/patch-replicas.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: myapp
spec:
replicas: 5
部署
kubectl apply -k k8s/overlays/production
kustomize build k8s/overlays/production # 預覽
關鍵要點
- ✅ 請根據本章主題補充具體的學習重點
- ✅ 建議加入比較表格、程式碼範例或流程圖
- ✅ 確保內容扎實且有價值
Kustomize 的主要功能
| 功能 | 描述 | 範例 |
|------|------|------|
| Base + Overlay | 基底配置 + 環境覆蓋 | dev/staging/prod 共用基底 |
| namePrefix | 為所有資源名稱加上前綴 | namePrefix: dev- |
| commonLabels | 為所有資源加上共同標籤 | commonLabels: { env: dev } |
| images | 替換容器映像檔版本 | images: - name: app, newTag: v1.2 |
| patches | 部分覆蓋特定資源欄位 | patches: - path: increase_replicas.yaml |
Helm vs Kustomize
| 比較 | Helm | Kustomize |
|------|:----:|:---------:|
| 模板語言 | Go Template | 純 YAML(無模板) |
| 學習曲線 | 較高(需學 Go Template) | 低(就是 YAML) |
| 套件管理 | ✅ 有 Chart Repository | ❌ 無(直接從 Git) |
| 變數覆蓋 | values.yaml | kustomization.yaml |
| 內建於 kubectl | ❌ | ✅ kubectl apply -k |
兩者可以一起使用:Helm 作為 Chart 封裝,Kustomize 作為環境覆蓋層。
Kustomize:環境差異化管理
Kustomize 是 Kubernetes 的原生設定管理工具。它讓你用 overlay 的方式管理不同環境的差異——base 目錄放共用的設定,overlay 目錄放各環境的差異。
為什麼用 Kustomize 而不是 Helm?
| 比較 | Kustomize | Helm | |:----|:---------|:-----| | 學習曲線 | 低(純 YAML patch) | 高(需學 Go Template) | | 模板語法 | 無(patch 即可) | Go Template | | 值管理 | kustomization.yaml | values.yaml | | 適合場景 | 簡單到中等複雜度 | 複雜應用分發 |
Kustomize 的優勢在於它不引入新的語法——你只需要會 YAML 就能用。如果你只是需要管理開發/正式環境的差異(replica count、image tag、環境變數),Kustomize 比 Helm 更簡單。
下一章預告:Image Updater
Kustomize 管理靜態的環境差異。下一章的 ArgoCD Image Updater 讓 Kustomize 可以自動更新 image tag——當 CI 建出新的 Docker Image 時,自動更新 Git Repo 中的 YAML。