在本教學課程中,您會在存放區中新增參照 Helm 圖表的 Kustomize 設定,然後使用 Config Sync 將叢集與存放區同步。
使用 Config Sync 時,系統會自動算繪您放在 Git 存放區中的 Kustomize 設定和 Helm 圖表。自動算繪功能可帶來下列優點:
您不再需要外部補水管道。如果沒有自動算繪功能,您就必須在工作站上使用 Kustomize 和 Helm 手動算繪設定,或設定步驟,在 CI 系統中觸發補水程序。透過自動轉譯功能,Config Sync 會處理執行作業。
降低維護成本。如果沒有自動轉譯功能,您就必須維護一個含有原始 Kustomize 設定和 Helm 圖表的 Git 存放區,以及另一個含有外部補水作業所產生輸出的 Git 存放區。接著,您必須設定 Config Sync,從 Git 存放區同步處理已算繪的輸出內容。使用自動算繪功能時,您只需要維護一個含有原始設定的存放區。
簡化開發工作流程。如果沒有自動算繪功能,您必須先在原始存放區中審查原始設定的變更,然後在算繪的存放區中再次審查,才能合併變更。透過自動化算繪,算繪的設定檔會由 Config Sync 產生,您只需要檢查原始設定檔的變更。
設定存放區
下列工作說明如何準備含有設定的 Git 存放區,將 Kustomize 設定與 Helm 圖表合併:
建立或確保有權存取 Git 存放區。由於存放區使用 Kustomize 和 Helm,因此應為非結構化存放區。
在 Git 存放區的根目錄中,建立名為
kustomization.yaml
的檔案,然後將下列程式碼貼入其中:# ./kustomization.yaml resources: - base patches: - path: ignore-deployment-mutation-patch.yaml target: kind: Deployment
這個檔案是Kustomize 覆蓋, 指向 Kustomize 基礎。 這個疊加層包含 Helm 圖表基礎的修補程式,可將
client.lifecycle.config.k8s.io/mutation: ignore
註解新增至所有 Deployment 物件。建立物件後,註解會導致 Config Sync 忽略叢集中對該物件的任何衝突變更。在 Git 存放區中,建立名為
base
的目錄:mkdir base
在
base
目錄中,建立另一個名為kustomization.yaml
的檔案,並將下列程式碼貼入其中:# ./base/kustomization.yaml helmCharts: - name: cert-manager repo: https://charts.jetstack.io version: v1.5.3 releaseName: my-cert-manager namespace: cert-manager
這個檔案是 Kustomize 基礎,可轉譯遠端 Helm 圖表。
返回 Git 存放區的根目錄,建立名為
ignore-deployment-mutation-patch.yaml
的檔案,然後將下列程式碼貼入其中:# ./ignore-deployment-mutation-patch.yaml apiVersion: apps/v1 kind: Deployment metadata: name: any annotations: client.lifecycle.config.k8s.io/mutation: ignore
這個檔案是套用至基本 Helm chart 的修補程式。它會將
client.lifecycle.config.k8s.io/mutation: ignore
註解新增至基本目錄中的所有部署作業。將變更提交至存放區:
git add . git commit -m 'Set up manifests.' git push
範例存放區提供這類存放區的範例。
預覽及驗證已算繪的設定
在 Config Sync 算繪設定並同步至叢集之前,請先執行 nomos hydrate
預覽算繪的設定,並執行 nomos vet
驗證格式是否正確,確保設定正確無誤。
使用下列旗標執行下列
nomos hydrate
:nomos hydrate \ --source-format=unstructured \ --output=OUTPUT_DIRECTORY
在這個指令中:
- 「
--source-format=unstructured
」可讓「nomos hydrate
」處理非結構化存放區。由於您使用 Kustomize 設定和 Helm 圖表,因此必須使用非結構化存放區並新增這個旗標。 --output=OUTPUT_DIRECTORY
可讓您定義已算繪設定的路徑。將OUTPUT_DIRECTORY
替換為要儲存輸出的位置。
- 「
執行
nomos vet
並使用下列旗標,檢查設定的語法和有效性:nomos vet \ --source-format=unstructured \ --keep-output=true \ --output=OUTPUT_DIRECTORY
在這個指令中:
- 「
--source-format=unstructured
」可讓「nomos vet
」處理非結構化存放區。 --keep-output=true
儲存已算繪的設定。--output=OUTPUT_DIRECTORY
是已算繪設定的路徑。
- 「
設定從 Git 存放區同步處理
您已建立存放區,並加入要使用的設定,現在可以設定從叢集到存放區的同步作業。
如要設定
RootSync
物件,請建立root-sync.yaml
檔案:# root-sync.yaml apiVersion: configsync.gke.io/v1beta1 kind: RootSync metadata: name: root-sync namespace: config-management-system spec: sourceFormat: unstructured git: repo: YOUR_GIT_REPOSITORY branch: main auth: none override: enableShellInRendering: true
將
YOUR_GIT_REPOSITORY
替換為 Git 存放區的網址。將
root-sync.yaml
檔案套用至叢集:kubectl apply -f root-sync.yaml
驗證安裝
安裝及設定 Config Sync 後,您可以確認安裝是否成功。
使用
nomos status
確認沒有其他錯誤:nomos status
輸出內容範例:
*CLUSTER_NAME -------------------- <root> https:/github.com/GoogleCloudPlatform/anthos-config-management-samples.git/helm-component/manifests@init SYNCED fd17dd5a
確認 Helm 元件是否已成功安裝:
kubectl get all -n cert-manager
輸出內容範例:
NAME READY STATUS RESTARTS AGE pod/my-cert-manager-54f5ccf74-wfzs4 1/1 Running 0 10m pod/my-cert-manager-cainjector-574bc8678c-rh7mq 1/1 Running 0 10m pod/my-cert-manager-webhook-7454f4c77d-rkct8 1/1 Running 0 10m NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE service/my-cert-manager ClusterIP 10.76.9.35 <none> 9402/TCP 10m service/my-cert-manager-webhook ClusterIP 10.76.11.205 <none> 443/TCP 10m NAME READY UP-TO-DATE AVAILABLE AGE deployment.apps/my-cert-manager 1/1 1 1 10m deployment.apps/my-cert-manager-cainjector 1/1 1 1 10m deployment.apps/my-cert-manager-webhook 1/1 1 1 10m NAME DESIRED CURRENT READY AGE replicaset.apps/my-cert-manager-54f5ccf74 1 1 1 10m replicaset.apps/my-cert-manager-cainjector-574bc8678c 1 1 1 10m replicaset.apps/my-cert-manager-webhook-7454f4c77d 1 1 1 10m