公司 Booking.com 地点 荷兰 行业 旅游

挑战

2016 年,Booking.com 迁移到了 OpenShift 平台,这使产品开发人员能够更快地访问基础设施。但是,由于 Kubernetes 对开发人员进行了抽象化处理,因此当出现挑战时,基础设施团队就成为了“知识瓶颈”。试图扩大这种支持是不可持续的。

解决方案

在运营 OpenShift 一年后,平台团队决定构建自己的原生 Kubernetes 平台,并要求开发人员学习一些 Kubernetes 以便使用它。“这不是一个神奇的平台,”B 平台轨道的首席开发人员 Ben Tyler 说。“我们不声称您可以闭着眼睛使用它。开发人员需要学习一些东西,我们将尽一切努力确保他们可以访问这些知识。”

影响

尽管存在学习曲线,但新 Kubernetes 平台的采用率大幅上升。在容器化之前,如果开发人员了解 Puppet,则创建新服务可能需要几天的时间,如果不了解,则可能需要几周的时间。在新平台上,只需 10 分钟即可完成。在前 8 个月中,该平台上构建了大约 500 个新服务。

Booking.com 与 Kubernetes 有着悠久的历史:2015 年,这家旅游平台的团队基于 Mesos 和 Marathon 原型设计了一个容器平台。

该团队对这项技术所提供的功能印象深刻,但需要其规模的企业功能(该网站平均每天处理超过 150 万间夜的预订),因此该团队决定采用 OpenShift 平台。

B 平台轨道的首席开发人员 Ben Tyler 说,该平台采用 Heroku 风格的高级 CLI 界面进行包装,“在我们的产品开发人员中很受欢迎”。“我们让他们可以更快地访问基础设施。”

但是,他补充说,“一旦出现任何稍微偏离轨道的情况,开发人员就没有任何必要的知识来支持自己。”

在运营该平台一年后,基础设施团队发现它已经成为“知识瓶颈”,他说。“大多数使用它的开发人员都不知道它底层是 Kubernetes。应用程序故障和平台故障看起来都像是 Heroku 风格工具的故障。”

扩大必要的支持似乎不可行或不可持续,因此平台团队需要一种新的解决方案。他们通过运营 OpenShift 平台获得的 Kubernetes 理解使他们有信心构建自己的原生 Kubernetes 平台,并对其进行自定义以适应公司的需求。

“对于进入这个领域,OpenShift 绝对非常有帮助,”B 平台轨道高级系统管理员 Eduard Iacoboaia 说。“它向您展示了这项技术可以做什么,并让您轻松使用它。在我们花了一些时间在它上面之后,我们意识到我们需要更好地学习 Kubernetes,才能充分利用它的潜力。在那时,我们转向构建我们自己的 Kubernetes 平台。我们肯定会从采取这一步骤和投入时间来获得这些知识中长期受益。”

Iacoboaia 的团队自定义了许多 OpenShift 工具,使其可以在 Booking.com 上工作,“这些集成点有点脆弱,”他说。“我们花费了更多时间来了解 Kubernetes 的所有组件、它们的工作方式以及它们如何相互交互。”这项研究使该团队从 OpenShift 的内置 Ansible 剧本转向 Puppet 部署,后者用于 Booking 的其余基础设施。控制平面也从集群内部转移到了裸机上,因为该公司运行着数万台裸机服务器和一个用于在裸机上运行应用程序的大型基础设施。(Booking 在其拥有计算能力的各个区域的多个数据中心中的多个集群中运行 Kubernetes。)“我们决定尽可能保持简单,并使用我们最了解的工具,”Iacoboaia 说。

另一个重大变化是,产品工程师必须学习 Kubernetes 才能入职。“这不是一个神奇的平台,”Tyler 说。“我们不声称您可以闭着眼睛使用它。开发人员需要学习一些东西,我们将尽一切努力确保他们可以访问这些知识。”其中包括培训、博客文章、视频和 Udemy 课程。

尽管存在学习曲线,但新 Kubernetes 平台的采用率大幅上升。“我认为我们能够成功达成这项协议的原因是我们没有要求他们学习专有的应用程序系统,”Tyler 说。“我们要求他们学习一些开源的东西,知识是可以转移的。他们通过学习 Kubernetes 来投资自己的职业生涯。”

这一策略取得成功的一个明显迹象是,在支持渠道中,当用户有疑问时,其他产品工程师会主动回应。“我以前从未见过围绕特定平台产品进行过这种内部社区参与,”Tyler 说。“它之所以有很大帮助,是因为它在公司外部明显是一个生态系统标准,因此人们感觉投资于该知识并与他人分享是有价值的,这真的非常强大。”

还有其他可量化的证据:在容器化之前,如果开发人员了解 Puppet,则创建新服务可能需要几天的时间,如果不了解,则可能需要几周的时间。在新平台上,只需 10 分钟即可完成。“我们有一个教程。您按照教程操作。您的代码正在运行。然后,就是业务逻辑时间,”Tyler 说。“访问资源的时间大大缩短了。”在前 8 个月中,该平台上构建了大约 500 个新服务,每天发布数百次。

Tyler 说,该平台提供不同的“合约层,可以这么说”。“最基础的,它只是 Kubernetes。如果您是专业的 Kubernetes 用户,这里有一个 Kubernetes API,就像您从 GKE 或 AKS 获得的一样。我们正在努力在同一水平上成为提供商。但是我们在公司内部的全部工作是提供比原生基础设施更大的附加值,因此我们为我们的主要堆栈 Perl 和 Java 提供一组基本映像。”

“随着我们的用户学习 Kubernetes 并成为更加成熟的 Kubernetes 用户,他们会给我们施加压力,要求我们提供更好、更原生的 Kubernetes 体验,这很棒,”Tyler 说。“这是一个非常健康的动态。”

该平台还包括其他 CNCF 技术,例如 Envoy、Helm 和 Prometheus。Booking.com 的大部分关键服务流量都通过 Envoy 路由,Prometheus 主要用于监视基础设施组件。Helm 作为打包标准使用。该团队还开发并开源了 Shipper,它是 Kubernetes 的一个扩展,用于添加更复杂的部署策略和多集群编排。

可以肯定的是,内部已经就从头构建 Kubernetes 平台的明智性进行了讨论。“这并不是我们的核心竞争力——Kubernetes 和旅游,它们有点遥远,对吧?”Tyler 说。“但是我们在 CNCF 组件上做了一些赌注,这对我们来说效果非常好。特别是 Envoy 和 Kubernetes 对我们的组织非常有益。我们能够自定义它们,要么是因为我们可以查看源代码,要么是因为它们有扩展点,并且我们能够非常快速地从中获得价值,而无需更改任何内部范例。”