公司 Ocado Technology 地点 Hatfield, England 行业 杂货零售技术和平台

挑战

全球最大的纯在线杂货零售商 Ocado 开发了 Ocado Smart Platform 来管理其自身的运营,从网站到仓库。现在,他们将该技术授权给其他零售商,例如 Kroger。为了为该平台设置第一批仓库,Ocado 从虚拟机和 Puppet 基础设施转向 Docker 容器,使用 CoreOS 的 fleet 调度器在其基于 OpenStack 的裸金属私有云上配置所有服务。随着 Smart Platform 的发展以及 "fleet 即将停用",平台工程师 Mike Bryant 说:"我们开始寻找一个更完整的平台,将所有这些分散的基础设施服务整合到一个统一的 API 中。"

解决方案

团队决定在 Ocado 的私有云上从 fleet 迁移到 Kubernetes。当前的 Kubernetes 技术栈使用 kubeadm 进行引导,CNIWeave Net 用于网络,Prometheus Operator 用于监控,Fluentd 用于日志记录,以及 OpenTracing 用于分布式追踪。Kubernetes 上的第一个应用,一个在仓库中的关键业务服务,于 2017 年夏天投入生产,大规模迁移一直持续到 2018 年。现在,数百名在 Smart Platform 上工作的 Ocado 工程师正在 Kubernetes 上进行部署。

影响

Bryant 说,有了 Kubernetes,"从想法到实现再到部署的速度快得惊人"。 "我现在看到的功能可以在一周内从开发到生产。在过去,一个新的应用部署可能轻易地花费一个多月时间。" 由于仓库中不再有严格的部署窗口,部署频率已从每周少至两次增加到每周几十次。Ocado 还实现了成本节约,因为 Kubernetes 使团队能够进行更精细的资源分配。DevOps 团队负责人 Kevin McCormack 说:"我们对 Kubernetes 的资源分配/隔离功能更有信心,因此我们已能够从大约 10 个 fleet 集群迁移到一个 Kubernetes 集群。" 团队还使用 PrometheusGrafana 来可视化资源分配,并将数据提供给开发人员。McCormack 说:"Prometheus 提供的更高可见性意味着开发人员更清楚自己使用了什么资源,以及他们的使用如何影响他人,尤其是现在我们共享一个集群。" "我估计在我们的测试环境中,使用 Kubernetes 托管相同的应用程序,我们使用的硬件资源减少了大约 15-25%。"

Ocado 成立于 2000 年,当时是英国一家纯在线杂货零售商。自那时以来,它已从向家庭配送农产品扩展到向其他杂货零售商提供技术。

该公司开始开发其 Ocado Smart Platform 来管理其自身的运营,从网站到仓库,现在正将该技术授权给全球其他杂货连锁店,例如 Kroger。为了在该平台上设置第一批仓库,Ocado 从虚拟机和 Puppet 基础设施转向 Docker 容器,使用 CoreOS 的 fleet 调度器在其基于 OpenStack 的裸金属私有云上配置所有服务。随着 Smart Platform 的发展,以及 "fleet 即将停用",平台工程师 Mike Bryant 说:"我们开始寻找一个更完整的平台,将所有这些分散的基础设施服务整合到一个统一的 API 中。"

Bryant 之前就已经在 Code for Life 中使用 Kubernetes,这是一个属于 Ocado 慈善部门的儿童教育项目。Bryant 说:"我们非常喜欢它,所以我们开始认真考虑将其用于我们的生产工作负载。" 管理 fleet 的团队也研究了编排解决方案,并最终选择了 Kubernetes。DevOps 团队负责人 Kevin McCormack 说:"我们正在寻找一个被广泛采用的平台,那里有发展的势头。" 这两条路径汇合了,Bryant 说:"我们甚至没有经过任何概念验证阶段。Code for Life 的工作起到了这个作用。"

2016 年夏天,该团队开始在 Ocado 的私有云上从 fleet 迁移到 Kubernetes。当前的 Kubernetes 技术栈使用 kubeadm 进行引导,CNIWeave Net 用于网络,Prometheus Operator 用于监控,Fluentd 用于日志记录,以及 OpenTracing 用于分布式追踪。

Kubernetes 上的第一个应用,一个在仓库中的关键业务服务,一年后投入生产。该应用平稳运行后,大规模迁移持续到 2018 年。现在,数百名在 Smart Platform 上工作的 Ocado 工程师正在 Kubernetes 上进行部署,该平台已在 Ocado 的仓库中上线,每周管理数万份订单。完全投入运营后,Ocado 位于伦敦东南部 Erith 的最新仓库每周将处理超过 20 万份订单,使其成为全球最大的在线杂货配送设施。

目前大约有 150 个微服务运行在 Kubernetes 上,其中许多都有多个实例。Bryant 说:"我们不是一次性部署所有这些微服务。我们是为一个仓库部署所有这些微服务,然后又为下一个仓库再次部署它们,如此反复。"

迁移到 Kubernetes 对 Ocado Technology 的许多人来说是开眼界。Bryant 回忆说:"在早期将平台引入我们的测试基础设施时,技术架构师问启用加密后 Weave Net 上的网络性能如何。" "于是我们找到了一个 iPerf 的 Docker 容器,写了一个 daemon set,然后部署了它。几分钟后,我们就把整个东西部署到了这个集群上。他对此印象深刻。"

确实,影响是深远的。Bryant 说:"在容器化之前,我们在仓库里有相当严格的部署窗口。转向微服务后,我们能够更频繁地进行部署。在许多领域,我们已经能够向持续交付迈进。在我们较老的仓库里,新的应用部署需要与不同层次的堆栈团队沟通:从虚拟机配置、存储、负载均衡器等等。Kubernetes 统一的 API 意味着所有东西都在一个地方,审批和发布流程也是一体化的。我现在看到的功能可以在一周内从开发到生产。在过去,一个新的应用部署可能轻易地花费一个多月时间。"

部署频率已从每周少至两次增加到每周几十次。Bryant 说:"有了 Kubernetes,我们的一些开发团队能够在我们没有注意到的情况下,将他们的应用程序部署到新平台的生产环境中,这意味着他们能更快地完成所需的工作,而我们的工作量也减少了。"

Ocado 还实现了成本节约,因为 Kubernetes 使团队能够进行更精细的资源分配。Bryant 说:"这使我们的许多部署可以从按核心分配的虚拟机部署缩小到使用核心的几分之一。" McCormack 补充说:"我们对 Kubernetes 的资源分配/隔离功能更有信心,因此我们已能够从大约 10 个 fleet 集群迁移到一个 Kubernetes 集群。这意味着我们能更好地利用硬件,因为如果我们在节点故障时需要始终有两倍的冗余节点容量可用,那么我们只需要额外两个节点而不是 20 个。"

团队还使用 PrometheusGrafana 来可视化资源分配,并将数据提供给开发人员。McCormack 说:"Prometheus 提供的更高可见性意味着开发人员更清楚自己使用了什么资源,以及他们的使用如何影响他人,尤其是现在我们共享一个集群。" "我估计在我们的测试环境中,使用 Kubernetes 托管相同的应用程序,我们使用的硬件资源减少了大约 15-25%。"

Bryant 说,云原生带来的更广泛的好处之一是统一的 API。"我们有一种部署方法,涵盖了我们需要做的广泛工作,而且我们可以扩展这个 API," 他说。除了使用 Prometheus Operator,Ocado 团队还开始编写自己的 operator,其中一些已经 开源。此外,"CNCF 为我们提供了这些不同技术的支持。我们能够非常轻松地采用它们。我们确实很喜欢 CNCF 是与供应商无关的。我们不会被要求必须遵循某种固定的方式做事。CNCF 中观点的巨大多样性促成了更好的技术。"

Ocado 自身的技术,即其 Smart Platform,很快将在全球范围内使用。云原生在全球扩张中扮演着至关重要的角色。Bryant 说:"如果没有 Kubernetes,我不会想尝试这个。Kubernetes 让这一切变得更好,特别是提供了一种一致的方式来部署所有应用程序,然后能够复制相同的东西。这非常有价值。"