在本教學課程中,您會在存放區中新增參照 Helm 圖表的 Kustomize 設定,然後使用 Config Sync 將叢集與存放區同步。
使用 Config Sync 時,系統會自動算繪您放在 Git 存放區中的 Kustomize 設定和 Helm 圖表。自動算繪功能可帶來下列優點:
您不再需要外部補水管道。如果沒有自動算繪功能,您就必須在工作站上使用 Kustomize 和 Helm 手動算繪設定,或設定步驟,在 CI 系統中觸發補水程序。透過自動轉譯功能,Config Sync 會處理執行作業。
降低維護成本。如果沒有自動轉譯功能,您就必須維護一個 Git 存放區,其中包含原始的 Kustomize 設定和 Helm 圖表,以及另一個 Git 存放區,其中包含外部補水作業產生的輸出內容。接著,您必須設定 Config Sync,從 Git 存放區同步處理已算繪的輸出內容。使用自動算繪功能時,您只需要維護一個含有原始設定的存放區。
簡化開發工作流程。如果沒有自動算繪功能,原始設定檔的變更必須經過兩次審查才能合併:一次在原始存放區,另一次在算繪的存放區。透過自動算繪功能,算繪的設定檔會由 Config Sync 產生,您只需要檢查原始設定檔的變更。
目標
- 使用 Kustomize 設定設定存放區,並參照 cert-manager 的現成 Helm 圖表。cert-manager 是 Kubernetes 的工具,可協助您管理憑證。
- 預覽並驗證您建立的設定。
- 使用 Config Sync 自動轉譯圖表,並將叢集同步至存放區。
- 確認安裝是否成功。
費用
在本文件中,您會使用 Google Cloud的下列計費元件:
如要根據預測用量估算費用,請使用 Pricing Calculator。
完成本文所述工作後,您可以刪除已建立的資源,避免繼續計費。詳情請參閱清除所用資源一節。
事前準備
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Verify that billing is enabled for your Google Cloud project.
- 建立或確保您有權存取符合 Config Sync 需求的叢集,並使用下列 Config Sync 設定:
- 使用非結構化存放區。
- 已啟用
RootSync
和RepoSync
API。 spec.override.enableShellInRendering
設為true
,讓 Config Sync 支援在算繪程序中從公開存放區提取遠端基礎。
- 將叢集註冊至機群。
- 安裝
nomos
指令列工具。 如果已安裝nomos
工具,請務必升級至 1.9.0 以上版本。 - 安裝 Helm。
此外,熟悉 Git、Kustomize 和 Helm 也有助於上手。
設定存放區
下列工作說明如何準備含有設定的 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 存放區同步處理
您已使用要使用的設定建立存放區,現在可以設定從叢集到存放區的同步作業。如果已安裝 Config Sync,請繼續驗證同步狀態。
- 前往 Google Cloud 控制台的「Features」(功能) 區段,然後點選「Config」(設定) 頁面。
- 按一下「安裝 Config Sync」add。
- 選取要使用的 Config Sync 版本。
- 在「安裝選項」下方,選取「在個別叢集安裝 Config Sync」。
- 在「Available clusters」(可用叢集) 表格中,選取
cs-cluster
並按一下「Install Config Sync」(安裝 Config Sync)。 在「設定」分頁中,幾分鐘後,cs-cluster
的狀態應會顯示為「已啟用」。 - 在「Config Sync dashboard」(Config Sync 資訊主頁) 上,按一下「Deploy cluster package」(部署叢集套件)。
- 在「Select clusters for package deployment」(選取要部署套件的叢集) 表格中,選取
cs-cluster
,然後按一下「Continue」(繼續)。 - 保留選取的「Package hosted on Git」(Git 上託管的套件),然後按一下「Continue」(繼續)。
- 在「Package name」(套件名稱) 欄位中,輸入
sample-repository
。 - 在「Repository URL」(存放區網址) 欄位中,輸入
https://github.com/GoogleCloudPlatform/anthos-config-management-samples
。 - 在「Path」(路徑) 欄位中輸入
config-sync-quickstart/multirepo/root
。 - 所有其他欄位則保留預設值。
按一下「Deploy Package」(部署套件)。
幾分鐘後,
cs-cluster
的「Sync status」(同步處理狀態) 欄應該會顯示「Synced」(同步處理完成)。
驗證安裝
安裝及設定 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
清除所用資源
如要避免系統向您的 Google Cloud 帳戶收取本教學課程中所用資源的相關費用,請刪除含有該項資源的專案,或者保留專案但刪除個別資源。
刪除專案
- In the Google Cloud console, go to the Manage resources page.
- In the project list, select the project that you want to delete, and then click Delete.
- In the dialog, type the project ID, and then click Shut down to delete the project.
刪除個別資源
刪除存放區中的資訊清單
為避免誤刪,Config Sync 不允許您在單一提交中移除所有命名空間或叢集範圍資源。請按照下列操作說明,以正常方式解除安裝元件,並在個別提交中移除命名空間:
從存放區中移除 cert-manager 元件:
git rm -rf manifests/cert-manager \ && git commit -m "uninstall cert-manager" \ && git push origin BRANCH
將
BRANCH
替換為您建立存放區的分支。刪除 cert-manager 命名空間:
git rm manifests/namespace-cert-manager.yaml \ && git commit -m "remove the cert-manager namespace" \ && git push origin BRANCH
確認 cert-manager 命名空間不存在:
kubectl get namespace cert-namespace
輸出內容範例:
Error from server (NotFound): namespaces "cert-namespace" not found
刪除叢集
如要刪除叢集,請完成下列指令:
控制台
如要使用 Google Cloud 控制台刪除叢集,請完成下列工作:
前往 Google Cloud 控制台的 GKE 頁面。
按一下要刪除的叢集旁的more_vert「Actions」(動作),然後按一下delete「Delete」(刪除)。
系統提示您進行確認時,再按一下 [Delete] (刪除)。
gcloud
如要使用 Google Cloud CLI 刪除叢集,請執行下列指令:
gcloud container clusters delete CLUSTER_NAME
詳情請參閱 gcloud container clusters delete
說明文件。