-
etcd 运算符等待将第四个控制平面机器作为 etcd 成员添加到集群。这个新的 etcd 成员的状态为
Running
,但在从 etcd leader 接收完整的数据库更新之前,它不会处于ready
状态。 -
当新的 etcd 成员接收到完整的数据库更新后,etcd 运算符会将新的 etcd 成员提升为投票成员,并从集群中移除旧的 etcd 成员。
您可以使用控制平面机器集来提高 OpenShift Container Platform 集群控制平面的弹性。
如果可能,控制平面机器集会在多个故障域中分布控制平面机器。此配置在控制平面内提供高可用性和容错性。当基础架构提供商出现问题时,此策略可以帮助保护控制平面。
控制平面机器集的故障域概念类似于云提供商上的现有概念。并非所有平台都支持使用故障域。
云提供商 | 故障域支持 | 提供商命名法 |
---|---|---|
Amazon Web Services (AWS) |
X |
|
Google Cloud Platform (GCP) |
X |
|
Microsoft Azure |
X |
|
Nutanix |
X |
|
Red Hat OpenStack Platform (RHOSP) |
X |
|
VMware vSphere |
X |
映射到 vSphere 区域的故障域[1] |
有关更多信息,请参阅“VMware vCenter 的区域和区域”。
控制平面机器集自定义资源 (CR) 中的故障域配置是特定于平台的。有关 CR 中故障域参数的更多信息,请参阅您提供商的示例故障域配置。
控制平面机器集运算符会自动恢复控制平面机器。当删除控制平面机器时,运算符会使用 `ControlPlaneMachineSet` 自定义资源 (CR) 中指定的配置创建一个替换。
对于使用控制平面机器集的集群,您可以配置机器运行状况检查。机器运行状况检查会删除不正常的控制平面机器,以便对其进行替换。
如果您为控制平面配置 `MachineHealthCheck` 资源,请将 `maxUnhealthy` 的值设置为 `1`。 此配置可确保当多个控制平面机器似乎不正常时,机器运行状况检查不会采取任何措施。多个不正常的控制平面机器可能表示 etcd 集群已降级,或者正在进行替换故障机器的缩放操作。 如果 etcd 集群降级,可能需要手动干预。如果正在进行扩展操作,则机器健康检查应允许其完成。 |
对于使用机器 API 运算符的 OpenShift Container Platform 集群,etcd 运算符使用机器删除阶段的生命周期钩子来实现仲裁保护机制。
通过使用preDrain
生命周期钩子,etcd 运算符可以控制何时清空和移除控制平面机器上的 Pod。为了保护 etcd 仲裁,etcd 运算符会阻止移除 etcd 成员,直到它将该成员迁移到集群中的新节点。
此机制允许 etcd 运算符精确控制 etcd 仲裁的成员,并允许机器 API 运算符在无需特定操作 etcd 集群知识的情况下安全地创建和移除控制平面机器。
当在使用控制平面机器集的集群上替换控制平面机器时,集群暂时会有四个控制平面机器。当第四个控制平面节点加入集群时,etcd 运算符会在替换节点上启动一个新的 etcd 成员。当 etcd 运算符观察到旧的控制平面机器被标记为要删除时,它会停止旧节点上的 etcd 成员,并提升替换的 etcd 成员以加入集群的仲裁。
控制平面机器Deleting
阶段按以下顺序进行:
一个控制平面机器被计划删除。
控制平面机器进入Deleting
阶段。
为了满足preDrain
生命周期钩子,etcd 运算符会执行以下操作:
etcd 运算符等待将第四个控制平面机器作为 etcd 成员添加到集群。这个新的 etcd 成员的状态为Running
,但在从 etcd leader 接收完整的数据库更新之前,它不会处于ready
状态。
当新的 etcd 成员接收到完整的数据库更新后,etcd 运算符会将新的 etcd 成员提升为投票成员,并从集群中移除旧的 etcd 成员。
此转换完成后,旧的 etcd pod 及其数据可以安全地移除,因此preDrain
生命周期钩子将被移除。
控制平面机器状态条件Drainable
设置为True
。
机器控制器尝试清空由控制平面机器支持的节点。
如果清空失败,则Drained
设置为False
,并且机器控制器会再次尝试清空节点。
如果清空成功,则Drained
设置为True
。
控制平面机器状态条件Drained
设置为True
。
如果没有其他运算符添加preTerminate
生命周期钩子,则控制平面机器状态条件Terminable
设置为True
。
机器控制器从基础架构提供程序中移除实例。
机器控制器删除Node
对象。
preDrain
生命周期钩子的 YAML 代码片段apiVersion: machine.openshift.io/v1beta1
kind: Machine
metadata:
...
spec:
lifecycleHooks:
preDrain:
- name: EtcdQuorumOperator (1)
owner: clusteroperator/etcd (2)
...
1 | preDrain 生命周期钩子的名称。 |
2 | 管理preDrain 生命周期钩子的钩子实现控制器。 |