在具備自動轉譯功能的多個環境中使用 Config Sync


本教學課程說明如何按照 Config Sync 最佳做法,為兩個環境 (一個用於開發,另一個用於實際工作環境) 設定 Google Kubernetes Engine (GKE) Enterprise 版的 Config Sync。

在這個情境中,您是 Foo Corp 平台管理團隊的成員。Foo Corp 應用程式已部署至 GKE Enterprise,資源則分散在 devprod 這兩個專案中。dev 專案包含開發 GKE Enterprise 叢集,prod 專案則包含生產環境 GKE Enterprise 叢集。平台管理員的目標是確保兩個環境都符合 Foo Corp 的政策,且 Kubernetes 命名空間和服務帳戶等基本層級資源在兩個環境中保持一致。

下圖概述您在本教學課程中設定的環境:

本教學課程中設定的環境總覽。

本教學課程會運用 Config Sync 的自動轉譯功能,在叢集上轉譯資源。每個叢集都設定為從含有 Kustomization 設定檔的目錄進行同步,這會自動觸發 Config Sync 中的轉譯程序。詳情請參閱「使用含有 Kustomize 設定和 Helm 圖表的存放區」。

如上圖所示,在本教學課程中,您會建立下列資源:

  • 兩個 Google Cloud 專案,分別代表開發和正式環境。
  • 兩個 GKE Enterprise 叢集 (devprod) 位於不同專案中,且已安裝 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.yamlprod/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 的使用者可能符合免費試用資格。

完成本文所述工作後,您可以刪除已建立的資源,避免繼續計費。詳情請參閱清除所用資源一節。

事前準備

開始本教學課程前,請先完成下列步驟:

  1. 在 Google Cloud 控制台的專案選取器頁面中,選擇或建立兩個 Google Cloud 專案。

    前往專案選取器

  2. Make sure that billing is enabled for your Google Cloud project.

  3. 升級 Google Cloud CLI 至最新版本。

  4. 安裝或升級 nomos 指令

建立及註冊叢集

為了讓您專注於為多個環境設定 Config Sync 時需要使用的工作流程,multi-environments-kustomize 目錄包含可用於自動設定 Config Sync 的指令碼。

  1. 複製範例存放區:

    git clone https://github.com/GoogleCloudPlatform/anthos-config-management-samples.git
    
  2. 前往內含本教學課程所需資源的資料夾:

    cd anthos-config-management-samples/multi-environments-kustomize/
    
  3. 如要執行本教學課程中使用的指令碼,請設定下列變數:

    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 專案 ID
    • PROD_PROJECT_ID:您要用做正式版專案的Google Cloud 專案 ID
    • DEV_CLUSTER_ZONE:您要在其中建立開發叢集的 Compute Engine 區域。例如:us-central1-c
    • PROD_CLUSTER_ZONE:您要在其中建立正式版叢集的 Compute Engine 區域
  4. 如要建立兩個叢集,請執行 ./create-clusters.sh 指令碼:

    ./create-clusters.sh
    

    這個指令碼會在開發專案中建立名為 dev 的 GKE Enterprise 叢集,並在生產環境專案中建立名為 prod 的 GKE Enterprise 叢集。這個指令碼也會啟用 GKE Enterprise API,並連線至 devprod 叢集,讓您能透過 kubectl 存取這些叢集的 API。

    輸出內容範例:

    kubeconfig entry generated for dev.
    Fetching cluster endpoint and auth data.
    kubeconfig entry generated for prod.
    ⭐️ Done creating clusters.
    
  5. 如要將叢集註冊至兩個不同的機群,請執行 register-clusters.sh 指令碼:

    ./register-clusters.sh
    

    這個指令碼會為 GKE Enterprise 叢集註冊建立 Google Cloud 服務帳戶和金鑰,然後使用 gcloud container fleet memberships register 指令,在各自的專案中將 devprod 叢集註冊至 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 現在會將存放區中的設定同步處理至叢集。

驗證您的設定

在本節中,您會檢查叢集是否與存放區中的設定同步:

  1. 如要檢查 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
    
      ```
    
  2. 使用 kubectl 切換至開發叢集:

    kubectl config use-context "gke_${DEV_PROJECT}_${DEV_CLUSTER_ZONE}_dev"
    
  3. 如要確認資源是否已同步,請取得命名空間。您應該會看到 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

刪除專案

  1. In the Google Cloud console, go to the Manage resources page.

    Go to Manage resources

  2. In the project list, select the project that you want to delete, and then click Delete.
  3. In the dialog, type the project ID, and then click Shut down to delete the project.

後續步驟