More elegant More precise and More efficient
· 8 min read
Karmada是开放的多云多集群容器编排引擎,旨在帮助用户在多云环境下部署和运维业务应用。凭借兼容Kubernetes原生API的能力,Karmada可以平滑迁移单集群工作负载,并且仍可保持与Kubernetes周边生态工具链协同。
在最新发布的1.3版本中,Karmada重新设计了应用跨集群故障迁移功能,实现了基于污点的故障驱逐机制,并提供平滑的故障迁移过程,可以有效保障服务迁移过程的连续性(不断服)。
本版本新增加的特性:
- 增加了面向多集群的资源代理新特性,通过该代理平台业务方可以在不感知多集群的情况下,以单集群访问姿势直接操纵部署在多集群的工作负载;
- 提供针对集群资源建模能力,通过自定义的集群资源模型,调度器可以更精准地进行资源调度;
- 提供基于Bootstrap令牌来注册Pull模式集群的能力,不仅可以简化集群注册过程,还可以方便地进行权限控制;
此外,基于生产环境的用户反馈,本版本还进行了诸多性能优化,系统运行过程中CPU和内存资源需求大大降低,详细的性能测试报告稍后发布。
与之前版本一样,v1.3与前面的版本仍然保持兼容,前面版本的用户仍可以平滑升级。
新特性概览
基于污点的优雅驱逐
当集群被判定为故障,并且故障时间超过宽限期(默认5分钟)之后,Karmada将为故障集群添加NoExecute污点,随后新引入的taint-manager控制器将开始驱逐该故障集群上的工作负载,接着调度器重新调度被驱逐的工作负载至新的可用集群,如果用户开启了GracefulEviction特性,被驱逐的工作负载并不会被立即删除,而是延迟到新的工作负载运行之后,可以保障驱逐过程中业务不中断。
整体故障迁移过程可以表示成:"集群故障判定" → "负载预驱逐" → "重新调度" → "清理冗余负载"。
此处,无论故障判定还是驱逐,用户都可以参过参数来控制:
--failover-eviction-timeout,指定从调度结果中删除故障集群的宽限期,默认5分钟--default-not-ready-toleration-seconds,指定默认情况下添加到尚未具有notReady:NoExecute容忍的分发策略上的容忍时间,默认300秒--default-unreachable-toleration-seconds,指定默认情况下添加到尚未具有unreachable:NoExecute容忍的分发策略上的容忍时间,默认300秒--graceful-eviction-timeout,指定自工作负载已移动到优雅驱逐任务以来,等待优雅驱逐控制器执行最终删除的超时时间,默认时长10分钟