Kustomize 是 Kubernetes 原生的組態管理工具,它允許你通過覆蓋組態檔案來靈活地管理和修改 Kubernetes 應用程式的 YAML 檔案,而不需要對原始組態進行複製和修改。Kustomize 使得在不同環境之間(如開發、測試、和正式環境)管理和部署應用程式更加簡單和一致。今天,我們將深入探討 Kustomize 的基本用法和設定。
Kustomization:
kustomization.yaml
,這個檔案描述了如何組合、覆蓋和生成 Kubernetes 資源。Base 和 Overlay:
Kustomize 已經集成到 kubectl
中,可以直接使用 kubectl
來運行 Kustomize:
kubectl apply -k <path-to-kustomization-directory>
你也可以單獨安裝 Kustomize 工具,以下是在 Linux 系統上的安裝命令:
curl -s "https://raw.githubusercontent.com/kubernetes-sigs/kustomize/master/hack/install_kustomize.sh" | bash
它使用目錄結構和設定檔案來定義、生成和修改 Kubernetes 的清單。以下是一個簡單的 Kustomize 檔案結構範例:
my-app/
│
├── base/
│ ├── kustomization.yaml
│ ├── deployment.yaml
│ ├── service.yaml
│
└── overlays/
├── dev/
│ ├── kustomization.yaml
│ ├── configmap.yaml
│ └── patch-deployment.yaml
│
└── prod/
├── kustomization.yaml
├── configmap.yaml
└── patch-deployment.yaml
base/: 基本設定,這些是所有環境共用的 Kubernetes 資源定義,通常不會直接應用,而是被 overlays 引用。
kustomization.yaml
: 定義該目錄下有哪些資源檔案(如 deployment.yaml 和 service.yaml)將被納入 Kustomize。deployment.yaml
: 定義 Kubernetes Deployment 資源。service.yaml
: 定義 Kubernetes Service 資源。overlays/: 包含針對不同環境的設定覆蓋(如 dev、prod 等),這些會引用 base 並加上環境特定的設定。
kustomization.yaml
: 引用 base 目錄,並應用特定於開發環境的修改(如 configmap 和 patch)。configmap.yaml
: 開發環境的 ConfigMap 定義。patch-deployment.yaml
: 使用 patch 修改 base 中的 Deployment 定義(如調整 replicas 等)。kustomization.yaml
: 引用 base 目錄,並應用特定於正式環境的修改。configmap.yaml
: 正式環境的 ConfigMap 定義。patch-deployment.yaml
: 針對正式環境的 Deployment 設定變更(如增加 replicas)。resources:
- deployment.yaml
- service.yaml
resources:
- ../../base
patchesStrategicMerge:
- patch-deployment.yaml
configMapGenerator:
- name: app-config
literals:
- ENV=dev
resources:
- ../../base
patchesStrategicMerge:
- patch-deployment.yaml
configMapGenerator:
- name: app-config
literals:
- ENV=prod
這個結構允許你根據環境輕鬆定制 Kubernetes 資源,並保持基礎設定的可重用性。
以下是 kustomization.yaml
檔案的基本結構和內容:
apiVersion: kustomize.config.k8s.io/v1beta1
kind: Kustomization
resources:
- deployment.yaml
- service.yaml
patchesStrategicMerge:
- deployment-patch.yaml
configMapGenerator:
- name: example-config
literals:
- key1=value1
- key2=value2
secretGenerator:
- name: example-secret
literals:
- username=admin
- password=secret
首先,你需要創建一個基本組態(Base),這個組態應該包含應用程式的所有通用資源,例如:
deployment.yaml
service.yaml
configmap.yaml
例如,這是一個基本的 deployment.yaml
檔案:
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx-deployment
spec:
replicas: 2
selector:
matchLabels:
app: nginx
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx:1.14.2
ports:
- containerPort: 80
在 Base 目錄下,創建一個 kustomization.yaml
檔案來定義這些資源:
resources:
- deployment.yaml
- service.yaml
接下來,為不同的環境創建 Overlay 組態。例如,你可以為正式環境創建一個 production
目錄,並在其中創建 kustomization.yaml
檔案:
resources:
- ../base
patchesStrategicMerge:
- deployment-patch.yaml
在 deployment-patch.yaml
中,你可以覆蓋 Base 中的組態,例如更改副本數或映像版本:
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx-deployment
spec:
replicas: 5 # 覆蓋副本數
template:
spec:
containers:
- name: nginx
image: nginx:1.16.1 # 覆蓋映像版本
使用以下命令來應用 Kustomize 組態:
kubectl apply -k ./production
這將會套用所有定義在 production
目錄中的資源和組態覆蓋。
模型集(Transformers):
資源生成器(Generators):
變數替換:
vars
來進行變數替換,允許你在多個資源檔案中使用統一的變數值。Kustomize 是一個強大且靈活的工具,使得 Kubernetes 組態管理變得更加高效和簡單。通過使用 Kustomize,你可以輕鬆地管理不同環境之間的組態變更,而無需手動修改每個環境的組態檔案。這樣,你的 Kubernetes 組態將更具可維護性和可重用性。
在接下來的課程中,我們將討論 Kubernetes 中 Pod 的生命周期與調度策略,這些概念將進一步提升你的 Kubernetes 知識。