iT邦幫忙

2024 iThome 鐵人賽

DAY 22
0
Kubernetes

Kubernetes三十天就上手系列 第 22

Day 22- 使用 Kustomize 進行 Kubernetes 設定管理

  • 分享至 

  • xImage
  •  

使用 Kustomize 進行 Kubernetes 設定管理

Kustomize 的基本用法和設定

Kustomize 是 Kubernetes 原生的組態管理工具,它允許你通過覆蓋組態檔案來靈活地管理和修改 Kubernetes 應用程式的 YAML 檔案,而不需要對原始組態進行複製和修改。Kustomize 使得在不同環境之間(如開發、測試、和正式環境)管理和部署應用程式更加簡單和一致。今天,我們將深入探討 Kustomize 的基本用法和設定。

Kustomize 的基本概念

  1. Kustomization

    • Kustomization 是 Kustomize 的核心概念,它定義了應用程式的資源、更新檔(Patches)、生成器(Generators)以及模型集(Transformers)。
    • 通常 Kustomization 檔案的名稱是 kustomization.yaml,這個檔案描述了如何組合、覆蓋和生成 Kubernetes 資源。
  2. Base 和 Overlay

    • Base:Base 是應用程式的基本組態,通常是通用的,可以應用於多個環境。
    • Overlay:Overlay 是在 Base 基礎上進行的組態覆蓋,用於定義環境特定的組態。例如,你可以為開發、測試、和正式環境定義不同的 Overlay。

安裝 Kustomize

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

Kustomization 檔案的基本結構

它使用目錄結構和設定檔案來定義、生成和修改 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

結構說明

  1. base/: 基本設定,這些是所有環境共用的 Kubernetes 資源定義,通常不會直接應用,而是被 overlays 引用。

    • kustomization.yaml: 定義該目錄下有哪些資源檔案(如 deployment.yaml 和 service.yaml)將被納入 Kustomize。
    • deployment.yaml: 定義 Kubernetes Deployment 資源。
    • service.yaml: 定義 Kubernetes Service 資源。
  2. overlays/: 包含針對不同環境的設定覆蓋(如 dev、prod 等),這些會引用 base 並加上環境特定的設定。

    • dev/: 開發環境的設定。
      • kustomization.yaml: 引用 base 目錄,並應用特定於開發環境的修改(如 configmap 和 patch)。
      • configmap.yaml: 開發環境的 ConfigMap 定義。
      • patch-deployment.yaml: 使用 patch 修改 base 中的 Deployment 定義(如調整 replicas 等)。
    • prod/: 正式環境的設定。
      • kustomization.yaml: 引用 base 目錄,並應用特定於正式環境的修改。
      • configmap.yaml: 正式環境的 ConfigMap 定義。
      • patch-deployment.yaml: 針對正式環境的 Deployment 設定變更(如增加 replicas)。

kustomization.yaml 檔案範例

base/kustomization.yaml:

resources:
  - deployment.yaml
  - service.yaml

overlays/dev/kustomization.yaml:

resources:
  - ../../base

patchesStrategicMerge:
  - patch-deployment.yaml

configMapGenerator:
  - name: app-config
    literals:
      - ENV=dev

overlays/prod/kustomization.yaml:

resources:
  - ../../base

patchesStrategicMerge:
  - patch-deployment.yaml

configMapGenerator:
  - name: app-config
    literals:
      - ENV=prod

這個結構允許你根據環境輕鬆定制 Kubernetes 資源,並保持基礎設定的可重用性。

kustomization.yaml 檔案結構說明

以下是 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
  • resources:指定要管理的 Kubernetes 資源檔案。
  • patchesStrategicMerge:指定要合併的更新檔案,用於覆蓋或修改原始資源定義。
  • configMapGeneratorsecretGenerator:用於生成 ConfigMap 和 Secret 資源。

使用 Kustomize 進行組態管理的基本步驟

1. 創建 Base 組態

首先,你需要創建一個基本組態(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

2. 創建 Overlay 組態

接下來,為不同的環境創建 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  # 覆蓋映像版本

3. 套用 Kustomization 組態

使用以下命令來應用 Kustomize 組態:

kubectl apply -k ./production

這將會套用所有定義在 production 目錄中的資源和組態覆蓋。

Kustomize 的進階用法

  1. 模型集(Transformers)

    • Kustomize 支援使用模型集來動態修改資源的組態,例如變更 ConfigMap 的鍵值或調整資源名稱。
  2. 資源生成器(Generators)

    • 你可以使用生成器來動態創建 ConfigMap 和 Secret 資源,並在 Kustomization 檔案中進行引用。
  3. 變數替換

    • Kustomize 支援通過 vars 來進行變數替換,允許你在多個資源檔案中使用統一的變數值。

總結

Kustomize 是一個強大且靈活的工具,使得 Kubernetes 組態管理變得更加高效和簡單。通過使用 Kustomize,你可以輕鬆地管理不同環境之間的組態變更,而無需手動修改每個環境的組態檔案。這樣,你的 Kubernetes 組態將更具可維護性和可重用性。

在接下來的課程中,我們將討論 Kubernetes 中 Pod 的生命周期與調度策略,這些概念將進一步提升你的 Kubernetes 知識。


上一篇
Day 21- Kubernetes 的套件管理工具 Helm
下一篇
Day 23- Pod 的生命周期與調度策略
系列文
Kubernetes三十天就上手30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言