挑战
Zalando,欧洲领先的在线时尚平台,自2008年成立以来经历了指数级增长。2015年,Zalando计划进一步扩展其原有电商网站,增加新的服务和产品,并进行了一次彻底的转型,形成了自主自组织团队。这一变革需要一个能够随着工程组织发展而扩展的基础设施。Zalando 的技术部门开始重写其应用程序以适应云环境,并开始将其基础设施从本地数据中心迁移到云端。虽然起初并未立即考虑编排,但随着团队迁移到 Amazon Web Services (AWS):“我们看到了团队在 AWS 上处理基础设施和 Cloud Formation 时遇到的痛苦,”开发人员生产力主管 Henning Jacobs 说。“团队和合规性方面的运营开销仍然过大。” 为了提供更好的支持,集群管理被引入。
解决方案
该公司现在使用 Kubernetes 编排在 AWS 上运行其 Docker 容器。
影响
Jacobs 说,旧的基础设施“难以真正采用新技术,而且 DevOps 团队被认为是瓶颈。”“现在,有了这个云基础设施,他们拥有这种打包格式,可以包含任何在 Linux 内核上运行的东西。这让很多人都非常高兴。工程师们热爱自主性。”
Zalando 开发人员生产力主管 Jacobs 说:“它最初是一个 PHP 电子商务网站,很容易上手,但无法满足业务需求。”
当时,该公司开始将其业务从德国本土扩展到其他欧洲市场。快进到今天,Zalando 现有员工超过 14,000 人,2016 年营收 36 亿欧元,业务遍及 15 个国家。“在各个方面都取得了增长,并且不断扩展,这真是一生难得的经历,”他说。
更不用说像 Jacobs 这样的基础设施专家所拥有的独特机会。他刚加入后,公司就开始内部重写所有应用程序。“这通常是我们的策略,”他说。“例如,我们最初使用自己的物流仓库,但一开始你不知道如何开发物流软件,所以你会使用一些供应商软件。然后我们用自己的软件替换了它,因为现成的软件没有竞争力。你需要根据你具体的业务需求来优化这些流程。”
在重写应用程序的同时,Zalando 还设定了一个目标,即从基本的电子商务扩展到一个提供多租户、大幅增加产品种类和款式、当日达甚至您自己的个人在线造型师的平台。
规模化需求最终促使公司踏上了云原生之旅。同时,它也采用了基于微服务的软件架构,这使得工程团队在项目上拥有更大的自主权和所有权。Jacobs 说:“这种向云的迁移是必要的,因为在数据中心,你无法拥有自主团队。你拥有相同的基础设施,并且它非常同质化,所以你只能运行你的 Java 或 Python 应用程序。”
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 说。“我们不希望有‘宠物集群’(pet clusters)。我们不想去了解他们有什么工作负载;它应该开箱即用。考虑到这一点,集群自动扩缩非常重要。集群管理有许多不同的方法,但这不属于核心部分。因此,我们创建了两个组件来提供集群、拥有集群注册表以及管理整个集群生命周期。”
Jacobs 的团队还致力于改进 Kubernetes-AWS 集成。“因此你受到很大的限制。你需要基础设施来扩展每个自主团队的想法。”此外,“仍然缺少许多最佳实践,”Jacobs 说。例如,团队最近解决了一个 Pod 安全策略问题。“Kubernetes 中已经有一个概念,但没有文档说明,所以有点棘手,”他说。庞大的 Kubernetes 社区对解决这个问题帮助很大。为了帮助其他公司走上同样的道路,Jacobs 将团队的经验教训汇编成一份名为《在生产环境中运行 Kubernetes》的文档。
最终,Kubernetes 让 Zalando 能够引入并维护公司设想的新产品,以发展其平台。“时尚建议产品使用 Scala,而在我们以前的基础设施上实现这一点非常困难,”Jacobs 说。“这是一种权宜之计,而且那个团队需要平台团队越来越多的支持,仅仅因为他们使用了不同的技术。现在有了 Kubernetes,它是自主的。无论工作负载是什么,那个团队都可以按照自己的方式行事,Kubernetes 避免了其他的瓶颈。”
展望未来,Jacobs 认为 Zalando 的新基础设施是公司正在进行的许多其他事情的强大推动者,从新的物流软件,到连接品牌的平台功能,再到数据科学家梦想中的产品。“一个愿景是,如果你观看下一部詹姆斯·邦德电影,看到他穿的西装,你应该能够自动订购,并在一个小时内送达你,”Jacobs 说。“这是关于连接整个时尚领域。如果你在同一个数据中心运行所有东西,并且因此受到很大的限制,那么这绝对是不可能的。你需要基础设施来扩展每个自主团队的想法。”
对于考虑这项技术的其他公司,Jacobs 表示他不一定会建议他们完全按照 Zalando 的方式去做。“如果你准备好在某些方面失败,那也没关系,”他说。“你需要设定正确的期望。并非所有事情都会奏效。重写应用程序和这种组织变革可能会带来破坏性。我们迁移的第一个产品至关重要。它有很多依赖关系,而且花费的时间比预期的要长。也许我们应该从一些不那么复杂、不那么关键的业务开始,只是为了试水。”
但一旦他们到达彼岸,“每个人都很清楚没有大的替代方案,”雅各布斯补充道。“Kubernetes API 允许我们以与云提供商无关的方式运行应用程序,这使我们能够在未来几年内重新审视 IaaS 提供商。Zalando Technology 受益于迁移到 Kubernetes,因为我们能够利用现有知识创建工程平台,为工程师提供灵活性和速度,同时显著减少运营开销。我们期望 Kubernetes API 成为 PaaS 基础设施的全球标准,并对持续的旅程感到兴奋。”