本教學課程說明如何按照 Config Sync 最佳做法,為兩個環境 (一個用於開發,另一個用於實際工作環境) 設定 Google Kubernetes Engine (GKE) Enterprise 版的 Config Sync。
在這個情境中,您是 Foo Corp 平台管理團隊的成員。Foo Corp 應用程式已部署至 GKE Enterprise,資源則分散在 dev
和 prod
這兩個專案中。dev
專案包含開發 GKE Enterprise 叢集,prod
專案則包含生產環境 GKE Enterprise 叢集。平台管理員的目標是確保兩個環境都符合 Foo Corp 的政策,且 Kubernetes 命名空間和服務帳戶等基本層級資源在兩個環境中保持一致。
下圖概述您在本教學課程中設定的環境:
本教學課程會運用 Config Sync 的自動轉譯功能,在叢集上轉譯資源。每個叢集都設定為從含有 Kustomization 設定檔的目錄進行同步,這會自動觸發 Config Sync 中的轉譯程序。詳情請參閱「使用含有 Kustomize 設定和 Helm 圖表的存放區」。
如上圖所示,在本教學課程中,您會建立下列資源:
- 兩個 Google Cloud 專案,分別代表開發和正式環境。
- 兩個 GKE Enterprise 叢集 (
dev
和prod
) 位於不同專案中,且已安裝 Config Sync。
存放區架構
在本教學課程中,您將設定 Config Sync,以便將範例存放區 config-source/
目錄中的設定同步處理至 Config Sync。這個目錄包含下列目錄和檔案:
config-source/
├── base
│ ├── foo
│ │ ├── kustomization.yaml
│ │ ├── namespace.yaml
│ │ └── serviceaccount.yaml
│ ├── kustomization.yaml
│ ├── pod-creator-clusterrole.yaml
│ └── pod-creator-rolebinding.yaml
├── cloudbuild.yaml
├── overlays
│ ├── dev
│ │ └── kustomization.yaml
│ └── prod
│ └── kustomization.yaml
└── README.md
config-source
目錄包含 base/
資訊清單,以及 dev/
和 prod/
Kustomize 疊加層。每個目錄都包含 kustomization.yaml
檔案,其中列出 Kustomize 應管理及套用至叢集的檔案。在 dev/kustomization.yaml
和 prod/kustomization.yaml
中,會定義一系列修補程式。這些修補程式會操控特定環境的 base/
資源。
舉例來說,開發人員 RoleBinding 允許所有 Foo Corp 開發人員將 Pod 部署至開發叢集,而生產環境 RoleBinding 只允許持續部署代理程式 deploy-bot@foo-corp.com
將 Pod 部署至生產環境:
apiVersion: kustomize.config.k8s.io/v1beta1
kind: Kustomization
resources:
- ../../base
patches:
# ServiceAccount - make name unique per environ
- target:
kind: ServiceAccount
name: foo-ksa
patch: |-
- op: replace
path: /metadata/name
value: foo-ksa-dev
- op: replace
path: /metadata/namespace
value: foo-dev
# Pod creators - give all Foo Corp developers access
- target:
kind: RoleBinding
name: pod-creators
patch: |-
- op: replace
path: /subjects/0/name
value: developers-all@foo-corp.com
commonLabels:
environment: dev
目標
- 設定 Config Sync,自動轉譯及同步處理兩個獨立環境的設定。
費用
在本文件中,您會使用 Google Cloud的下列計費元件:
如要根據預測用量估算費用,請使用 Pricing Calculator。
完成本文所述工作後,您可以刪除已建立的資源,避免繼續計費。詳情請參閱清除所用資源一節。
事前準備
開始本教學課程前,請先完成下列步驟:
在 Google Cloud 控制台的專案選取器頁面中,選擇或建立兩個 Google Cloud 專案。
-
Make sure that billing is enabled for your Google Cloud project.
升級 Google Cloud CLI 至最新版本。
安裝或升級
nomos
指令
建立及註冊叢集
為了讓您專注於為多個環境設定 Config Sync 時需要使用的工作流程,multi-environments-kustomize
目錄包含可用於自動設定 Config Sync 的指令碼。
複製範例存放區:
git clone https://github.com/GoogleCloudPlatform/anthos-config-management-samples.git
前往內含本教學課程所需資源的資料夾:
cd anthos-config-management-samples/multi-environments-kustomize/
如要執行本教學課程中使用的指令碼,請設定下列變數:
export DEV_PROJECT="DEV_PROJECT_ID" export PROD_PROJECT="PROD_PROJECT_ID" export DEV_CLUSTER_ZONE="DEV_CLUSTER_ZONE" export PROD_CLUSTER_ZONE="PROD_CLUSTER_ZONE" export CM_CONFIG_DIR="config-sync-rendering"
更改下列內容:
DEV_PROJECT_ID
:您要用做開發專案的Google Cloud 專案 IDPROD_PROJECT_ID
:您要用做正式版專案的Google Cloud 專案 IDDEV_CLUSTER_ZONE
:您要在其中建立開發叢集的 Compute Engine 區域。例如:us-central1-c
。PROD_CLUSTER_ZONE
:您要在其中建立正式版叢集的 Compute Engine 區域
如要建立兩個叢集,請執行
./create-clusters.sh
指令碼:./create-clusters.sh
這個指令碼會在開發專案中建立名為
dev
的 GKE Enterprise 叢集,並在生產環境專案中建立名為prod
的 GKE Enterprise 叢集。這個指令碼也會啟用 GKE Enterprise API,並連線至dev
和prod
叢集,讓您能透過kubectl
存取這些叢集的 API。輸出內容範例:
kubeconfig entry generated for dev. Fetching cluster endpoint and auth data. kubeconfig entry generated for prod. ⭐️ Done creating clusters.
如要將叢集註冊至兩個不同的機群,請執行
register-clusters.sh
指令碼:./register-clusters.sh
這個指令碼會為 GKE Enterprise 叢集註冊建立 Google Cloud 服務帳戶和金鑰,然後使用
gcloud container fleet memberships register
指令,在各自的專案中將dev
和prod
叢集註冊至 GKE Enterprise。輸出內容範例:
Waiting for Feature Config Management to be created...done. ⭐️ Done registering clusters.
設定 Config Sync
您已建立並註冊叢集,現在可以安裝 Config Sync 並驗證安裝作業。
安裝 Config Sync
如要安裝 Config Sync,請在開發和正式版叢集上執行 install-config-sync.sh
指令碼:
./install-config-sync.sh
預期輸出內容:
🔁 Installing ConfigSync on the dev cluster...
Updated property [core/project].
Switched to context "DEV_CLUSTER".
Waiting for Feature Config Management to be updated...done.
🔁 Installing ConfigSync on the prod cluster...
Updated property [core/project].
Switched to context "PROD_CLUSTER".
Waiting for Feature Config Management to be updated...done.
Config Sync 現在會將存放區中的設定同步處理至叢集。
驗證您的設定
在本節中,您會檢查叢集是否與存放區中的設定同步:
如要檢查 Config Sync 安裝狀態,請執行
nomos status
指令:nomos status
您應該會看到開發和正式叢集現在都已同步至各自的存放區:
gke_DEV_PROJECT_ID_us-central1-c_dev -------------------- <root> https://github.com/GoogleCloudPlatform/anthos-config-management-samples/multi-environments-kustomize/config-source/overlays/dev@main SYNCED 8f2e196f Managed resources: NAMESPACE NAME STATUS clusterrole.rbac.authorization.k8s.io/pod-creator Current namespace/default Current namespace/foo Current default rolebinding.rbac.authorization.k8s.io/pod-creators Current foo serviceaccount/foo-ksa-dev Current *gke_PROD_PROJECT_ID_us-central1-c_prod -------------------- <root> https://github.com/GoogleCloudPlatform/anthos-config-management-samples/multi-environments-kustomize/config-source/overlays/prod@main SYNCED c91502ee Managed resources: NAMESPACE NAME STATUS clusterrole.rbac.authorization.k8s.io/pod-creator Current namespace/default Current namespace/foo Current default rolebinding.rbac.authorization.k8s.io/pod-creators Current foo serviceaccount/foo-ksa-prod Current ```
使用
kubectl
切換至開發叢集:kubectl config use-context "gke_${DEV_PROJECT}_${DEV_CLUSTER_ZONE}_dev"
如要確認資源是否已同步,請取得命名空間。您應該會看到
foo
命名空間。kubectl get namespace
輸出內容範例:
NAME STATUS AGE config-management-monitoring Active 9m38s config-management-system Active 9m38s default Active 47h foo Active 9m5s kube-node-lease Active 47h kube-public Active 47h kube-system Active 47h resource-group-system Active 9m30s
您現在已為多個 Google Cloud 專案和環境的開發與正式環境,設定自動設定轉譯功能。
清除所用資源
如要避免系統向您的 Google Cloud 帳戶收取本教學課程中所用資源的相關費用,請刪除含有該項資源的專案,或者保留專案但刪除個別資源。
刪除所有資源
如要刪除在本教學課程中建立的資源,但保留開發和正式版專案,請執行清除指令碼:
./cleanup.sh
刪除專案
- 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 安全推出
- 探索 Google Cloud 的參考架構、圖表和最佳做法。 歡迎瀏覽我們的雲端架構中心。