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

当 GKE on Bare Metal 中的节点发生故障时(可能由于存储、网络或操作系统配置问题而发生故障),您需要高效地恢复集群运行状况。恢复集群健康状况后,您可以排查节点故障。本文档介绍如何通过重置节点以及根据需要强制移除节点来从节点故障场景恢复。

如果要在节点未发生故障时在集群中添加节点或从中移除节点,请参阅更新集群

如果您需要其他帮助,请与 Cloud Customer Care 联系。

重置节点

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

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

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

在下面用于重置节点的某些 bmctl 命令中,--force 参数会指示是否应跳过重置命令(第 1 步)。如果使用了 --force 参数,bmctl 只会执行移除步骤(第 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 成员资格。

移除故障节点后,集群会停止处于高可用性 (HA) 状态。如需恢复为高可用性状态,请向集群添加运行状况良好的节点

如需从集群中移除节点,请完成以下步骤:

  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 集群中有太多控制平面节点变为故障状态,则集群将丢失仲裁,并且不可用。

如果您需要恢复管理集群,请勿在重置命令中提供 kubeconfig 文件。如果您为管理集群提供 kubeconfig 文件,则会强制新集群执行重置操作。恢复用户集群时,请提供 kubeconfig 文件的路径。

  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 地址,并使新集群不稳定。恢复节点后,尽快对故障节点运行重置命令。

此过程仅处理 3 节点控制平面高可用性部署的灾难恢复。此过程不支持具有 5 个或更多节点的高可用性设置的恢复。

后续步骤

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

  • 如果您需要其他帮助,请与 Cloud Customer Care 联系。