挑战
Nordstrom 希望提高其技术运营的效率和速度,其中包括 Nordstrom.com 电子商务网站。同时,Nordstrom 技术团队正在寻找降低其技术运营成本的方法。
解决方案
在四年前拥抱 DevOps 转型并启动了一个持续集成/持续部署 (CI/CD) 项目后,该公司将部署时间从三个月缩短到 30 分钟。但他们希望在所有环境中更快地进行部署,因此他们开始了自己的云原生之旅,采用了由 Kubernetes 编排的 Docker 容器。
影响
使用 Kubernetes 的 Nordstrom 技术开发人员现在可以更快地进行部署,并且可以“专注于编写应用程序”,Nordstrom 构建 Kubernetes 企业平台团队的高级工程师 Dhawal Patel 说。此外,该团队还提高了运维效率,将 CPU 利用率从 5 倍提高到 12 倍(具体取决于工作负载)。“我们运行着数千台虚拟机 (VM),但没有有效地利用所有这些资源,”Patel 说。“使用 Kubernetes,即使没有尝试提高集群效率,我们目前的 CPU 利用率也提高了 10 倍。”
五年前,Dhawal Patel 作为零售商网站的应用程序开发人员加入了 Nordstrom,他意识到有机会帮助加快开发周期。
在 DevOps 的早期,Nordstrom 技术团队仍然遵循传统的孤岛团队和功能模型。“作为一名开发人员,我花在修复环境上的时间比编写代码和为业务创造价值的时间还要多,”Patel 说。“我对这件事充满热情——因此我获得了帮助解决这个问题的机会。”
该公司也渴望更快地发展,并在 2013 年启动了第一个持续集成/持续部署 (CI/CD) 项目。该项目是 Nordstrom 云原生之旅的第一步。
开发和运维团队成员构建了一个 CI/CD 管道,与公司内部的服务器合作。该团队选择了 Chef,并编写了自动化虚拟 IP 创建、服务器和负载平衡的 cookbook。“在完成项目后,部署时间从三个月缩短到 30 分钟,”Patel 说。“我们仍然有多个环境——开发、测试、预发布,然后是生产——因此在每个环境中运行 Chef cookbook 都需要 30 分钟。在当时,这是一个巨大的成就。”
但新环境的启动仍然需要很长时间,因此下一步是在云中工作。如今,Nordstrom 技术团队已经构建了一个企业平台,允许该公司 1500 名开发人员在云中部署以 Docker 容器形式运行的应用程序,这些容器由 Kubernetes 进行编排。
“云提供了更快的资源访问速度,因为在内部获取一台虚拟机 (VM) 需要数周时间,”Patel 说。“但现在我们可以在五分钟内完成相同的事情。”
Nordstrom 首次尝试在集群上调度容器是一个基于 CoreOS fleet 的内部系统。他们开始用这个系统进行一些概念验证项目,直到 Kubernetes 1.0 发布后,他们才切换到 Kubernetes。“我们押注 Kubernetes 会流行起来,这得益于社区支持和项目速度的早期迹象,因此我们在核心位置使用 Kubernetes 重建了我们的系统,”Nordstrom Kubernetes 团队的高级经理 Marius Grigoriu 说。
虽然 Kubernetes 通常被认为是微服务的平台,但在 Nordstrom 的重要生产角色中,第一个在 Kubernetes 上启动的应用程序是 Jira。“这并不是我们希望作为第一个应用程序获得的理想微服务,”Patel 承认,“但负责这个项目的团队对 Docker 和 Kubernetes 非常热情,他们想尝试一下。他们的应用程序在内部运行,他们想将其迁移到 Kubernetes。”
加入的团队立即获得了收益。“在我们的 Kubernetes 集群上运行的团队很喜欢不必担心太多问题的事实。他们不需要管理基础设施或操作系统,”Grigoriu 说。“早期采用者喜欢 Kubernetes 的声明式性质。他们喜欢减少了需要处理的方面。”
为了支持这些早期采用者,Patel 的团队开始扩展集群并构建生产级服务。“我们与 Prometheus 集成以进行监控,使用 Grafana 前端;我们使用 Fluentd 将日志推送到 Elasticsearch,这样我们就有了日志聚合,”Patel 说。该团队还添加了几十个开源组件,包括 CNCF 项目,并且对 Kubernetes、Terraform 和 kube2iam 做出了贡献。
现在 Nordstrom 技术团队有 60 多个开发团队在运行 Kubernetes,并且随着成功案例的出现,越来越多的团队加入进来。“我们最初的客户群,那些愿意尝试这个项目的人,现在正在向下一批用户宣传,”Patel 说。“一位早期采用者拥有 Docker 容器,他不确定如何在生产环境中运行它们。我们和他坐在一起,在 15 分钟内将它们部署到生产环境。他觉得这太棒了,他所在组织的更多人开始加入进来。”
对于 Nordstrom 技术团队来说,云原生化极大地提高了开发和运营效率。使用 Kubernetes 的开发人员现在可以更快地进行部署,并且可以专注于在他们的应用程序中构建价值。其中一个团队最初在云中启动虚拟机时,合并到部署需要 25 分钟。切换到 Kubernetes 使他们的流程速度提高了 5 倍,将合并到部署时间缩短到 5 分钟。
速度很快,也很容易展示,但更大的影响可能在于运营效率。“我们在 AWS 上运行着数千台 VM,它们的平均 CPU 利用率约为 4%,”Patel 说。“使用 Kubernetes,即使没有尝试提高集群效率,我们目前的 CPU 利用率也达到了 40%——增加了 10 倍。我们正在运行 2600 多个客户 pod,如果它们直接进入云,那么将是 2600 多个 VM。我们现在在 40 个 VM 上运行它们,因此这极大地减少了运营开销。”
Nordstrom 技术团队还在探索在内部裸机上运行 Kubernetes。“如果我们可以构建一个内部 Kubernetes 集群,”Patel 说,“那么我们可以利用云的力量来快速配置内部资源。然后对于开发人员来说,他们的界面是 Kubernetes;他们甚至可能不会意识到或关心他们的服务现在部署在内部,因为他们只使用 Kubernetes。”
出于这个原因,Patel 正在密切关注 Kubernetes 的多集群功能的开发。“使用集群联合,我们可以将我们的内部集群作为主集群,将云作为辅助可扩展集群,”他说。“因此,当出现周年庆促销或黑色星期五促销时,我们需要更多容器——我们可以进入云。”
这种可能性——以及 Grigoriu 和 Patel 的团队使用 Kubernetes 已经取得的影响——是 Nordstrom 最初开始云原生之旅的原因。“在当今的零售环境中,我们试图构建响应能力和灵活性,”Grigoriu 说。“Kubernetes 使得:在开发和运维方面都能提高效率。这是一个双赢的局面。”