1. 目標
Kustomize 這項工具能以無範本的方式自訂應用程式設定,簡化現成應用程式的使用。此版本可做為獨立公用程式,透過 kubectl apply -k
於 kubectl 建構,可做為獨立 CLI 使用。詳情請參閱 kustomize.io。
在本教學課程中,您將逐步瞭解 Kustomize 的一些核心概念,並用來管理應用程式和環境中的變化版本。
您將學會以下內容:
- 使用 kustomize 指令列用戶端
- 覆寫常用元素
- 修補較大的 yaml 結構
- 使用多個疊加層圖層
2. 正在準備工作區
- 前往以下網址開啟 Cloud Shell 編輯器
https://ide.cloud.google.com
- 在終端機視窗中,為本教學課程建立工作目錄
mkdir kustomize-lab
- 變更為目錄並設定 IDE 工作區
cd kustomize-lab && cloudshell workspace .
3. 使用 kustomize 指令列用戶端
kustomize 的強大之處在於能夠以自訂值疊加及修改基礎 Kubernetes yaml,如要執行 kustize,則必須建立一個基礎檔案,其中包含檔案位置及要覆寫的內容。Kustomize 包含在 Kubernetes 生態系統中,可透過各種方法執行。
在本節中,您將建立基本 kustomize 設定,並使用獨立的 kustomize 指令列用戶端處理檔案。
- 首先,請建立存放基本設定檔的資料夾
mkdir -p chat-app/base
- 在基本資料夾中建立簡易的 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
- 建立基礎
kustomization.yaml
Kustomize 會尋找名為 kustomization.yaml 的檔案做為進入點。這個檔案包含各種基礎和覆寫檔案的參照,以及特定覆寫值。
建立 kustomization.yaml
檔案,參照 deployment.yaml
做為基礎資源。
cat <<EOF > chat-app/base/kustomization.yaml
bases:
- deployment.yaml
EOF
- 在基礎資料夾中執行 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
中新增一些標籤。
- 更新
kustomization.yaml
檔案,加入常見的標籤和命名空間。
在終端機中複製並執行下列指令
cat <<EOF > chat-app/base/kustomization.yaml
bases:
- deployment.yaml
namespace: my-namespace
nameprefix: my-
commonLabels:
app: my-app
EOF
- 執行建構指令
此時執行建構作業,表示產生的 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 還能夠套用疊加基礎資源上的修補程式。這種技術通常用於確保應用程式和環境之間的差異。
在這個步驟中,您會為使用相同基本資源的單一應用程式建立環境變化版本。
- 第一步是為不同環境建立資料夾
mkdir -p chat-app/dev
mkdir -p chat-app/prod
- 使用下列指令編寫階段修補程式
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
- 現在,請使用下列指令編寫 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 專屬的環境變數。
- 實作基本目錄的 kustomize YAML 檔案
重新編寫基本 kustomization.yaml,請移除命名空間和名稱前置字串,因為這是基本設定,沒有變化。這些欄位稍後就會移至環境檔案。
cat <<EOF > chat-app/base/kustomization.yaml
bases:
- deployment.yaml
commonLabels:
app: chat-app
EOF
- 實作開發目錄的 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 應將這些檔案重疊在基本資源之上。
- 實作 prod 目錄的 kustomize YAML 檔案
cat <<EOF > chat-app/prod/kustomization.yaml
bases:
- ../base
namespace: prod
nameprefix: prod-
commonLabels:
env: prod
patches:
- deployment.yaml
EOF
- 執行 kustomize 來合併檔案
建立基礎和環境檔案後,您就可以執行 kustize 程序來修補基礎檔案。
為開發人員執行下列指令,查看合併結果。
kustomize build chat-app/dev
請注意,輸出結果會包含合併結果,例如基礎和開發人員設定的標籤、基準的容器映像檔名稱,以及開發人員資料夾的環境變數。
6. 使用多個疊加層圖層
許多機構都設有團隊,負責協助應用程式團隊及管理平台。經常要納入記錄代理程式等所有環境所有應用程式的特定詳細資料。
在這個例子中,您會建立 shared-kustomize
資料夾和資源。所有應用程式都會納入這個資料夾,無論應用程式部署的環境為何。
- 建立 shared-kustomize 資料夾
mkdir shared-kustomize
- 在共用資料夾中建立簡易的
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
- 在共用資料夾中建立 kustomization.yaml
cat <<EOF > shared-kustomize/kustomization.yaml
bases:
- deployment.yaml
EOF
- 從應用程式參照 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
- 執行 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>