Karmada 是开放的多云多集群容器编排引擎,旨在帮助用户在多云环境下部署和运维业务应用。凭借兼容 Kubernetes 原生 API 的能力,Karmada 可以平滑迁移单集群工作负载,并且仍可保持与 Kubernetes 周边生态工具链协同。

**Karmada v1.13 版本[1]**现已发布,本版本包含下列新增特性:
-
新增应用优先级调度功能,可用于保证关键作业时效性
-
新增应用调度暂停与恢复功能,可用于构建多集群队列系统
-
Karmada Operator 功能持续演进
-
Karmada 控制器性能优化提升
-
Karmada Dashboard 首个版本发布!开启多云编排可视化新篇章
新特性概览
应用优先级调度
当前,Karmada 调度器调度负载时遵循 FIFO 策略,按照负载进入调度队列的次序依次调度。但在某些场景,比如AI训练类作业平台,用户希望工作负载能够按照优先级进行调度。这样当高优先级、紧急任务进入调度队列时,可以实现"插队"的效果,从而确保关键业务的时效性与服务质量。
从 v1.13.0 版本起,用户使用 PropagationPolicy 分发负载时可以指定调度优先级(.spec.SchedulePriority 字段)。SchedulePriority 会指向用户事先配置的优先级类,Karmada 解析该优先级类并获取对应的优先级数值,值越大,调度优先级越高。
例如,需要在环境中部署 A,B 两种应用,应用A 负责在线交易这类对实时性要求高的业务,而应用B 负责定期日志清理等非紧急且对时间不敏感的业务。为确保在资源紧张时,应用A 能优先被调度,可以给应用A 配置较大的优先级类。
应用A 的优先级类和 PropagationPolicy 配置:
yaml
apiVersion:scheduling.k8s.io/v1
kind:PriorityClass
metadata:
name:high-priority
value:1000000
---
apiVersion:policy.karmada.io/v1alpha1
kind:PropagationPolicy
metadata:
name:propagation-a
spec:
schedulePriority:
priorityClassSource:KubePriorityClass
priorityClassName:high-priority
placement:
clusterAffinity:
clusterNames:
-member1
resourceSelectors:
-apiVersion:apps/v1
kind:Deployment
name:application-a
应用B 的优先级类和 PropagationPolicy 配置:
yaml
apiVersion: scheduling.k8s.io/v1
kind:PriorityClass
metadata:
name:low-priority
value:1
---
apiVersion:policy.karmada.io/v1alpha1
kind:PropagationPolicy
metadata:
name:propagation-b
spec:
schedulePriority:
priorityClassSource:KubePriorityClass
priorityClassName:low-priority
placement:
clusterAffinity:
clusterNames:
-member1
resourceSelectors:
-apiVersion:apps/v1
kind:Deployment
name:application-b
通过上述配置,当调度队列同时存在应用A 和 应用B 的工作负载时,应用A 会被优先调度,即便应用B 先进入队列。
更多有关应用优先级调度的资料请参考:应用优先级调度[2]
应用调度暂停与恢复
应用从 Karmada 控制面分发到成员集群大致可以分为两个环节:
-
应用调度:Karmada 调度器根据分发策略为应用选择合适的集群。
-
应用分发:Karmada 控制器按照调度结果将应用分发到指定的集群。
Karmada 现已支持应用调度及分发过程的启停控制,这一能力为用户提供了灵活的调度管理手段。基于此,用户可根据实际业务需求,构建定制化的高级调度策略。例如,可将其与业务发布流程相结合,实现联邦应用跨集群的滚动升级;也可结合工作负载优先级,达成队列与工作负载的优先级调度。其中应用分发环节的暂停与恢复是在 v1.11.0 版本引入的功能,详细请参考:应用分发暂停与恢复[3]。而在 v1.13.0 版本,Karmada 正式引入了应用调度环节的暂停与恢复。
社区在字段 ResourceBinding.Spec.Suspension 中新增了字段 Scheduling,用于控制应用调度的暂停与恢复。当 Suspension.Scheduling 为 true 时,应用调度暂停。当 Suspension.Scheduling 为 false 时,应用调度恢复。此功能可以与第三方系统集成,通过控制 ResourceBinding 的 Suspension.Scheduling 的字段值,实现对应用调度过程的精准控制。例如,在创建 ResourceBinding 时,可通过 webhook 将 Suspension.Scheduling 设置为 true 以暂停调度;随后,可对应用进行优先级排序、容量规划等操作;待相关操作完成后,设置 Suspension.Scheduling 为 false 即可恢复调度,最终实现有序调度/资源配额管理等高级能力。
更多有关应用调度暂停与恢复的资料请参考:应用调度暂停与恢复能力[4]
Karmada Operator 功能持续演进
本版本持续增强 Karmada Operator,新增以下功能:
-
支持配置 API Server 边车容器:用户可通过此功能为 Karmada API Server 配置边车容器,从而集成辅助服务。例如,可集成 KMS 插件[5] ,实现静态数据加密。更多有关 API Server 边车容器配置的资料请参考:支持配置 API Server 边车容器[6]
-
支持配置组件优先级类:用户可通过自定义 Karmada CR 为控制平面组件指定优先级类,确保关键组件以适当的优先级进行调度,从而提升 Karmada 系统的可靠性和稳定性。
更多有关组件优先级类配置的资料请参考:如何为 Karmada 控制平面组件配置优先级类[7]
以上新特性进一步提升了 Karmada Operator 的可配置性,满足用户多样化需求。
Karmada 控制器性能优化提升
随着 Karmada 被业界广泛采纳,以及部署的规模不断提升,性能优化也成了 Karmada 关注和发力的重要方向。社区成立了性能优化团队,专门分析和优化 Karmada 关键组件的性能,并已取得了显著的成效。
在版本 v1.13.0,Karmada 的性能优化主要集中在控制器,减少大规模数据部署场景下,控制器重启时的性能开销。为了验证性能优化的成效,社区准备了 12C CPU, 28G RAM 的物理机,并部署了 1000 个 Deployments 和 1000个 Configmaps,共生成 2000 个 ResourceBindings。在重启组件 karmada-controller-manager 后,收集 workqueue 的指标,结果如下:
-
对于 Detector 控制器:队列 Reconcile 时间降低了60%。
-
对于 binding-controller 控制器:队列 Reconcile 时间降低了25%。
这些指标显示了在版本 v1.13.0,控制器 Detector 和 binding-controller 在重启场景下存量资源重新编排的性能有了显著的提升。
Karmada Dashboard 首个版本发布
经过数位热心开发者的持续努力,Karmada Dashboard 终于迎来了具有里程碑意义的第一个版本(v0.1.0)!这一版本标志着 Karmada 在可视化管理领域迈出了重要的一步。
Karmada Dashboard 是一款专为 Karmada 用户设计的图形化界面工具,旨在简化多集群管理的操作流程,提升用户体验。通过 Dashboard,用户可以直观地查看集群状态、资源分布以及任务执行情况,同时还能轻松完成配置调整和策略部署。
Karmada Dashboard v0.1.0 主要功能包括:
-
集群管理: 提供集群接入和状态概览,包括健康状态、节点数量等关键指标。
-
资源管理:业务资源配置管理,包括命名空间、工作负载、服务等。
-
策略管理:Karmada 策略管理,包括分发策略、差异化策略等。
更多有关 Karmada Dashboard 的资料请参考:Karmada Dashboard[8]
致谢贡献者
Karmada v1.13 版本包含了来自 41 位贡献者的 205 次代码提交,在此对各位贡献者表示由衷的感谢:贡献者列表:


参考资料
1\] Karmada v1.13 版本: [github.com/karmada-io/...](https://link.juejin.cn?target=https%3A%2F%2Fgithub.com%2Fkarmada-io%2Fkarmada%2Freleases%2Ftag%2Fv1.13.0 "https://github.com/karmada-io/karmada/releases/tag/v1.13.0") \[2\] 应用优先级调度: [github.com/karmada-io/...](https://link.juejin.cn?target=https%3A%2F%2Fgithub.com%2Fkarmada-io%2Fkarmada%2Ftree%2Fmaster%2Fdocs%2Fproposals%2Fscheduling%2Fbinding-priority-preemption "https://github.com/karmada-io/karmada/tree/master/docs/proposals/scheduling/binding-priority-preemption") \[3\] 应用分发暂停与恢复: [karmada.io/docs/next/u...](https://link.juejin.cn?target=https%3A%2F%2Fkarmada.io%2Fdocs%2Fnext%2Fuserguide%2Fscheduling%2Fresource-propagating%2F%23suspend-and-resume-of-resource-propagation "https://karmada.io/docs/next/userguide/scheduling/resource-propagating/#suspend-and-resume-of-resource-propagation") \[4\] 应用调度暂停与恢复能力: [github.com/karmada-io/...](https://link.juejin.cn?target=https%3A%2F%2Fgithub.com%2Fkarmada-io%2Fkarmada%2Ftree%2Fmaster%2Fdocs%2Fproposals%2Fscheduling-suspension "https://github.com/karmada-io/karmada/tree/master/docs/proposals/scheduling-suspension") \[5\] KMS 插件: [kubernetes.io/docs/tasks/...](https://link.juejin.cn?target=https%3A%2F%2Fkubernetes.io%2Fdocs%2Ftasks%2Fadminister-cluster%2Fkms-provider%2F "https://kubernetes.io/docs/tasks/administer-cluster/kms-provider/") \[6\] 支持配置 API Server 边车容器: [github.com/karmada-io/...](https://link.juejin.cn?target=https%3A%2F%2Fgithub.com%2Fkarmada-io%2Fkarmada%2Ftree%2Fmaster%2Fdocs%2Fproposals%2Fkarmada-operator%2Fapi-server-sidecard-containers "https://github.com/karmada-io/karmada/tree/master/docs/proposals/karmada-operator/api-server-sidecard-containers") \[7\] 如何为 Karmada 控制平面组件配置优先级类: [karmada.io/zh/docs/adm...](https://link.juejin.cn?target=https%3A%2F%2Fkarmada.io%2Fzh%2Fdocs%2Fadministrator%2Fconfiguration%2Fpriority-class-configuration%2F%23%25E5%25A6%2582%25E4%25BD%2595%25E4%25B8%25BA-karmada-%25E6%258E%25A7%25E5%2588%25B6%25E5%25B9%25B3%25E9%259D%25A2%25E7%25BB%2584%25E4%25BB%25B6%25E9%2585%258D%25E7%25BD%25AE%25E4%25BC%2598%25E5%2585%2588%25E7%25BA%25A7%25E7%25B1%25BB "https://karmada.io/zh/docs/administrator/configuration/priority-class-configuration/#%E5%A6%82%E4%BD%95%E4%B8%BA-karmada-%E6%8E%A7%E5%88%B6%E5%B9%B3%E9%9D%A2%E7%BB%84%E4%BB%B6%E9%85%8D%E7%BD%AE%E4%BC%98%E5%85%88%E7%BA%A7%E7%B1%BB") \[8\] Karmada Dashboard: [github.com/karmada-io/...](https://link.juejin.cn?target=https%3A%2F%2Fgithub.com%2Fkarmada-io%2Fdashboard "https://github.com/karmada-io/dashboard") [👉](https://link.juejin.cn?target=https%3A%2F%2Fbbs.huaweicloud.com%2Fblogs%2Fattachment%3Fid%3Df435c471498a47528d149803801add89 "https://bbs.huaweicloud.com/blogs/attachment?id=f435c471498a47528d149803801add89")Karmada 是CNCF 首个多云多集群容器编排项目(孵化级),旨在帮助用户像使用单个集群一样轻松管理跨云多集群,让基于 Karmada 的多云方案无缝融入云原生技术生态。社区吸引了来自华为、道客、浙江大学、腾讯、中国电子云、滴滴、Zendesk、携程等100多家公司的全球贡献者,广泛分布于20+国家和地区。Karmada 现已在华为云、道客、兴业数金、中国移动、中国联通、携程、360集团、新浪、中通快递等众多企业单位生产应用,为企业提供从单集群到多云架构的平滑演进方案。 Karmada官网:[karmada.io/](https://link.juejin.cn?target=https%3A%2F%2Fkarmada.io%2F "https://karmada.io/") 项目地址:[github.com/karmada-io/...](https://link.juejin.cn?target=https%3A%2F%2Fgithub.com%2Fkarmada-io%2Fkarmada "https://github.com/karmada-io/karmada") Slack地址:[slack.cncf.io/(#karmada)](https://link.juejin.cn?target=https%3A%2F%2Fslack.cncf.io%2F%25EF%25BC%2588%23karmada%25EF%25BC%2589 "https://slack.cncf.io/%EF%BC%88#karmada%EF%BC%89")