公司 Pinterest 地点 美国加州旧金山 行业 网站和移动应用

挑战

成立八年后,Pinterest 已经发展到拥有 1000 个微服务、多层基础设施以及多样化的设置工具和平台。2016 年,该公司启动了一项通往新的计算平台的路线图,其愿景是创建从想法到生产的最快速路径,让工程师无需担心底层基础设施。

解决方案

第一阶段包括将服务迁移到 Docker 容器中。这些服务在 2017 年初投入生产后,团队开始寻找编排解决方案,以帮助提高效率并以分散的方式进行管理。在评估了各种解决方案后,Pinterest 选择了 Kubernetes。

影响

“通过迁移到 Kubernetes,团队能够构建按需扩展和新的故障转移策略,此外还简化了 Jenkins 等复杂基础设施的整体部署和管理,”Pinterest 云和数据基础设施团队产品经理 Micheal Benedict 说。“我们不仅看到了构建时间缩短,还看到了巨大的效率提升。例如,团队在非高峰时段回收了超过 80% 的容量。结果,与之前的静态集群相比,Jenkins Kubernetes 集群现在每天使用的实例小时数减少了 30%。”

Pinterest 生于云端——从 2010 年第一天起就在 AWS 上运行——但即使是云原生公司也会经历一些成长的烦恼。

自推出以来,Pinterest 已经成为家喻户晓的名字,拥有超过 2 亿月活跃用户和 1000 亿个保存的物品。在幕后,有 1000 个微服务运行,以及数十万个数据作业。

随着这种增长,出现了基础设施层和针对不同工作负载的多样化的设置工具和平台,导致了不一致且复杂端到端开发者体验,最终降低了生产速度。因此,在 2016 年,该公司启动了一项通往新的计算平台的路线图,其愿景是拥有从想法到生产的最快速路径,让工程师无需担心底层基础设施。

第一阶段涉及迁移到 Docker。Pinterest 云和数据基础设施团队产品经理 Micheal Benedict 说:“Pinterest 很长一段时间以来一直在 EC2 实例上直接运行虚拟机。为了解决软件打包问题,避免让工程师拥有舰队的一部分并解决此类挑战,我们标准化了打包机制,然后将其迁移到 VM 之上的容器中。没有太多重大变化。在那时我们不想大动干戈。”

第一个迁移的服务是为大部分 Pinterest 提供动力的单体 API 舰队。同时,Benedict 的基础设施治理团队构建了收费和容量规划系统,以分析该公司如何使用其 AWS 上的虚拟机。“很明显,使用 VM 运行无法持续我们正在做的事情,”Benedict 说。“很多资源都被低效利用了。有一些效率努力,在一定规模上效果不错,但现在你必须转向一种更加分散的管理方式。因此,我们认为编排可以帮助解决这个问题。”

这导致了路线图的第二阶段。2017 年 7 月,经过 8 周的评估期后,团队选择了 Kubernetes 而不是其他编排平台。“当时 Kubernetes 缺乏一些东西——例如,我们想要在 Kubernetes 上运行 Spark,”Benedict 说。“但我们意识到,我们投入在构建它上的开发周期,其结果非常值得,对 Pinterest 和社区都是如此。我们一直参与 Big Data SIG 的这些对话。我们意识到,当我们开始生产化这些东西时,我们将能够利用社区正在做的事情。”

在 2018 年初,团队开始将他们的第一个用例集成到 Kubernetes 系统中:Jenkins 工作负载。“尽管我们每天在特定时间段内进行构建,但我们始终需要分配峰值容量,”Benedict 说。“它们没有自动扩展功能,因此该容量保持不变。很难加速构建,因为扩展需要更多时间。因此,考虑到这些问题,我们认为这将是我们开展工作的理想用例。”

他们扩展了集群,并与一个由四个人组成的团队合作,为生产环境准备了 Jenkins Kubernetes 集群。“我们仍然有我们的静态 Jenkins 集群,”Benedict 说,“但在 Kubernetes 上,我们正在进行类似的构建,测试整个管道,准备工件,然后进行比较,看看这里构建需要多长时间。SLA 是否正常,生成的工件是否正确,是否存在问题?”

他补充说:“到目前为止,效果不错,特别是围绕我们在 Kubernetes 共享集群上配置 Jenkins 工作负载的弹性。这是我们努力争取的胜利。”

到 2018 年第一季度末,团队成功迁移了 Jenkins Master 以在 Kubernetes 上本地运行,并合作开发了 Jenkins Kubernetes 插件 来管理工作进程的生命周期。“我们目前正在这个新集群上构建整个 Pinterest JVM 堆栈(Pinterest 最大的单体存储库之一,最近已进行 bazelize),”Benedict 说。“在高峰时段,我们在几百个节点上运行数千个 Pod。总的来说,通过迁移到 Kubernetes,团队能够构建按需扩展和新的故障转移策略,此外还简化了 Jenkins 等复杂基础设施的整体部署和管理。我们不仅看到了构建时间缩短,还看到了巨大的效率提升。例如,团队在非高峰时段回收了超过 80% 的容量。结果,与之前的静态集群相比,Jenkins Kubernetes 集群现在每天使用的实例小时数减少了 30%。”

Benedict 指出,未来将有一条“非常强大的路线图”。除了 Pinterest 大数据团队在 Kubernetes 上进行的 Spark 实验外,该公司还与亚马逊的 EKS 团队合作开发了一个 ENI/CNI 插件。

一旦 Jenkins 集群从暗模式运行起来,Benedict 希望建立最佳实践,包括建立治理基本要素——包括与收费系统的集成——然后再迁移下一个服务。“我们有一个健康的使用用例管道,可以进行集成。在 Jenkins 之后,我们希望启用对 Tensorflow 和 Apache Spark 的支持。在某个时候,我们计划迁移公司单体 API 服务。如果我们迁移了它并了解了其中的复杂性,这将增强我们的信心,”Benedict 说。“这为我们迁移所有其他服务做好了准备。”

在成为云原生先驱多年后,Pinterest 渴望分享其持续的旅程。“我们能够在公共云环境中大规模运行事物,并以许多人可能无法做到方式进行测试,”Benedict 说。“我们处于一个非常有利的位置,可以回馈一些这些经验教训。”