使用 Kustomize 調度資源

使用 Kustomize 調度資源

程式碼研究室簡介

subject上次更新時間:4月 20, 2022
account_circle作者:Google 員工

1. 目標

Kustomize 這項工具能以無範本的方式自訂應用程式設定,簡化現成應用程式的使用。此版本可做為獨立公用程式,透過 kubectl apply -k 於 kubectl 建構,可做為獨立 CLI 使用。詳情請參閱 kustomize.io

在本教學課程中,您將逐步瞭解 Kustomize 的一些核心概念,並用來管理應用程式和環境中的變化版本。

您將學會以下內容:

  • 使用 kustomize 指令列用戶端
  • 覆寫常用元素
  • 修補較大的 yaml 結構
  • 使用多個疊加層圖層

2. 正在準備工作區

  1. 前往以下網址開啟 Cloud Shell 編輯器

https://ide.cloud.google.com

  1. 在終端機視窗中,為本教學課程建立工作目錄

mkdir kustomize-lab

  1. 變更為目錄並設定 IDE 工作區

cd kustomize-lab && cloudshell workspace .

3. 使用 kustomize 指令列用戶端

kustomize 的強大之處在於能夠以自訂值疊加及修改基礎 Kubernetes yaml,如要執行 kustize,則必須建立一個基礎檔案,其中包含檔案位置及要覆寫的內容。Kustomize 包含在 Kubernetes 生態系統中,可透過各種方法執行。

在本節中,您將建立基本 kustomize 設定,並使用獨立的 kustomize 指令列用戶端處理檔案。

  1. 首先,請建立存放基本設定檔的資料夾

mkdir -p chat-app/base

  1. 在基本資料夾中建立簡易的 Kubernetes deployment.yaml

cat <<EOF > chat-app/base/deployment.yaml

kind: Deployment

apiVersion: apps/v1

metadata:

name: app

spec:

template:

`metadata:`

 
`name: chat-app`

`spec:`

 
`containers:`

 
`- name: chat-app`

   
`image: chat-app-image`

EOF

  1. 建立基礎 kustomization.yaml

Kustomize 會尋找名為 kustomization.yaml 的檔案做為進入點。這個檔案包含各種基礎和覆寫檔案的參照,以及特定覆寫值。

建立 kustomization.yaml 檔案,參照 deployment.yaml 做為基礎資源。

cat <<EOF > chat-app/base/kustomization.yaml

bases:

- deployment.yaml

EOF

  1. 在基礎資料夾中執行 kustomize 指令。這樣一來,系統就會輸出沒有變更的部署 YAML 檔案,因為您尚未加入任何變化版本,因此預期會發生這個情況。

kustomize build chat-app/base

這個獨立用戶端可與 kubectl 用戶端結合,直接套用輸出內容,如以下範例所示。這麼做會將建構指令的輸出內容直接串流至 kubectl apply 指令。

(不執行:僅供參考)

kustomize build chat-app/base | kubectl apply -f -

如果需要特定版本的 Kustize 用戶端,這項技巧就非常實用。

您也可以使用 kubectl 本身整合的工具執行 kustomize。如以下範例所示。

(不執行:僅供參考)

kubectl apply -k chat-app/base

4. 覆寫共同元素

現在您的工作區已完成設定,且確認 kustomize 正常運作,接下來要覆寫部分基礎值。

針對各個應用程式和環境,我們通常會特別針對圖片、命名空間和標籤進行自訂。由於 Kustomize 經常變更,因此您可以直接在 kustomize.yaml 中宣告,無需為這些常見情境建立許多修補程式。

這項技巧常用於建立範本的特定例項。現在只需變更名稱及其命名空間,即可將一組基礎資源用於多個實作中。

在這個範例中,您將新增命名空間和名稱前置字串,並在 kustomization.yaml 中新增一些標籤。

  1. 更新 kustomization.yaml 檔案,加入常見的標籤和命名空間。

在終端機中複製並執行下列指令

cat <<EOF > chat-app/base/kustomization.yaml

bases:

- deployment.yaml

namespace: my-namespace

nameprefix: my-

commonLabels:

app: my-app

EOF

  1. 執行建構指令

此時執行建構作業,表示產生的 YAML 檔案現在包含服務和部署定義中的命名空間、標籤和前置字串名稱。

kustomize build chat-app/base

請注意輸出內容包含不在部署 YAML 檔案中的標籤和命名空間。另請注意,名稱已從「chat-app」變更為「my-chat-app

(請勿複製輸出內容)

kind: Deployment

metadata:

labels:

`app: my-app`

name: my-chat-app

namespace: my-namespace

5. 修補較大的 yaml 結構

此外,Kustomize 還能夠套用疊加基礎資源上的修補程式。這種技術通常用於確保應用程式和環境之間的差異。

在這個步驟中,您會為使用相同基本資源的單一應用程式建立環境變化版本。

  1. 第一步是為不同環境建立資料夾

mkdir -p chat-app/dev

mkdir -p chat-app/prod

  1. 使用下列指令編寫階段修補程式

cat <<EOF > chat-app/dev/deployment.yaml

kind: Deployment

apiVersion: apps/v1

metadata:

name: app

spec:

template:

`spec:`

 
`containers:`

 
`- name: chat-app`

   
`env:`

   
`- name: ENVIRONMENT`

     
`value: dev`

EOF

  1. 現在,請使用下列指令編寫 prod 修補程式

cat <<EOF > chat-app/prod/deployment.yaml

kind: Deployment

apiVersion: apps/v1

metadata:

name: app

spec:

template:

`spec:`

 
`containers:`

 
`- name: chat-app`

   
`env:`

   
`- name: ENVIRONMENT`

     
`value: prod`

EOF

請注意,上述修補程式並不包含容器映像檔名稱。該值會提供在您在上一步建立的 base/deployment.yaml 中。不過,這些修補程式確實包含 dev 和 prod 專屬的環境變數。

  1. 實作基本目錄的 kustomize YAML 檔案

重新編寫基本 kustomization.yaml,請移除命名空間和名稱前置字串,因為這是基本設定,沒有變化。這些欄位稍後就會移至環境檔案。

cat <<EOF > chat-app/base/kustomization.yaml

bases:

- deployment.yaml

commonLabels:

app: chat-app

EOF

  1. 實作開發目錄的 kustomize YAML 檔案

接著在終端機中執行下列指令,以便實作 dev 和 prod 的變化版本。

cat <<EOF > chat-app/dev/kustomization.yaml

bases:

- ../base

namespace: dev

nameprefix: dev-

commonLabels:

env: dev

patches:

- deployment.yaml

EOF

請注意,檔案中新增了 patches: 區段。這表示 kustomize 應將這些檔案重疊在基本資源之上。

  1. 實作 prod 目錄的 kustomize YAML 檔案

cat <<EOF > chat-app/prod/kustomization.yaml

bases:

- ../base

namespace: prod

nameprefix: prod-

commonLabels:

env: prod

patches:

- deployment.yaml

EOF

  1. 執行 kustomize 來合併檔案

建立基礎和環境檔案後,您就可以執行 kustize 程序來修補基礎檔案。

為開發人員執行下列指令,查看合併結果。

kustomize build chat-app/dev

請注意,輸出結果會包含合併結果,例如基礎和開發人員設定的標籤、基準的容器映像檔名稱,以及開發人員資料夾的環境變數。

6. 使用多個疊加層圖層

許多機構都設有團隊,負責協助應用程式團隊及管理平台。經常要納入記錄代理程式等所有環境所有應用程式的特定詳細資料。

在這個例子中,您會建立 shared-kustomize 資料夾和資源。所有應用程式都會納入這個資料夾,無論應用程式部署的環境為何。

  1. 建立 shared-kustomize 資料夾

mkdir shared-kustomize

  1. 在共用資料夾中建立簡易的 deployment.yaml

cat <<EOF > shared-kustomize/deployment.yaml

kind: Deployment

apiVersion: apps/v1

metadata:

name: app

spec:

template:

`spec:`

 
`containers:`

 
`- name: logging-agent`

   
`image: logging-agent-image`

EOF

  1. 在共用資料夾中建立 kustomization.yaml

cat <<EOF > shared-kustomize/kustomization.yaml

bases:

- deployment.yaml

EOF

  1. 從應用程式參照 shared-kustomize 資料夾

由於您想將 shared-kustomize 資料夾做為所有應用程式的基礎,因此必須更新 chat-app/base/kustomization.yaml 以使用 shared-kustomize 做為基礎。然後修補專屬的 Deployment.yaml。之後,環境資料夾會再次修補。

在終端機中複製並執行下列指令

cat <<EOF > chat-app/base/kustomization.yaml

bases:

- ../../shared-kustomize

commonLabels:

app: chat-app

patches:

- deployment.yaml

EOF

  1. 執行 kustomize 並查看開發人員的合併結果

kustomize build chat-app/dev

請注意,輸出結果包含應用程式集、應用程式環境和 shared-kustomize 資料夾的合併結果。具體而言,您可以看到這三個位置的容器部分值。

(未複製輸出內容)

<pre>

`containers:`

     
`- env:`

       
`- name: ENVIRONMENT`

         
`value: dev`

       
`name: chat-app`

     
`- image: image`

       
`name: app`

     
`- image: logging-agent-image`

       
`name: logging-agent`

</pre>