建立基本叢集

Distributed Cloud 軟體僅允許您建立概念驗證管理員叢集和使用者叢集,在裸機硬體上評估 GKE 叢集。本文件是兩部分教學課程的第二部分,以「設定基本基礎架構」中的設定為基礎。部署完成後,您可以繼續建立 Service 和 Ingress。

本文適用對象為負責設定、監控及管理基礎架構生命週期的管理員、架構師和操作員。請勿在正式環境中使用最小概念驗證叢集。如要評估正式環境架構,請參閱「選擇部署模式」。

事前準備

  1. 請務必按照本指南前一部分「設定最精簡的基礎架構」所述,設定硬體並規劃 IP 位址。或者,您也可以在 Google Cloud 控制台的「Create a bare metal admin cluster」(建立 Bare Metal 管理員叢集) 流程中,使用「Prerequisites」(必要條件) 區段 的網路需求規劃工具。

  2. 如要使用 Terraform 建立使用者叢集,您必須在管理員工作站或其他電腦上安裝 Terraform。

    1. 確認已安裝最新版 Google Cloud CLI 元件:

      gcloud components update
      
  3. 請按照下列步驟啟用及使用 GKE On-Prem API:

    1. 在專案中啟用 API:

      gcloud services enable \
          --project PROJECT_ID \
          gkeonprem.googleapis.com
      

      將 PROJECT_ID 替換為機群主專案的專案 ID。

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

    2. 如果這是您首次在專案中啟用 GKE On-Prem API,則必須初始化 API。方法是呼叫 gcloud CLI 指令,顯示可用於建立叢集的版本:

      gcloud container bare-metal clusters query-version-config \
          --project=PROJECT_ID \
          --location="us-central1"
      

程序總覽

建立基本叢集的主要步驟如下:

  1. 收集資訊,用於指定叢集設定。

  2. 建立管理員叢集,以便管理使用者叢集。

  3. 建立可執行工作負載的使用者叢集。

1. 收集資訊

請使用您在「設定基本基礎架構」中準備的資訊,或從網路規劃工具中取得的資訊,填寫下表中的每個預留位置。這些預留位置對應至叢集設定檔中的欄位值,用於最精簡的安裝作業 (一個管理員叢集和一個使用者叢集)。部分預留位置會設為產生的叢集設定檔中預先填入的值,但所有預留位置皆可編輯。

基本叢集資訊
您要建立的管理員叢集名稱。管理員工作站上的叢集構件位置和命名,取決於叢集名稱。叢集命名空間衍生自叢集名稱。 ADMIN_CLUSTER_NAME
您要建立的使用者叢集名稱。管理員工作站上的叢集構件位置和命名,取決於叢集名稱。叢集命名空間衍生自叢集名稱。 USER_CLUSTER_NAME
您在本指南第一部分下載的 bmctl 版本。 CLUSTER_VERSION
帳戶資訊
管理員工作站上的 SSH 私密金鑰檔案路徑。根據預設,路徑為
/home/USERNAME/.ssh/id_rsa。
SSH_PRIVATE_KEY_PATH
您要用來將叢集連結至 Google Cloud ,以及查看記錄和指標的 Google Cloud 專案 ID。這項專案也稱為機群主專案。 PROJECT_ID
與 Google Cloud帳戶相關聯的電子郵件地址。例如:alex@example.com。 GOOGLE_ACCOUNT_EMAIL
節點機器 IP 位址
一個 IP 位址用於管理員叢集控制層節點。 ADMIN_CP_NODE_IP
一個 IP 位址,用於使用者叢集控制層節點。 USER_CP_NODE_IP
一個使用者叢集 worker 節點的 IP 位址。 USER_WORKER_NODE_IP
VIP 位址
管理員叢集 Kubernetes API 伺服器的 VIP。 ADMIN_CP_VIP
使用者叢集 Kubernetes API 伺服器的 VIP。 USER_CP_VIP
一個 VIP,做為輸入 Proxy 的外部位址。 USER_INGRESS_VIP
十個 IP 位址的範圍,用於 LoadBalancer 類型服務的外部 IP 位址。請注意,這個範圍包含 MetalLB 所需的 ingress VIP。其他 IP 位址不得與這個範圍重疊。 START_IP-END_IP
Pod 和 Service CIDR
管理員叢集上 Pod 使用的 IP 位址範圍,以 CIDR 區塊標記法表示。建議的起始值為 192.168.0.0/16,系統會預填在產生的叢集設定檔。 192.168.0.0/16
管理員叢集上 Service 使用的 IP 位址範圍,以 CIDR 區塊標記法表示。建議的起始值為 10.96.0.0/20,系統會預填在產生的叢集設定檔。 10.96.0.0/20
使用者叢集上 Pod 使用的 IP 位址範圍,以 CIDR 區塊標記法表示。建議的起始值為 192.168.0.0/16,這個值會預填至產生的叢集設定檔,也是控制台中的預設值。 192.168.0.0/16
使用者叢集上 Service 使用的 IP 位址範圍,以 CIDR 區塊標記法表示。建議的起始值為 10.96.0.0/20,這個值會預填至產生的叢集設定檔,也是控制台中的預設值。 10.96.0.0/20

2. 建立管理員叢集

下列步驟會建立管理員叢集,以便安裝最精簡的管理員叢集和使用者叢集。請務必先為上述「收集資訊」一節表格中的每個預留位置提供值,再繼續操作。

如果專案已啟用 GKE On-Prem API (gkeonprem.googleapis.com),新建立的叢集會自動註冊至 API。即使叢集設定檔中未指定 spec.gkeOnPremAPI,系統也會註冊。註冊這項由Google Cloud託管的 API 後,您就能使用Google Cloud 控制台或 gcloud CLI 管理叢集的生命週期。

如要停用自動註冊功能,請在建立叢集前,取消註解叢集設定檔中的 spec.gkeOnPremAPI 區段,並將 spec.gkeOnPremAPI.enabled 設為 false。spec.gkeOnPremAPI.enabled 欄位可變更,因此您可以在叢集建立後隨時取消註冊。

如要為最低限度安裝建立管理員叢集,請按照下列步驟操作:

  1. 使用下列指令,設定 Google Distributed Cloud 可用於建立叢集的預設憑證:

    gcloud auth application-default login
  2. 如要產生叢集設定檔,請在管理員工作站的 /baremetal 目錄中執行下列指令:

    bmctl create config -c ADMIN_CLUSTER_NAME \
        --enable-apis --create-service-accounts --project-id=PROJECT_ID
  3. 驗證管理員叢集設定檔:

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

    • 為方便閱讀,我們已移除這個範例中的註解。
    • NodePool 規格已移除。管理員叢集不允許使用 worker 節點。
    gcrKeyPath: bmctl-workspace/.sa-keys/PROJECT_ID-anthos-baremetal-gcr.json
    sshPrivateKeyPath: SSH_PRIVATE_KEY_PATH
    gkeConnectAgentServiceAccountKeyPath: bmctl-workspace/.sa-keys/PROJECT_ID-anthos-baremetal-connect.json
    gkeConnectRegisterServiceAccountKeyPath: bmctl-workspace/.sa-keys/PROJECT_ID-anthos-baremetal-register.json
    cloudOperationsServiceAccountKeyPath: bmctl-workspace/.sa-keys/PROJECT_ID-anthos-baremetal-cloud-ops.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: CLUSTER_VERSION
      gkeConnect:
        projectID: PROJECT_ID
      controlPlane:
        nodePoolSpec:
          nodes:
          - address: ADMIN_CP_NODE_IP
      clusterNetwork:
        pods:
          cidrBlocks:
          - 192.168.0.0/16
        services:
          cidrBlocks:
          - 10.96.0.0/20
      loadBalancer:
        mode: bundled
        ports:
          controlPlaneLBPort: 443
        vips:
          controlPlaneVIP: ADMIN_CP_VIP
      clusterOperations:
        projectID: PROJECT_ID
        location: us-central1
      storage:
        lvpNodeMounts:
          path: /mnt/localpv-disk
          storageClassName: local-disks
        lvpShare:
          path: /mnt/localpv-share
          storageClassName: local-shared
          numPVUnderSharedPath: 5
      nodeConfig:
        podDensity:
          maxPodsPerNode: 250
      # GKEOnPremAPI (Optional) Specify if you wish to explicitly enable/disable the cloud hosted gkeonprem
      # API to enable/disable cluster lifecycle management from gcloud UI and Terraform.
      # gkeOnPremAPI:
        # enabled: false
        # location is the Cloud location for the cluster resource metadata where the cluster will be enrolled.
        # location: us-central1
  4. 將管理員工作站上產生的設定檔內容,替換成上述範例的內容。

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

  5. 如要建立管理員叢集,請在管理員工作站的 /baremetal 目錄中執行下列指令:

    bmctl create cluster -c ADMIN_CLUSTER_NAME

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

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

  6. 確認叢集已建立並正在執行:

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

    如果叢集正在運作,回應會如下所示:

    NAME     STATUS  ROLES          AGE  VERSION
    node-01  Ready   control-plane  16h  v1.25.7-gke.1000
  7. 如要為使用者帳戶授予叢集的 Kubernetes clusterrole/cluster-admin 角色,請執行下列 gcloud 指令:

    gcloud container fleet memberships generate-gateway-rbac \
        --membership=ADMIN_CLUSTER_NAME \
        --role=clusterrole/cluster-admin \
        --users=GOOGLE_ACCOUNT_EMAIL \
        --project=PROJECT_ID \
        --kubeconfig=bmctl-workspace/ADMIN_CLUSTER_NAME/ADMIN_CLUSTER_NAME-kubeconfig \
        --context=ADMIN_CLUSTER_NAME-admin@ADMIN_CLUSTER_NAME \
        --apply

    這個指令會輸出類似以下的結果 (為方便閱讀,已截斷):

    Validating input arguments.
    Specified Cluster Role is: clusterrole/cluster-admin
    Generated RBAC policy is:
    --------------------------------------------
    ...
    
    Applying the generate RBAC policy to cluster with kubeconfig: /root/bmctl-workspace/<var class="edit"scope="ADMIN_CLUSTER_NAME">ADMIN_CLUSTER_NAME</var>/<var class="edit"scope="ADMIN_CLUSTER_NAME">ADMIN_CLUSTER_NAME</var>-kubeconfig, context: <var class="edit"scope="ADMIN_CLUSTER_NAME">ADMIN_CLUSTER_NAME</var>-admin@<var class="edit"scope="ADMIN_CLUSTER_NAME">ADMIN_CLUSTER_NAME</var>
    Writing RBAC policy for user: GOOGLE_ACCOUNT_EMAIL to cluster.
    Successfully applied the RBAC policy to cluster.
    

    此外,RBAC 政策可讓您在Google Cloud 控制台登入叢集,查看更多叢集詳細資料。

3. 建立使用者叢集

下列步驟會為最精簡的管理員叢集和使用者叢集安裝作業建立使用者叢集。請務必先為先前「收集資訊」一節表格中的每個預留位置提供值,再繼續操作。

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

bmctl

如果專案已啟用 GKE On-Prem API (gkeonprem.googleapis.com),新建立的叢集會自動註冊至 API。即使叢集設定檔中未指定 spec.gkeOnPremAPI,系統也會註冊。叢集註冊這個 Google Cloud代管 API 後,您可以使用 Google Cloud 控制台或 gcloud CLI 管理叢集生命週期。

如要停用自動註冊功能,請在建立叢集前,取消註解叢集設定檔中的 spec.gkeOnPremAPI 區段,並將 spec.gkeOnPremAPI.enabled 設為 false。spec.gkeOnPremAPI.enabled 欄位可變更,因此您可以在叢集建立後隨時取消註冊。

  1. 產生叢集設定檔:

    bmctl create config -c USER_CLUSTER_NAME \
      --project-id=PROJECT_ID
  2. 驗證使用者叢集設定檔:

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

    • 為方便閱讀,我們已移除這個範例中的註解。
    • 叢集類型 spec.type 已設為 user。
    • 系統會新增 spec.clusterSecurity.authorization.clusterAdmin.gcpAccounts 欄位,將 clusterrole/cluster-admin 授予您的帳戶。此外,這個欄位可讓您在Google Cloud 控制台登入叢集,查看更多叢集詳細資料。
    ---
    apiVersion: v1
    kind: Namespace
    metadata:
      name: cluster-USER_CLUSTER_NAME
    ---
    apiVersion: baremetal.cluster.gke.io/v1
    kind: Cluster
    metadata:
      name: USER_CLUSTER_NAME
      namespace: cluster-USER_CLUSTER_NAME
    spec:
      type: user
      profile: default
      anthosBareMetalVersion: CLUSTER_VERSION
      gkeConnect:
        projectID: PROJECT_ID
      controlPlane:
        nodePoolSpec:
          nodes:
          - address: USER_CP_NODE_IP
      clusterNetwork:
        pods:
          cidrBlocks:
          - 192.168.0.0/16
        services:
          cidrBlocks:
          - 10.96.0.0/20
      loadBalancer:
        mode: bundled
        ports:
          controlPlaneLBPort: 443
        vips:
          controlPlaneVIP: USER_CP_VIP
          ingressVIP: USER_INGRESS_VIP
        addressPools:
        - name: pool1
          addresses:
          - START_IP-END_IP
      clusterOperations:
        projectID: PROJECT_ID
        location: us-central1
      clusterSecurity:
        authorization:
          clusterAdmin:
            gcpAccounts:
            - GOOGLE_ACCOUNT_EMAIL
      storage:
        lvpNodeMounts:
          path: /mnt/localpv-disk
          storageClassName: local-disks
        lvpShare:
          path: /mnt/localpv-share
          storageClassName: local-shared
          numPVUnderSharedPath: 5
      nodeConfig:
        podDensity:
          maxPodsPerNode: 250
      # GKEOnPremAPI (Optional) Specify if you wish to explicitly enable/disable the cloud hosted gkeonprem
      # API to enable/disable cluster lifecycle management from gcloud UI and Terraform.
      # gkeOnPremAPI:
        # enabled: false
        # location is the Cloud location for the cluster resource metadata where the cluster will be enrolled.
        # location: us-central1
    ---
    apiVersion: baremetal.cluster.gke.io/v1
    kind: NodePool
    metadata:
      name: node-pool-1
      namespace: cluster-USER_CLUSTER_NAME
    spec:
      clusterName: USER_CLUSTER_NAME
      nodes:
      - address: USER_WORKER_NODE_IP
    
  3. 將管理員工作站上產生的設定檔內容,替換成上述範例的內容。

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

  4. 建立使用者叢集:

    bmctl create cluster -c USER_CLUSTER_NAME \
    --kubeconfig bmctl-workspace/ADMIN_CLUSTER_NAME/ADMIN_CLUSTER_NAME-kubeconfig

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

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

  5. 確認叢集已建立並正在執行:

    kubectl --kubeconfig bmctl-workspace/USER_CLUSTER_NAME/USER_CLUSTER_NAME-kubeconfig \
      get nodes

    如果叢集正在運作,回應會如下所示:

    NAME    STATUS   ROLES           AGE     VERSION
    nuc-3   Ready    control-plane   4m32s   v1.26.2-gke.1001
    nuc-4   Ready    worker          2m2s    v1.26.2-gke.1001

控制台

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

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

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

  2. 確認 Google Cloud 專案清單已選取 PROJECT_ID。

  3. 點選「建立叢集」。

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

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

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

  7. 點選「下一步」。

叢集基本資訊

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

  2. 確認已選取新建立的管理員叢集。

  3. 在「GCP API Location」(GCP API 位置) 中,選取「us-central1」。

  4. 在「Google Distributed Cloud version」(Google Distributed Cloud 版本) 中,選取 CLUSTER_VERSION 或使用預設值。這個頁面的其餘設定可使用預設值。

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

網路

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

    USER_CP_NODE_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) 區段中,輸入控制層 VIP 的 IP 位址:

    USER_CP_VIP
    
  6. 輸入 Ingress VIP 的 IP 位址:

    USER_INGRESS_VIP
    
  7. 在「Service and Pod CIDRs」(Service 和 Pod CIDR) 區段中,如果您未在規劃工具中變更 Service 和 Pod CIDR,則可使用預設值。

    如果您變更了 CIDR,請輸入要使用的 CIDR:

    • Service CIDR:
    10.96.0.0/20
    
    • Pod CIDR:
    192.168.0.0/16
    
  8. 按一下左側導覽列中的「default pool」。

建立節點集區

叢集至少須有一個 worker 節點集區。在這個叢集中建立的 worker 節點群組是以節點集區為範本。

在「Nodes address 1」(節點位址 1) 欄位中,輸入使用者叢集 worker 節點的 IP 位址:

USER_WORKER_NODE_IP

建立叢集

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

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

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

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

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

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

gcloud CLI

本節說明如何使用 gcloud CLI 建立使用者叢集和節點集區。

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

    gcloud container bare-metal clusters create USER_CLUSTER_NAME \
      --project=PROJECT_ID \
      --location=us-central1 \
      --admin-cluster-membership=ADMIN_CLUSTER_NAME \
      --admin-cluster-membership-project=PROJECT_ID \
      --admin-cluster-membership-location=global \
      --version=CLUSTER_VERSION \
      --admin-users=GOOGLE_ACCOUNT_EMAIL \
      --island-mode-service-address-cidr-blocks=10.96.0.0/20 \
      --island-mode-pod-address-cidr-blocks=192.168.0.0/16 \
      --metal-lb-address-pools='pool=lb-pool-1,manual-assign=True,addresses=START_IP-END_IP' \
      --control-plane-node-configs='node-ip=USER_CP_NODE_IP' \
      --control-plane-vip=USER_CP_VIP \
      --control-plane-load-balancer-port=443 \
      --ingress-vip=USER_INGRESS_VIP \
      --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/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=us-central1
    

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

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

    Created Anthos cluster on bare metal [https://gkeonprem.googleapis.com/v1/projects/PROJECT_ID/locations/us-central1/bareMetalClusters/USER_CLUSTER_NAME].
    
  2. 叢集建立完成後,請執行下列指令,在新建立的叢集上建立節點集區。

    gcloud container bare-metal node-pools create node-pool-1 \
      --cluster=USER_CLUSTER_NAME \
      --project=PROJECT_ID \
      --location=us-central1 \
      --node-configs node-ip=USER_WORKER_NODE_IP

如需更多資訊和其他範例,請參閱下列資源:

Terraform

本節說明如何使用 Terraform 建立使用者叢集和節點集區。

  1. 建立目錄,並在該目錄中建立新檔案。檔案名稱必須有 .tf 副檔名。在本指南中,這個檔案稱為 main.tf。

    mkdir DIRECTORY && cd DIRECTORY && touch main.tf
    
  2. 驗證使用者叢集 Terraform 資源:

    下列 Terraform 資源範例已填入您在上一節規劃表中輸入的值。

    resource "google_gkeonprem_bare_metal_cluster"  "cluster-basic" {
      provider = google-beta
      name = "USER_CLUSTER_NAME"
      project = "PROJECT_ID"
      location = "us-central1"
      admin_cluster_membership = "projects/PROJECT_ID/locations/global/memberships/ADMIN_CLUSTER_NAME"
      bare_metal_version = "CLUSTER_VERSION"
      network_config {
        island_mode_cidr {
          service_address_cidr_blocks = ["10.96.0.0/20"]
          pod_address_cidr_blocks = ["192.168.0.0/16"]
        }
      }
      control_plane {
        control_plane_node_pool_config {
          node_pool_config {
            labels = {}
            operating_system = "LINUX"
            node_configs {
              labels = {}
              node_ip = "USER_CP_NODE_IP"
            }
          }
        }
      }
      load_balancer {
        port_config {
          control_plane_load_balancer_port = 443
        }
        vip_config {
          control_plane_vip = "USER_CP_VIP"
          ingress_vip = "USER_INGRESS_VIP"
        }
        metal_lb_config {
          address_pools {
            pool = "pool1"
            addresses = [
              "START_IP-END_IP"
            ]
            avoid_buggy_ips = true
            manual_assign = true
          }
        }
      }
      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"
        }
      }
      security_config {
        authorization {
          admin_users {
            username = "GOOGLE_ACCOUNT_EMAIL"
          }
        }
      }
    }
    
    resource "google_gkeonprem_bare_metal_node_pool" "node-pool-default" {
      provider = google-beta
      name =  "node-pool-1"
      bare_metal_cluster = google_gkeonprem_bare_metal_cluster.cluster-basic.name
      project = "PROJECT_ID"
      location = "us-central1"
      node_pool_config {
        operating_system = "LINUX"
        node_configs {
          node_ip = "USER_WORKER_NODE_IP"
        }
      }
    }
    
  3. 將 Terraform 資源複製到 main.tf 並儲存檔案。

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

    terraform init
    

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

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

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

    terraform apply
    

    系統顯示提示訊息時,請輸入 yes。

    建立基本使用者叢集和節點集區約需 15 分鐘 (或更久,視網路而定)。

  7. 如要為使用者叢集建立 kubeconfig 檔案,請在管理員工作站上執行下列指令:

    bmctl get credentials --cluster USER_CLUSTER_NAME \
    --admin-kubeconfig bmctl-workspace/ADMIN_CLUSTER_NAME/ADMIN_CLUSTER_NAME-kubeconfig

    指令輸出內容會顯示使用者叢集的 kubeconfig 檔案名稱,例如:

    bmctl-workspace/USER_CLUSTER_NAME/USER_CLUSTER_NAME-TIMESTAMP-kubeconfig

    檔案名稱中的 TIMESTAMP 表示檔案建立日期和時間。

    這個檔案包含叢集的驗證憑證,因此請務必儲存在存取權受限的安全位置。

  8. 確認叢集已建立並正在執行:

    kubectl --kubeconfig bmctl-workspace/USER_CLUSTER_NAME/USER_CLUSTER_NAME-TIMESTAMP-kubeconfig \
        get nodes

    如果叢集正在運作,回應會如下所示:

    NAME    STATUS   ROLES           AGE     VERSION
    nuc-3   Ready    control-plane   4m32s   v1.26.2-gke.1001
    nuc-4   Ready    worker          2m2s    v1.26.2-gke.1001

如需更多資訊和其他範例,請參閱下列資源:

連線至使用者叢集

無論您使用哪種工具建立使用者叢集,您的電子郵件地址都會獲得角色式存取控管 (RBAC) 政策,讓您能以完整管理員權限連線至叢集。電子郵件地址的指定位置取決於工具:

  • bmctl:您的電子郵件地址會包含在範例使用者設定檔的 clusterSecurity 區段中。

  • Terraform:您的電子郵件地址會包含在 google_gkeonprem_bare_metal_cluster 資源範例的 security_config 區段中。

  • 控制台:您是叢集建立者,因此您的電子郵件地址會自動列入「Cluster basics」(叢集基本資訊) 頁面的「Authorization」(授權) 區段。

雖然您只指定了自己的電子郵件地址,但也可以加入其他電子郵件地址,將叢集的管理員權限授予其他使用者。

授予您電子郵件地址的 RBAC 政策會執行下列操作:

  • 在叢集上授予您 Kubernetes clusterrole/cluster-admin 角色。

  • 可讓您使用 Google 身分登入 Google Cloud 控制台中的叢集。您可以在控制台的「GKE clusters」(GKE 叢集) 頁面查看叢集。

  • 可讓您使用連結閘道的 kubeconfig,在本機電腦上執行 kubectl 指令。

如要取得 Connect 閘道的 kubeconfig,請在本機電腦執行下列指令:

  1. 取得可透過連結閘道存取叢集的 kubeconfig 項目。

    gcloud container fleet memberships get-credentials USER_CLUSTER_NAME  \
    --project=PROJECT_ID

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

    Starting to build Gateway kubeconfig...
    Current project_id: PROJECT_ID
    A new kubeconfig entry "connectgateway_PROJECT_ID_global_USER_CLUSTER_NAME" has been generated and set as the current context.
    
  2. 現在可以透過 Connect 閘道執行 kubectl 指令:

    kubectl get nodes
    

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

    NAME    STATUS   ROLES           AGE     VERSION
    nuc-3   Ready    control-plane   4m32s   v1.26.2-gke.1001
    nuc-4   Ready    worker          2m2s    v1.26.2-gke.1001
    

    許多 kubectl 指令都需要管理員叢集的 kubeconfig。您需要在管理員工作站上執行這些指令。

後續步驟