重設節點及刪除叢集

在 Google Distributed Cloud 中重設節點及刪除叢集,會從主機移除殘留的二進位檔、systemd 服務和監聽通訊埠。清除這些節點後,環境就能重新部署或停用。

安裝叢集時,二進位檔和 systemd 服務會安裝在主機節點上,服務也會開始監聽通訊埠。如果安裝失敗,您必須重設 (抹除) 節點,移除這些二進位檔和服務,並準備節點,以便重新嘗試安裝叢集。如果不重設節點,後續嘗試在節點上安裝叢集時就會失敗。

選擇刪除方法

刪除叢集的方法取決於:

  • 叢集類型。
  • 只想清理特定節點,不刪除整個叢集。
  • 叢集的建立方式。

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 刪除叢集。否則,請使用 bmctl 或 kubectl 刪除叢集。

bmctl

您可以使用 bmctl 刪除透過 bmctl 或 kubectl 建立,且未註冊 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 刪除透過 bmctl 或 kubectl 建立,且未註冊 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. 在叢集清單中,找出要刪除的叢集。如果「Type」(類型) 為「external」(外部),表示叢集是使用 bmctl 建立,且未在 GKE On-Prem API 註冊。在這種情況下,請按照「bmctl」或「kubectl」分頁中的步驟刪除叢集。

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

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

  6. 在「Details」(詳細資料) 面板中,按一下視窗頂端附近的 「Delete」(刪除)。

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

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.36.200-gke.118          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 代理程式或地端部署環境有連線問題。如要排解 Connect Agent 的問題,請參閱「收集 Connect Agent 記錄」。

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

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

      如果叢集是使用 bmctl 或 kubectl 刪除,您也必須加入 --ignore-errors,這會將 GKE On-Prem API 資源留在 Google Cloud中。其中一個徵兆是,控制台的「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

負載平衡器節點:

  • keepalived 和 haproxy 服務已刪除。
  • keepalived 和 haproxy 的設定檔會刪除。