公司 Squarespace 地点 纽约州纽约市 行业 软件即服务,网站建设平台

挑战

Kevin Lynch 是 Squarespace 站点可靠性团队的 Staff Engineer,他说:“从 2014 年的单体架构迁移到微服务解决了开发端的问题,但却将这个问题推给了基础设施团队。”“我们 5,000 台虚拟机主机上的基础设施部署过程拖慢了所有人的速度。”

解决方案

该团队尝试了容器编排平台,Lynch 说,他们发现 Kubernetes“解答了我们所有的问题”。该公司于 2016 年开始在其数据中心运行 Kubernetes。

影响

自 Squarespace 迁移到 Kubernetes 并结合网络栈现代化以来,部署时间减少了近 85%。以前,他们的虚拟机部署需要半小时;现在,Lynch 说,“任何人都可以生成一个模板化应用,在五分钟内完成部署,并使实际的容器化实例在那时运行在我们的预演环境中。”因此,他补充道,“生产力时间是最大的成本节约项。”“当我们开始 Kubernetes 项目时,我们可能有十几个微服务。今天,正在积极开展的管道中的微服务数量是这个的两倍。”Kubernetes 还提高了韧性:“如果一个节点宕机,它会立即被重新调度,并且没有性能影响。”

自 2003 年从宿舍起步以来,Squarespace 已让数百万人轻松创建自己的网站。

然而,在幕后,该公司的单体 Java 应用使得开发人员持续改进平台变得不那么简单。因此,Squarespace 站点可靠性团队的 Staff Engineer Kevin Lynch 表示,在 2014 年,公司决定“走微服务之路”。“但我们一直将应用程序部署在(我们自己的数据中心)vCenter VMware 虚拟机中。微服务解决了开发端的问题,但却将这个问题推给了基础设施团队。我们 5,000 台虚拟机主机上的基础设施部署过程拖慢了所有人的速度。”

Lynch 说,在尝试了另一个容器编排平台并经历了“非常痛苦的崩溃”之后,该团队于 2016 年年中开始尝试 Kubernetes,并发现它“解答了我们所有的问题”。在数据中心而非公有云中部署 Kubernetes 是他们最大的挑战,而且当时很多其他公司还没有这样做。Lynch 说:“我们必须自己弄清楚如何在我们的基础设施中部署它,并且必须将其与我们的其他应用程序集成。”

同时,Squarespace 的网络工程团队正在对网络栈进行现代化改造,从传统的二层网络切换到三层脊叶网络。Lynch 说:“这与我们想用 Kubernetes 做的事情完美契合。”“它使我们的服务器能够直接与机架顶层交换机通信。我们使用 Calico 作为 Kubernetes 的 CNI 网络,这样我们就可以宣布所有这些单独的 Kubernetes Pod IP 地址,并使它们与我们仍然在虚拟机中配置的其他服务无缝集成。”

几个月内,他们拥有了一个稳定的内部使用集群,并开始将 Kubernetes 推向生产环境。他们还将 Zipkin 和 CNCF 项目 Prometheusfluentd 添加到他们的云原生栈中。Lynch 说:“我们转向了 Kubernetes,这是一个新世界,我们也彻底改造了所有其他工具。”“这使我们能够简化流程,现在我们可以轻松地从模板创建整个微服务项目,生成相应的代码和部署管道,生成 Dockerfile,然后立即将一个可工作、可部署的项目发布到 Kubernetes。”Lynch 补充道,跨开发/质量保证/预演/生产环境的部署也“大大简化”了。“现在配置差异很小。”

整个过程只需五分钟,与虚拟机部署相比,时间缩短了近 85%。“从头到尾,这可能需要半小时,而且这还没有考虑到基础设施工程师需要负责完成这项工作,所以其中还存在一些业务延迟。”

Lynch 说,部署速度加快后,“生产力时间是最大的成本节约项。”“我们有一个团队正在实施新的文件存储服务,他们刚开始将其与我们的存储后端集成,而无需我们介入”——这在 Kubernetes 之前是不可能实现的。他补充道:“当我们开始 Kubernetes 项目时,我们可能有十几个微服务。今天,正在积极开展的管道中的微服务数量是这个的两倍。”

应用的韧性也受到了积极影响。他说:“当我们部署虚拟机时,我们必须构建工具来确保服务适当地分布在各个机架上并能承受故障。”“Kubernetes 自己就做到了。如果一个节点宕机,它会立即被重新调度,并且没有性能影响。”

另一个巨大的好处是自动扩缩。“在我们一直使用 VMware 的方式下,这并非真正可行,”Lynch 说,“但现在我们可以直接通过 Kubernetes 添加适当的自动扩缩功能,然后,当需求增加时,它就会自动扩容。而且它开箱即用。”

对于其他刚开始使用 Kubernetes 的人,Lynch 说他最好的建议是“快速失败”:“一旦你计划好了,就执行。Kubernetes 对于快速尝试新事物并查看它是否可行非常棒。”

Lynch 和他的团队计划将他们开发的一些用于扩展 Kubernetes 并将其自身用作 API 的工具开源。第一个工具将依赖应用程序作为容器注入到 Pod 中。他解释说:“当你发布一个应用程序时,通常会附带一堆需要随之发布的依赖应用程序,例如用于日志记录的 fluentd。”有了这个工具,开发人员就不必担心配置问题了。

今后,Squarespace 的所有新服务都将迁移到 Kubernetes,最终目标是将所有可能的服务都迁移。目前已迁移了大约四分之一的现有服务。Lynch 说:“我们的单体应用将是最后一个,因为它非常庞大和复杂。”“但现在我看到其他服务也被迁移了过来,比如文件存储服务。有人刚做完,它就成功了——毫无痛苦。所以我相信如果我们着手解决它,可能会比我们担心的容易得多。也许我应该听从自己的建议,快速失败!”