重置节点并删除集群

在 GKE on Bare Metal 集群安装过程中,二进制文件和 systemd 服务会安装在托管该集群的节点上,并且服务会开始监听节点上的端口。

但是,如果集群安装失败,则需要删除所有这些二进制文件和服务。换句话说,在尝试重新安装集群之前,需要重置或擦除这些节点。如果未以这种方式重置节点,则在这些节点上安装集群的下一次尝试将失败。

本页面介绍了如何执行特定节点的清理操作以及如何删除集群。

选择删除方法

用于删除集群的方法取决于以下各项:

  • 集群类型。
  • 是否您只想清理特定节点而不是删除整个集群。
  • 集群的创建方式。

GKE on Bare Metal 提供以下删除方法:

  • 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 集群页面上。使用以下命令删除管理员集群的 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:集群的命名空间。默认情况下,GKE on Bare Metal 的集群命名空间是以 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 集群概览页面。

    转到 GKE 集群

  2. 选择用户集群所在的 Google Cloud 项目。

  3. 在集群列表中,点击要修改的集群。

  4. 在集群列表中,找到要删除的集群。 如果类型外部,则表示集群是使用 bmctl 创建的,并且未注册在 GKE On-Prem API 中。在这种情况下,请按照 bmctlkubectl 标签页中的步骤删除集群。

    如果状态列中的图标表明存在问题,请按照 gcloud CLI 标签页中的步骤删除集群。您需要向 delete 命令添加 --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.28.400-gke.77          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 集群页面上。

如需了解其他标志,请参阅 gcloud CLI 参考文档

重置特定集群节点

在某些情况下您可能需要重置集群的特定节点,例如管理员集群已被删除,但由该管理员集群管理的用户集群仍然存在。在这种情况下,由于管理员集群已被删除,将无法删除所有用户集群。因此,用户集群的节点必须单独重置。

如需重置节点,您需要一个具有 Google Container Registry (GCR) 的读取权限的服务账号。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 私钥的路径。 这是用于在重置期间与节点建立 SSH 连接的密钥。

  • SERVICE_ACCOUNT_KEY_PATH:包含服务账号密钥的 JSON 文件的路径。此密钥授权 bmctl 从 Google Container Registry 拉取映像。您可以使用控制台或 gcloud CLI 创建服务账号密钥。如需了解详情,请参阅创建和管理服务账号密钥。创建服务账号密钥文件的另一种方法是,运行带有 --create-service-accounts 标志的 create config 命令。如需详细了解该命令,请参阅使用 bmctl 创建管理员集群配置

集群删除详情

在删除过程中,集群的舰队成员注册、存储空间装载以及来自 anthos-system StorageClass 的数据都将被删除。

对于所有节点,用于集群网络的隧道接口会被移除,并且以下目录会被删除:

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

对于负载均衡器节点:

  • 系统会删除 keepalivedhaproxy 服务。
  • 系统会删除 keepalivedhaproxy 的配置文件。