集群故障迁移过程解析
让我们对 Karmada 集群故障迁移的过程进行解析。
添加集群污点
当集群状态变得不健康之后,集群将会被添加上 taint{effect: NoSchedule},具体情况为:
- 当集群状态中的
ReadyCondition 变为False时,Karmada 控制器将为目标集群对象添加如下污点:
key: cluster.karmada.io/not-ready
effect: NoSchedule
- 当集群状态中的
ReadyCondition 变为Unknown时,Karmada 控制器将为目标集群对象添加如下污点:
key: cluster.karmada.io/unreachable
effect: NoSchedule
此外,Karmada 控制器不会为集群对象主动添加 NoExecute 污点,用户可以通过集群污点管理功能对集群对象上的污点,包括 NoExecute 污点,进行主动管理。
故障迁移
当 Karmada 控制器发现某个集群被打上了 NoExecute 污点,且该污点不能被受影响的 PropagationPolicy/ClusterPropagationPolicy 中的容忍策略所容忍时,Karmada 控制器会将该集群从 PropagationPolicy/ClusterPropagationPolicy 所命中的资源的调度结果中移除,随后 Karmada 调度器将重新调度这些受影响的资源。
重调度的过程有以下几个限制:
- 对于每个重调度的工作负载,仍然需要满足
PropagationPolicy/ClusterPropagationPolicy的约束,如ClusterAffinity或SpreadConstraints。 - 应用初始调度结果中健康的集群在重调度过程中仍将被保留。