13.5. control plane 弹性和恢复

您可以使用 control plane 机器集提高 OpenShift Container Platform 集群的 control plane 的弹性。

13.5.1. 使用故障域的高可用性和容错功能

在可能的情况下,control plane 机器集会将 control plane 机器分散到多个故障域中。此配置在 control plane 中提供高可用性和容错功能。当基础架构供应商出现问题时,此策略可以帮助保护 control plane。

13.5.1.1. 故障域平台支持和配置

故障域的 control plane 机器集概念与云供应商的现有概念类似。并非所有平台都支持使用故障域。

表 13.2. 故障域支持列表

云供应商支持故障域Provider nomenclature

Amazon Web Services (AWS)

X

可用区域 (AZ)

Microsoft Azure

X

Azure 可用区

VMware vSphere

 

Not applicable

control plane 机器集自定义资源 (CR) 中的故障域配置是特定于平台的。有关 CR 中故障域参数的更多信息,请参阅您的供应商故障域配置示例。

13.5.1.2. 平衡 control plane 机器

control plane 机器集在自定义资源 (CR) 中指定的故障域间平衡 control plane 机器。

在可能的情况下,control plane 机器集会平等地使用每个故障域来确保适当的容错能力。如果故障域的数量小于 control plane 机器,则会按照其名称的字母顺序选择故障域来重复使用。对于没有指定故障域的集群,所有 control plane 机器都放在单个故障域中。

故障域配置的一些更改会导致 control plane 机器集重新平衡 control plane 机器。例如,如果您向数量小于 control plane 机器数量的故障域的集群中添加故障域,control plane 机器集会在所有可用故障域间重新平衡机器。

13.5.2. 恢复失败的 control plane 机器

Control Plane Machine Set Operator 会自动恢复 control plane 机器。删除 control plane 机器时,Operator 会使用 ControlPlaneMachineSet 自定义资源(CR) 中指定的配置创建替换。

对于使用 control plane 机器集的集群,您可以配置机器健康检查。机器健康检查会删除不健康的 control plane 机器,以便替换它们。

重要

如果您为 control plane 配置 MachineHealthCheck 资源,请将 maxUnhealthy 的值设置为 1

此配置可确保当多个 control plane 机器显示为不健康时,机器健康检查不会采取任何操作。多个不健康的 control plane 机器可能会表示 etcd 集群已降级或扩展操作来替换失败的机器。

如果 etcd 集群降级,可能需要手动干预。如果扩展操作正在进行,机器健康检查应该允许它完成。

13.5.3. 使用机器生命周期 hook 进行仲裁保护

对于使用 Machine API Operator 的 OpenShift Container Platform 集群,etcd Operator 使用机器删除阶段的生命周期 hook 来实现仲裁保护机制。

通过使用 preDrain 生命周期 hook,etcd Operator 可以控制 control plane 机器上的 pod 排空和删除的时间。为了保护 etcd 仲裁,etcd Operator 会阻止删除 etcd 成员,直到该成员迁移到集群中的新节点。

此机制允许 etcd Operator 对 etcd 仲裁的成员进行精确控制,并允许 Machine API Operator 在不需要 etcd 集群的特定操作了解的情况下安全地创建和删除 control plane 机器。

13.5.3.1. 使用仲裁保护处理顺序删除 control plane

当在使用 control plane 机器集的集群中替换 control plane 机器时,集群会临时有四个 control plane 机器。当第四个 control plane 节点加入集群时,etcd Operator 会在替换节点上启动新的 etcd 成员。当 etcd Operator 观察到旧的 control plane 机器已被标记为删除时,它会停止旧节点上的 etcd 成员,并提升替换 etcd 成员以加入集群的仲裁。

control plane 机器 Deleting 阶段按以下顺序进行:

  1. control plane 机器会停止以进行删除。
  2. control plane 机器进入 Deleting 阶段。
  3. 为了满足 preDrain 生命周期 hook,etcd Operator 会执行以下操作:

    1. etcd Operator 等待第四个 control plane 机器作为 etcd 成员添加到集群中。这个新 etcd 成员的状态为 Running 而不是 ready,直到它从 etcd leader 接收到了完整的数据库更新。
    2. 当新 etcd 成员收到完整数据库更新时,etcd Operator 会将新的 etcd 成员提升到投票成员,并从集群中移除旧的 etcd 成员。

    完成此转换后,旧的 etcd pod 及其数据是安全的,因此会删除 preDrain 生命周期 hook。

  4. control plane 机器状态条件 Drainable 设置为 True
  5. 机器控制器尝试排空由 control plane 机器支持的节点。

    • 如果排空失败,Drained 被设置为 False,机器控制器会尝试再次排空该节点。
    • 如果排空成功,Drained 被设置为 True
  6. control plane 机器状态条件 Drained 设置为 True
  7. 如果没有其他 Operator 添加了 preTerminate 生命周期 hook,control plane 机器状态条件 Terminable 被设置为 True
  8. 机器控制器从基础架构供应商中删除实例。
  9. 机器控制器会删除 Node 对象。

YAML 片断演示 etcd 仲裁保护 preDrain 生命周期 hook

apiVersion: machine.openshift.io/v1beta1
kind: Machine
metadata:
  ...
spec:
  lifecycleHooks:
    preDrain:
    - name: EtcdQuorumOperator 1
      owner: clusteroperator/etcd 2
  ...

1
preDrain 生命周期 hook 的名称。
2
管理 preDrain 生命周期 hook 的 hook 实施控制器。