重置 GKE on Bare Metal 中的故障节点

如果 GKE on Bare Metal 中的节点发生故障(例如由于存储、网络或操作系统配置错误),则您需要高效地恢复集群健康状况。恢复集群健康状况后,您可以排查节点故障。

本文档介绍如何通过重置节点并在需要时强制移除节点来从节点故障场景恢复。

如果要在节点未发生故障的正常情况下在集群中添加节点或者从集群中移除节点,请参阅更新集群

概览

有时候,在节点发生故障时,您无法在节点上运行重置命令,因为节点可能无法访问。您可能需要从集群中强制移除节点。

当您完全重置节点并更新集群时,会发生以下情况:

  1. 该节点会重置(类似于 kubeadm reset),机器会还原到预安装的状态。
  2. 对节点的相关引用会从节点池和集群自定义资源中移除。

工作器节点

如需从集群中移除节点,请先尝试完全移除该节点:

  1. 尝试完全重置节点。重置节点后,节点会从集群中移除:

    bmctl reset nodes \
      --addresses COMMA_SEPARATED_IPS \
      --cluster CLUSTER_NAME \
      --kubeconfig ADMIN_KUBECONFIG
    

    替换以下值:

    • COMMA_SEPARATED_IP:要重置的节点的 IP 地址,例如 10.200.0.8,10.200.0.9
    • CLUSTER_NAME:包含故障节点的目标集群的名称。
    • ADMIN_KUBECONFIG:管理员集群 kubeconfig 文件的路径。

    您现在可以诊断节点并修复导致初始故障的任何错误配置。请跳过本部分中的其余步骤。

  2. 如果上一步重置节点失败,您可以强制从集群中移除节点。此强制移除操作会跳过运行重置命令的上一步,并且仅执行从节点池和集群自定义资源中移除对节点的相关引用的步骤:

    bmctl reset nodes \
     --addresses COMMA_SEPARATED_IPS \
     --cluster CLUSTER_NAME \
     --kubeconfig ADMIN_KUBECONFIG \
     --force
    

    您现在可以诊断节点并修复导致初始故障的任何错误配置。

  3. 如果您在上一步中强制从节点集群中移除了节点,请再次运行 bmctl reset 命令以重置节点:

    bmctl reset nodes \
      --addresses COMMA_SEPARATED_IPS \
      --cluster CLUSTER_NAME \
      --kubeconfig ADMIN_KUBECONFIG
    

单个控制平面节点故障

该过程与针对工作器节点的过程相同。对于控制平面节点,bmctl 还会清除 etcd 成员资格。

如需从集群中移除节点,请先尝试完全移除该节点:

  1. 尝试完全重置节点。重置节点后,节点会从集群中移除:

    bmctl reset nodes \
      --addresses COMMA_SEPARATED_IPS \
      --cluster CLUSTER_NAME \
      --kubeconfig ADMIN_KUBECONFIG
    

    替换以下值:

    • COMMA_SEPARATED_IP:要重置的节点的 IP 地址,例如 10.200.0.8,10.200.0.9
    • CLUSTER_NAME:包含故障节点的目标集群的名称。
    • ADMIN_KUBECONFIG:管理员集群 kubeconfig 文件的路径。

    您现在可以诊断节点并修复导致初始故障的任何错误配置。请跳过本部分中的其余步骤。

  2. 如果上一步重置节点失败,您可以强制从集群中移除节点。此强制移除操作会跳过运行重置命令的上一步,并且仅执行从节点池和集群自定义资源中移除对节点的相关引用的步骤:

    bmctl reset nodes \
      --addresses COMMA_SEPARATED_IPS \
      --cluster CLUSTER_NAME \
      --kubeconfig ADMIN_KUBECONFIG \
      --force
    

    您现在可以诊断节点并修复导致初始故障的任何错误配置。

  3. 如果您在上一步中强制从节点集群中移除了节点,请再次运行 bmctl reset 命令以重置节点:

    bmctl reset nodes \
      --addresses COMMA_SEPARATED_IPS \
      --cluster CLUSTER_NAME \
      --kubeconfig ADMIN_KUBECONFIG
    

HA 控制平面中的仲裁丢失

如果 HA 集群中有太多控制平面节点变为故障状态,则集群将丢失仲裁,并且不可用。

  1. 如需恢复丢失仲裁的集群,请在其余运行状况良好的节点上运行以下命令:

    bmctl restore --control-plane-node CONTROL_PLANE_NODE \
      --cluster CLUSTER_NAME \
      [--kubeconfig KUBECONFIG_FILE]
    

    替换以下值:

    • CONTROL_PLANE_NODE:作为集群的一部分保留的健康状况良好的节点的 IP 地址。
    • CLUSTER_NAME:包含故障节点的目标集群的名称。
    • KUBECONFIG_FILE:如果要恢复用户集群,则该值为用户集群 kubeconfig 文件的路径。
  2. 恢复故障节点后,运行 bmctl reset 命令来重置节点:

    bmctl reset nodes \
      --addresses COMMA_SEPARATED_IPS \
      --cluster CLUSTER_NAME \
      [--kubeconfig KUBECONFIG_FILE]
    

    替换以下值:

    • COMMA_SEPARATED_IP:要重置的节点的 IP 地址,例如 10.200.0.8,10.200.0.9
    • CLUSTER_NAME:包含故障节点的目标集群的名称。
    • KUBECONFIG_FILE:管理员集群 kubeconfig 文件的路径。

    如果故障节点是负载均衡器节点池的一部分,则在节点恢复后,它们可能会争用控制平面虚拟 IP 地址,使新集群不稳定。恢复节点后,尽快对故障节点运行重置命令。

后续步骤

如需详细了解如何在没有故障时在集群中添加节点或者从集群中移除节点以及检查节点状态,请参阅更新集群