集群故障迁移
在多云多集群场景中,为了提高业务的高可用性,用户工作负载可能会被部署在多 个不同的集群中。在 Karmada 中,当集群发生故障或是用户不希望在某个集群上继续运行工作负载时,用户可以通过管理集群污点来将工作负载从该集群驱逐,或阻止新的工作负载调度到目标集群。
被驱逐的工作负载将会被调度到其他最合适的集群,从而实现集群故障迁移,保障用户服务的可用性和连续性。
为何需要集群故障迁移
下面来介绍一些多集群故障迁移的场景:
- 管理员在 Karmada 控制面部署了一个离线业务,并将业务 Pod 实例分发到了多个集群。突然某个集群发生故障,管理员希望 Karmada 能够把故障集群上的 Pod 实例迁移到其他条件适合的集群中去。
- 普通用户通过 Karmada 控制面在某一个集群上部署了一个在线业务,业务包括数据库实例、服务器实例、配置文件等,服务通过控制面上的ELB对外暴露,此时某一集群发生故障,用户希望把整个业务能迁移到另一个情况较适合的集群上,业务迁移期间需要保证服务不断服。
- 管理员将某个集群进行升级,作为基础设施的容器网络、存储等发生了改变,管理员希望在集群升级之前把当前集群上的应用迁移到其他适合的集群中去,业务迁移期间需要保证服务不断服。
- ......
怎样进行故障迁移

用户在 Karmada 中加入了三个集群,分别为:member1、member2 和 member3。然后在 Karmada 控制面部署了一个名为 foo,且副本数为 4 的 Deployment,并通过 PropagationPolicy 将其分发到了集群 member1 和 member2 上。
当集群 member1 发生故障之后,其上的 Pod 实例将被驱逐,然后被迁移到集群 member2 或是集群 member3 中,这个不同的迁移行为可以通过 PropagationPolicy/ClusterPropagationPolicy 的副本调度策略 ReplicaSchedulingStrategy 来控制。
用户如何开启特性
用户可以通过启用 Failover 特性开关来开启故障迁移特性。Failover feature gate 目前处于 Beta 阶段,默认关闭,用户应明确启用以避免意外事件。您可以按照如下配置在 karmada-controller-manager 组件中启用 Failover 特性开关:
--feature-gates=Failover=true