建立基本叢集

本頁面是指南的第二部分,將逐步說明如何在裸機上使用 Google Distributed Cloud (僅限軟體),建立 GKE 叢集的小型概念驗證安裝作業。第一部分「設定最精簡的基礎架構」說明如何設定硬體、規劃 IP 位址,以及設定必要的Google Cloud 基礎架構。本文以上一節的設定和規劃為基礎,說明如何建立管理員叢集和使用者叢集。接著可以建立 Service 和 Ingress

本文適用於負責設定、監控及管理基礎技術架構生命週期的管理員、架構師和營運人員。如要進一步瞭解我們在Google Cloud 內容中提及的常見角色和範例工作,請參閱「常見的 GKE Enterprise 使用者角色和工作」。

本指南可協助您建立最精簡的 Google Distributed Cloud 安裝項目。這個最低安裝需求可能不適合實際的生產需求和用途。如需瞭解如何安裝正式版,請參閱安裝指南

事前準備

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

  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
帳戶資訊
管理員工作站上安全殼層私密金鑰檔案的路徑。根據預設,路徑為
/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
一個使用者叢集工作站節點的 IP 位址。 USER_WORKER_NODE_IP
虛擬 IP 位址
管理員叢集 Kubernetes API 伺服器的 VIP。 ADMIN_CP_VIP
使用者叢集 Kubernetes API 伺服器的 VIP。 USER_CP_VIP
一個 VIP,用做Ingress Proxy 的外部位址。 USER_INGRESS_VIP
十個 IP 位址的範圍,可用於 LoadBalancer 類型的服務做為外部 IP 位址。請注意,這個範圍包含 MetalLB 必要的 Ingress VIP。其他 IP 位址不得與這個範圍重疊。 START_IP-END_IP
Pod 和 Service CIDR
以 CIDR 區塊標記法表示的 IP 位址範圍,供管理叢集上的 Pod 使用。建議的起始值為 192.168.0.0/16,已預先填入產生的叢集設定檔。 192.168.0.0/16
以 CIDR 區塊標記法表示的 IP 位址範圍,供管理叢集上的服務使用。建議的起始值為 10.96.0.0/20,已預先填入產生的叢集設定檔。 10.96.0.0/20
以 CIDR 區塊標記法表示的 IP 位址範圍,供使用者叢集上的 Pod 使用。建議的起始值會預先填入產生的叢集設定檔,也是控制台中的預設值,即 192.168.0.0/16 192.168.0.0/16
以 CIDR 區塊標記法表示的 IP 位址範圍,供使用者叢集上的服務使用。建議的起始值會預先填入產生的叢集設定檔,也是控制台中的預設值,即 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 設為 falsespec.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 規格。管理員叢集不得使用工作站節點。
    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 設為 falsespec.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. 前往控制台的「建立裸機叢集」頁面。

    前往「建立裸機叢集」

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

  3. 點選「建立叢集」

  4. 在對話方塊中,按一下「On-premises」

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

  6. 在「選擇叢集類型」下方,選取「為現有管理員叢集建立使用者叢集」

  7. 點選「下一步」

叢集基本資訊

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

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

  3. 在「GCP API Location」中,選取「us-central1」

  4. 在「Google Distributed Cloud version」中,選取 CLUSTER_VERSION 或使用預設值。 這個頁面上的其他設定可以保留預設值。

  5. 按一下左側導覽列中的「網路」

網路

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

    USER_CP_NODE_IP
    
  2. 在「Load balancer」(負載平衡器) 專區中,使用預設的負載平衡器「Bundled with MetalLB」(與 MetalLB 組合)

  3. 前往「新地址集區」部分。在「IP 位址範圍 1」欄位中輸入 IP 位址範圍:

    10.200.0.51-10.200.0.70
    
  4. 按一下 [完成]

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

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

    USER_INGRESS_VIP
    
  7. 在「服務和 Pod CIDR」部分,如果您未在規劃工具中變更服務和 Pod CIDR,則可使用預設值。

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

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

建立節點集區

叢集至少須有一個工作站節點的節點集區。節點集區是這個叢集中建立的工作站節點群組範本。

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

USER_WORKER_NODE_IP

建立叢集

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

    建立使用者叢集需要 15 分鐘以上的時間。主控台會顯示狀態訊息,驗證設定並建立叢集。

    如果設定有問題,控制台會顯示錯誤訊息,您應該能清楚瞭解問題,並修正設定問題,然後再次嘗試建立叢集。

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

    叢集建立完成後,系統會顯示「叢集狀態:執行中」

  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 區段中。

  • 控制台:您是叢集建立者,系統會自動將您的電子郵件地址納入「授權」部分的「叢集基本資訊」頁面。

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

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

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

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

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

如要取得連線閘道的 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. 現在您可以透過連線閘道執行 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。您需要在管理員工作站上執行這些指令。

後續步驟