在整個機群中部署資源

本教學課程說明如何使用機群套件,在機群的叢集中部署 Kubernetes 資源資訊清單。使用 Config Sync 的機群套件等 GitOps 工具,有助於在大量叢集中擴充設定管理功能。

在本教學課程中,您將完成下列工作:

  • 將 Git 存放區連結至 Cloud Build
  • 建立叢集並註冊至機群
  • 將 Config Sync 安裝為機群預設設定
  • 將存放區中的資源部署至叢集機群

事前準備

  1. 登入 Google Cloud 帳戶。如果您是 Google Cloud新手,歡迎 建立帳戶,親自評估產品在實際工作環境中的成效。新客戶還能獲得價值 $300 美元的免費抵免額,可用於執行、測試及部署工作負載。
  2. 安裝 Google Cloud CLI。

  3. 若您採用的是外部識別資訊提供者 (IdP),請先使用聯合身分登入 gcloud CLI

  4. 執行下列指令,初始化 gcloud CLI:

    gcloud init
  5. 建立或選取 Google Cloud 專案

    選取或建立專案所需的角色

    • 選取專案:選取專案時,不需要具備特定 IAM 角色,只要您已獲授角色,即可選取任何專案。
    • 建立專案:如要建立專案,您需要具備專案建立者角色 (roles/resourcemanager.projectCreator),其中包含 resourcemanager.projects.create 權限。瞭解如何授予角色
    • 建立 Google Cloud 專案:

      gcloud projects create PROJECT_ID

      PROJECT_ID 替換為您要建立的 Google Cloud 專案名稱。

    • 選取您建立的 Google Cloud 專案:

      gcloud config set project PROJECT_ID

      PROJECT_ID 替換為 Google Cloud 專案名稱。

  6. 確認專案已啟用計費功能 Google Cloud

  7. 啟用 GKE、Config Delivery (機群套件)、Cloud Build、Developer Connect API:

    啟用 API 時所需的角色

    如要啟用 API,您需要具備服務使用情形管理員 IAM 角色 (roles/serviceusage.serviceUsageAdmin),其中包含 serviceusage.services.enable 權限。瞭解如何授予角色

    gcloud services enable container.googleapis.com  configdelivery.googleapis.com  cloudbuild.googleapis.com  developerconnect.googleapis.com
  8. 安裝 Google Cloud CLI。

  9. 若您採用的是外部識別資訊提供者 (IdP),請先使用聯合身分登入 gcloud CLI

  10. 執行下列指令,初始化 gcloud CLI:

    gcloud init
  11. 建立或選取 Google Cloud 專案

    選取或建立專案所需的角色

    • 選取專案:選取專案時,不需要具備特定 IAM 角色,只要您已獲授角色,即可選取任何專案。
    • 建立專案:如要建立專案,您需要具備專案建立者角色 (roles/resourcemanager.projectCreator),其中包含 resourcemanager.projects.create 權限。瞭解如何授予角色
    • 建立 Google Cloud 專案:

      gcloud projects create PROJECT_ID

      PROJECT_ID 替換為您要建立的 Google Cloud 專案名稱。

    • 選取您建立的 Google Cloud 專案:

      gcloud config set project PROJECT_ID

      PROJECT_ID 替換為 Google Cloud 專案名稱。

  12. 確認專案已啟用計費功能 Google Cloud

  13. 啟用 GKE、Config Delivery (機群套件)、Cloud Build、Developer Connect API:

    啟用 API 時所需的角色

    如要啟用 API,您需要具備服務使用情形管理員 IAM 角色 (roles/serviceusage.serviceUsageAdmin),其中包含 serviceusage.services.enable 權限。瞭解如何授予角色

    gcloud services enable container.googleapis.com  configdelivery.googleapis.com  cloudbuild.googleapis.com  developerconnect.googleapis.com
  14. 建立或存取 GitHub 帳戶。

費用

在本文件中,您會使用下列 Google Cloud的計費元件:

如要根據預測用量估算費用,請使用 Pricing Calculator

初次使用 Google Cloud 的使用者可能符合免費試用期資格。

連結至 Git

Git 存放區包含要在整個機群中部署的資源。如要使用叢集套件部署這些資源,必須將 Git 存放區連結至 Cloud Build。

建立 Git 存放區

本教學課程使用 GitHub 做為 Git 供應商。如要建立新的 GitHub 存放區,請完成下列步驟:

  1. 在網路瀏覽器中開啟 GitHub

  2. 如有需要,請登入 GitHub 帳戶。如果您有權存取 GitHub 上的其他機構或團隊,請務必使用個人帳戶建立存放區。

  3. 選取工具列中的「新增」,然後按一下「新增存放區」

  4. 輸入 fleet-package-tutorial 做為存放區的名稱。

  5. 請保持選取「公開」做為存放區顯示設定。

  6. 選取「建立存放區」

將存放區連結至 Cloud Build

Config Sync 的機群套件服務會使用 Cloud Build,從 Git 存放區同步處理及擷取 Kubernetes 資源。

如要將 GitHub 存放區連結至 Cloud Build,請完成下列步驟:

  1. 在 Google Cloud 控制台中開啟 Cloud Build 頁面,然後選取「Repositories」(存放區)

    開啟「Repositories」(存放區) 頁面

  2. 確認您位於第 2 代「存放區」頁面。視需要選取「查看存放區 (第 2 代)」

  3. 按一下「建立主機連線」

  4. 在「Region」(區域) 選單中,選取「us-central1 (Iowa)」(us-central1 (愛荷華州)) 做為區域。

  5. 在「Name」(名稱) 欄位中,輸入 fleet-package-quickstart-connection 做為連線名稱。

  6. 按一下「連線」

  7. 如果是首次將 Cloud Build 連結至 GitHub 帳戶,請完成下列步驟:

    1. 接受 GitHub OAuth 權杖要求。權杖會儲存在 Secret Manager 中,供 Cloud Build GitHub 連線使用。按一下「繼續」
    2. 在 GitHub 存放區中安裝 Cloud Build。選取「在新帳戶中安裝」
    3. 在開啟的新 GitHub 視窗中,選取您先前建立 Cymbal Bank 分支的 GitHub 帳戶。在正式環境中,您可能會選取已委派存取權的其他帳戶或存放區。
    4. 按照驗證提示操作,在 GitHub 中確認身分。
    5. 在 Cloud Build 存放區存取權的 GitHub 視窗中,選擇「Only select repositories」
    6. 在列出存放區的下拉式選單中,選取 fleet-package-tutorial 存放區。
    7. 按一下 [儲存]
  8. 在控制台的 Cloud Build 頁面中,按一下「Link repository」(連結存放區),將新的 Git 存放區連結至 Cloud Build。 Google Cloud

  9. 在「連線」選單中,選取 fleet-package-quickstart-connection

  10. 在「Repositories」(存放區) 選單中,選取存放區 fleet-package-tutorial

  11. 選取「連結」

設定車隊

在本節中,您將建立叢集、向機群註冊叢集,並以機群套件的形式安裝 Config Sync,藉此設定機群。

建立叢集

為示範如何使用機群套件在多個叢集部署資源,本教學課程將說明如何建立兩個叢集。

如要建立這兩個叢集,並將其註冊至專案的機群,請按照下列步驟操作:

  1. 建立 GKE 叢集:

    gcloud container clusters create-auto cluster1 \
      --project=PROJECT_ID \
      --region=REGION \
      --fleet-project=PROJECT_ID \
      --release-channel=rapid
    

    更改下列內容:

    • PROJECT_ID 為您的專案 ID。
    • REGION 改為您要在其中建立叢集的地區,例如 us-central1
  2. 建立第二個 GKE 叢集:

    gcloud container clusters create-auto cluster2 \
      --project=PROJECT_ID \
      --region=REGION \
      --fleet-project=PROJECT_ID \
      --release-channel=rapid
    

將 Config Sync 安裝為機群預設設定

如要使用機群套件服務,必須在兩個叢集上安裝 Config Sync。如要一次在多個叢集上安裝 Config Sync,以及在日後註冊至機群的任何叢集上安裝,請完成下列步驟:

  1. 前往 Google Cloud 控制台的「Feature Manager」頁面。

    前往功能管理工具

  2. 在「Config Sync」窗格中,按一下「設定」

  3. 按一下「自訂車隊設定」。在隨即顯示的對話方塊中,選取要安裝的 Config Sync 版本。

  4. 按一下 [設定]

  5. 在「設定機群設定」確認對話方塊中,按一下「確認」。如果您先前未啟用 Config Sync,按一下「確認」也會啟用 anthosconfigmanagement.googleapis.com API。

  6. 在「機群中的叢集」資料表中,選取指定的兩個叢集,然後按一下「與機群設定同步」。這會在兩個叢集上安裝 Config Sync,並套用您設定的設定。

    叢集可能需要幾分鐘才能完成同步。Config Sync 顯示為「已安裝」時,即可繼續執行後續步驟。

設定 Cloud Build 的服務帳戶

如要建立服務帳戶並授予 Cloud Build 必要權限,請完成下列步驟:

  1. 建立服務帳戶:

    gcloud iam service-accounts create "quickstart-service-account"
    
  2. 新增 Resource Bundle Publisher 角色適用的 IAM 政策繫結,授予服務帳戶從 Git 存放區擷取資源的權限:

    gcloud projects add-iam-policy-binding PROJECT_ID \
       --member="serviceAccount:quickstart-service-account@PROJECT_ID.iam.gserviceaccount.com" \
       --role='roles/configdelivery.resourceBundlePublisher'
    

    如果系統出現提示,請選取「None」做為政策條件。

  3. 新增「記錄檔寫入者」角色的 IAM 政策繫結,授予服務帳戶寫入記錄的權限:

    gcloud projects add-iam-policy-binding PROJECT_ID \
       --member="serviceAccount:quickstart-service-account@PROJECT_ID.iam.gserviceaccount.com" \
       --role='roles/logging.logWriter'
    

    如果系統出現提示,請選取「None」做為政策條件。

  4. 為「Artifact Registry Writer」角色新增 IAM 政策繫結:

    gcloud projects add-iam-policy-binding PROJECT_ID \
       --member="serviceAccount:quickstart-service-account@PROJECT_ID.iam.gserviceaccount.com" \
       --role='roles/artifactregistry.writer'
    

    如果系統出現提示,請選取「None」做為政策條件。

在整個機群中部署資源

在本教學課程中,您會在 Git 存放區中新增含有 nginx 部署作業的 Kubernetes 資訊清單、發布版本,然後建立車隊套件來部署 nginx 應用程式。

將 Kubernetes 資訊清單提交至存放區

如要將資源新增至 GitHub 並發布版本,請完成下列步驟:

  1. 在 GitHub 存放區的網路瀏覽器視窗中,依序點選「Add file」(新增檔案) 和「Create new file」(建立新檔案)

  2. 將檔案命名為 deployment.yaml,然後將下列內容貼到檔案中:

    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: nginx-deployment
    spec:
      replicas: 3
      selector:
        matchLabels:
          app: nginx
      template:
        metadata:
          labels:
            app: nginx
        spec:
          containers:
          - image: nginx:1.14.2
            name: nginx
            ports:
            - containerPort: 80
    
  3. 按一下「修訂版本」

  4. 在確認對話方塊中,保持選取「直接提交至 main 分支版本」,然後按一下「提交變更」

  5. 在存放區的主要頁面中,從側欄選取「Releases」

  6. 選擇頁面頂端的「草擬新版本」

  7. 選取「選擇代碼」選單,然後輸入 v1.0.0 做為代碼。按一下「建立新代碼」

  8. 按一下「發布版本」

使用機群套件將資源部署至叢集

如要部署新資源,請建立新的車隊套件:

  1. 這個機群套件會以機群中的所有叢集為目標,因為它未定義叢集選取器 (位於 target.fleet 區段下方)。這個套件已設定為將部署變體 (衍生自 deployment.yaml 檔案) 部署至所有這些叢集。

    在 Cloud Shell 中,建立名為 fleet-package.yaml 的檔案,並在當中加入下列內容:

    resourceBundleSelector:
      cloudBuildRepository:
        name: projects/PROJECT_ID/locations/us-central1/connections/fleet-package-quickstart-connection/repositories/REPOSITORY_NAME
        tag: v1.0.0
        serviceAccount: projects/PROJECT_ID/serviceAccounts/quickstart-service-account@PROJECT_ID.iam.gserviceaccount.com
        path:
        # Match all files (including deployment.yaml) to generate variants
        variantsPattern: "*.yaml"
    target:
      fleet:
        project: projects/PROJECT_ID
    rolloutStrategy:
      rolling:
        maxConcurrent: 1
    variantSelector:
      # Explicitly match the variant generated from "deployment.yaml"
      variantNameTemplate: "deployment"
    

    請將 REPOSITORY_NAME 改成 Cloud Build 的存放區名稱。這通常採用 USERNAME-REPOSITORY_NAME 格式。

  2. 建立機群套件,開始推出作業:

    gcloud container fleet packages create fp-nginx \
       --source=fleet-package.yaml \
       --project=PROJECT_ID
    
  3. 確認機群套件已建立:

    gcloud container fleet packages list
    

    您可以按一下提供的連結,查看 Cloud Build 工作的串流記錄。

    機群套件會開始在機群中推出 Kubernetes 資源。

  4. 在 Google Cloud 控制台的 Google Kubernetes Engine 頁面中,前往「Workloads」(工作負載) 頁面,查看部署在所有 GKE 叢集上的工作負載匯總檢視畫面:

    開啟「Workloads」(工作負載) 頁面

    工作負載可能需要幾分鐘才會顯示。此外,Autopilot 為新部署作業調整資源要求時,您可能會發現可用性錯誤。

    請注意,由於機群套件定義中的 maxConcurrent: 設為 1,機群套件 API 會等到 nginx-deployment 完全部署至一個叢集後,再開始部署至第二個叢集。如果將推出策略變更為 maxConcurrent: 2 以上,資源就會同時部署到兩個叢集。

    幾分鐘後,您會在兩個叢集上看到 nginx-deployment 的兩個新工作負載。你可能需要重新整理頁面。

您可以繼續使用車隊套件,探索不同的部署策略。 舉例來說,您可以將新叢集加入機群,觀察工作負載是否會自動部署至該叢集。如要進一步瞭解部署策略和變化,請參閱「部署車隊套件」。

清除所用資源

為了避免系統向您的 Google Cloud 帳戶收取本頁面所用資源的費用,請刪除含有這些資源的 Google Cloud 專案。

  1. 前往 Google Cloud 控制台的「Manage resources」(管理資源) 頁面。

    前往「Manage resources」(管理資源)

  2. 在專案清單中選取要刪除的專案,然後點選「Delete」(刪除)
  3. 在對話方塊中輸入專案 ID,然後按一下 [Shut down] (關閉) 以刪除專案。

如要刪除儲存庫,請完成下列步驟:

  1. 在 GitHub 存放區的網路瀏覽器視窗中,按一下存放區名稱下方的「Settings」

  2. 在「一般設定」頁面 (預設選取),前往「Danger Zone」部分,然後按一下「Delete this repository」(刪除這個存放區)

  3. 按一下「我要刪除這個存放區」

  4. 閱讀警告訊息,然後按一下「我已詳閱並瞭解這些影響」

  5. 如要確認刪除的存放區是否正確,請在文字欄位中輸入存放區名稱。

  6. 按一下「Delete this repository」(刪除這個存放區)

後續步驟