艾莫尔研究院基于Karmada的落地实践
背景
艾莫尔⼈⼯智能研究院,是矽柏集团下⼀家致⼒于使⽤云原⽣技术帮助企业数字化转型的科技公司。公司主要产品是斩浪云-云原⽣应⽤平台,该平台围绕云原生、数据智能、应用安全、应用性能、智能应用等五大方向, 面向企业级市场,提供云原生、大数据、AI、信息安全等技术产品,覆盖从开发、应用到运营整个环节, 满足不同企业在生命周期不同阶段的核心需求,为各行业打造⼀站式云原⽣解决⽅案, 助⼒企业云原⽣数字化转型。

基于Kubernetes,我们构建了云厂商无关的云原生平台,用户无需感知云厂商之间的差异即可使用Kubernetes托管业务应用。随着客户对多云需求的不断增加, 集群规模和集群数量快速增⻓,运维复杂性也急剧增加,我们迫切需要围绕 Kubernetes 构建多集群技术。过程中,我们考虑过自研多集群管理方案,也对开源社区相关项目做了细致的调研和测试,最终我们选择了 Karmada 项⽬。下⾯将结合我们内部⼀些场景和需求,介绍选择Karmada的原因以及在落地过程中的⼀些实践。
多集群方案选型
公司内部目前大约有50+左右的集群,每个集群有数百至上千节点不等。集群不是同构的,其中一些集群包含异构计算资源,如 GPU;集群也不是同质的,其中一些边缘集群使用 k3s 构建。根据我们的业务情况,我们对多集群方案选型主要基于以下几点:
- Cluster API 定义要足够抽象且具备灵活性,方便我们描述集群的状态、资源、成员,同时可以通过添加一个 很薄的胶水层就描述集群内异构成员和非同质集群。
- 能够兼容 Kubernetes 原⽣ API 和 CRD,这样我们现存的一些系统不改造或者通过很少的改造就可以迁入多集群。
- 支持多集群资源调度策略,同时具备自定义扩展的能力。因为我们的集群分散在全球多个国家,我们希望可以在统一的平台上去管理资源的调度。
- 控制面要满足高可用、高性能。我们希望随着规模的增长,多集群系统可以水平扩展。
为什么选择 Karmada?首先 Karmada 是兼容 Kubernetes 原生 API 和 CRD的。其次,从架构上而言,Karmada 的架构和 Kubernetes 很类似,具备层层递进、可扩展性,具体来说:
- 独立的 etcd cluster: Karmada 可以使用独立的 etcd 集群,这和其他多集群系统依赖 Kubernetes 不同。独立的 etcd 集群可以让控制面支撑更多的资源存储,而不需要考虑挤压 Kubernetes 集群的问题。未来,我们还可以进一步在控制面将规模较大的资源对象拆分出去,以满足更大规模的多集群管理。
- **独立的 scheduler:**Karmada 使用独立的 scheduler 提供多集群调度,这一点也是其他项目所不具备的。
- agent/non-agent 接入模式: 相比于控制面 All-In-One 的系统,使用场景更加丰富。下图是 Karmada 的架构图:

Karmada 落地实践
多集群管理
当集群数量达到一定程度,同时多个集群之间存在着版本、配置、计算资源、API resource 等差异时,它们同时交叉在一起会导致多集群管理复杂度呈指数级上升。我们需要自动化的系统去降低管理的复杂度。Karmada 定义了 Cluster CRD 对象,基于该对象,我们构建了自动化的多集群管理系统功能,降低了多集群管理的整体复杂度,提高了系统管理人员的效率。
选择合适的集群接管模式
Karmada 提供了两种集群同步模式来处理控制⾯集群 (Karmada Control Plane) 和成员集群 (Member Cluster) 之间的协作:
-
Push 模式,Karmada 控制⾯直接管理成员集群并执行资源同步。这种模式下, 不需要为成员集群部署额外的组件,只需要将成员集群注册到Karmada控制面即可。
-
Pull 模式,成员集群主动向Karmada控制面拉取资源并同步⾃⾝状态。这种模式下, 成员集群只需要部署’karmada-agent’组件即可,该组件会自动完成集群注册。在实践过程中,我们对不同场景使⽤哪种集群管理⽅式总结如下表:
Karmada 控制⾯ 成员集群 同步模式 公有云 私有云 Pull 公有云 公有云 (跨公⽹) Pull 公有云 公有云 (内⽹) Push