挑战
Zalando 是欧洲领先的在线时尚平台,自 2008 年成立以来经历了指数级增长。2015 年,为了将最初的电子商务网站扩展到新的服务和产品,Zalando 开始了一项彻底的转型,最终形成了自主的自我组织团队。这种变化需要一个能够随着工程组织的增长而扩展的基础设施。Zalando 的技术部门开始重写其应用程序以适应云环境,并开始将其基础设施从本地数据中心迁移到云端。虽然编排并没有立即被考虑在内,但随着团队迁移到亚马逊云服务 (AWS):“我们看到了团队在 AWS 上使用基础设施和 Cloud Formation 时遇到的困难,”开发人员效率主管 Henning Jacobs 说。“对于团队和合规性来说,仍然有太多的运营开销。”为了提供更好的支持,集群管理开始发挥作用。
解决方案
该公司现在使用 Kubernetes 编排在其 AWS 上运行 Docker 容器。
影响
Jacobs 说,使用旧的基础设施,“很难真正采用新技术,而且 DevOps 团队被认为是瓶颈”。“现在,有了这个云基础设施,他们有了这种打包格式,可以包含任何在 Linux 内核上运行的东西。这让很多人非常高兴。工程师们喜欢自主权。”
“它最初是一个 PHP 电子商务网站,很容易上手,但无法随着业务需求的增长而扩展,”Zalando 开发人员效率主管 Jacobs 说。
当时,该公司开始将其业务从德国扩展到其他欧洲市场。快进到今天,Zalando 现在拥有超过 14,000 名员工,2016 年的收入为 36 亿欧元,业务遍及 15 个国家。“随着各个方面的增长和不断的规模扩张,这是一次千载难逢的经历,”他说。
对于像 Jacobs 这样的基础设施专家来说,这更是一个难得的机会。就在他加入后不久,公司就开始重写所有内部应用程序。“这通常是我们的策略,”他说。“例如,我们从自己的物流仓库开始,但一开始你不知道如何做物流软件,所以你有一些供应商软件。然后我们用自己的软件替换了它,因为使用现成的软件,你就没有竞争力。你需要根据你的特定业务需求优化这些流程。”
在重写应用程序的同时,Zalando 还设定了一个目标,即从基本的电子商务扩展到一个提供多租户、大幅增加品种和款式、当日送达,甚至你自己的个人在线造型师的平台。
扩展的需求最终促使该公司踏上了云原生之旅。该公司还采用了基于微服务的软件架构,这使得工程团队在项目中拥有更大的自主权和所有权。“转向云计算是必要的,因为在数据中心里,你不可能拥有自主的团队。你拥有相同的基础设施,而且非常同质化,所以你只能运行你的 Java 或 Python 应用程序,”Jacobs 说。
Zalando 开始将其基础设施从两个本地数据中心迁移到云端,这需要迁移旧的应用程序以适应云环境。“我们决定彻底改变,”Jacobs 说。“我们的亚马逊云服务基础设施是这样设置的:每个团队都有自己的 AWS 账户,完全隔离,这意味着没有‘直接迁移’。你基本上必须重写你的应用程序,使其适应云环境,甚至包括持久层。我们勇敢地回到绘图板前,重新设计了一切,首先选择 Docker 作为通用的容器化工具,然后在此基础上构建基础设施。”
该公司决定在开始时推迟编排,但随着团队迁移到 AWS,“我们看到了团队在 AWS 上使用基础设施和云形成时遇到的困难,”Jacobs 说。
Zalando 的 200 多个自主工程团队决定使用哪些技术,并可以使用自己的 AWS 账户运行自己的应用程序。事实证明,这种设置是一个合规性挑战。即使制定了严格的游戏规则和自动合规性检查,工程团队和 IT 合规性部门在解决合规性问题方面也负担过重。“违规行为是针对不合规行为出现的,我们在扫描云基础设施时会检测到这些行为,”Jacobs 说。“一切皆有可能,没有任何强制措施,所以你必须忍受违规行为(并解决它们),而不是从一开始就防止错误发生。这意味着团队的开销,以及合规性和运营的开销。在 AWS 上启动新的 EC2 实例也需要时间,这会影响我们的部署速度。”
团队意识到他们需要“利用集群管理带来的价值,”Jacobs 说。当他们在 2015 年第一次关注平台即服务 (PaaS) 选项时,市场是碎片化的;但“现在似乎出现了一个明显的赢家。Kubernetes 看起来是一个不错的选择。”
向 Kubernetes 的过渡始于 2016 年 Zalando 的黑客周,参与者将他们的项目部署到 Kubernetes 集群。从那时起,技术基础设施部门的 60 名成员加入进来,然后工程团队也逐一加入。“我们总是先与他们交谈,确保每个人的期望都很明确,”Jacobs 说。“然后我们进行一些 Kubernetes 培训,主要是针对我们的 CI/CD 设置的培训,因为我们用户的用户界面主要是通过 CI/CD 系统。但他们必须了解 Kubernetes 的基本概念和 API。接下来是每周与每个团队同步,检查他们的进度。一旦他们在生产环境中运行了一些东西,我们希望看看除了我们可以改进的地方之外,其他一切都还好。”
目前,Zalando 正在运行最初的 40 个 Kubernetes 集群,并计划在可预见的未来进行扩展。一旦 Zalando 开始将应用程序迁移到 Kubernetes,结果立竿见影。“Kubernetes 是我们无缝端到端开发人员体验的基石。我们能够使用单一、一致的声明式 API 将想法交付到生产环境,”Jacobs 说。“自我修复的基础设施提供了无摩擦的体验,并在低级最佳实践的基础上构建了更高级别的抽象。我们设想所有 Zalando 交付团队都将在 Kubernetes 提供的最先进、可靠和可扩展的集群基础设施上运行他们的容器化应用程序。”
Jacobs 说,使用旧的本地基础设施,“很难真正采用新技术,而且 DevOps 团队被认为是瓶颈”。“现在,有了这个云基础设施,他们有了这种打包格式,可以包含任何在 Linux 内核中运行的东西。这让很多人非常高兴。工程师们喜欢自主权。”
在 Zalando 的 Kubernetes 实施过程中,也遇到了一些挑战。“我们是一个由七个人组成的团队,为不同的工程团队提供集群,我们的目标是为所有团队提供坚如磐石的体验,”Jacobs 说。“我们不想要宠物集群。我们不想必须了解他们的工作负载是什么;它应该开箱即用。考虑到这一点,集群自动扩展非常重要。集群管理有很多不同的方式,这不是核心的一部分。因此,我们创建了两个组件来配置集群,拥有一个集群注册表,并管理整个集群的生命周期。”
Jacobs 的团队还致力于改进 Kubernetes 与 AWS 的集成。“因此,你的限制很大。你需要基础设施来扩展每个自主团队的想法。”此外,“仍然缺少很多最佳实践,”Jacobs 说。例如,该团队最近解决了一个 pod 安全策略问题。“Kubernetes 中已经有一个概念,但没有记录在案,所以有点棘手,”他说。庞大的 Kubernetes 社区对解决这个问题有很大帮助。为了帮助其他公司走上同样的道路,Jacobs 将他的团队的学习成果整理成了一份名为在生产环境中运行 Kubernetes的文档。
最后,Kubernetes 使 Zalando 能够引入和维护公司设想的新产品,以发展其平台。“时尚建议产品使用了 Scala,在我们以前的基础设施上很难实现这一点,”Jacobs 说。“这是一个权宜之计,而且该团队需要平台团队提供越来越多的支持,仅仅因为他们使用了不同的技术。现在有了 Kubernetes,它就变得自主了。无论工作负载是什么,该团队都可以按自己的方式进行,而 Kubernetes 可以防止其他瓶颈。”
展望未来,Jacobs 将 Zalando 的新基础设施视为公司正在进行的其他工作的强大推动力,从新的物流软件到连接品牌的平台功能,再到数据科学家构思的产品。“一个愿景是,如果你看了下一部詹姆斯·邦德的电影,看到他穿的西装,你应该能够自动订购,并在一个小时内送到你手中,”Jacobs 说。“这是关于连接整个时尚领域。如果你有一个瓶颈,每个人都在同一个数据中心运行,因此受到很大的限制,那么这绝对是不可能的。你需要基础设施来扩展每个自主团队的想法。”
对于其他考虑采用这项技术的公司,Jacobs 表示,他不一定会建议完全按照 Zalando 的方式去做。“如果你准备好面对一些失败,那么这样做是可以的,”他说。“你需要设定合理的预期。并非所有事情都会顺利。重写应用程序和这种类型的组织变革可能会带来混乱。我们迁移的第一个产品至关重要。它有很多依赖项,而且花费的时间比预期要长。也许我们应该从一些不太复杂、对业务不太重要的东西开始,先试试水。”
但是,一旦他们克服了困难,“每个人都清楚地意识到,没有其他更好的选择了,”Jacobs 补充道。“Kubernetes API 允许我们以与云提供商无关的方式运行应用程序,这让我们能够在未来几年重新评估 IaaS 提供商。迁移到 Kubernetes 使 Zalando 技术受益匪浅,因为我们能够利用现有知识创建一个工程平台,为我们的工程师提供灵活性和速度,同时显著降低运营开销。我们预计 Kubernetes API 将成为 PaaS 基础设施的全球标准,我们对未来的发展感到兴奋。”