公司 Ocado Technology 位置 英格兰哈特菲尔德 行业 杂货零售技术和平台

挑战

全球最大的纯在线杂货零售商,Ocado 开发了 Ocado 智能平台来管理自己的运营,从网站到仓库,现在正在将该技术授权给其他零售商,如 Kroger。为了建立该平台的首批仓库,Ocado 从虚拟机和 Puppet 基础设施迁移到 Docker 容器,使用 CoreOS 的 fleet 调度程序在其基于 OpenStack 的裸机私有云上配置所有服务。随着智能平台的增长,以及“fleet 即将停止使用”,平台工程师 Mike Bryant 说,“我们开始寻找一个更完整的平台,将所有这些不同的基础设施服务整合到一个统一的 API 中。”

解决方案

该团队决定从 fleet 迁移到 Ocado 私有云上的 Kubernetes。Kubernetes 堆栈目前使用 kubeadm 进行引导,使用 CNIWeave Net 进行网络连接,使用 Prometheus Operator 进行监控,使用 Fluentd 进行日志记录,使用 OpenTracing 进行分布式跟踪。第一个运行在 Kubernetes 上的应用程序,一个仓库中的关键业务服务,于 2017 年夏季投入生产,大规模迁移一直持续到 2018 年。现在,数百名在智能平台上工作的 Ocado 工程师正在 Kubernetes 上进行部署。

影响

使用 Kubernetes,“从想法到实施再到部署的速度惊人”,Bryant 说。“我看到功能从开发到生产只需要一周时间。在旧世界里,一个新的应用程序部署可能需要超过一个月。”而且,由于仓库中不再存在限制性部署窗口,部署速度已从每周少则两次增加到每周数十次。Ocado 还实现了成本节约,因为 Kubernetes 使团队能够更细致地分配资源。DevOps 团队负责人 Kevin McCormack 说:“我们对 Kubernetes 的资源分配/隔离功能更有信心,因此我们能够从大约 10 个 fleet 集群迁移到一个 Kubernetes 集群。”该团队还使用 PrometheusGrafana 来可视化资源分配,并将数据提供给开发人员。McCormack 说:“Prometheus 提供的可见性增强意味着开发人员更了解他们在使用什么以及他们的使用方式如何影响他人,尤其是在我们现在拥有一个共享集群的情况下。”“我估计,在 Kubernetes 的测试环境中,我们使用大约少 15-25% 的硬件资源来托管相同的应用程序。”

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

该公司开始开发其 Ocado 智能平台来管理自己的运营,从网站到仓库,现在正在将该技术授权给全球其他杂货连锁店,如 Kroger。为了建立该平台的首批仓库,Ocado 从虚拟机和 Puppet 基础设施迁移到 Docker 容器,使用 CoreOS 的 fleet 调度程序在其基于 OpenStack 的裸机私有云上配置所有服务。随着智能平台的增长,以及“fleet 即将停止使用”,平台工程师 Mike Bryant 说,“我们开始寻找一个更完整的平台,将所有这些不同的基础设施服务整合到一个统一的 API 中。”

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

2016 年夏季,该团队开始从 fleet 迁移到 Ocado 私有云上的 Kubernetes。Kubernetes 堆栈目前使用 kubeadm 进行引导,使用 CNIWeave Net 进行网络连接,使用 Prometheus Operator 进行监控,使用 Fluentd 进行日志记录,使用 OpenTracing 进行分布式跟踪。

第一个运行在 Kubernetes 上的应用程序,一个仓库中的关键业务服务,一年后投入生产。该应用程序运行顺利后,大规模迁移一直持续到 2018 年。现在,数百名在智能平台上工作的 Ocado 工程师正在 Kubernetes 上进行部署,该平台已在 Ocado 的仓库中上线,每周管理着数万个订单。Ocado 在伦敦东南部埃里思的最新仓库满负荷运行时,每周将交付超过 20 万个订单,使其成为全球最大的在线杂货配送设施。

现在大约有 150 个微服务运行在 Kubernetes 上,其中许多微服务都具有多个实例。“我们不是一次性部署所有这些微服务。我们将它们全部部署在一个仓库,然后将它们全部再次部署到下一个仓库,然后再部署一次又一次,”Bryant 说。

向 Kubernetes 的迁移让 Ocado Technology 的许多人都大开眼界。“在将该平台投入我们的测试基础设施的早期阶段,技术架构师询问在加密打开的情况下 Weave Net 上的网络性能如何,”Bryant 回忆道。“因此,我们找到了一个用于 iPerf 的 Docker 容器,编写了一个守护程序集,并进行了部署。片刻之后,我们就在整个集群中部署了所有内容。他对此印象深刻。”

确实,影响是深远的。“在容器化之前,我们的仓库中有相当多的限制性部署窗口,”Bryant 说。“转向微服务后,我们能够更频繁地进行部署。我们能够在多个领域实现持续交付。在我们较旧的仓库中,新的应用程序部署需要与多个不同团队进行沟通,以完成堆栈的不同级别:从 VM 配置,到存储,到负载均衡器等等。Kubernetes 的统一 API 意味着这一切都在一个地方,并且只有一个批准和推出流程。我看到功能从开发到生产只需要一周时间。在旧世界里,一个新的应用程序部署可能需要超过一个月。”

部署速度已从每周少则两次增加到每周数十次。“使用 Kubernetes,我们的一些开发团队能够将他们的应用程序部署到新平台上的生产环境中,而我们却浑然不知,”Bryant 说,“这意味着他们能够更快地完成他们需要做的事情,而我们的工作量也减少了。”

Ocado 还实现了成本节约,因为 Kubernetes 使团队能够更细致地分配资源。“这使我们能够将许多部署从每个内核的 VM 部署缩减到内核的几分之一,”Bryant 说。McCormack 补充说:“我们对 Kubernetes 的资源分配/隔离功能更有信心,因此我们能够从大约 10 个 fleet 集群迁移到一个 Kubernetes 集群。这意味着我们能够更好地利用硬件,因为如果我们必须始终为节点故障准备两个额外的节点,那么我们只需要两个额外的节点,而不是 20 个。”

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

Bryant 说,云原生的一个更广泛的优势是统一的 API。“我们有一种执行部署的方法,可以涵盖我们需要做的大量事情,并且可以扩展 API,”他说。除了使用 Prometheus Operator,Ocado 团队还开始编写自己的 Operator,其中一些已经 开源。此外,“CNCF 为我们提供了对这些不同技术的支持。我们能够非常轻松地采用这些技术。我们确实喜欢 CNCF 与供应商无关。我们没有被要求承诺使用这种方式。CNCF 中观点的多样性带来了更好的技术。”

Ocado 的自身技术,即其智能平台,很快将在 全球 推广使用。云原生在全球扩张中发挥着至关重要的作用。“我不想在没有 Kubernetes 的情况下尝试,”Bryant 说。“Kubernetes 使它变得更加出色,尤其是能够以这种一致的方式部署所有应用程序,然后将相同的内容复制到其他地方。它非常宝贵。”