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