13.6. control plane 机器集故障排除

使用本节中的信息从您可能会遇到的问题了解和恢复。

13.6.1. 检查 control plane 机器设置自定义资源状态

您可以验证 ControlPlaneMachineSet 自定义资源 (CR) 是否存在以及其状态。

流程

  • 运行以下命令确定 CR 的状态:

    $ oc get controlplanemachineset.machine.openshift.io cluster \
      --namespace openshift-machine-api
    • Active 的结果表示 ControlPlaneMachineSet CR 存在并被激活。不需要管理员操作。
    • Inactive 表示 ControlPlaneMachineSet CR 存在但没有激活。
    • NotFound 表示没有现有的 ControlPlaneMachineSet CR。

后续步骤

要使用 control plane 机器集,您必须确保集群有正确设置的 ControlPlaneMachineSet CR。

  • 如果您的集群有一个现有的 CR,您必须验证 CR 中的配置是否正确。
  • 如果集群没有现有的 CR,则必须为集群创建一个带有正确配置的 CR。

13.6.2. 添加缺少的 Azure 内部负载均衡器

Azure 的 ControlPlaneMachineSet 和 control plane Machine 自定义资源(CR) 都需要 internalLoadBalancer 参数。如果集群上没有预配置此参数,则必须将其添加到两个 CR 中。

有关此参数位于 Azure 供应商规格中的更多信息,请参阅 Azure 供应商规格示例。control plane Machine CR 中的放置类似。

流程

  1. 运行以下命令列出集群中的 control plane 机器:

    $ oc get machines \
      -l machine.openshift.io/cluster-api-machine-role==master \
      -n openshift-machine-api
  2. 对于每个 control plane 机器,运行以下命令编辑 CR:

    $ oc edit machine <control_plane_machine_name>
  3. 添加 internalLoadBalancer 参数,使其包含您的集群的正确详情,并保存您的更改。
  4. 运行以下命令来编辑 control plane 机器集 CR:

    $ oc edit controlplanemachineset.machine.openshift.io cluster \
      -n openshift-machine-api
  5. 添加 internalLoadBalancer 参数,使其包含您的集群的正确详情,并保存您的更改。

后续步骤

  • 对于使用默认 RollingUpdate 更新策略的集群,Operator 会自动将更改传播到 control plane 配置。
  • 对于配置为使用 OnDelete 更新策略的集群,您必须手动替换 control plane 机器。

13.6.3. 恢复降级的 etcd Operator

在某些情况下可能会导致 etcd Operator 降级。

例如,在执行补救时,机器健康检查可能会删除托管 etcd 的 control plane 机器。如果此时无法访问 etcd 成员,etcd Operator 会降级。

当 etcd Operator 降级时,需要人工干预才能强制 Operator 删除失败的成员并恢复集群状态。

流程

  1. 运行以下命令列出集群中的 control plane 机器:

    $ oc get machines \
      -l machine.openshift.io/cluster-api-machine-role==master \
      -n openshift-machine-api \
      -o wide

    以下任何条件都可能表示 control plane 机器失败:

    • STATE 值为 stopped
    • PHASE 值是 Failed
    • PHASE 值为 Deleting 超过十分钟。
    重要

    在继续操作前,请确保集群有两个健康的 control plane 机器。对多个 control plane 机器执行操作可能会丢失 etcd 仲裁,并可能导致数据丢失。

    如果您丢失了大多数 control plane 主机,并导致 etcd 仲裁丢失,那么您必须遵循灾难恢复流程 "Restoring to a previous cluster state" 而不是此过程。

  2. 运行以下命令,编辑失败的 control plane 机器的机器 CR:

    $ oc edit machine <control_plane_machine_name>
  3. 从失败的 control plane 机器中删除 lifecycleHooks 参数的内容并保存您的更改。

    etcd Operator 从集群中移除失败的机器,然后可以安全地添加新的 etcd 成员。