挑战
Prowise 是一家荷兰公司,生产在世界各地使用的教育设备和软件,其基础设施基于 Linux 服务,在欧洲、澳大利亚和美国设有多个可用区。“过去几年我们发展迅速,我们开始遇到版本控制和灵活扩展方面的问题,”高级 DevOps 工程师 Victor van den Bosch 说,“不仅是需求规模的扩展,还包括能够部署多个产品,每个产品都有自己的版本、自己的开发团队以及他们试图解决的自己的问题。我们希望能够将所有这些都放在同一个平台上,而不会遇到太多阻力。我们希望让我们的基础设施面向未来,并解决一些与运行普通 Linux 服务相关的问题。”
解决方案
Prowise 团队采用了容器化,花时间改进了其 CI/CD 管道,并选择了 Microsoft Azure 的托管 Kubernetes 服务 AKS 进行编排。“Kubernetes 很好地解决了网络之类的问题,其方式符合我们的业务模型,”van den Bosch 说。“我们希望专注于我们的核心产品,即在其上运行的软件,而不一定是基础设施本身。”
影响
随着其首批基于 Web 的应用程序现在在 Prowise 的 Kubernetes 平台上运行 beta 版本,该团队看到了快速、顺利部署的好处。“旧的部署方式需要半小时的准备时间和半小时的部署时间。使用 Kubernetes,只需几秒钟,”高级开发人员 Bart Haalstra 说。van den Bosch 补充说,结果是“我们已经从每季度发布一次转变为每月发布一次生产版本。我们几乎每小时都会部署一次,或者只是在我们发现某个功能已准备好投入生产时才会部署;以前,我们的发布主要是在下班时间进行的,因为我们对流程本身的信心相对较低,所以它不会影响我们的客户。Kubernetes 还使我们能够快速跟进错误并为用户实施调整,版本之间没有停机时间。对于某些错误,我们在检测到错误后几分钟内就将代码修复程序推送到生产环境。” 最近,该团队推出了一种新的单点登录解决方案,用于内部应用程序。“由于 Kubernetes 平台基于资源的架构,我们能够在不到一天的时间内将该应用程序引入全新的生产环境,其中大部分时间用于在将已知的资源定义从暂存环境应用到新环境后进行测试,”van den Bosch 说。“在传统的虚拟机上,这可能需要一到两天的时间,然后可能需要几周的时间来解决我们应用更新时配置脚本中的问题。”
荷兰公司 Prowise 是该领域的领导者之一,它提供硬件和软件的集成解决方案,帮助教育工作者创造更具吸引力的学习环境。
近年来,随着该公司将其产品扩展到荷兰以外的地区——在欧洲、澳大利亚和美国创建了多个可用区,每个区域有多达 9 台服务器——其基于 Linux 服务的基础设施难以跟上。“过去几年我们发展迅速,我们开始遇到版本控制和灵活扩展方面的问题,”高级 DevOps 工程师 Victor van den Bosch 说,他于 2017 年底被公司聘用,负责构建一个新平台。
Prowise 的产品支持 10 种语言,所以问题不仅仅是需求规模的扩展,他补充说,“还包括能够部署多个产品,每个产品都有自己的版本、自己的开发团队以及他们试图解决的自己的问题。我们希望能够将所有这些都放在同一个平台上,而不会遇到太多阻力。我们希望让我们的基础设施面向未来,并解决一些与运行普通 Linux 服务相关的问题。”
该公司在 Microsoft Azure 云上的现有基础设施都在虚拟机上,“这是一个非常传统的设置,”van den Bosch 说。“我们决定,我们希望软件中的一些功能能够快速扩展,能够快速部署不同编程语言不同版本的应用程序和版本。我们真的不想费心将这些服务器保持在特定状态。”
在研究了可能的解决方案后,他选择了容器化和 Kubernetes 编排。“容器化是未来,”van den Bosch 说。“Kubernetes 很好地解决了网络之类的问题,其方式符合我们的业务模型。我们希望专注于我们的核心产品,即在其上运行的软件,而不一定是基础设施本身。” 此外,Prowise 团队喜欢它没有供应商锁定。“我们不想局限于一个平台,”他说。“我们尽量不去碰那些非常专有且不易移植到其他供应商的产品。”
Kubernetes 的上市时间非常短:平台上的第一个基于 Web 的应用程序在几个月内就进入了 beta 测试阶段。这在很大程度上要归功于 van den Bosch 决定使用 Azure 的托管 Kubernetes 服务 AKS。然后,团队必须弄清楚要保留哪些组件以及要替换哪些组件。像 New Relic 这样的监控工具被淘汰了,“因为当你将它们扩展到不同的可用区时,它们往往会变得非常昂贵,而且维护起来也不容易,”他说。
改进 Prowise 的 CI/CD 管道也做了大量工作。“我们希望确保管道是自动化的并且易于使用,”他说。“我们为管道确定了许多设置和配置,从现在开始,只需将这些脚本和配置应用于新项目即可。”
随着其首批基于 Web 的应用程序现在在 Prowise 的 Kubernetes 平台上运行 beta 版本,该团队看到了快速、顺利部署的好处。“旧的部署方式需要半小时的准备时间和半小时的部署时间。使用 Kubernetes,只需几秒钟,”高级开发人员 Bart Haalstra 说。van den Bosch 补充说,结果是“我们已经从每季度发布一次转变为每月发布一次生产版本。我们几乎每小时都会部署一次,或者只是在我们发现某个功能已准备好投入生产时才会部署。以前,我们的发布主要是在下班时间进行的,因为我们对流程本身的信心相对较低,所以它不会影响我们的客户。借助 Kubernetes,我们敢于在繁忙的工作日中午部署,并对部署的成功充满信心。”
此外,van den Bosch 说,“Kubernetes 使我们能够快速跟进错误并为用户实施调整,版本之间没有停机时间。对于某些错误,我们在检测到错误后几分钟内就将代码修复程序推送到生产环境。”
最近,该团队推出了一种新的单点登录解决方案,用于内部应用程序。“由于 Kubernetes 平台基于资源的架构,我们能够在不到一天的时间内将该应用程序引入全新的生产环境,其中大部分时间用于在将已知的资源定义从暂存环境应用到新环境后进行测试,”van den Bosch 说。“在传统的虚拟机上,这可能需要一到两天的时间,然后可能需要几周的时间来解决我们应用更新时配置脚本中的问题。”
传统应用程序也在迁移到 Kubernetes。不久前,该团队需要设置一个基于 Java 的应用程序来编译和运行前端。“在传统的虚拟机上,设置和更新它会花费相当长的时间,更不用说以后维护该设置了,”van den Bosch 说。相反,将其容器化并在 Kubernetes 上运行只用了不到半天的时间。“这要容易得多,而且我们也能够节省成本,因为我们不必专门为此启动新的虚拟机。”
也许最重要的是,van den Bosch 说,“Kubernetes 让我们能够真正考虑解决问题的最佳工具,并充分利用微服务架构。在 Node.js 中有一个擅长解决某个问题的库?使用它。想要拥有由第三方开发的、完全适合你的用例的完整分析应用程序?运行它。涉足机器学习和人工智能算法,但厌倦了等待数天的训练才能完成?只需几秒钟即可扩展它。有一个固执的开发人员想使用一种没人听说过的编程语言?让他用吧,当然,如果它可以在容器中运行的话。所有这一切,而你的运营团队/DevOps 可以在晚上安然入睡。”
展望未来,Prowise 所有新的 Web 开发、平台和 API 都将基于 Kubernetes。其中一个大型的全新项目是一个面向教师和学生的平台,该平台将于 9 月份开学季推出。用户登录后即可访问各种教育应用程序。随着最近收购软件公司 Oefenweb,Prowise 计划提供自适应软件,使教师能够准确了解学生的学习进度和薄弱环节,并根据每个学生的具体情况自动调整作业难度。“我们将利用 Kubernetes 的强大功能来整合、补充和支持我们合并后的应用程序组合,并将我们的解决方案带到更多的课堂,”van den Bosch 说道。
协作软件也是一个优先事项。借助单点登录软件,用户的设置和凭据保存在云端,可以在世界任何地方的任何屏幕上使用。“我们正在努力通过硬件和软件提供集成解决方案,并尽可能方便用户在不同地点使用和协作,”van den Bosch 说道。Haalstra 补充道:“没有 Kubernetes,我们无法做到这一点。”