挑战
Nav 成立于 2012 年,为小企业主提供查阅来自三大主要商业信用机构(Equifax、Experian 和 Dun & Bradstreet)的商业信用评分,以及最适合他们需求的融资选择。公司成立五年后,这家初创公司迅速发展,“我们的云环境变得非常庞大,但这些环境的使用率却极低,大约低于 1%,”工程总监 Travis Jeppson 说道。“我们希望我们的云环境使用率能更紧密地与我们的实际需求挂钩,因此我们开始研究容器化和编排,以帮助我们运行彼此独立但可以共享相似资源池的工作负载。”
解决方案
在评估了众多编排解决方案后,Nav 团队决定采用运行在 AWS 上的 Kubernetes。Kubernetes 强大的社区以及其源自谷歌的背景是强大的吸引力。此外,“其他解决方案往往过于笨重、复杂、庞大,并且一开始就很难管理,”Jeppson 说道。“Kubernetes 为我们提供了一种非常简单的方式,可以逐步采用当时适合我们需求的编排解决方案,而且它的可扩展性也使我们能够随之成长,并在以后构建更多特性和功能。”
影响
这个由四人组成的团队在六个月内让 Kubernetes 运行起来,并在接下来的六个月内完成了 Nav 的 25 个微服务的全面迁移。结果令人印象深刻:资源利用率(正是最初促使公司走上这条道路的原因)从 1% 增加到 40%。过去,启动一项新服务需要两名开发人员两周时间;现在,只需一名开发人员不到 10 分钟。部署次数增加了 5 倍。公司在基础设施成本上节省了 50%。
几年前,Nav 发现自身成功之路上存在一个障碍。公司业务增长迅速,“我们的云环境变得非常庞大,但这些环境的使用率却极低,大约低于 1%,”Jeppson 说道。“大部分问题都围绕着扩展能力。我们只是在烧钱。‘让我们启动更多服务器。让我们做更多事情来应对增加的负载。’而对于我们这样一个初创公司来说,这可能会导致我们的灭亡。我们没有钱来烧在那种事情上。”
此外,每项新服务都必须经过 10 个不同的人,启动时间长达两周,这让人无法接受。“所有的补丁管理和服务器管理都是非常手动化的,所以我们都必须很好地监控和维护它,”Jeppson 补充道。“这简直是一个非常麻烦的系统。”
Jeppson 在他之前的工作中接触过容器,并将这项技术推荐给 Nav 的管理层,作为解决这些问题的方案。他在 2017 年初获得了批准。“我们希望我们的云环境使用率能更紧密地与我们实际所需挂钩,因此我们开始研究容器化和编排,以帮助我们运行彼此独立但可以共享相似资源池的工作负载,”他说。
在评估了众多编排解决方案后,公司决定采用运行在 AWS 上的 Kubernetes。Kubernetes 强大的社区以及其源自谷歌的背景是强大的吸引力。此外,“其他解决方案往往过于笨重、复杂、庞大,并且一开始就很难管理,”Jeppson 说道。“Kubernetes 为我们提供了一种非常简单的方式,可以逐步采用当时适合我们需求的编排解决方案,而且它的可扩展性也使我们能够随之成长,并在以后构建更多特性和功能。”
Jeppson 的四人工程服务团队在六个月内让 Kubernetes 运行起来(他们决定使用 Kubespray 来启动集群),并在接下来的六个月内完成了 Nav 的 25 个微服务和一个主要整体的全面迁移。“我们无法重写所有内容;我们不能停下来,”他说。“我们必须保持运行,保持可用性,并且停机时间要最短。所以我们非常熟悉我们的构建流水线、我们的指标和日志,以及 Kubernetes 本身:如何启动它、如何升级它、如何维护它。我们一点一点地迁移。”
这个过程的关键部分包括对 Nav 的 50 名工程师进行培训,并就新的工作流程以及迁移路线图保持透明。Jeppson 在此期间定期进行演示,并为所有工程师举办了为期一周、每天四小时的实验课。然后,他在 GitLab 中创建了一个存储库来存放所有信息。“我们向所有前端和后端开发人员展示了如何使用 kubectl 自行创建自己的命名空间,”他说。“现在,很多时候,他们只是来找我们说,‘这已经准备好了。’我们在 GitLab 中点击一个小按钮,允许它发布到生产环境,然后他们就可以开始工作了。”
自 2018 年初完成迁移以来,成果令人印象深刻:资源利用率(正是最初促使公司走上这条道路的原因)从 1% 增加到 40%。过去,启动一项新服务需要两名开发人员两周时间;现在,只需一名开发人员不到 10 分钟。部署次数增加了 5 倍,从每天 10 次增加到每天 50 次。公司在计算方面的基础设施成本节省了 50%。Jeppson 表示:“接下来我们希望解决数据库方面的问题,一旦完成,我们将继续大幅降低成本。”
Kubernetes 还帮助 Nav 满足了其合规性需求。Jeppson 说,以前,“我们必须将一个应用程序映射到一个服务器,这主要是由于围绕数据的不同合规性法规。有了 Kubernetes API,我们可以添加网络策略并隔离数据,并在需要时对其进行限制。”公司将其集群划分为非受限区和受限区,受限区有自己的一组节点,用于数据保护。公司还使用 Twistlock 工具来确保安全,“这让我们晚上睡得更安稳,”他补充道。
在 Kubernetes 部署到位后,Nav 团队还通过采用 Prometheus 开始改进系统的指标和日志记录。“Prometheus 为指标创建了一个标准,开发人员很容易采纳,”Jeppson 说。“他们可以自由地显示他们想要的东西,做他们需要做的事情,并保持他们的代码库干净,这对于我们来说是绝对必须的。”
Nav 在未来一年接下来的计划是:研究追踪、存储和服务网格。在 KubeCon 上与其他公司进行大量交流后,他们目前正在评估 Envoy、OpenTracing 和 Jaeger。Jeppson 说:“社区绝对至关重要:能够交流想法,讨论我们都面临的许多类似挑战,并获得帮助。我喜欢我们能够出于不同的原因解决相同的问题,但在此过程中互相帮助。”“围绕可扩展性,以及真正完全采用云原生解决方案,还有很多很多工作要做。”
当然,这一切都始于 Kubernetes。有了这项技术,Jeppson 的团队建立了一个允许 Nav 扩展的平台,他表示:“这为 Nav 带来了巨大的价值,赋予了我们前所未有的新自由。”
过去,关于新产品的讨论常常因为需要等待六个月才能建立一个隔离环境,然后才能解决流量高峰问题而陷入僵局。Jeppson 说:“但现在对我们来说这根本不算什么。”“我们现在处理的流量是以前的四到十倍,但我们只是觉得,‘哦,是的。我们很好。Kubernetes 为我们处理这一切。’”