重設節點及刪除叢集

安裝 Google Distributed Cloud 叢集時,系統會在代管該叢集的節點上安裝二進位檔和 systemd 服務,並開始監聽節點上的連接埠。

不過,如果叢集安裝失敗,就必須刪除所有這些二進位檔和服務。換句話說,節點必須重設或清除乾淨,才能重新嘗試安裝叢集。如果節點未以這種方式重設,下次嘗試在節點上安裝叢集時就會失敗。

本頁說明如何對特定節點執行這項清除作業,以及如何刪除叢集。

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

選擇刪除方法

刪除叢集的方法取決於:

  • 叢集類型。
  • 如果只想清除特定節點,而非刪除整個叢集。
  • 叢集的建立方式。

Google Distributed Cloud 提供下列刪除方法:

  • Google Cloud 控制台或 Google Cloud CLI:

    • 使用主控台或 gcloud CLI 刪除由 GKE On-Prem API 管理的使用者叢集。如果符合下列任一條件,使用者叢集就會由 GKE On-Prem API 管理:

      • 叢集是在 Google Cloud 控制台中建立,或使用 gcloud CLI 建立,這會自動設定 GKE On-Prem API 來管理叢集。

      • 叢集是使用 bmctl 建立,但已設定為由 GKE On-Prem API 管理

  • bmctl

    • 使用 bmctl reset nodes 重設特定節點。
    • 使用 bmctl reset 刪除下列叢集類型:

      • 管理員、混合式和獨立叢集 (稱為「自行管理的叢集」)。包括由 GKE On-Prem API 管理的管理員叢集。
      • 不是由 GKE On-Prem API 管理的使用者叢集。

    如果您使用 bmctl 重設節點或刪除叢集,指令會預期叢集設定檔位於目前的工作目錄中。根據預設,路徑如下所示:

    bmctl-workspace/CLUSTER_NAME/CLUSTER_NAME.yaml

    如果在建立叢集時使用 --workspace-dir 旗標指定其他目錄,則在重設叢集時,也必須使用該旗標指定工作目錄。

  • kubectl

    • 使用 kubectl delete cluster 僅刪除未由 GKE On-Prem API 叢集管理的使用者叢集。請勿在其他叢集類型上執行指令。
    • 請注意,如果您使用 kubectl delete cluster,刪除叢集後,也必須刪除叢集所在的命名空間。

刪除叢集後,您可以視需要變更設定,然後重新安裝。

刪除自行管理的叢集

如要刪除管理員、混合式或獨立叢集,請執行下列指令:

bmctl reset --cluster CLUSTER_NAME

在指令中,將 CLUSTER_NAME 替換為要重設的叢集名稱。

bmctl cluster reset 指令的輸出內容會與下列範例類似:

Please check the logs at bmctl-workspace/example-cluster-1/log/reset-20221025-184705/reset.log
[2022-10-25 18:47:11+0000] Creating bootstrap cluster... OK
[2022-10-25 18:48:18+0000] Loading images... OK
[2022-10-25 18:48:18+0000] Waiting for reset jobs to finish...
[2022-10-25 18:48:28+0000] Operation reset in progress: 1       Completed: 0    Failed: 0
...
[2022-10-25 18:50:08+0000] Operation reset in progress: 0       Completed: 1    Failed: 0
[2022-10-25 18:50:08+0000] Flushing logs... OK
[2022-10-25 18:50:08+0000] Deleting GKE Hub member example-cluster-1 in project example-project-12345...
[2022-10-25 18:50:11+0000] Successfully deleted GKE Hub member example-cluster-1 in project example-project-12345
[2022-10-25 18:50:11+0000] Deleting bootstrap cluster... OK

除了刪除叢集,這項指令也會從機群中刪除叢集的成員資格。

如果是透過 GKE On-Prem API 管理的管理員叢集,您也必須刪除 Google Cloud中的 API 資源。否則,叢集會顯示在 Google Cloud 控制台的「GKE clusters」(GKE 叢集) 頁面。使用下列指令刪除管理員叢集的 GKE On-Prem API 資源:

gcloud container bare-metal admin-clusters unenroll CLUSTER_NAME \
    --project=FLEET_HOST_PROJECT_ID \
    --location=REGION \
    --ignore-errors

更改下列內容:

  • FLEET_HOST_PROJECT_ID:機群的專案 ID,管理員叢集是該機群的成員。

  • REGION:GKE On-Prem API 儲存叢集中繼資料的 Google Cloud 區域。

--ignore-errors 旗標可確保即使在取消註冊期間發生錯誤,裸機管理員叢集資源仍能成功取消註冊。

叢集刪除完畢後,您就可以建立新叢集。詳情請參閱「叢集建立總覽」。

刪除使用者叢集

如果使用者叢集是由 GKE On-Prem API 管理,請使用控制台或 gcloud CLI 刪除叢集。否則,請使用 bmctlkubectl 刪除叢集。

bmctl

您可以使用 bmctl 刪除透過 bmctlkubectl 建立,且未註冊 GKE On-Prem API 的使用者叢集。

執行下列指令,使用 bmctl 刪除使用者叢集:

bmctl reset --cluster USER_CLUSTER_NAME --admin-kubeconfig ADMIN_KUBECONFIG_PATH

在指令中,將下列項目替換為您環境的專屬資訊:

  • USER_CLUSTER_NAME:要刪除的使用者叢集名稱。

  • ADMIN_KUBECONFIG_PATH:相關聯管理員叢集的 kubeconfig 檔案路徑。bmctl 支援使用 --kubeconfig 做為 --admin-kubeconfig 旗標的別名。

bmctl cluster reset 指令的輸出內容會與下列範例類似:

Please check the logs at bmctl-workspace/example-cluster-1/log/reset-20221025-184705/reset.log
[2022-10-25 18:47:11+0000] Creating bootstrap cluster... OK
[2022-10-25 18:48:18+0000] Loading images... OK
[2022-10-25 18:48:18+0000] Waiting for reset jobs to finish...
[2022-10-25 18:48:28+0000] Operation reset in progress: 1       Completed: 0    Failed: 0
...
[2022-10-25 18:50:08+0000] Operation reset in progress: 0       Completed: 1    Failed: 0
[2022-10-25 18:50:08+0000] Flushing logs... OK
[2022-10-25 18:50:08+0000] Deleting GKE Hub member example-cluster-1 in project example-project-12345...
[2022-10-25 18:50:11+0000] Successfully deleted GKE Hub member example-cluster-1 in project example-project-12345
[2022-10-25 18:50:11+0000] Deleting bootstrap cluster... OK

kubectl

您可以使用 kubectl 刪除透過 bmctlkubectl 建立,且未註冊 GKE On-Prem API 的使用者叢集。如要使用 kubectl 刪除使用者叢集,必須先刪除叢集物件,然後刪除其命名空間。否則系統無法建立重設機器的作業, 刪除程序可能會無限期停滯。

如要使用 kubectl 刪除使用者叢集,請按照下列步驟操作:

  1. 執行下列指令來刪除叢集物件:

    kubectl delete cluster USER_CLUSTER_NAME -n USER_CLUSTER_NAMESPACE \
        --kubeconfig ADMIN_KUBECONFIG_PATH

    在指令中,將下列項目替換為您環境的專屬資訊:

    • USER_CLUSTER_NAME:要刪除的使用者叢集名稱。

    • USER_CLUSTER_NAMESPACE:叢集的命名空間。根據預設,Google Distributed Cloud 的叢集命名空間是叢集名稱,並以 cluster- 為前置字元。舉例來說,如果將叢集命名為 test,命名空間的名稱會類似 cluster-test

    • ADMIN_KUBECONFIG_PATH:相關聯管理員叢集的 kubeconfig 檔案路徑。

  2. 叢集刪除成功後,請執行下列指令來刪除命名空間:

    kubectl delete namespace USER_CLUSTER_NAMESPACE --kubeconfig ADMIN_KUBECONFIG_PATH

控制台

如果使用者叢集是由 GKE On-Prem API 管理,請按照下列步驟刪除叢集:

  1. 在控制台中,前往「Google Kubernetes Engine clusters overview」(Google Kubernetes Engine 叢集總覽) 頁面。

    前往 GKE 叢集

  2. 選取使用者叢集所在的 Google Cloud 專案。

  3. 在叢集清單中,按一下要刪除的叢集。

  4. 在叢集清單中,找出要刪除的叢集。 如果「類型」為「外部」,表示叢集是使用 bmctl 建立,且未註冊 GKE On-Prem API。在這種情況下,請按照「bmctl」或「kubectl」分頁中的步驟刪除叢集。

    如果「狀態」欄中的圖示指出有問題,請按照 gcloud CLI 分頁中的步驟刪除叢集。您必須在刪除指令中加入 --ignore-errors 旗標。

  5. 按一下您要刪除的叢集名稱。

  6. 在「詳細資料」面板中,按一下視窗頂端的「刪除」

  7. 系統提示您確認時,請輸入叢集名稱,然後按一下「移除」

gcloud CLI

如果使用者叢集是由 GKE On-Prem API 管理,請在已安裝 gcloud CLI 的電腦上,按照下列步驟刪除叢集:

  1. 使用 Google 帳戶登入:

    gcloud auth login
    
  2. 更新元件:

    gcloud components update
    
  3. 取得叢集清單,確保您在刪除指令中指定正確的叢集名稱:

    gcloud container bare-metal clusters list \
      --project=FLEET_HOST_PROJECT_ID \
      --location=LOCATION
    

    更改下列內容:

    • FLEET_HOST_PROJECT_ID:叢集建立所在的專案 ID。

    • LOCATION:與使用者叢集相關聯的 Google Cloud 位置。

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

    NAME                      LOCATION    VERSION         ADMIN_CLUSTER            STATE
    example-user-cluster-1a   us-west1    1.32.100-gke.106          example-admin-cluster-1  RUNNING
    
  4. 執行下列指令來刪除叢集:

    gcloud container bare-metal clusters delete USER_CLUSTER_NAME \
      --project=FLEET_HOST_PROJECT_ID \
      --location=LOCATION \
      --force \
      --allow-missing
    

    更改下列內容:

    • USER_CLUSTER_NAME:要刪除的使用者叢集名稱。

    • FLEET_HOST_PROJECT_ID:叢集建立所在的專案 ID。

    • LOCATION:與使用者叢集相關聯的 Google Cloud 位置。

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

    --allow-missing 標記是標準 Google API 標記。加入這個旗標後,如果找不到叢集,指令會傳回成功。

    如果指令傳回的錯誤包含 failed connecting to the cluster's control plane 文字,表示管理員叢集、Connect Agent 或地端環境發生連線問題。如要排解 Connect Agent 的相關問題,請參閱收集 Connect Agent 記錄

    • 如果認為連線問題是暫時性的 (例如網路問題),請稍候再重試指令。

    • 如果您知道管理員叢集已遭刪除,或是管理員/使用者叢集的節點電腦已關機或離線,請加入 --ignore-errors 旗標,然後重試指令。

      如果叢集是使用 bmctlkubectl 刪除,導致 GKE On-Prem API 資源留在 Google Cloud中,您也需要加入 --ignore-errors。其中一個徵兆是叢集仍會顯示在主控台的「GKE clusters」(GKE 叢集)頁面,且處於不正常的狀態。

如要瞭解其他標記,請參閱 gcloud CLI 參考資料

重設特定叢集節點

舉例來說,如果管理員叢集已刪除,但該管理員叢集管理的使用者叢集仍存在,您可能需要重設叢集的特定節點。在這種情況下,由於管理員叢集已刪除,因此無法一併刪除使用者叢集。因此,使用者叢集的節點必須個別重設。

如要重設節點,您需要具備 Artifact Registry 讀取權限的服務帳戶。bmctl 指令會將這個服務帳戶的 JSON 金鑰檔案視為引數。如要重設叢集的個別節點,請執行下列指令:

bmctl reset nodes --addresses NODE_1_IP_ADDRESS,NODE_2_IP_ADDRESS \
    --ssh-private-key-path SSH_KEY_PATH \
    --gcr-service-account-key SERVICE_ACCOUNT_KEY_PATH \
    --login-user root

在指令中,將下列項目替換為您環境的專屬資訊:

  • NODE_1_IP_ADDRESS , NODE_2_IP_ADDRESS:以逗號分隔的清單,列出要刪除的節點 IP 位址。

  • SSH_KEY_PATH:安全殼層私密金鑰的路徑。這是重設期間用來與節點建立 SSH 連線的金鑰。

  • SERVICE_ACCOUNT_KEY_PATH:包含服務帳戶金鑰的 JSON 檔案路徑。這個金鑰可授權 bmctl 從 Artifact Registry 提取映像檔。您可以使用控制台或 gcloud CLI 建立服務帳戶金鑰。詳情請參閱「建立及管理服務帳戶金鑰」。您也可以執行 create config 指令並加上 --create-service-accounts 標記,建立服務帳戶金鑰檔案。如要進一步瞭解該指令,請參閱「使用 bmctl 建立及管理叢集設定」。

叢集刪除詳細資料

刪除期間,系統會刪除叢集的車隊成員註冊、儲存空間掛接,以及 anthos-system StorageClass 中的資料。

系統會移除所有節點用於叢集網路的通道介面,並刪除下列目錄:

  • /etc/kubernetes
  • /etc/cni/net.d
  • /root/.kube
  • /var/lib/kubelet

負載平衡器節點:

  • 系統會刪除 keepalivedhaproxy 服務。
  • 系統會刪除 keepalivedhaproxy 的設定檔。