挑战
与许多政府部门一样,蒙特利尔拥有大量遗留系统,“我们有些系统比这里的一些开发人员的年龄还要大,”该市首席技术官让-马丁·蒂博 (Jean-Martin Thibault) 说。“我们有大型机、各种版本的 Windows、各种版本的 Linux、新旧 Oracle 系统、Sun 服务器,以及各种数据库。与所有大型企业一样,一些最重要的系统(如预算和人力资源)是在过去 30 年中内部在大型机上开发的。”总共有 1000 多个应用程序,其中大多数都在不同的生态系统中运行。在 2015 年,一个新的管理团队决定打破这些孤立的系统,并投资 IT,以朝着更集成的城市治理迈进。他们需要找到现代化架构的方法。
解决方案
第一步是容器化。该团队从一个包含四到五台服务器的小型 Docker 集群开始,使用 Rancher 提供对 Docker 容器及其日志的访问,并使用 Jenkins 部署。解决方案架构师马克·库扎姆 (Marc Khouzam) 表示:“我们将努力基于新趋势;我们了解不变性和零停机部署等方面的优势。”他们很快意识到自己也需要编排,并选择了 Kubernetes。企业架构师摩根·马蒂内特 (Morgan Martinet) 表示:“Kubernetes 提供了有关如何为任何类型的应用程序描述架构的概念,并根据这些概念部署运行基础设施所需的资源。它正在成为事实上的标准。”
影响
上市时间已大幅缩短,从几个月缩短到几周。部署时间从几个月缩短到几个小时。“过去,你必须申请虚拟机,仅此一项就可能需要数周的时间,”蒂博说。“现在你甚至不需要申请任何东西。你只需创建你的项目,它就会被部署。”Kubernetes 还提高了城市使用计算资源的效率:“以前,我们现在在 Kubernetes 上运行的 200 个应用程序组件需要数百台虚拟机,而现在,如果我们谈论的是一个生产环境,我们能够在 8 台机器上运行它们,包括 Kubernetes 的主节点,”马蒂内特说。这一切都是由一个只有 5 个人组成的小团队完成的,他们负责运营 Kubernetes 集群。
“我们有大型机、各种版本的 Windows、各种版本的 Linux、新旧 Oracle 系统、Sun 服务器,以及各种数据库。一些最重要的系统(如预算和人力资源)是在过去 30 年中内部在大型机上开发的。”
近年来,这一事实成为一个巨大的痛点。总共有 1000 多个应用程序,几乎在所有不同的生态系统中运行。在 2015 年,一个新的城市管理团队决定打破这些孤立的系统,并投资 IT,以朝着更集成的城市治理迈进。“该组织是孤立的,因此架构也是孤立的,”蒂博说。“一旦我们整合到一个 IT 团队,我们决定重新制定整体企业架构。”
现代化架构的第一步是容器化。解决方案架构师马克·库扎姆 (Marc Khouzam) 表示:“我们将努力基于新趋势;我们了解不变性和零停机部署等方面的优势。”该团队从一个包含四到五台服务器的小型 Docker 集群开始,使用 Rancher 提供对 Docker 容器及其日志的访问,并使用 Jenkins 部署。
但是,这种 Docker 集群设置有一些局限性,包括缺乏自愈功能和基于流量的动态扩展,以及优化服务器资源和扩展到同一容器的多个实例所需的努力。该团队很快意识到自己也需要编排。“Kubernetes 出现了,”蒂博说,“它带来了所有这些功能,使管理变得容易得多,并为用户提供了更多优势。”
该团队评估了多种编排解决方案,但 Kubernetes 脱颖而出,因为它解决了所有痛点。(他们也受到了雅虎日本使用案例的启发,该团队成员认为该案例接近他们的愿景。)“Kubernetes 提供了有关如何为任何类型的应用程序描述架构的概念,并根据这些概念部署运行基础设施所需的资源,”企业架构师摩根·马蒂内特 (Morgan Martinet) 表示。“它正在成为事实上的标准。它还承诺跨云提供商的移植性。现在选择 Kubernetes 为我们提供了许多选择,例如在内部或在任何 IaaS 提供商中运行集群,甚至在任何主要云提供商中使用 Kubernetes-as-a-service。”
另一个重要的决定因素是供应商中立。“作为政府实体,我们在产品和提供商选择方面保持中立至关重要,”蒂博说。“云原生计算基金会与任何公司无关,这保证了这一点。”
Kubernetes 的实施始于使用内部 Ansible 剧本部署一个小型集群,该脚本很快被 Kismatic 发行版取代。考虑到他们在运营 Kubernetes 平台方面遇到的复杂性,他们决定为开发团队提供基于 Helm 的自动化 CI/CD 解决方案。“Kubernetes 上的集成 CI/CD 解决方案使各种开发团队标准化了他们设计和部署解决方案的方式,但也允许他们保持独立性,”库扎姆说。
在重新架构过程中,该团队还添加了 Prometheus 用于监控和警报、Fluentd 用于日志记录以及 Grafana 用于可视化。“我们增强了对部署内容的可见性,”马蒂内特说。库扎姆补充道:“最大的好处是我们能够跟踪任何东西,即使是那些不在 Kubernetes 集群中运行的东西。这是我们统一监控工作的方式。”
总的来说,云原生解决方案对速度和管理开销产生了积极影响。通过标准化、代码生成、自动部署到 Kubernetes 以及通过 Prometheus 进行的标准化监控,上市时间已大幅缩短,从几个月缩短到几周。部署时间从数月数周的规划缩短到几个小时。“过去,你必须申请虚拟机,仅此一项就可能需要数周的时间才能正确配置,”蒂博说。此外,对于专用系统,通常需要请专家根据自己的方法安装它们,这可能需要数周甚至数月的时间。
库扎姆说:“现在,我们可以在没有人帮助的情况下部署几乎任何已 Docker化的应用程序。在 Kubernetes 中运行一个项目完全取决于你需要花多长时间来编写实际的软件。它不再依赖于部署。部署非常快,以至于可以忽略不计。”
Kubernetes 还提高了城市使用计算资源的效率:“以前,我们现在在 Kubernetes 上运行的 200 个应用程序组件需要数百台虚拟机,而现在,如果我们谈论的是一个生产环境,我们能够在 8 台机器上运行它们,包括 Kubernetes 的主节点,”马蒂内特说。这一切都是由一个只有 5 个人组成的小团队完成的,他们负责运营 Kubernetes 集群。马蒂内特补充说:“无论你以什么标准衡量,这都是一项巨大的改进。”
因此,该团队的未来战略将尽可能地以 Kubernetes 为目标也就不足为奇了。“如果某些东西不能在 Kubernetes 中运行,我们会等待,”蒂博说。这意味着他们尚未将该市任何 Windows 系统迁移到 Kubernetes,虽然他们希望这样做。“我们尽可能地与市场合作,向我们的供应商施加压力,要求他们支持 Kubernetes,因为它是一种易于管理的解决方案,”马蒂内特说。
蒂博设想,在不久的将来,该市 60% 的工作负载将在 Kubernetes 平台上运行,基本上是他们能够实现的任何用例。“这比我们以前的方式高效得多,”他说。“我们不会再回头了。”