挑战
与许多政府一样,蒙特利尔市拥有许多遗留系统,而且“我们这里有些系统的历史比一些开发人员还要长,”该市首席技术官 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 集群。
“我们有大型机、各种版本的 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 部署一个小集群,该 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 平台上运行,基本上是他们可以在那里运行的任何和所有用例。“这比我们以前做事的方式高效得多,”他说。“我们不会走回头路。”