捕鱼大亨网络版 1.3中的性能和可伸缩性更新-2,000个节点60,000个Pod集群

我们很荣幸地宣布 版本1.3的发布,捕鱼大亨网络版现在支持2000节点的集群,并具有更好的端到端Pod启动时间。 API调用的延迟时间不到一秒钟 服务水平目标(SLO) 而且大多数甚至比这还要好一个数量级。可以运行比2,000个节点群集更大的部署,但是性能可能会下降,并且可能无法满足我们严格的SLO。

在这篇博客文章中,我们讨论了捕鱼大亨网络版 1.3的详细性能结果以及我们对1.2版进行了哪些更改以实现这些结果。我们还介绍了Kubemark,这是一种性能测试工具,已集成到我们的连续测试框架中,用于检测性能和可伸缩性回归。

评估方法

我们已经在 以前的博客文章。自1.2版以来的最大变化是,在我们的API响应测试中,我们现在创建并使用多个名称空间。特别是对于2000节点/ 60000 pod集群测试,我们创建了8个名称空间。之所以做出更改,是因为我们认为,如此大的集群的用户可能会使用许多命名空间,当然集群中总共至少要有8个命名空间。

捕鱼大亨网络版 1.3的指标

那么,捕鱼大亨网络版 1.3版的性能如何?下图显示了2000和1000节点群集的端到端Pod启动延迟。为了进行比较,我们展示了具有1000个节点集群的捕鱼大亨网络版 1.2中的相同指标。

下图显示了v1.3 2000节点群集的API响应延迟。

我们如何实现这些改进?

我们在捕鱼大亨网络版 1.3中对可伸缩性所做的最大更改是添加了一个有效的 协议缓冲区API的基于序列化的格式,以替代JSON。它主要用于捕鱼大亨网络版控制平面组件之间的通信,但是所有API服务器客户端都可以使用此格式。现在,所有捕鱼大亨网络版控制平面组件都使用它进行通信,但是系统仍支持JSON以实现向后兼容。

由于我们仍在研究升级机制,因此我们尚未将在etcd中存储集群状态的格式更改为协议缓冲区。但是我们已经准备好了,我们希望在捕鱼大亨网络版 1.4中将存储格式切换为协议缓冲区。我们的实验表明,这应将Pod启动的端到端延迟降低30%。

我们如何大规模测试捕鱼大亨网络版?

生成具有2000个节点的群集既昂贵又费时。尽管我们需要为每个发行版至少执行一次此操作以收集真实的性能和可伸缩性数据,但我们还需要一种轻量级的机制,该机制可以使我们快速评估我们的想法以进行不同的性能改进,并且可以连续运行检测性能下降。为了满足这一需求,我们创建了一个名为“ Kubemark”的工具。

什么是“ Kubemark”?

Kubemark是一种性能测试工具,可让用户在仿真集群上运行实验。我们使用它来衡量大型集群中的性能。

Kubemark集群由两部分组成:一个运行常规主组件的真实主节点,以及一组“空心”节点。前缀“空心”是指组件的实现/实例化,其中包含一些“活动部件”。最好的例子是空心kubelet,它伪装成普通的Kubelet,但不会启动任何容器或装载任何卷。它只是声称确实如此,因此从主组件的角度看,它的行为就像一个真正的Kubelet。

由于我们希望Kubemark集群尽可能类似于真实集群,因此我们将真实Kubelet代码与注入的虚假Docker客户端一起使用。同样,空心代理(等效于KubeProxy)将真实的KubeProxy代码与注入的无操作Proxier接口一起重用(以避免对iptables进行突变)。

由于这些变化

  • 许多空心节点可以在同一台计算机上运行,​​因为它们没有修改运行它们的环境
  • 在没有实际容器运行的情况下以及不需要容器运行时(例如Docker)的情况下,我们在一台1核计算机上最多可以运行14个空心节点。
  • 但是空心节点在API服务器上产生的负载与其“整个”节点大致相同,因此它们为性能测试提供了现实的负载[唯一的根本区别是,我们并未模拟现实中可能发生的任何错误(例如,容器)-增加对此的支持是将来对框架的潜在扩展]

我们如何设置Kubemark集群?

为了创建Kubemark集群,我们使用捕鱼大亨网络版本身赋予我们的功能-我们在捕鱼大亨网络版上运行Kubemark集群。让我们详细描述一下。

为了创建N节点Kubemark集群,我们:

  • 创建一个常规的捕鱼大亨网络版集群,我们可以在其中运行N个空心节点[例如为了创建2000节点的Kubemark集群,我们创建了具有22个8核节点的常规捕鱼大亨网络版集群]
  • 创建一个专用的VM,在其中启动Kubemark集群的所有主组件(etcd,apiserver,控制器,调度程序等)。 
  • 在基础捕鱼大亨网络版集群上调度N个“空心节点”吊舱。这些空心节点被配置为与在专用VM上运行的Kubemark API服务器通信
  • 最后,我们通过在基础集群上调度附加组件Pod(当前仅是Heapster)并配置它们以与Kubemark API服务器进行通信来创建附加组件Pod 完成此操作后,您将拥有一个可用的Kubemark集群,可以在其上运行(性能)测试。我们拥有在Google Compute Engine(GCE)上执行所有这些操作的脚本。有关更多详细信息,请查看我们的 指南.

这里值得一提的是,在运行Kubemark的同时,我们还在下面测试捕鱼大亨网络版的正确性。显然,如果基础捕鱼大亨网络版集群不起作用,您的Kubemark集群将无法正常工作。 

在实际集群中衡量的性能与Kubemark

至关重要的是,Kubemark群集的性能几乎与真实群集的性能相似。对于Pod启动的端到端延迟,如下图所示,差异可以忽略不计:

对于API响应性,差异较大,尽管通常小于2倍。但是,趋势是完全相同的:在实际集群中,改进/回归在Kubemark中的度量值下降/增加的百分比相似。

结论

我们将继续提高捕鱼大亨网络版的性能和可伸缩性。在此博客文章中,我们 
表明1.3版本可以扩展到2000个节点,同时满足我们的响应SLO
解释了从1.2版本开始我们为提高可伸缩性所做的重大更改,并且 
Kubemark描述了我们的仿真框架,该仿真框架使我们能够在评估性能改进思想和检测回归作为我们持续测试基础结构的一部分时,快速评估代码更改对性能的影响。

请加入我们的社区,并帮助我们打造捕鱼大亨网络版的未来!如果您对可伸缩性特别感兴趣,请参加:

有关捕鱼大亨网络版项目的更多信息,请访问 kubernetes.io 并在Twitter上关注我们 @捕鱼大亨网络版io

-Wojciech Tyczynski,Google软件工程师