Advanced - Kustomize
什麼是 Kustomize
Kustomize 是 Kubernetes 原生的資源配置管理工具,從 Kubernetes 1.14 開始,已內建於 kubectl 命令行工具中。
它允許使用者透過非侵入式的方式對 YAML 配置進行覆寫和自訂,特別適合管理不同環境(如開發、測試、正式環境)的資源配置。
主要特點
- 基於 YAML 文件的無侵入性覆寫
- 不需要直接修改原始的 YAML 文件,可以在外層疊加配置來進行自訂。
- 支持多層次的資源定義
- 透過基礎資源(Base)和覆寫層(Overlay)的方式,方便管理不同環境的配置。
- 資源去重與整合
- 自動處理多個配置文件中的資源合併,避免重複定義。
- 靈活的變數注入與命名空間管理
- 支持透過變數(Variables)與 ConfigMap/Secret 自動注入配置,並簡化命名空間的管理。
實戰 Kustomize
基本指令
- 輸出 kustomize 結果:
kubectl.exe kustomize <kustomization_dir> - 查看 kustomize 結果與線上差異:
kubectl.exe diff -k <kustomization_dir> - 執行 kustomize 產生的結果:
kubectl.exe apply -k <kustomization_dir> - 刪除 kustomize 產生的資源:
kubectl.exe delete -k <kustomization_dir>
建立 base 的 kustomization 模板
- 首先我們看資料夾的結構,會有一個 base 儲存基本的設定檔,這些設定檔基本上儲存不變的地方,以及確定要改的地方
tree /f
---
├─base
│ deployment.yaml
│ kustomization.yaml
│ service.yaml
│
└─overlays
├─development
│ kustomization.yaml
│
└─production
kustomization.yaml
- 首先我們先來完成 deployment.yaml 和 service.yaml,首先 image 的地方改成 hello-world:tag ,抽象出來方便後續不同環境可以執行
base/deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: deployment
labels:
type: demo
spec:
replicas: 2
selector:
matchLabels:
type: demo
template:
metadata:
labels:
type: demo
spec:
containers:
- name: demo-container
image: hello-world:tag
ports:
- containerPort: 8080
base/service.yaml
apiVersion: v1
kind: Service
metadata:
name: service
spec:
selector:
type: demo
ports:
- protocol: TCP
port: 8000
targetPort: 8080
type: LoadBalancer
- 接下來我們撰寫 kustomization.yaml,他可以設定標籤、註解,並且要修改的地方,然後還有引用其他的 yaml
base/kustomization.yaml
apiVersion: kustomize.config.k8s.io/v1beta1
kind: Kustomization
# 給所有資源名稱添加前綴,方便區分不同版本的資源
namePrefix: v1-
# 給所有資源統一添加標籤,便於篩選和管理
commonLabels:
by: kustomization # 表示這些資源是通過 Kustomize 管理的
# 給所有資源統一添加註解,作為描述或備註信息
commonAnnotations:
note: Hello, I'm bar # 自定義的註解內容,可用於說明用途
images:
- name: hello-world:tag # 指定要更新的映像名稱
newTag: v1.0.0 # 將映像版本更新為 v1.0.0
# 引用其他 YAML 文件作為資源
resources:
- deployment.yaml
- service.yaml