捕鱼大亨网络版 1.6 中的可伸缩性更新:5,000个节点和150,000个Pod集群

编者注:这篇文章是 系列深入文章 捕鱼大亨网络版 1.6 的新功能

去年夏天我们 共享 自此之后,我们一直在努力进行捕鱼大亨网络版可扩展性的更新,并自豪地宣布 捕鱼大亨网络版 1.6 最多可以处理5,000个节点的群集,其中包含多达150,000个Pod。而且,与1.3版本中以前的2,000个节点的群集相比,这些群集的端到端Pod启动时间更好。 API调用的延迟在1秒的SLO之内。

在此博客文章中,我们回顾了我们在测试中监视的指标,并描述了捕鱼大亨网络版 1.6的性能结果。我们还将讨论为实现这些改进而进行的更改,以及我们在系统可伸缩性领域中即将发布的版本的计划。

X节点群集-这是什么意思?

现在已经发布了捕鱼大亨网络版 1.6,现在是时候回顾当我们说我们“支持” X节点集群时的含义了。如详细描述 以前的博客文章 ,我们目前有两个与性能相关的 服务水平目标(SLO):

  • API响应 :99%的API调用在不到1秒的时间内返回
  • 吊舱启动时间 :99%的吊舱及其容器(带有预拉图像)在5秒钟内开始。 与以前一样,可以运行比声明的受支持的5,000节点群集(并且用户拥有)更大的部署,但是性能可能会下降,并且可能无法满足我们上面定义的严格SLO。

我们知道这些SLO的范围有限。他们没有行使系统的许多方面。例如,我们没有测量启动Pod后通过服务IP地址可以多长时间访问属于服务的新Pod。如果您正在考虑使用大型捕鱼大亨网络版集群并且对我们的SLO未满足性能要求,请联系捕鱼大亨网络版 可伸缩性SIG 因此,我们可以帮助您了解捕鱼大亨网络版是否已准备好处理您的工作负载。

即将发布的捕鱼大亨网络版版本与可伸缩性相关的首要任务是通过以下方式增强我们对支持X节点集群的含义的定义:

  • 完善当前现有的SLO
  • 增加更多的SLO(将涵盖捕鱼大亨网络版的各个领域,包括网络)

捕鱼大亨网络版 1.6 性能指标

那么在捕鱼大亨网络版 1.6中大型集群的性能如何?下图显示了2000和5000节点群集的端到端Pod启动延迟。为了进行比较,我们还显示了与捕鱼大亨网络版 1.3相同的指标,该指标在我们之前的可伸缩性博客文章中发布,该文章描述了对2000节点集群的支持。如您所见,与具有2000个节点的捕鱼大亨网络版 1.3相比,捕鱼大亨网络版 1.6在2000和5000个节点上都具有更好的Pod启动延迟。

下图显示了5000个节点的捕鱼大亨网络版 1.6集群的API响应延迟。所有百分位数的延迟都小于500毫秒,甚至第90个百分位数都小于约100毫秒。

我们是怎么来到这里的?

在过去的九个月中(自上一篇可伸缩性博客文章以来),捕鱼大亨网络版发生了大量与性能和可伸缩性相关的更改。在本文中,我们将重点介绍两个最大的职位,并简要列举其他几个职位。

etcd v3
在捕鱼大亨网络版 1.6中,我们将默认存储后端(存储整个集群状态的键值存储)从etcd v2切换到了 etcd v3 。在1.3发行周期内已开始进行此过渡的初步工作。考虑到以下原因,您可能想知道为什么花了我们这么长时间?

  • 支持v3 API的etcd的第一个稳定版本 被宣布 上2016年6月30日

  • 新的API是与捕鱼大亨网络版团队一起设计的,旨在满足我们的需求(从功能和可伸缩性角度而言)

  • 在宣布etcd v3时,etcd v3与捕鱼大亨网络版的集成已经基本完成(实际上,CoreOS使用捕鱼大亨网络版作为新的etcd v3 API的概念验证)。 事实证明,有很多原因。我们将在下面描述最重要的部分。

  • 以向后不兼容的方式更改存储(例如,从etcd v2到v3的迁移)是一项重大更改,因此我们需要有充分的理由。我们在9月份发现这一理由,当时我们确定如果继续使用etcd v2,我们将无法扩展到5000个节点的集群( kubernetes / 32361 包含一些讨论)。特别是,无法扩展的是etcd v2中的watch实施。在具有5000个节点的群集中,我们需要能够每秒至少发送500个监视事件给一个观察者,而在etcd v2中是不可能的。

  • 一旦有了强烈的动力来实际更新到etcd v3,我们便开始对其进行全面测试。如您所料,我们发现了一些问题。 捕鱼大亨网络版 中存在一些小错误,此外,我们还要求提高etcd v3的watch实施的性能(watch对我们来说是etcd v2的主要瓶颈)。这导致了3.0.10 etcd补丁程序的发布。

  • 完成这些更改后,我们深信 捕鱼大亨网络版 集群可以与etcd v3一起使用。但是迁移的巨大挑战 现有 集群仍然存在。为此,我们需要自动化迁移过程,彻底测试基础的CoreOS etcd升级工具,并制定从v3还原到v2的应急计划。 但最后,我们有信心它应该起作用。

将存储数据格式切换为protobuf
在捕鱼大亨网络版 1.3版本中,我们启用了 原虫 作为捕鱼大亨网络版组件与API服务器通信的数据格式(除了保持对JSON的支持)。这给我们带来了巨大的性能提升。

但是,即使在技术上我们已经准备好更改它,我们仍然使用JSON作为将数据存储在etcd中的格式。延迟此迁移的原因与我们迁移到etcd v3的计划有关。现在您可能想知道此更改如何取决于向etcd v3的迁移。原因是在etcd v2中,我们不能真正以二进制格式存储数据(要解决该问题,我们还对数据进行了base64编码),而在etcd v3中,它可以工作。因此,为了简化向etcd v3的过渡并避免在存储过程中对etcd中存储的数据进行一些不平凡的转换,我们决定等待将存储数据格式切换为protobuf,直到完成向etcd v3存储后端的迁移为止。

其他优化
在最近三个版本中,我们在整个捕鱼大亨网络版代码库中进行了数十种优化,包括:

  • 优化调度程序(这使调度吞吐量提高了5-10倍)
  • 使用共享通知程序将所有控制器切换到新的推荐设计,从而减少了控制器管理器的资源消耗-供参考,请参阅 这个文件
  • 优化API服务器中的单个操作(转换,深度复制,补丁)
  • 减少API服务器中的内存分配(这会严重影响API调用的延迟) 我们要强调的是,我们在最近的几个发行版中以及整个项目的整个过程中所做的优化工作都是整个捕鱼大亨网络版社区的许多不同公司和个人的共同努力。

下一步是什么?

人们经常问我们在改善捕鱼大亨网络版可扩展性方面将走多远。当前,我们没有计划在接下来的几个版本中将扩展性扩展到5000个节点群集(在我们的SLO中)。如果您需要大于5000个节点的集群,建议使用 联邦 聚合多个捕鱼大亨网络版集群

但是,这并不意味着我们将停止开发可扩展性和性能。正如我们在本文开头提到的那样,我们的首要任务是完善我们现有的两个SLO,并引入新的SLO,以覆盖系统的更多部分,例如联网。可伸缩性SIG中的这项工作已经开始。我们在如何定义绩效SLO方面已经取得了重大进展,这项工作应在下个月完成。

共同努力
如果您对可伸缩性和性能感兴趣,请加入我们的社区并帮助我们塑造捕鱼大亨网络版。参与的方式很多,包括:

  • 在捕鱼大亨网络版 Slack中与我们聊天 可扩展性渠道
  • 加入我们的特殊兴趣小组, SIG可扩展性 ,该时间是太平洋标准时间(PST)每周四举行 感谢您的支持和贡献!阅读有关捕鱼大亨网络版 1.6新增功能的更多深入文章 这里 .

-Wojciech Tyczynski,Google软件工程师

[1]我们正在研究为什么5000节点群集比2000节点群集具有更好的启动时间。当前的理论是,它与使用64核主服务器运行5000节点实验和使用32核主服务器运行2000节点实验有关。