公司 Nordstrom 地点 华盛顿州西雅图 行业 零售业

挑战

Nordstrom 希望提高其技术运营(包括 Nordstrom.com 电商网站)的效率和速度。同时,Nordstrom 技术团队也在寻找降低技术运营成本的方法。

解决方案

在四年前拥抱 DevOps 转型并启动持续集成/持续部署(CI/CD)项目后,公司将其部署时间从三个月缩短到 30 分钟。但他们希望在各种环境中实现更快的速度,因此他们开始了云原生之旅,采用了由 Kubernetes 编排的 Docker 容器。

影响

Dhawal Patel 是为 Nordstrom 构建 Kubernetes 企业平台的团队中的一名高级工程师,他表示,使用 Kubernetes 的 Nordstrom 技术团队开发者现在可以更快地进行部署,并且可以“只专注于编写应用程序”。此外,该团队还提高了运维效率,CPU 利用率根据工作负载的不同从 5 倍提升到了 12 倍。“我们运行着数千台虚拟机(VMs),但并没有有效地利用所有这些资源,”Patel 说。“使用 Kubernetes,即使我们没有刻意提高集群的效率,目前也实现了 10 倍的提升。”

五年前,当 Dhawal Patel 作为零售商网站的应用开发者加入 Nordstrom 时,他意识到有机会帮助加快开发周期。

在早期的 DevOps 时代,Nordstrom 技术团队仍然遵循传统的孤立团队和职能模式。“作为一名开发者,我花在修复环境上的时间比编写代码和为业务增加价值的时间要多,”Patel 说。“我对这个问题充满热情——所以我获得了帮助解决它的机会。”

公司也渴望更快地行动,并在 2013 年启动了第一个持续集成/持续部署(CI/CD)项目。该项目是 Nordstrom 云原生之旅的第一步。

开发和运维团队成员构建了一个 CI/CD 流水线,使用公司的本地服务器。团队选择了 Chef,并编写了自动化虚拟 IP 创建、服务器和负载均衡的 cookbooks。“在完成项目后,部署时间从三个月缩短到了 30 分钟,”Patel 说。“我们当时仍有多个环境——开发、测试、预发布,然后是生产环境——每个环境都运行 Chef cookbooks,所以需要 30 分钟。在那时这是一个巨大的成就。”

但新环境的启动仍然需要太长时间,所以下一步是在云端工作。如今,Nordstrom 技术团队已经构建了一个企业平台,允许公司 1500 名开发者部署作为 Docker 容器在云端运行并通过 Kubernetes 编排的应用程序。

Patel 说:“云提供了更快的资源访问速度,因为以前在本地获取一台虚拟机(VM)需要数周时间。但现在我们只需要五分钟就能做同样的事情。”

Nordstrom 首次尝试在集群上调度容器是基于 CoreOS fleet 的自研系统。他们使用该系统进行了一些概念验证项目,直到 Kubernetes 1.0 发布后才进行了切换。Nordstrom Kubernetes 团队的高级经理 Marius Grigoriu 说:“基于社区支持和项目进展速度的早期迹象,我们判断 Kubernetes 将会腾飞,因此我们以 Kubernetes 为核心重建了我们的系统。”

虽然 Kubernetes 通常被认为是微服务平台,但在 Nordstrom 以关键生产角色部署在 Kubernetes 上的第一个应用程序是 Jira。Patel 承认:“这并不是我们希望作为第一个应用程序的理想微服务,但负责该项目的团队对 Docker 和 Kubernetes 充满热情,他们想尝试一下。他们的应用程序当时运行在本地,想将其迁移到 Kubernetes 上。”

加入进来的团队立刻享受到了好处。Grigoriu 说:“在我们 Kubernetes 集群上运行的团队喜欢他们需要担心的事项更少。他们不需要管理基础设施或操作系统。早期采用者喜欢 Kubernetes 的声明式特性。他们喜欢需要处理的范围减少了。”

为了支持这些早期采用者,Patel 的团队开始扩展集群并构建生产级服务。Patel 说:“我们集成了 Prometheus 进行监控,并使用了 Grafana 作为前端;我们使用 Fluentd 将日志推送到 Elasticsearch,这为我们提供了日志聚合。”团队还添加了几十个开源组件,包括 CNCF 项目,并对 Kubernetes、Terraform 和 kube2iam 做出了贡献。

现在 Nordstrom 技术团队有 60 多个开发团队在运行 Kubernetes,随着成功案例的涌现,更多的团队也加入进来。Patel 说:“我们最初的客户群,那些愿意尝试的人,现在正在向下一批用户推广和宣传。有一位早期采用者有 Docker 容器,但不确定如何在生产环境中运行。我们和他坐在一起,并在 15 分钟内就将其部署到了生产环境。他觉得这太棒了,他组织里更多的人也开始加入进来。”

对于 Nordstrom 技术团队而言,转向云原生极大地提高了开发和运维效率。使用 Kubernetes 的开发者现在可以更快地进行部署,并专注于在应用程序中构建价值。其中一个团队最初通过在云端启动虚拟机,从合并到部署需要 25 分钟。切换到 Kubernetes 使他们的过程提速了 5 倍,将从合并到部署的时间缩短到了 5 分钟。

速度很棒,也很容易展示,但或许更大的影响在于运维效率。Patel 说:“我们在 AWS 上运行着数千台 VM,它们的总体平均 CPU 利用率约为百分之四。使用 Kubernetes,即使我们没有刻意提高集群的效率,目前 CPU 利用率也达到了 40%,这是 10 倍的增长。我们正在运行 2600 多个客户 pods,如果直接迁移到云端,这将是 2600 多台 VM。现在我们把它们运行在 40 台 VM 上,这大大降低了运维开销。”

Nordstrom 技术团队也在探索在本地裸金属服务器上运行 Kubernetes。Patel 说:“如果我们能在本地构建一个 Kubernetes 集群,我们就能将云的能力带到本地,快速调配资源。那么对于开发者而言,他们的界面就是 Kubernetes;他们甚至可能没有意识到或不关心他们的服务现在部署在本地,因为他们只与 Kubernetes 交互。”

因此,Patel 正密切关注 Kubernetes 多集群能力的开发。他说:“通过集群联邦,我们可以将本地集群作为主集群,云作为次要的可突增集群。这样,当有周年庆促销或黑色星期五促销,我们需要更多容器时——我们可以迁移到云端。”

这种可能性——以及 Grigoriu 和 Patel 团队使用 Kubernetes 已经带来的影响——正是最初引导 Nordstrom 踏上云原生之旅的原因。Grigoriu 说:“如今的零售环境,我们正努力在力所能及的范围内构建响应性和灵活性。Kubernetes 使其变得容易:为开发和运维两方面都带来了效率。这是一个双赢的局面。”