Karmada大规模测试报告发布:突破100倍集群规模

摘要:在本文中,我们将介绍用于测试的相关指标,如何进行大规模测试,以及我们如何实现大规模的集群接入 。
本文分享自华为云社区《突破100倍集群规模!Karmada大规模测试报告发布》,作者:华为云云原生团队 。
摘要随着云原生技术在越来越多的企业和组织中的大规模落地,如何高效、可靠地管理大规模资源池以应对不断增长的业务挑战成为了当下云原生技术的关键挑战 。在过去的很长一段时间内 , 不同厂商尝试通过定制Kubernetes原生组件的方式扩展单集群的规模,这在提高规模的同时也引入了复杂的单集群运维、不清晰的集群升级路径等问题 。而多集群技术能在不侵入修改Kubernetes单集群的基础上横向扩展资源池的规模,在扩展资源池的同时降低了企业的运维管理等成本 。
在Karmada的大规模落地进程中,Karmada的可扩展性和大规模逐渐成为社区用户的新关注点 。因此,我们对Karmada开展了大规模环境下的测试工作,以获取Karmada管理多个Kubernetes集群的性能基线指标 。对于以Karmada为代表的多集群系统而言,单集群的规模不是制约它的资源池规模的限制因素 。因此,我们参考了Kubernetes的大规模集群的标准配置和用户的生产落地实践,测试了Karmada同时管理100个5k节点和2wPod的Kubernetes集群的用户场景 。受限于测试环境和测试工具 , 本次测试并未追求测试到Karmada多集群系统的上限,而是希望能覆盖到在生产中大规模使用多集群技术的典型场景 。根据测试结果分析,以Karmada为核心的集群联邦可以稳定支持100个大规模集群,管理超过50万个节点和200万个Pod,可以满足用户在大规模生产落地的需要 。
在本文中,我们将介绍用于测试的相关指标,如何进行大规模测试,以及我们如何实现大规模的集群接入 。
背景随着云原生技术的不断发展和使用场景的不断丰富,多云、分布式云逐渐成为引领云计算发展的趋势 。著名分析公司 Flexera 在 2021 的调查报告显示,超过 93%的企业正同时使用多个云厂商的服务,一方面受限于 Kubernetes 单集群的业务承载能力和故障恢复能力,单一的集群无法适应现有的企业业务,另一方面,在全球化的当下,企业出于避免被单家厂商垄断的目的,或是出于成本等因素考虑 , 更倾向于选择混合云或者多公有云的架构 。与此同时,Karmada 社区的用户在落地的进程中也提出了多集群下大规模节点和应用管理的诉求 。
Karmada 介绍Karmada(Kubernetes Armada)是一个 Kubernetes 管理系统 , 它能够使你在无需修改应用的情况下跨集群和跨云运行你的云原生应用 。通过使用 Kubernetes 原生 API 并在其上提供高级调度功能,Karmada 实现了真正开放的多云 Kubernetes 。
Karmada 旨在为多云和混合云场景中的多集群应用管理提供完全的自动化 。它具备集中式多云管理、高可用性、故障恢复和流量调度等关键特性 。
Karmada 控制面包括以下组件:
  • Karmada API Server
  • Karmada Controller Manager
  • Karmada Scheduler
ETCD 存储了 Karmada 的 API 对象, karmada-apiserver 提供了与所有其他组件通信的 REST 端口, 之后由 karmada-controller-manager 对你向 karmada-apiserver 提交的 API 对象进行对应的调和操作 。
karmada-controller-manager 运行着各种控制器,这些控制器 watch 着 Karmada 的对象 , 然后发送请求至成员集群的 apiserver 来创建常规的 Kubernetes 资源 。
多集群系统资源池规模的维度和阈值一个多集群系统的资源池规模不单指集群数量,即Scalability!=#Num of Clusters, 实际上多集群资源池规模包含很多维度的测量,在不考虑其他维度的情况下只考虑集群数量是毫无意义的 。
我们将一个多集群的资源池规模按优先级描述为以下所示的三个维度:
  1. Num of Clusters: 集群数量是衡量一个多集群系统资源池规模和承载能力最直接且最重要的维度,在其余维度不变的情况下系统能接入的集群数量越多,说明系统的资源池规模越大,承载能力越强 。
  2. Num of Resources(API Objects): 对于一个多集群系统的控制面来说,存储并不是无限制的,而在控制面创建的资源对象的数量和总体大小受限于系统控制面的存储,也是制约多集群系统资源池规模的重要维度 。这里的资源对象不仅指下发到成员集群的资源模板,而且还包括集群的调度策略、多集群服务等资源 。
  3. Cluster Size: 集群规模是衡量一个多集群系统资源池规模不可忽视的维度 。一方面,集群数量相等的情况下 , 单个集群的规模越大 , 整个多集群系统的资源池越大 。另一方面,多集群系统的上层能力依赖系统对集群的资源画像,例如在多集群应用的调度过程中,集群资源是不可或缺的一个因素 。综上所述,单集群的规模与整个多集群系统息息相关,但单集群的规模同样不是制约多集群系统的限制因素 。用户可以通过优化原生的Kubernetes组件的方式来提升单集群的集群规模,达到扩大整个多集群系统的资源池的目的,但这不是衡量多集群系统性能的关注点 。本次测试中,社区参考了kubernetes的大规模集群的标准配置以及测试工具的性能,制定了测试集群的规模,以贴切实际生产环境中的单集群配置 。在集群的标准配置中 , Node与Pod毫无疑问是其中最重要的两个资源 , Node是计算、存储等资源的最小载体 , 而Pod数量则代表着一个集群的应用承载能力 。事实上 , 单集群的资源对象也包括像service,configmap,secret这样的常见资源 。这些变量的引入会使得测试过程变得更复杂,所以这次测试不会过多关注这些变量 。

    推荐阅读