挑战
Nordstrom 希望提高其技术运营的效率和速度,包括 Nordstrom.com 电子商务网站。与此同时,Nordstrom Technology 正在寻找方法来降低其技术运营成本。
解决方案
在四年前开始进行 DevOps 转型并启动持续集成/持续部署 (CI/CD) 项目后,该公司将其部署时间从三个月缩短至 30 分钟。但他们希望在各种环境中都能更快地完成部署,因此他们开始了云原生之旅,采用由 Kubernetes 编排的 Docker 容器。
影响
Nordstrom Technology 团队的高级工程师 Dhawal Patel 表示,使用 Kubernetes 的 Nordstrom Technology 开发人员现在可以更快地进行部署,并且可以“专注于编写应用程序”。此外,该团队还提高了运维效率,根据工作负载的不同,CPU 利用率提高了 5 到 12 倍。“我们运行着数千台虚拟机 (VM),但并没有有效地利用所有这些资源,”Patel 说。“使用 Kubernetes,即使不尝试提高集群效率,我们目前的效率也提高了 10 倍。”
五年前,Dhawal Patel 加入 Nordstrom 担任该零售商网站的应用程序开发人员时,他意识到有机会帮助加快开发周期。
在 DevOps 的早期,Nordstrom Technology 仍然遵循传统的孤岛团队和职能模式。“作为一名开发人员,我花费在修复环境上的时间比编写代码和为业务增加价值的时间还要多,”Patel 说。“我对此充满热情,因此我获得了帮助解决这个问题的机会。”
该公司也渴望更快地发展,并在 2013 年启动了第一个持续集成/持续部署 (CI/CD) 项目。该项目是 Nordstrom 云原生之旅的第一步。
开发和运维团队成员构建了一个 CI/CD 管道,并在公司内部的服务器上工作。该团队选择了 Chef,并编写了自动化虚拟 IP 创建、服务器和负载均衡的菜谱。“在我们完成该项目后,部署时间从三个月缩短至 30 分钟,”Patel 说。“我们仍然有多个环境——开发、测试、暂存,然后是生产——因此,每个环境都运行 Chef 菜谱,这需要 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 可以轻松地提高开发和运维方面的效率。这是一个双赢的局面。”