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。

解鎖完整教學內容

本章為付費內容。加入專案即可解鎖超過 5000 字的深度解析,包含 10 個以上神級 Prompt 與真實 Source Code 範例!