重置 Google Distributed Cloud 中的故障节点

如果 Google Distributed Cloud 中的节点发生故障(例如由于存储、网络或操作系统配置错误),则您需要高效地恢复集群健康状况。恢复集群健康状况后,您可以排查节点故障。本文档介绍如何通过重置节点并在需要时强制移除节点来从节点故障场景恢复。

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

如果您需要其他帮助,请与 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 节点控制平面 HA 部署的灾难恢复。此过程不支持恢复具有 5 个节点或更多节点的 HA 设置。

后续步骤

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

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