挑战
全球最大的纯在线杂货零售商 Ocado 开发了 Ocado 智能平台来管理其自身运营,从网站到仓库,现在正将该技术授权给其他零售商,例如 Kroger。为了为该平台建立第一个仓库,Ocado 从虚拟机和 Puppet 基础设施转向了 Docker 容器,使用 CoreOS 的 fleet 调度程序在其基于 OpenStack 的裸机私有云上配置所有服务。随着智能平台的增长以及“fleet 即将停产”,平台工程师 Mike Bryant 表示,“我们开始寻找一个更完整的平台,将所有这些不同的基础设施服务整合到一个统一的 API 中。”
解决方案
该团队决定在 Ocado 的私有云上从 fleet 迁移到 Kubernetes。Kubernetes 堆栈目前使用 kubeadm 进行引导,使用 CNI 和 Weave Net 进行网络连接,使用 Prometheus Operator 进行监控,使用 Fluentd 进行日志记录,以及使用 OpenTracing 进行分布式跟踪。Kubernetes 上的第一个应用程序是仓库中的关键业务服务,于 2017 年夏季投入生产,大规模迁移一直持续到 2018 年。数百名致力于智能平台的 Ocado 工程师现在正在 Kubernetes 上进行部署。
影响
Bryant 表示,借助 Kubernetes,“从想法到实施再到部署的速度令人惊叹”。“我现在已经看到功能在一周内从开发到生产。在过去,新的应用程序部署很容易花费一个多月的时间。” 而且由于仓库中不再有严格的部署窗口,部署频率已从每周两次增加到每周数十次。Ocado 还实现了成本节约,因为 Kubernetes 使团队能够进行更细粒度的资源分配。DevOps 团队负责人 Kevin McCormack 表示:“我们对 Kubernetes 的资源分配/隔离功能更有信心,因此我们已经能够从大约 10 个 fleet 集群迁移到一个 Kubernetes 集群。” 该团队还使用 Prometheus 和 Grafana 来可视化资源分配,并使开发人员可以使用这些数据。McCormack 表示:“Prometheus 提供的更高的可见性意味着开发人员更加了解他们正在使用的内容以及他们的使用如何影响他人,尤其是在我们现在拥有一个共享集群的情况下。”“我估计,在我们的测试环境中,我们使用大约少 15-25% 的硬件资源来托管 Kubernetes 中的相同应用程序。”
该公司开始开发其 Ocado 智能平台来管理其自身运营,从网站到仓库,现在正将该技术授权给全球其他连锁杂货店,例如 Kroger。为了在该平台上建立第一个仓库,Ocado 从虚拟机和 Puppet 基础设施转向了 Docker 容器,使用 CoreOS 的 fleet 调度程序在其基于 OpenStack 的裸机私有云上配置所有服务。随着智能平台的增长以及“fleet 即将停产”,平台工程师 Mike Bryant 表示,“我们开始寻找一个更完整的平台,将所有这些不同的基础设施服务整合到一个统一的 API 中。”
Bryant 已经在 Code for Life 中使用 Kubernetes,这是一个儿童教育项目,是 Ocado 慈善部门的一部分。Bryant 表示:“我们真的很喜欢它,所以我们开始认真考虑将其用于我们的生产工作负载。” 管理 fleet 的团队也研究了编排解决方案,并最终选择了 Kubernetes。DevOps 团队负责人 Kevin McCormack 表示:“我们正在寻找一个被广泛采用的平台,而这正是发展势头所在。” 两条路径汇聚在一起,“我们甚至没有经历任何概念验证阶段。Code for Life 的工作就起到了这个作用,”Bryant 说。
2016 年夏季,该团队开始在 Ocado 的私有云上从 fleet 迁移到 Kubernetes。Kubernetes 堆栈目前使用 kubeadm 进行引导,使用 CNI 和 Weave Net 进行网络连接,使用 Prometheus Operator 进行监控,使用 Fluentd 进行日志记录,以及使用 OpenTracing 进行分布式跟踪。
Kubernetes 上的第一个应用程序是仓库中的关键业务服务,一年后投入生产。一旦该应用程序顺利运行,大规模迁移就一直持续到 2018 年。数百名致力于智能平台的 Ocado 工程师现在正在 Kubernetes 上进行部署,该平台已在 Ocado 的仓库中上线,每周管理着数万个订单。Ocado 位于伦敦东南部的埃里斯的最新仓库满负荷运转后,每周将交付超过 200,000 个订单,使其成为全球最大的在线杂货配送设施。
现在大约有 150 个微服务在 Kubernetes 上运行,其中许多微服务有多个实例。Bryant 表示:“我们不是一次性部署所有这些微服务。我们先将它们全部部署到一个仓库,然后再次为下一个仓库部署,然后再重复一遍。”
转向 Kubernetes 对 Ocado Technology 的许多人来说都是一个令人大开眼界的举动。Bryant 回忆道:“在将平台投入测试基础设施的早期,技术架构师询问了 Weave Net 在启用加密的情况下网络性能如何。”“所以我们找到了一个用于 iPerf 的 Docker 容器,编写了一个守护进程集,并将其部署了。片刻之后,我们就将整个东西部署到了这个集群中。他对此感到非常震惊。”
事实上,其影响是深远的。Bryant 表示:“在容器化之前,我们在仓库中的部署窗口非常有限。”“转向微服务后,我们能够更频繁地进行部署。我们已经能够在许多领域转向持续交付。在我们较旧的仓库中,新的应用程序部署需要与多个团队就堆栈的不同级别进行沟通:从虚拟机配置到存储,再到负载均衡器等等。Kubernetes 的统一 API 意味着所有这些都在一个地方,并且审批和推出流程也是统一的。我现在已经看到功能在一周内从开发到生产。在过去,新的应用程序部署很容易花费一个多月的时间。”
部署频率已从每周两次增加到每周数十次。Bryant 表示:“借助 Kubernetes,我们的一些开发团队能够在不被我们注意到的情况下将其应用程序部署到新平台上的生产环境中,这意味着他们能够更快地完成需要做的事情,而我们的工作量也减少了。”
Ocado 还实现了成本节约,因为 Kubernetes 使团队能够进行更细粒度的资源分配。Bryant 表示:“这让我们能够将许多部署从每核虚拟机部署缩减到只占用核心的一部分。”McCormack 补充道:“我们对 Kubernetes 的资源分配/隔离功能更有信心,因此我们已经能够从大约 10 个 fleet 集群迁移到一个 Kubernetes 集群。这意味着我们能够更好地利用硬件,因为如果我们必须始终保持两个节点的额外容量以防节点故障,那么我们只需要两个额外的节点,而不是 20 个。”
该团队还使用 Prometheus 和 Grafana 来可视化资源分配,并使开发人员可以使用这些数据。McCormack 表示:“Prometheus 提供的更高的可见性意味着开发人员更加了解他们正在使用的内容以及他们的使用如何影响他人,尤其是在我们现在拥有一个共享集群的情况下。”“我估计,在我们的测试环境中,我们使用大约少 15-25% 的硬件资源来托管 Kubernetes 中的相同应用程序。”
Bryant 认为,云原生更广泛的优势之一是统一的 API。“我们有一种部署方法,可以涵盖我们需要做的各种事情,并且我们可以扩展 API,”他说。除了使用 Prometheus Operator 之外,Ocado 团队还开始编写自己的 operator,其中一些已经开源。此外,“CNCF 为我们提供了对这些不同技术的支持。我们已经能够非常轻松地采用这些技术。我们确实喜欢 CNCF 不受供应商限制。没有人要求我们必须采用这种方式做事。CNCF 中观点的多样性带来了更好的技术。”
Ocado 自己的技术,即其智能平台,将很快在全球范围内使用。云原生在这一全球扩张中发挥着至关重要的作用。“如果没有 Kubernetes,我不会想去尝试,”Bryant 说。“Kubernetes 让它变得更加美好,特别是能够以一致的方式部署所有应用程序,然后采用相同的东西并能够复制它。这非常有价值。”