重置 Google Distributed Cloud 中发生故障的节点

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

如果要在节点未失败时向集群添加节点或从中移除节点,请参阅更新集群

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

重置节点

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

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

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

在以下用于重置节点的一些 bmctl 命令中,--force 参数指示是否应跳过重置命令(第 1 步)。如果使用了 --force 参数,bmctl 只会执行移除步骤(第 2 步),而不会运行 reset 命令。

移除工作器节点

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

  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. 如果重置节点的上一步失败,请从集群中强制移除该节点。此强制移除操作会跳过运行 reset 命令的上一个步骤,仅执行从节点池和集群自定义资源中移除对节点的相关引用的步骤:

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

如果您需要恢复管理集群,请不要在 reset 命令中提供 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 联系。