公司 蒙特利尔市 地点 加拿大魁北克省蒙特利尔市 行业 政府

挑战

与许多政府一样,蒙特利尔市也有许多遗留系统。“我们有些系统的历史比一些在这里工作的开发人员还长”,该市的首席技术官 Jean-Martin Thibault 说。“我们有大型机,各种版本的 Windows,各种版本的 Linux,新旧 Oracle 系统,Sun 服务器,各种数据库。像所有大型公司一样,一些最重要的系统,如预算和人力资源,是在过去 30 年里在大型机上内部开发的。”总共有 1000 多个应用程序,其中大多数在不同的生态系统中运行。2015 年,新的管理团队决定打破这些孤岛,并投资于 IT,以实现更加一体化的城市治理。他们需要找出如何实现架构的现代化。

解决方案

第一步是容器化。该团队从一个小型 Docker 农场开始,该农场有四到五台服务器,使用 Rancher 来提供对 Docker 容器及其日志的访问,并使用 Jenkins 进行部署。“我们的工作基于新的趋势;我们了解了不变性和无停机部署等优势”,解决方案架构师 Marc Khouzam 说。他们很快意识到他们也需要编排,并选择了 Kubernetes。企业架构师 Morgan Martinet 说:“Kubernetes 提供了如何描述任何类型应用程序的架构的概念,并基于这些概念,部署运行基础设施所需的内容。它正在成为事实上的标准。”

影响

上市时间大大缩短,从几个月缩短到几周。部署时间从几个月缩短到几个小时。“过去,你必须申请虚拟机,仅此一项就可能需要几周的时间”,Thibault 说。“现在你甚至不需要申请任何东西。你只需创建你的项目,它就会被部署。”Kubernetes 还提高了该市使用计算资源的效率:“以前,我们目前在 Kubernetes 上运行的 200 个应用程序组件需要数百台虚拟机,而现在,如果我们在谈论单个生产环境,我们能够在 8 台机器上运行它们,包括 Kubernetes 的主节点”,Martinet 说。这一切都是由一个只有 5 人的小型团队操作 Kubernetes 集群完成的。

蒙特利尔是加拿大第二大城市,拥有大量维持政府运转的遗留系统。虽然它们的历史并没有追溯到 1642 年该市成立之时,“我们有些系统的历史比一些在这里工作的开发人员还长”,该市的首席技术官 Jean-Martin Thibault 开玩笑说。

“我们有大型机,各种版本的 Windows,各种版本的 Linux,新旧 Oracle 系统,Sun 服务器,各种数据库。一些最重要的系统,如预算和人力资源,是在过去 30 年里在大型机上内部开发的。”

近年来,这一事实成为了一个很大的痛点。总共有 1000 多个应用程序,几乎在同样多的不同生态系统中运行。2015 年,新的城市管理团队决定打破这些孤岛,并投资于 IT,以实现更加一体化的治理。“组织是孤立的,因此架构也是孤立的”,Thibault 说。“一旦我们整合到一个 IT 团队,我们决定重新制定一个整体的企业架构。”

实现架构现代化的第一步是容器化。“我们的工作基于新的趋势;我们了解了不变性和无停机部署等优势”,解决方案架构师 Marc Khouzam 说。该团队从一个小型 Docker 农场开始,该农场有四到五台服务器,使用 Rancher 来提供对 Docker 容器及其日志的访问,并使用 Jenkins 进行部署。

但是,这种 Docker 农场设置有一些局限性,包括缺乏自我修复和基于流量的动态扩展,以及优化服务器资源和扩展到同一容器的多个实例所需的工作量。该团队很快意识到他们也需要编排。“Kubernetes 及时出现”,Thibault 说,“带来了所有这些功能,使其更容易管理,并为用户带来更多好处。”

该团队评估了几种编排解决方案,但 Kubernetes 脱颖而出,因为它解决了所有痛点。(他们还受到了雅虎日本用例的启发,团队成员认为该用例与他们的愿景非常接近。)“Kubernetes 提供了如何描述任何类型应用程序的架构的概念,并基于这些概念,部署运行基础设施所需的内容”,企业架构师 Morgan Martinet 说。“它正在成为事实上的标准。它还承诺跨云提供商的可移植性。现在选择 Kubernetes 为我们提供了许多选择,例如在内部或在任何 IaaS 提供商中运行集群,甚至在任何主要云提供商中使用 Kubernetes 即服务。”

该决策的另一个重要因素是供应商中立性。“作为政府实体,对我们来说,在选择产品和供应商时保持中立至关重要”,Thibault 说。“云原生计算基金会独立于任何公司,这提供了这一点。”

Kubernetes 的实施始于使用内部 Ansible playbook 部署一个小型集群,该集群很快被 Kismatic 发行版取代。考虑到他们看到的运营 Kubernetes 平台的复杂性,他们决定基于 Helm 为开发组提供自动化的 CI/CD 解决方案。“Kubernetes 上集成的 CI/CD 解决方案标准化了各个开发团队如何设计和部署其解决方案,但允许他们保持独立”,Khouzam 说。

在重新架构过程中,该团队还添加了 Prometheus 用于监控和告警,Fluentd 用于日志记录,以及 Grafana 用于可视化。“我们提高了对正在部署内容的可见性”,Martinet 说。Khouzam 补充说:“最大的好处是我们可以跟踪任何东西,即使是不在 Kubernetes 集群内部运行的东西。这是我们统一监控工作的方式。”

总而言之,云原生解决方案对速度和管理开销都产生了积极影响。通过标准化、代码生成、自动部署到 Kubernetes 以及通过 Prometheus 实现标准化监控,上市时间大大缩短,从几个月缩短到几周。部署时间从几个月和几周的计划缩短到几个小时。“过去,你必须申请虚拟机,而仅仅是正确配置就需要几周的时间”,Thibault 说。此外,对于专用系统,通常需要请专家来安装他们自己的配方,这可能需要几周和几个月的时间。

现在,Khouzam 说,“我们几乎可以部署任何已经 Docker 化的应用程序,而无需任何人的帮助。在 Kubernetes 中运行一个项目完全取决于你编程实际软件需要多长时间。它不再依赖于部署。部署如此之快,以至于可以忽略不计。”

Kubernetes 还提高了该市使用计算资源的效率:“以前,我们目前在 Kubernetes 中运行的 200 个应用程序组件需要数百台虚拟机,而现在,如果我们在谈论单个生产环境,我们能够在 8 台机器上运行它们,包括 Kubernetes 的主节点”,Martinet 说。这一切都是由一个只有五人的小型团队操作 Kubernetes 集群完成的。Martinet 补充说:“无论你衡量什么,这都是一个巨大的改进。”

因此,该团队未来的战略目标是尽可能地使用 Kubernetes 也就不足为奇了。“如果有什么东西不能在 Kubernetes 内部运行,我们会等待它”,Thibault 说。这意味着他们没有将该市的任何 Windows 系统迁移到 Kubernetes 上,尽管这是他们希望做的事情。“我们正在尽可能地与市场合作,以向我们的供应商施压,要求他们支持 Kubernetes,因为它是一种更容易管理的解决方案”,Martinet 说。

Thibault 认为在不久的将来,该市 60% 的工作负载将在 Kubernetes 平台上运行,基本上是他们可以在那里运行的任何和所有用例。“这比我们过去做事的方式效率高得多”,他说。“没有回头路了。”