More elegant More precise and More efficient
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分钟
跨多群集资源的全局代理
Karmada在1.2版本中新增了一个karmada-search组件,该组件为选装组件,用于缓存集群中部署的资源对象和事件,并通过搜索API对外提供检索服务。
1.3版本中,我们在该组件中引入了一个新的代理功能,允许用户以访问单集群的方式访问多集群中的资源,无论资源是否由Karmada管理,利用代理功能,用户可以统一通过Karmada控制面来操作成员集群中的资源。
用户可以使用ResourceRegistry API来指定缓存的资源类型以及数据源(目标集群),例如以下配置表示从member1 和member2两个集群中缓存Pod与Node资源:
apiVersion: search.karmada.io/v1alpha1
kind: ResourceRegistry
metadata:
name: proxy-sample
spec:
targetCluster:
clusterNames:
- member1
- member2
resourceSelectors:
- apiVersion: v1
kind: Pod
- apiVersion: v1
kind: Node
将该配置提交给karmada-apiserver之后,便可使用URL:/apis/search.karmada.io/v1alpha1/proxying/karmada/proxy/api/v1/namespaces/default/pods来进行集群资源访问。该URL中/apis/search.karmada.io/v1alpha1/proxying/karmada/proxy为固定前缀,后面部分与Kubernetes原生API路径完全一致。
关于该特性的更多信息可以参考:https://karmada.io/docs/userguide/globalview/proxy-global-resource/