在 Compute Engine VM 中建立 Google Distributed Cloud 管理員和使用者叢集,做為示範用途

Distributed Cloud 軟體僅適用於裸機,您可以在 Compute Engine 虛擬機器 (VM) 上建立示範叢集,評估叢集部署和作業。在本教學課程中,您將執行指令碼,佈建五個 Compute Engine VM,並設定虛擬私有雲網路,提供叢集連線。指令碼執行完畢後,您可以使用 bmctl、Google Cloud 控制台、Google Cloud CLI 或 Terraform,建立管理員叢集和可託管工作負載的隨附使用者叢集。

完成這些步驟可能需要 40 分鐘到 1 小時。這個部署項目僅供評估之用。請勿在正式環境中執行這些示範叢集。如要在正式環境中部署 Google Distributed Cloud,請按照「建立基本叢集」中的步驟操作。

程序總覽

在本教學課程中,您將完成下列步驟:

  1. 準備本機環境,確保指令碼具備必要的環境變數,並收集執行指令所需的基本資訊。

  2. 使用下載的指令碼建立 VM 和網路。

  3. 使用其中一個支援的用戶端建立管理員叢集。

  4. 使用其中一個支援的用戶端建立使用者叢集。

  5. 清除所用資源,移除您依本指南建立的叢集和 VM。

1. 準備本機環境

本指南會使用指令碼為您設定網路,因此您不需要收集太多資訊或進行任何規劃。請按照下列步驟設定本機環境,並收集本指南後續章節所需的基本資訊:

  1. 登入 Google Cloud 帳戶。如果您未曾使用過 Google Cloud,歡迎 建立帳戶,親自體驗實際使用我們產品的成效。新客戶還能獲得價值 $300 美元的免費抵免額,用於執行、測試及部署工作負載。
  2. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Roles required to select or create a project

    • Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
    • Create a project: To create a project, you need the Project Creator role (roles/resourcemanager.projectCreator), which contains the resourcemanager.projects.create permission. Learn how to grant roles.

    Go to project selector

  3. Verify that billing is enabled for your Google Cloud project.

  4. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Roles required to select or create a project

    • Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
    • Create a project: To create a project, you need the Project Creator role (roles/resourcemanager.projectCreator), which contains the resourcemanager.projects.create permission. Learn how to grant roles.

    Go to project selector

  5. Verify that billing is enabled for your Google Cloud project.

  6. 請記下專案 ID,因為您需要設定環境變數,才能在本頁面的指令碼和指令中使用。如果選取現有專案,請確認您是專案擁有者或編輯者。
  7. 您可以在 Cloud Shell 或執行 Linux 或 macOS 的本機電腦上執行指令碼。如果您使用的是本機電腦,請確認環境中已安裝必要工具:
    1. 請務必安裝最新版 Google Cloud CLI,這是與 Google Cloud互動的指令列工具。視需要更新 gcloud CLI 元件:
      gcloud components update

      視 gcloud CLI 的安裝方式而定,您可能會看到下列訊息:

      You cannot perform this action because the Google Cloud CLI component manager is disabled for this installation. You can run the following command to achieve the same result for this installation:

      按照操作說明複製並貼上指令,即可更新元件。

    2. 確認已安裝 kubectl:
      kubectl
      您應該會看到 kubectl 的使用資訊。如果無法使用指令,請安裝 kubectl:
      gcloud components install kubectl
  8. 確認專案有名為「default」的虛擬私有雲網路。

    如果沒有「預設」虛擬私有雲網路,下一節的指令碼就無法佈建必要資源。除非您選擇刪除或限制,否則每個新專案都會從名為「default」的自動模式虛擬私有雲網路開始,該網路應可與指令碼搭配使用。詳情請參閱「虛擬私有雲網路」。

  9. 確認未強制執行下列組織政策限制:
    • constraints/iam.disableServiceAccountKeyCreation
    • constraints/compute.vmCanIpForward
    • constraints/compute.requireShieldedVm
    • constraints/compute.vmExternalIpAccess

    如果強制執行這些限制,下一節中的指令碼將無法佈建必要資源。根據預設,新專案的這些限制會設為「Inactive」(不強制執行)。詳情請參閱「組織政策限制」。

  10. 設定環境變數:
    export PROJECT_ID=PROJECT_ID
    export ADMIN_CLUSTER_NAME=ADMIN_CLUSTER_NAME
    export ON_PREM_API_REGION=ON_PREM_API_REGION
    export ZONE=ZONE
    • ADMIN_CLUSTER_NAME:您為管理員叢集選擇的名稱。
    • ON_PREM_API_REGION:GKE On-Prem API 執行及儲存中繼資料的 Google Cloud 區域。指定 us-central1 或其他支援的地區。
    • ZONE:建立 Compute Engine VM 的 Google Cloud 可用區。您可以使用 us-central1-a 或任何其他 Compute Engine 可用區。
  11. 執行下列指令,設定預設專案和可用區。
    gcloud config set project $PROJECT_ID
    gcloud config set compute/zone $ZONE

    如果收到 PERMISSION_DENIED 錯誤,請仔細檢查輸入的專案 ID。如果專案 ID 正確,請執行 gcloud auth login,使用有權存取專案的帳戶登入 gcloud CLI。

  12. 取得可安裝的支援版本清單:
    gcloud container bare-metal admin-clusters query-version-config \
        --location=ON_PREM_API_REGION
  13. 從上一個指令的輸出內容中選取版本,並在環境變數中設定:
    export BMCTL_VERSION=BMCTL_VERSION

    建議您選取最高的相容版本,取得最新的 Google Distributed Cloud 功能和修正項目。

2. 建立 VM 和網路

在本節中,您將下載並執行 install_admin_cluster.sh 指令碼。

  1. 複製 anthos-samples 存放區,然後切換至指令碼所在的目錄:

    git clone https://github.com/GoogleCloudPlatform/anthos-samples
    cd anthos-samples/anthos-bm-gcp-bash
    
  2. 執行指令碼:

    bash install_admin_cluster.sh
    
  3. 在提示中輸入 2,僅設定 Compute Engine 基礎架構,並在提示出現時確認所選項目。

    指令碼會建立 Compute Engine VM、VXLAN 網路,以及設定管理員工作站和叢集節點。這項基礎架構約需 5 分鐘才能設定完成。

    如要進一步瞭解指令碼,請點選下列連結:

    關於指令碼

    您可以在 anthos-samples GitHub 存放區的 anthos-bm-gcp-bash 資料夾中查看指令碼。指令碼會執行下列動作:

    1. 啟用下列 Google Cloud API:
      anthos.googleapis.com
      anthosaudit.googleapis.com
      anthosgke.googleapis.com
      cloudresourcemanager.googleapis.com
      connectgateway.googleapis.com
      container.googleapis.com
      compute.googleapis.com
      gkeconnect.googleapis.com
      gkehub.googleapis.com
      gkeonprem.googleapis.com
      serviceusage.googleapis.com
      stackdriver.googleapis.com
      monitoring.googleapis.com
      logging.googleapis.com
      kubernetesmetadata.googleapis.com
      iam.googleapis.com
      opsconfigmonitoring.googleapis.com
    2. 指令碼不會為不同的 API 和服務建立多個服務帳戶,而是建立名為 baremetal-gcr 的單一服務帳戶,並授予下列 IAM 角色:
      • roles/gkehub.admin
      • roles/gkehub.connect
      • roles/logging.logWriter
      • roles/monitoring.dashboardEditor
      • roles/monitoring.metricWriter
      • roles/monitoring.viewer
      • roles/opsconfigmonitoring.resourceMetadata.writer
      • roles/serviceusage.serviceUsageViewer
      • roles/stackdriver.resourceMetadata.writer
    3. 建立下列 VM:
      • 一個用於管理員工作站的 VM
      • 一個 VM 用於管理員叢集的控制層節點
      • 兩個 VM,用於使用者叢集的 worker 節點
      • 一個 VM 用於使用者叢集的控制層節點
    4. 確認所有 VM 都已啟用 SSH,且管理員工作站可透過 SSH 存取為叢集節點建立的所有其他 VM。
    5. 建立虛擬可擴充區域網路 (VXLAN) 疊加網路,以便在 VM 之間建立第 2 層連線。VXLAN 並非永久性,因此如果重新啟動 VM 執行個體,網路就會遭到刪除。網路已設為位於 10.200.0.0/24 子網路。第 2 層連線能力是隨附負載平衡器的必要條件。
    6. 在管理員工作站上安裝下列工具:
      • bmctl
      • kubectl
      • Docker

      指令碼也會將 baremetal-gcr 服務帳戶的金鑰下載至管理員工作站。

    7. 執行下列操作,確保管理員工作站的 root@10.200.0.x 正常運作:
      1. 在管理員工作站上產生新的安全殼層金鑰。
      2. 將公開金鑰新增至部署作業中的所有其他 VM。

    指令碼會輸出執行的每個指令和狀態。完成後,指令碼會輸出下列內容:

    ✅ Successfully set up SSH access from admin workstation to cluster node VMs.
    
    ✅ GCE Infrastructure setup complete. Please check the logs for any errors!!!
    
    ✅ If you do not see any errors in the output log, then you now have the following setup:
    
    |---------------------------------------------------------------------------------------------------------|
    | VM Name               | L2 Network IP (VxLAN) | INFO                                                    |
    |---------------------------------------------------------------------------------------------------------|
    | abm-admin-cluster-cp  | 10.200.0.3            | 🌟 Ready for use as control plane for the admin cluster |
    | abm-user-cluster-cp   | 10.200.0.4            | 🌟 Ready for use as control plane for the user cluster  |
    | abm-user-cluster-w1   | 10.200.0.5            | 🌟 Ready for use as worker for the user cluster         |
    | abm-user-cluster-w2   | 10.200.0.6            | 🌟 Ready for use as worker for the user cluster         |
    |---------------------------------------------------------------------------------------------------------|
    

3. 建立管理員叢集

bmctl

如要使用 bmctl 建立管理員叢集,請在終端機視窗中存取管理員工作站 VM,並在該處執行指令:

  1. 使用 SSH 以 root 身分存取管理員工作站 VM abm-ws:

    gcloud compute ssh root@abm-ws --zone ZONE
    
  2. 將使用者憑證設為應用程式預設憑證 (ADC):

    gcloud auth application-default login
    

    按照提示選取要用於 ADC 的 Google 帳戶。

  3. 產生叢集設定檔:

    bmctl create config -c ADMIN_CLUSTER_NAME --project-id=PROJECT_ID
    
  4. 驗證管理員叢集設定檔:

    下列叢集設定檔已填入您先前提供的值。除了您輸入的值之外,請注意與產生的設定檔有下列差異:

    • 為方便閱讀,我們已移除這個範例中的註解。
    • 指令碼會建立一個具備所有必要權限的服務帳戶,並下載設定檔中參照的 bm-gcr.json 金鑰。
    gcrKeyPath: /root/bm-gcr.json
    sshPrivateKeyPath: /root/.ssh/id_rsa
    gkeConnectAgentServiceAccountKeyPath: /root/bm-gcr.json
    gkeConnectRegisterServiceAccountKeyPath: /root/bm-gcr.json
    cloudOperationsServiceAccountKeyPath: /root/bm-gcr.json
    ---
    apiVersion: v1
    kind: Namespace
    metadata:
      name: cluster-ADMIN_CLUSTER_NAME
    ---
    apiVersion: baremetal.cluster.gke.io/v1
    kind: Cluster
    metadata:
      name: ADMIN_CLUSTER_NAME
      namespace: cluster-ADMIN_CLUSTER_NAME
    spec:
      type: admin
      profile: default
      anthosBareMetalVersion: BMCTL_VERSION
      gkeConnect:
        projectID: PROJECT_ID
      controlPlane:
        nodePoolSpec:
          nodes:
          - address: 10.200.0.3
      clusterNetwork:
        pods:
          cidrBlocks:
          - 192.168.0.0/16
        services:
          cidrBlocks:
          - 10.96.0.0/20
      loadBalancer:
        mode: bundled
        ports:
          controlPlaneLBPort: 443
        vips:
          controlPlaneVIP: 10.200.0.48
      clusterOperations:
        projectID: PROJECT_ID
        location: ON_PREM_API_REGION
      storage:
        lvpNodeMounts:
          path: /mnt/localpv-disk
          storageClassName: local-disks
        lvpShare:
          path: /mnt/localpv-share
          storageClassName: local-shared
          numPVUnderSharedPath: 5
      nodeConfig:
        podDensity:
          maxPodsPerNode: 110
    
  5. 將管理員工作站上產生的設定檔內容,替換成上述範例的內容。

    開啟產生的檔案 bmctl-workspace/ADMIN_CLUSTER_NAME/ADMIN_CLUSTER_NAME.yaml,並將其內容替換為您在上一步中驗證的範例內容。

  6. 建立管理員叢集:

    bmctl create cluster -c ADMIN_CLUSTER_NAME

    bmctl 指令會執行預檢並建立叢集,同時在畫面上顯示輸出內容。詳細資訊會寫入管理員工作站 baremetal/bmctl-workspace/abm-user-cluster-metallb/log 資料夾中的記錄。

    叢集會在幾分鐘內建立完畢。

  7. 在控制台中,前往「GKE clusters」(GKE 叢集) 頁面。

    前往 GKE 叢集

    確認已選取您建立使用者叢集的專案。您應該會看到管理員叢集。

  8. 登入管理員叢集:

    1. 按一下叢集名稱的連結,然後在側邊面板中點選「Login」(登入)。

    2. 選取「使用 Google 帳戶登入」。

    3. 按一下 [Login] (登入)。

驗證管理員叢集

您可以在管理員工作站的根帳戶 bmctl-workspace 目錄中,找到管理員叢集 kubeconfig 檔案。如要驗證部署作業,請完成下列步驟:

  1. 使用 SSH 以 root 身分存取管理員工作站:

    gcloud compute ssh root@abm-ws --zone ZONE
    
  2. 確認管理員叢集已建立並正在執行:

    kubectl --kubeconfig bmctl-workspace/ADMIN_CLUSTER_NAME/ADMIN_CLUSTER_NAME-kubeconfig get nodes
    

    輸出結果會與下列內容相似:

    NAME                   STATUS   ROLES              AGE      VERSION
    abm-admin-cluster-cp   Ready    control-plane      94m      1.31.300-gke.81
    
  3. 探索完畢後,請輸入 exit,中斷與管理員工作站的連線。

控制台

如要在控制台建立管理員叢集,您必須從管理員工作站 VM 執行 bmctl register bootstrap,建立啟動叢集。bmctl register bootstrap 指令執行期間,請在控制台中執行步驟,建立管理員叢集。

輸入啟動環境基本資訊

  1. 在 Google Cloud 控制台中,前往「GKE clusters」(GKE 叢集) 頁面。

    前往「GKE clusters」(GKE 叢集) 頁面

  2. 點選「建立」。

  3. 在「Create a cluster」(建立叢集) 對話方塊中,選取「On-premises」(地端部署),然後按一下「Configure」(設定) 即可設定裸機。

  4. 請務必從專案清單中選取 PROJECT_ID。

  5. 在左側導覽列中,按一下「Install bootstrap environment」(安裝啟動環境)。

  6. 輸入 ADMIN_CLUSTER_NAME 做為管理員叢集名稱。

  7. 選取 BMCTL_VERSION 做為管理員叢集的版本。指令碼會將這個版本的 bmctl 指令列工具下載至管理員工作站。您安裝的 Google Distributed Cloud 版本必須與 bmctl 版本相符。

  8. 在「Google Cloud API Location」(Google Cloud API 位置) 欄位中,從清單選取 ON_PREM_API_REGION。這項設定會指定 GKE On-Prem API 的執行區域,以及下列項目的儲存區域:

    • GKE On-Prem API 管理叢集生命週期所需的叢集中繼資料
    • 系統元件的 Cloud Logging 和 Cloud Monitoring 資料
    • Cloud 稽核記錄建立的管理員稽核記錄

    叢集名稱、專案和位置共同構成 Google Cloud中叢集的專屬 ID。

請按照下一節的步驟建立 bootstrap 叢集,而非控制台中顯示的步驟。請勿關閉控制台頁面,因為您將繼續在該頁面建立管理員叢集。

建立 bootstrap 叢集

使用 GKE On-Prem API 用戶端 (例如控制台) 建立管理員叢集時,您需要在管理員工作站上建立啟動叢集。啟動叢集會託管建立管理員叢集所需的 Kubernetes 控制器。

  1. 在指令列中,使用 SSH 以 root 身分存取管理員工作站 VM:

    gcloud compute ssh root@abm-ws --zone ZONE
    

    您可以忽略任何有關更新 VM 的訊息,並完成本教學課程。如果您打算將 VM 保留為測試環境,建議您按照 Ubuntu 說明文件中的說明更新 OS 或升級至下一個版本。

  2. 將使用者憑證設為應用程式預設憑證 (ADC):

    gcloud auth application-default login
    

    按照提示選取要用於 ADC 的 Google 帳戶。

  3. 切換至 baremetal/ 目錄,然後執行下列指令,建立 bootstrap 叢集。

    啟動叢集名稱的衍生方式,是在管理員叢集名稱前面加上 bootstrap-。

    bmctl register bootstrap \
      --ssh-key=/root/.ssh/id_rsa \
      --name=bootstrap-ADMIN_CLUSTER_NAME \
      --project-id=PROJECT_ID
    

    bmctl 成功建立啟動叢集後,您會看到類似以下的輸出內容:

    [2023-03-22 17:35:24+0000] Waiting for the temporary cluster to be registered... OK
    [2023-03-22 17:35:37+0000] Please go to https://console.cloud.google.com/home/dashboard?project=example-project-12345 to create the cluster
    [2023-03-22 17:35:37+0000] Waiting for preflight checks and cluster to run..
    

建立管理員叢集

  1. 在「Install bootstrap environment」(安裝啟動環境) 頁面的「Bootstrap environment from admin workstation」(從管理員工作站啟動環境) 區段中,按一下「Check Connection」(檢查連線)。

    成功後,控制台會顯示 「Connection established」(已建立連線)。

    您必須先建立與 bootstrap 叢集的連線,才能繼續操作。如果未建立連線,請檢查您為 bmctl register bootstrap 指令指定的引數:

    • 請確認 --name 的值與「Bootstrap environment basics」(啟動環境基本資訊) 專區中顯示的「Derived bootstrap name」(衍生啟動名稱) 相符。

    • 請確認 --project-id 的值與您在控制台中選取的專案 ID 相符。

    如要變更啟動程序叢集名稱或專案 ID,請輸入 Ctrl-C 退出 bmctl register bootstrap,然後重新執行指令。

網路

  1. 按一下左側導覽列中的「Networking」。

  2. 在「Control plane」(控制層) 部分,於「Control plane node IP 1」(控制層節點 IP 1) 欄位中輸入下列內容:

    10.200.0.3
    

    這是指令碼建立的 VXLAN 中,abm-admin-cluster-cp VM 的 IP 位址。

  3. 在「Load balancer」(負載平衡器) 部分,確認已選取「Bundled」(隨附)。

  4. 在「Virtual IPs (VIPs)」(虛擬 IP (VIP)) 區段的「Control plane VIP」(控制層 VIP) 欄位中,輸入下列內容:

    10.200.0.48
    

    後續步驟取決於啟動叢集是否可用。終端機視窗中的 bmctl register bootstrap 指令必須執行幾分鐘,啟動叢集才會顯示為已註冊的成員。如果幾分鐘後仍未顯示,請檢查您使用的啟動叢集名稱和專案 ID。如要變更啟動叢集名稱或專案 ID,請在另一個終端機視窗中輸入 Ctrl-C 退出 bmctl register bootstrap,然後重新執行指令。

  5. 按一下「驗證並建立」。

    控制台會在驗證設定及建立叢集時顯示狀態訊息。

    管理員叢集建立後,管理員工作站上的啟動叢集就會刪除。另一個終端機視窗中 bmctl register bootstrap 指令的輸出內容大致如下:

    ...
    [2024-04-15 23:10:48+0000] Waiting for cluster to become ready OK
    [2024-04-15 23:16:38+0000] Please run
    [2024-04-15 23:16:38+0000] kubectl --kubeconfig bmctl-workspace/gce-admin-gcloud-001/gce-admin-gcloud-001-kubeconfig get nodes
    [2024-04-15 23:16:38+0000] to get cluster nodes status.
    [2024-04-15 23:16:38+0000] Waiting for node pools to become ready OK
    [2024-04-15 23:16:58+0000] Waiting for metrics to become ready in GCP OK
    [2024-04-15 23:21:58+0000] Waiting for cluster API provider to install in the created admin cluster OK
    [2024-04-15 23:22:08+0000] Moving admin cluster resources to the created admin cluster
    [2024-04-15 23:22:10+0000] Waiting for node update jobs to finish OK
    [2024-04-15 23:24:30+0000] Flushing logs... OK
    [2024-04-15 23:24:30+0000] Unregistering bootstrap cluster.
    [2024-04-15 23:24:30+0000] Deleting membership... OK
    [2024-04-15 23:24:32+0000] Deleting bootstrap cluster.
    

驗證管理員叢集

您可以在管理員工作站的根帳戶 bmctl-workspace 目錄中,找到管理員叢集 kubeconfig 檔案。如要驗證部署作業,請完成下列步驟:

  1. 使用 SSH 以 root 身分存取管理員工作站:

    gcloud compute ssh root@abm-ws --zone ZONE
    
  2. 確認管理員叢集已建立並正在執行:

    kubectl --kubeconfig bmctl-workspace/ADMIN_CLUSTER_NAME/ADMIN_CLUSTER_NAME-kubeconfig get nodes
    

    輸出結果會與下列內容相似:

    NAME                   STATUS   ROLES              AGE      VERSION
    abm-admin-cluster-cp   Ready    control-plane      94m      1.31.300-gke.81
    
  3. 探索完畢後,請輸入 exit,中斷與管理員工作站的連線。

gcloud CLI

以下操作說明需要兩個終端機視窗。在一個終端機視窗中,執行 bmctl register bootstrap 建立啟動程序叢集。bmctl register bootstrap 指令執行時,請在另一個終端機視窗中執行 gcloud container bare-metal admin-clusters create,建立管理員叢集。

建立 bootstrap 叢集

使用 gcloud CLI 等 GKE On-Prem API 用戶端建立管理員叢集時,您必須在管理員工作站上建立啟動叢集。啟動叢集會託管建立管理員叢集所需的 Kubernetes 控制器。

  1. 在指令列中,使用 SSH 以 root 身分存取管理員工作站 VM:

    gcloud compute ssh root@abm-ws --zone ZONE
    

    您可以忽略任何有關更新 VM 的訊息,並完成本教學課程。如果您打算將 VM 保留為測試環境,建議您按照 Ubuntu 說明文件中的說明更新 OS 或升級至下一個版本。

  2. 將使用者憑證設為應用程式預設憑證 (ADC):

    gcloud auth application-default login
    

    按照提示選取要用於 ADC 的 Google 帳戶。

  3. 切換至 baremetal/ 目錄,然後執行下列指令,建立 bootstrap 叢集。

    啟動叢集名稱的衍生方式,是在管理員叢集名稱前面加上 bootstrap-。

    bmctl register bootstrap \
      --ssh-key=/root/.ssh/id_rsa \
      --name=bootstrap-ADMIN_CLUSTER_NAME \
      --project-id=PROJECT_ID
    

    bmctl 成功建立啟動叢集後,您會看到類似以下的輸出內容:

    [2023-03-22 17:35:24+0000] Waiting for the temporary cluster to be registered... OK
    [2023-03-22 17:35:37+0000] Please go to https://console.cloud.google.com/home/dashboard?project=example-project-12345 to create the cluster
    [2023-03-22 17:35:37+0000] Waiting for preflight checks and cluster to run..
    

建立管理員叢集

  1. 在新的終端機視窗中,確認啟動叢集已註冊為機群成員:

    gcloud container fleet memberships list \
        --project=PROJECT_ID
    

    後續步驟中的 gcloud container bare-metal admin-clusters create 指令取決於啟動叢集的可用性。另一個終端機視窗中的 bmctl register bootstrap 指令必須執行幾分鐘,啟動叢集才會顯示為已註冊的成員。如果幾分鐘後仍未列出,請檢查您使用的啟動叢集名稱和專案 ID。如要變更 bootstrap 叢集名稱或專案 ID,請在另一個終端機視窗中輸入 Ctrl-C,退出 bmctl register bootstrap 並重新執行指令。

  2. 使用隨附的負載平衡器建立管理員叢集:

    請確認您指定的值與先前為指令碼指定的環境變數相符。

    gcloud container bare-metal admin-clusters create ADMIN_CLUSTER_NAME \
        --project=PROJECT_ID \
        --location=ON_PREM_API_REGION \
        --version=BMCTL_VERSION \
        --max-pods-per-node=110 \
        --control-plane-vip=10.200.0.48 \
        --control-plane-load-balancer-port=443 \
        --control-plane-node-configs node-ip=10.200.0.3 \
        --island-mode-service-address-cidr-blocks=10.96.0.0/20 \
        --island-mode-pod-address-cidr-blocks=192.168.0.0/16 \
        --lvp-share-path=/mnt/localpv-share \
        --lvp-share-storage-class=local-shared \
        --lvp-node-mounts-config-path=/mnt/localpv-disk \
        --lvp-node-mounts-config-storage-class=local-disks
    

    在這個指令中:

    • --control-plane-vip:設為 10.200.0.48。這是叢集 Kubernetes API 伺服器負載平衡器上的虛擬 IP (VIP)。

    • --control-plane-node-configs:node-ip 設為 10.200.0.3。這是指令碼建立的 VXLAN 中 abm-admin-cluster-cp VM 的 IP 位址。

    如需旗標和說明的完整清單,請參閱 gcloud CLI 參考資料。

    指令會輸出類似以下的結果:

    Waiting for operation [projects/example-project-12345/locations/us-west1/operations/operation-1679543737105-5f7893fd5bae9-942b3f97-75e59179] to complete.

    在輸出範例中,字串 operation-1679543737105-5f7893fd5bae9-942b3f97-75e59179 是長時間執行的作業 OPERATION_ID。在其他終端機視窗中執行下列指令,即可查看作業狀態:

    gcloud container bare-metal operations describe OPERATION_ID \
        --project=PROJECT_ID \
        --location=ON_PREM_API_REGION
    

    gcloud container bare-metal admin-clusters create 指令成功完成後,輸出內容會與下列內容相似:

    Created Anthos on bare metal Admin Cluster
    [https://gkeonprem.googleapis.com/v1/projects/anonuser-anonproject/locations/us-central1/bareMetalAdminClusters/gce-admin-gcloud-001].
    NAME           LOCATION     VERSION           MEMBERSHIP     STATE
    abm-cluster-1  us-central1      1.31.300-gke.81 abm-cluster-1  RUNNING
    

    管理員叢集建立後,管理員工作站上的啟動叢集就會刪除。另一個終端機視窗中 bmctl register bootstrap 指令的輸出內容大致如下:

    ...
    [2024-04-15 23:10:48+0000] Waiting for cluster to become ready OK
    [2024-04-15 23:16:38+0000] Please run
    [2024-04-15 23:16:38+0000] kubectl --kubeconfig bmctl-workspace/gce-admin-gcloud-001/gce-admin-gcloud-001-kubeconfig get nodes
    [2024-04-15 23:16:38+0000] to get cluster nodes status.
    [2024-04-15 23:16:38+0000] Waiting for node pools to become ready OK
    [2024-04-15 23:16:58+0000] Waiting for metrics to become ready in GCP OK
    [2024-04-15 23:21:58+0000] Waiting for cluster API provider to install in the created admin cluster OK
    [2024-04-15 23:22:08+0000] Moving admin cluster resources to the created admin cluster
    [2024-04-15 23:22:10+0000] Waiting for node update jobs to finish OK
    [2024-04-15 23:24:30+0000] Flushing logs... OK
    [2024-04-15 23:24:30+0000] Unregistering bootstrap cluster.
    [2024-04-15 23:24:30+0000] Deleting membership... OK
    [2024-04-15 23:24:32+0000] Deleting bootstrap cluster.
    

驗證管理員叢集

您可以在管理員工作站的根帳戶 bmctl-workspace 目錄中,找到管理員叢集 kubeconfig 檔案。如要驗證部署作業,請完成下列步驟:

  1. 使用 SSH 以 root 身分存取管理員工作站:

    gcloud compute ssh root@abm-ws --zone ZONE
    
  2. 確認管理員叢集已建立並正在執行:

    kubectl --kubeconfig bmctl-workspace/ADMIN_CLUSTER_NAME/ADMIN_CLUSTER_NAME-kubeconfig get nodes
    

    輸出結果會與下列內容相似:

    NAME                   STATUS   ROLES              AGE      VERSION
    abm-admin-cluster-cp   Ready    control-plane      94m      1.31.300-gke.81
    
  3. 探索完畢後,請輸入 exit,中斷與管理員工作站的連線。

Terraform

以下操作說明需要兩個終端機視窗。在一個終端機視窗中,執行 bmctl register bootstrap 建立啟動程序叢集。bmctl register bootstrap 指令執行期間,請在另一個終端機視窗中執行 Terraform 指令,建立管理員叢集。

修改使用者叢集範例檔案,以便用於管理員叢集

anthos-samples 存放區不含專門用於建立 Google Distributed Cloud 管理員叢集的範例。下列步驟說明如何修改現有的使用者叢集 Terraform 範例,建立管理員叢集。

  1. 在複製 anthos-samples 的目錄中,執行下列指令,將 MetalLB 使用者叢集範例的範例檔案複製到管理員叢集的新資料夾:

    cp -r anthos-samples/anthos-onprem-terraform/abm_user_cluster_metallb \
        anthos-samples/anthos-onprem-terraform/abm_admin_cluster_basic
    
  2. 切換至 abm_admin_cluster_basic 目錄:

    cd anthos-samples/anthos-onprem-terraform/abm_admin_cluster_basic
    
  3. 編輯 Terraform 檔案:

    • variables.tf:

      • 為控制層節點 IP 位址定義變數 (雖然本示範只使用一個)。這個變數應與 variable "control_plane_ips" { ... } 項目類似。

      • 為控制層 VIP 位址定義變數。這個變數應與 variable "control_plane_vip" { ... } 項目類似。

    • terraform.tfvars:

      • 為下列管理員叢集設定指派變數值:

        • 控制層節點 IP 位址:10.200.0.3

        • 控制層 VIP 位址:10.200.0.48

    • main.tf:

      • 將 google_gkeonprem_bare_metal_cluster 資源替換為 google_gkeonprem_bare_metal_admin_cluster 資源。

      • 刪除 google_gkeonprem_bare_metal_node_pool 資源和相關的 lifecycle 區段。

      • 更新資源,使用新定義的變數。

    以下範例說明編輯 main.tf 檔案來建立管理員叢集時,檔案可能呈現的樣貌:

    /**
    * Copyright 2023 Google LLC
    *
    * Licensed under the Apache License, Version 2.0 (the "License");
    * you may not use this file except in compliance with the License.
    * You may obtain a copy of the License at
    *
    *      http://www.apache.org/licenses/LICENSE-2.0
    *
    * Unless required by applicable law or agreed to in writing, software
    * distributed under the License is distributed on an "AS IS" BASIS,
    * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    * See the License for the specific language governing permissions and
    * limitations under the License.
    */
    
    #[START anthos_onprem_terraform_bare_metal_admin_cluster_basic_main]
    
    module "enable_google_apis_primary" {
      source     = "terraform-google-modules/project-factory/google//modules/project_services"
      version    = "~> 14.0"
      project_id = var.project_id
      activate_apis = [
        "anthos.googleapis.com",
        "anthosaudit.googleapis.com",
        "anthosgke.googleapis.com",
        "cloudresourcemanager.googleapis.com",
        "compute.googleapis.com",
        "connectgateway.googleapis.com",
        "container.googleapis.com",
        "file.googleapis.com",
        "gkehub.googleapis.com",
        "iam.googleapis.com",
        "kubernetesmetadata.googleapis.com",
        "logging.googleapis.com",
        "monitoring.googleapis.com",
        "opsconfigmonitoring.googleapis.com",
        "serviceusage.googleapis.com",
        "stackdriver.googleapis.com"
      ]
      disable_services_on_destroy = false
    }
    
    # Enable GKE OnPrem API
    resource "google_project_service" "default" {
      project            = var.project_id
      service            = "gkeonprem.googleapis.com"
      disable_on_destroy = false
    }
    
    # Create a baremetal admin cluster and enroll it with the gkeonprem API
    resource "google_gkeonprem_bare_metal_admin_cluster" "admin-cluster-basic" {
      name                     = var.admin_cluster_name
      description              = "Bare metal admin cluster"
      provider                 = google
      depends_on               = [google_project_service.default]
      location                 = var.region
      bare_metal_version       = var.bare_metal_version
      network_config {
        island_mode_cidr {
          service_address_cidr_blocks = ["10.96.0.0/20"]
          pod_address_cidr_blocks     = ["192.168.0.0/16"]
        }
      }
      node_config {
        max_pods_per_node = 250
      }
      control_plane {
        control_plane_node_pool_config {
          node_pool_config {
            operating_system = "LINUX"
            dynamic "node_configs" {
              for_each = var.admin_cp_ips
              content {
                node_ip = node_configs.value
              }
            }
          }
        }
      }
      load_balancer {
        port_config {
          control_plane_load_balancer_port = 443
        }
        vip_config {
          control_plane_vip = var.admin_cp_vip
        }
      }
      storage {
        lvp_share_config {
          lvp_config {
            path = "/mnt/localpv-share"
            storage_class = "local-shared"
          }
          shared_path_pv_count = 5
        }
        lvp_node_mounts_config {
          path = "/mnt/localpv-disk"
          storage_class = "local-disks"
        }
      }
    
      dynamic "security_config" {
        for_each = length(var.admin_user_emails) == 0 ? [] : [1]
        content {
          authorization {
            dynamic "admin_users" {
              for_each = var.admin_user_emails
              content {
                username = admin_users.value
              }
            }
          }
        }
      }
    
      lifecycle {
        ignore_changes = [
          annotations["onprem.cluster.gke.io/user-cluster-resource-link"],
          annotations["alpha.baremetal.cluster.gke.io/cluster-metrics-webhook"],
          annotations["baremetal.cluster.gke.io/operation"],
          annotations["baremetal.cluster.gke.io/operation-id"],
          annotations["baremetal.cluster.gke.io/start-time"],
          annotations["baremetal.cluster.gke.io/upgrade-from-version"]
        ]
      }
    }
    
    #[END anthos_onprem_terraform_bare_metal_admin_cluster_basic_main]
    

    如要進一步瞭解管理員叢集的 Terraform 資源,請參閱 Terraform 登錄檔中的 google_gkeonprem_bare_metal_admin_cluster。

建立 bootstrap 叢集

使用 Terraform 等 GKE On-Prem API 用戶端建立管理員叢集時,您必須在管理員工作站上建立啟動叢集。啟動叢集會託管建立管理員叢集所需的 Kubernetes 控制器。

  1. 在指令列中,使用 SSH 以 root 身分存取管理員工作站 VM:

    gcloud compute ssh root@abm-ws --zone ZONE
    

    您可以忽略任何有關更新 VM 的訊息,並完成本教學課程。如果您打算將 VM 保留為測試環境,建議您按照 Ubuntu 說明文件中的說明更新 OS 或升級至下一個版本。

  2. 將使用者憑證設為應用程式預設憑證 (ADC):

    gcloud auth application-default login
    

    按照提示選取要用於 ADC 的 Google 帳戶。

  3. 切換至 baremetal/ 目錄,然後執行下列指令,建立 bootstrap 叢集。

    啟動叢集名稱的衍生方式,是在管理員叢集名稱前面加上 bootstrap-。

    bmctl register bootstrap \
      --ssh-key=/root/.ssh/id_rsa \
      --name=bootstrap-ADMIN_CLUSTER_NAME \
      --project-id=PROJECT_ID
    

    bmctl 成功建立啟動叢集後,您會看到類似以下的輸出內容:

    [2023-03-22 17:35:24+0000] Waiting for the temporary cluster to be registered... OK
    [2023-03-22 17:35:37+0000] Please go to https://console.cloud.google.com/home/dashboard?project=example-project-12345 to create the cluster
    [2023-03-22 17:35:37+0000] Waiting for preflight checks and cluster to run..
    

建立管理員叢集

  1. 初始化並建立 Terraform 方案:

    terraform init
    

    Terraform 會安裝所有必要程式庫,例如 Google Cloud 供應商。

  2. 查看設定,並視需要進行變更:

    terraform plan
    
  3. 套用 Terraform 計畫,建立管理員叢集:

    terraform apply
    

    建立管理員叢集需要 15 分鐘以上。叢集建立完成後,您會看到類似下方的訊息:

    ...
    google_gkeonprem_bare_metal_admin_cluster.admin-cluster-basic: Still creating... [20m10s elapsed]
    google_gkeonprem_bare_metal_admin_cluster.admin-cluster-basic: Creation complete after 20m11s
    [id=projects/anonuser-anonproject/locations/us-central1/bareMetalAdminClusters/gce-admin-terra002]
    
    Apply complete! Resources: 1 added, 0 changed, 0 destroyed.
    

    管理員叢集建立後,管理員工作站上的啟動叢集就會刪除。另一個終端機視窗中 bmctl register bootstrap 指令的輸出內容大致如下:

    ...
    [2024-04-15 23:10:48+0000] Waiting for cluster to become ready OK
    [2024-04-15 23:16:38+0000] Please run
    [2024-04-15 23:16:38+0000] kubectl --kubeconfig bmctl-workspace/gce-admin-gcloud-001/gce-admin-gcloud-001-kubeconfig get nodes
    [2024-04-15 23:16:38+0000] to get cluster nodes status.
    [2024-04-15 23:16:38+0000] Waiting for node pools to become ready OK
    [2024-04-15 23:16:58+0000] Waiting for metrics to become ready in GCP OK
    [2024-04-15 23:21:58+0000] Waiting for cluster API provider to install in the created admin cluster OK
    [2024-04-15 23:22:08+0000] Moving admin cluster resources to the created admin cluster
    [2024-04-15 23:22:10+0000] Waiting for node update jobs to finish OK
    [2024-04-15 23:24:30+0000] Flushing logs... OK
    [2024-04-15 23:24:30+0000] Unregistering bootstrap cluster.
    [2024-04-15 23:24:30+0000] Deleting membership... OK
    [2024-04-15 23:24:32+0000] Deleting bootstrap cluster.
    

  4. 在控制台中,前往「GKE clusters」(GKE 叢集) 頁面。

    前往 GKE 叢集

    確認已選取您建立使用者叢集的專案。您應該會看到管理員叢集。

  5. 登入管理員叢集:

    1. 按一下叢集名稱的連結,然後在側邊面板中點選「Login」(登入)。

    2. 選取「使用 Google 帳戶登入」。

    3. 按一下 [Login] (登入)。

驗證管理員叢集

您可以在管理員工作站的根帳戶 bmctl-workspace 目錄中,找到管理員叢集 kubeconfig 檔案。如要驗證部署作業,請完成下列步驟:

  1. 使用 SSH 以 root 身分存取管理員工作站:

    gcloud compute ssh root@abm-ws --zone ZONE
    
  2. 確認管理員叢集已建立並正在執行:

    kubectl --kubeconfig bmctl-workspace/ADMIN_CLUSTER_NAME/ADMIN_CLUSTER_NAME-kubeconfig get nodes
    

    輸出結果會與下列內容相似:

    NAME                   STATUS   ROLES              AGE      VERSION
    abm-admin-cluster-cp   Ready    control-plane      94m      1.31.300-gke.81
    
  3. 探索完畢後,請輸入 exit,中斷與管理員工作站的連線。

4. 建立使用者叢集

您可以使用 Google Cloud 控制台、Google Cloud CLI 或 Terraform 建立使用者叢集。為求簡單起見,請使用 abm-user-cluster-metallb 做為使用者叢集名稱,以便與 Terraform 指令碼中的硬式編碼名稱相符。

bmctl

  1. 使用 SSH 以 root 身分存取管理員工作站 VM abm-ws:

    gcloud compute ssh root@abm-ws --zone ZONE
    
  2. 產生叢集設定檔:

    bmctl create config -c abm-user-cluster-metallb \
        --project-id=PROJECT_ID
  3. 在下列使用者叢集設定檔中,於 clusterSecurity 區段設定電子郵件地址,並驗證其餘設定:

    下列叢集設定檔已填入您先前在規劃表中輸入的值。除了您輸入的值之外,請注意下列與產生的設定檔之間的差異:

    • 為方便閱讀,我們已移除這個範例中的註解。
    • 憑證部分已移除,這是使用者叢集的正常情況。
    • 叢集類型 spec.type 已設為 user。
    • 系統已新增 spec.clusterSecurity.authorization.clusterAdmin.gcpAccounts 欄位,將 clusterrole/cluster-admin 角色授予您的帳戶。此外,您也可以透過這個欄位在Google Cloud 控制台登入叢集,查看更多叢集詳細資料。
    ---
    apiVersion: v1
    kind: Namespace
    metadata:
      name: cluster-abm-user-cluster-metallb
    ---
    apiVersion: baremetal.cluster.gke.io/v1
    kind: Cluster
    metadata:
      name: abm-user-cluster-metallb
      namespace: cluster-abm-user-cluster-metallb
    spec:
      type: user
      profile: default
      anthosBareMetalVersion: BMCTL_VERSION
      gkeConnect:
        projectID: PROJECT_ID
      controlPlane:
        nodePoolSpec:
          nodes:
          - address: 10.200.0.4
      clusterNetwork:
        pods:
          cidrBlocks:
          - 192.168.0.0/16
        services:
          cidrBlocks:
          - 10.96.0.0/20
      loadBalancer:
        mode: bundled
        ports:
          controlPlaneLBPort: 443
        vips:
          controlPlaneVIP: 10.200.0.50
          ingressVIP: 10.200.0.51
        addressPools:
        - name: pool1
          addresses:
          - 10.200.0.51-10.200.0.70
      clusterOperations:
        projectID: PROJECT_ID
        location: ON_PREM_API_REGION
      clusterSecurity:
        authorization:
          clusterAdmin:
            gcpAccounts:
            - YOUR_EMAIL_ADDRESS
      storage:
        lvpNodeMounts:
          path: /mnt/localpv-disk
          storageClassName: local-disks
        lvpShare:
          path: /mnt/localpv-share
          storageClassName: local-shared
          numPVUnderSharedPath: 5
      nodeConfig:
        podDensity:
          maxPodsPerNode: 250
    ---
    apiVersion: baremetal.cluster.gke.io/v1
    kind: NodePool
    metadata:
      name: node-pool-1
      namespace: cluster-abm-user-cluster-metallb
    spec:
      clusterName: abm-user-cluster-metallb
      nodes:
      - address: 10.200.0.5
    
  4. 將管理員工作站上產生的設定檔內容,替換成上述範例的內容。

    開啟產生的檔案 bmctl-workspace/abm-user-cluster-metallb/abm-user-cluster-metallb.yaml,並將內容替換為您在上一個步驟中驗證的範例內容。

  5. 建立使用者叢集:

    bmctl create cluster -c abm-user-cluster-metallb \
      --kubeconfig bmctl-workspace/ADMIN_CLUSTER_NAME/ADMIN_CLUSTER_NAME-kubeconfig

    bmctl 指令會執行預檢並建立叢集,同時在畫面上顯示輸出內容。詳細資訊會寫入管理員工作站 baremetal/bmctl-workspace/abm-user-cluster-metallb/log 資料夾中的記錄。

    叢集會在幾分鐘內建立完畢。

  6. 在 Google Cloud 控制台中,前往「GKE clusters」(GKE 叢集) 頁面。

    前往「GKE clusters」(GKE 叢集) 頁面

    確認已選取您建立使用者叢集的專案。清單中應會顯示管理員和使用者叢集。

  7. 登入使用者叢集:

    1. 按一下叢集名稱的連結,然後在側邊面板中點選「Login」(登入)。

    2. 選取「使用 Google 帳戶登入」。

    3. 按一下 [Login] (登入)。

    重複相同步驟,登入管理員叢集。

控制台

請按照下列步驟,在控制台中建立使用者叢集:

  1. 在控制台中,前往「Create a bare metal cluster」(建立裸機叢集) 頁面。

    前往「Create a bare metal cluster」(建立 bare metal 叢集) 頁面

  2. 確認已選取您建立管理員叢集的 Google Cloud 專案。

  3. 點選「建立叢集」。

  4. 在對話方塊中,按一下「On-premises」(地端部署)。

  5. 按一下「Bare metal」旁的「設定」。系統隨即會顯示「Prerequisites」(必要條件) 頁面。

  6. 在「Choose your cluster type」(選擇叢集類型) 下方,選取「Create a user cluster for an existing admin cluster」(為現有的管理員叢集建立使用者叢集)。

  7. 點選「下一步」。

叢集基本資訊

  1. 輸入使用者叢集的名稱,或使用預設名稱。

  2. 確認已選取新建立的管理員叢集。這個頁面的其餘設定可使用預設值。

  3. 按一下左側導覽列中的「Networking」。

網路

您執行指令碼來建立 VM 和管理員叢集時,系統也建立了第 2 層 VXLAN,其 IP 位址位於 10.200.0.0/24 子網路。

  1. 在「Control plane」(控制層) 區段的「Control plane node IP 1」(控制層節點 IP 1) 欄位中,輸入下列內容:

    10.200.0.4
    

    這是指令碼建立的 VXLAN 中 abm-user-cluster-cp1 VM 的 IP 位址。

  2. 在「Load balancer」(負載平衡器) 區段中,使用預設負載平衡器「Bundled with MetalLB」(與 MetalLB 搭配)。

  3. 在「New address pool」(新增位址集區) 區段中,在「IP address range 1」(IP 位址範圍 1) 欄位輸入下列 IP 位址範圍:

    10.200.0.51-10.200.0.70
    
  4. 按一下「完成」。

  5. 在「Virtual IPs」(虛擬 IP) 區段的「Control Plane VIP」(控制層 VIP) 欄位中,輸入下列 IP 位址:

    10.200.0.50
    
  6. 為 Ingress VIP 輸入下列 IP 位址:

    10.200.0.51
    
  7. 在「Service and Pod CIDRs」(Service 和 Pod CIDR) 區段中,使用預設 IP 位址。

  8. 按一下左側導覽列中的「default pool」。

建立節點集區

使用者叢集必須至少有一個 worker 節點集區。

  1. 在「Nodes address 1」(節點位址 1) 欄位中輸入下列 IP 位址:

    10.200.0.5
    

    這是指令碼建立的 VXLAN 中,abm-user-cluster-w1 VM 的 IP 位址。

建立叢集

  1. 按一下「驗證並建立」,建立使用者叢集。

    建立使用者叢集需要 15 分鐘以上。控制台會在驗證設定及建立叢集時顯示狀態訊息。

    如果設定有問題,控制台會顯示錯誤訊息,說明如何修正設定問題,並再次嘗試建立叢集。

    如要查看建立程序的其他資訊,請按一下「Show details」(顯示詳細資料),顯示側邊面板。按一下 即可關閉詳細資料面板。

    叢集建立後,系統會顯示「Cluster status: running」。

  2. 叢集建立後,按一下 「Clusters」(叢集),返回「Clusters」(叢集) 頁面。

  3. 登入使用者叢集:

    1. 按一下叢集名稱的連結,然後在側邊面板中點選「Login」(登入)。

    2. 選取「使用 Google 帳戶登入」。

    3. 按一下 [Login] (登入)。

    重複相同步驟,登入管理員叢集。

gcloud CLI

如要建立使用者叢集,請按照下列步驟操作:

  1. 執行下列指令,建立使用者叢集:

    gcloud container bare-metal clusters create abm-user-cluster-metallb \
        --project=PROJECT_ID \
        --admin-cluster-membership=projects/PROJECT_ID/locations/ON_PREM_API_REGION/memberships/ADMIN_CLUSTER_NAME \
        --location=ON_PREM_API_REGION \
        --version=BMCTL_VERSION \
        --admin-users=YOUR_EMAIL_ADDRESS \
        --metal-lb-address-pools='pool=lb-pool-1,manual-assign=True,addresses=10.200.0.51-10.200.0.70' \
        --control-plane-node-configs='node-ip=10.200.0.4' \
        --control-plane-vip=10.200.0.50 \
        --control-plane-load-balancer-port=443 \
        --ingress-vip=10.200.0.51 \
        --island-mode-service-address-cidr-blocks=10.96.0.0/20 \
        --island-mode-pod-address-cidr-blocks=192.168.0.0/16 \
        --lvp-share-path=/mnt/localpv-share \
        --lvp-share-storage-class=local-shared \
        --lvp-node-mounts-config-path=/mnt/localpv-disk \
        --lvp-node-mounts-config-storage-class=local-disks
    

    執行指令後,您會看到類似下方的輸出內容:

    Waiting for operation [projects/PROJECT_ID/locations/ON_PREM_API_REGION/operations/operation-1678304606537-5f668bde5c57e-341effde-b612ff8a] to complete...
    

    在輸出範例中,字串 operation-1678304606537-5f668bde5c57e-341effde-b612ff8a 是長時間執行的作業 OPERATION_ID。

  2. 如要查看作業狀態,請開啟另一個終端機視窗,然後執行指令。

    gcloud container bare-metal operations describe OPERATION_ID \
        --project=PROJECT_ID \
        --location=ON_PREM_API_REGION
    

    將 OPERATION_ID 替換為上一個步驟輸出內容中的對應字串。

    建立叢集大約需要 15 分鐘以上。建立叢集時,您可以不時執行上述指令,取得目前狀態。

    叢集建立後,您會看到類似下方的輸出內容:

    Created Anthos cluster on bare metal [https://gkeonprem.googleapis.com/v1/projects/PROJECT_ID/locations/ON_PREM_API_REGION/bareMetalClusters/abm-user-cluster-metallb].

    如要進一步瞭解 gcloud container bare-metal clusters create 指令,包括各個旗標的說明,請參閱 gcloud CLI 參考資料中叢集資源的 container bare-metal clusters create 頁面。

建立節點集區

成功建立叢集後,您可以為叢集建立節點集區。

如要建立節點集區,請按照下列步驟操作:

  1. 執行下列指令,建立節點集區:

    gcloud container bare-metal node-pools create NODE_POOL_NAME \
        --cluster=abm-user-cluster-metallb \
        --project=PROJECT_ID \
        --location=ON_PREM_API_REGION \
        --node-configs='node-ip=10.200.0.5'
    

    將 NODE_POOL_NAME 替換為節點集區的名稱。

    執行指令後,輸出內容應如下所示:

    Waiting for operation [projects/PROJECT_ID/locations/ON_PREM_API_REGION/operations/operation-1678308682052-5f669b0d132cb-6ebd1c2c-816287a7] to complete...
    

    建立節點集區約需 5 分鐘。節點集區建立後,您會看到類似下方的輸出內容:

    Created node pool in Anthos cluster on bare metal [https://gkeonprem.googleapis.com/v1/projects/PROJECT_ID/locations/ON_PREM_API_REGION/bareMetalClusters/abm-user-cluster-metallb/bareMetalNodePools/NODE_POOL_NAME].
    
  2. 前往控制台的「Kubernetes clusters」(Kubernetes 叢集) 頁面:

    前往「Create a bare metal cluster」(建立裸機叢集) 頁面

    確認已選取您建立使用者叢集的專案。清單中應會顯示管理員和使用者叢集。

  3. 登入使用者叢集:

    1. 按一下叢集名稱的連結,然後在側邊面板中點選「Login」(登入)。

    2. 選取「使用 Google 帳戶登入」。

    3. 按一下 [Login] (登入)。

    重複相同步驟,登入管理員叢集。

Terraform

您可以使用下列基本設定範例,建立具有套裝 MetalLB 負載平衡器的使用者叢集。詳情請參閱 google_gkeonprem_bare_metal_cluster 參考文件。

  1. 在複製 anthos-samples 的目錄中,切換至 Terraform 範例所在的目錄:

    cd anthos-samples/anthos-onprem-terraform/abm_user_cluster_metallb
    

    範例提供範例變數檔案,可傳遞至 main.tf。

  2. 建立 terraform.tfvars.sample 檔案的副本:

    cp terraform.tfvars.sample terraform.tfvars
    
  3. 請確認下列範例中的值。

    下列 Terraform 變數檔案 terraform.tfvars.sample 已預先填入 IP 位址,以及您在本指南前幾節輸入的值。

    
    project_id          = "PROJECT_ID"
    region              = "ON_PREM_API_REGION"
    admin_cluster_name  = "ADMIN_CLUSTER_NAME"
    bare_metal_version  = "VERSION"
    admin_user_emails   = ["YOUR_EMAIL_ADDRESS", "ADMIN_2_EMAIL_ADDRESS"]
    cluster_name        = "abm-user-cluster-metallb"
    control_plane_ips   = ["10.200.0.4"]
    worker_node_ips     = ["10.200.0.5", "10.200.0.6"]
    control_plane_vip   = "10.200.0.50"
    ingress_vip         = "10.200.0.51"
    lb_address_pools    = [
        { name = "lbpool_1", addresses = ["10.200.0.51-10.200.0.70"] }
    ]
    

    將 ADMIN_2_EMAIL_ADDRESS 替換為與 Google Cloud 帳戶相關聯的電子郵件地址,或在編輯變數檔案時移除該地址。

    如要進一步瞭解這個範例中設定變數的引數,請參閱 Terraform 說明文件中裸機使用者叢集的引數參考資料。

  4. 將變數檔案副本的內容替換為上述範例的內容。

  5. 初始化並建立 Terraform 方案:

    terraform init
    

    Terraform 會安裝所有必要程式庫,例如 Google Cloud 供應商。

  6. 查看設定,並視需要進行變更:

    terraform plan
    
  7. 套用 Terraform 計畫,建立使用者叢集:

    terraform apply
    

    建立使用者叢集需要 15 分鐘以上。您可以在 Google Cloud 控制台的「GKE clusters」(GKE 叢集) 頁面中查看叢集。

  8. 在 Google Cloud 控制台中,前往「GKE clusters」(GKE 叢集) 頁面。

    前往「GKE clusters」(GKE 叢集) 頁面

    確認已選取您建立使用者叢集的專案。清單中應會顯示管理員和使用者叢集。

  9. 登入使用者叢集:

    1. 按一下叢集名稱的連結,然後在側邊面板中點選「Login」(登入)。

    2. 選取「使用 Google 帳戶登入」。

    3. 按一下 [Login] (登入)。

    重複相同步驟,登入管理員叢集。

5. 清除所用資源

請按照下列操作說明,移除您依本指南建立的叢集和 VM。

刪除使用者叢集

bmctl

  • 如要使用 bmctl 刪除使用者叢集,請從管理員工作站 VM abm-ws 執行下列指令:

    bmctl reset \
        --cluster abm-user-cluster-metallb \
        --admin-kubeconfig bmctl-workspace/ADMIN_CLUSTER_NAME/ADMIN_CLUSTER_NAME-kubeconfig
    

控制台

  1. 前往控制台的「GKE clusters」(GKE 叢集) 頁面。

    前往 GKE 叢集

  2. 在叢集清單中,按一下使用者叢集。

  3. 在「詳細資料」面板中,按一下「查看更多詳細資料」。

  4. 按一下視窗頂端附近的「刪除」圖示 。

  5. 系統提示您確認時,請輸入叢集名稱,然後按一下「Delete」(刪除)。

  6. 按一下右上角的 ,即可查看刪除狀態。您可能需要重新整理頁面,才能更新叢集清單。

gcloud CLI

  • 刪除叢集:

    gcloud container bare-metal clusters delete abm-user-cluster-metallb \
        --project=PROJECT_ID \
        --location=ON_PREM_API_REGION \
        --force
    

    --force 旗標可讓您刪除含有節點集區的叢集。如果沒有 --force 旗標,您必須先刪除節點集區,然後再刪除叢集。

如要瞭解其他旗標,請參閱「gcloud container bare-metal clusters delete」。

Terraform

terraform destroy 指令會終止您執行 terraform apply 建立使用者叢集時建立的資源。

  • 在 Terraform 使用者叢集範例檔案 (例如 main.tf) 所在的目錄中,執行下列指令:

    terraform destroy
    

請等待使用者叢集刪除完畢,再刪除管理員叢集和 VM。

刪除管理員叢集和 VM

  1. 從 GKE On-Prem API 取消註冊管理員叢集:

    gcloud container bare-metal admin-clusters unenroll ADMIN_CLUSTER_NAME \
        --project=PROJECT_ID \
        --location=ON_PREM_API_REGION
    
  2. 連線至管理員工作站:

    gcloud compute ssh root@abm-ws --zone ZONE
    
  3. 刪除管理員叢集:

    bmctl reset -c ADMIN_CLUSTER_NAME
    

    bmctl 會從機群取消註冊叢集,然後刪除叢集。請等待叢集刪除完畢,再刪除 VM。

  4. 退出管理員工作站:

    exit
    
  5. 列出名稱中含有 abm 的所有 VM:

    gcloud compute instances list | grep 'abm'
    
  6. 確認您同意刪除名稱中含有 abm 的所有 VM。

    驗證完畢後,請執行下列指令,刪除 abm VM:

    gcloud compute instances list --format="value(name)" | \
        grep 'abm' | \
        xargs gcloud compute instances delete --quiet --zone ZONE
    
  7. 執行下列指令來刪除服務帳戶,並在系統提示時輸入 y:

    gcloud iam service-accounts delete baremetal-gcr@PROJECT_ID.iam.gserviceaccount.com
    

    後續步驟