服务器太多了不好管 UCloud基于Terraform的资源编排工具详解

随着用户在UCloud中使用的资源数量的急剧增加,传统的API/SDK脚本化的资源管理方式已不能满足用户的需求。为此,UCloud的研发团队在Terraform上创建了自己的资源编排工具。这有助于降低云计算资源管理成本,提供安全、可靠和一致的产品体验,并最大限度地降低迁移到云的风险。Terraform代表了最先进的技术和标准,并与UCloud CLI等工具相结合,创建了新一代UCloud资源编排工具,进一步扩展了Terraform的功能,使基础设施可编程。当通过ULB将流量卸载到云主机时,新解决方案将构建时间从传统的3分20秒缩短到43秒,大大提高了编排的效率、稳定性和可描述性。什么是Terraform?Terraform是Hashicorp的开源多云资源编排工具,与AWS、微软Azure、谷歌、阿里云和UCloud等主要云供应商合作,形成了一个完整的生态系统。用户通过特定的配置语言HCL、Hashicorp配置语言来描述基础设施,然后通过Terraform工具统一解析,构建资源之间的关系,生成执行计划,并调用UCloud公共云API来管理基础设施的整个生命周期。与其他云资源管理方法相比,Terraform的主要特点是:1.兼容性广泛,得到国内外40多家公有云厂商的支持,其中包括UCloud在内的4家国内云厂商,200多家软件服务提供商提供支持。2.基于基础架构即代码(IaC)的设计可以用特定于领域的语言描述基础架构,消除了基础架构自动化过程中的语义模糊性,并减少了人为因素的不确定性。3.在执行编排操作之前,Terraform会对关键基础设施的更改进行全面审查,并创建一个易于阅读的执行计划,以确保基础设施的可靠性。基于DAG(有向无循环图,定向无循环图)描述资源与资源之间的关系,DAG具有良好的拓扑特性,意味着当资源属性和资源关系发生变化时,更改行为将以足够并行的方式执行。下图是与传统资源管理方法的比较。

图1:从资源编排与传统资源管理方式的比较来看,在自动化DevOps环境中,资源编排相对于传统资源管理方式有着明显的优势,目前已经覆盖了IaaS层的核心产品,但随着时间的推移,UCloud资源编排在未来也会支持更多的产品。用户可以很容易地从Terraform中受益,因为在没有资源编排工具的情况下初始化云服务需要大量的时间成本,并且更改云中的资源以确保基础设施的安全需要复杂的更改逻辑。UCloud资源编排工具解决了一些常见问题,例如:CI/CD自动化资源管理(峰值应用程序扩展)部署复杂的资源拓扑(如两个三枢纽应用程序架构)例如,SaaS解决方案提供商Zakridn在其业务中部署了UCloud Terraform编排系统。下面是PostCrypton业务结构的示意图。同时,采用多种云服务,需要统一的资源管理平台进行多云管理,自主研发的资源管理平台需要对接云厂商的接口,研发人员对各种云服务的产品细节有深入的了解。这无疑会增加企业的研发成本和运营成本。

图2:在应对SaaS业务时,Terraform可以灵活、动态地调整资源,用户只需要调整一些参数,就可以利用模板进行非常快速的资源管理,与自建管理平台相比,UCloud Terraform可以为用户节省大量的运营成本和效率。当您第一次运行Terraform并在UCloud云中创建资源时,此资源编排操作的生命周期如下所示:

图3:Terraform生命周期图中立方体的表示如下:Terraform核心进程:负责资源定义文件、构建有向非循环图和管理状态存储;提供者进程:提供资源编排功能的流程,包括云供应商实现的功能(例如UCloud的资源编排实现)和应用程序提供的功能(例如TLS自签名证书)Provisioner进程:为资源编排提供后处理的进程,例如执行shell命令、上传文件等。使用中间的有向无循环图作为边界线,左边部分是Terraform本身提供的功能,右边部分是云供应商提供的功能。Terraform核心的出色抽象保证了资源编排的安全性和稳定性,并为UCloud资源编排提供了坚实的工程基础。UCloud资源编排实践生产环境中的资源编排系统通常依赖于大量的云资源后台管理服务。在资源编排的工程实现中,首先要保证以下基本要求:它保证了复杂终端环境下资源编排的成功率。这是最基本、最基本的要求。Avamar确保了产品的一致性。使用户能够平滑地过渡,改变无知觉。确保产品的工程质量。资源编排本身作为访问关键基础设施的一种手段,必须足够稳定。下面,我将详细分享UCloud在开发基于Terraform的资源编排工具时的容错、访问和工程优化方面的实践。容错优化容错是衡量系统可用性的一个重要方面,资源编排本身作为UCloud服务的入口,必须足够稳定,以合理地响应故障,例如上游服务中的异常容错或输入异常的错误纠正。Terraform的杀手级功能是将执行计划与进程分离,允许用户生成执行计划,比较资源定义文件与当前资源状态之间的差异,并在执行更改当前网络基础设施的实际资源编排操作之前检查关键基础设施更改。在实现资源编排的过程中,UCloud使用Terraform执行计划中的CustomDiff功能为某些资源定制了Diff流程。例如,在2个地区间只能存在1个高速信道(UDPN),在执行编程动作之前已经存在1个高速信道(UDPN)的情况下,所有的编程动作在执行计划阶段被阻止,提高了终端用户的利用效率。

图4:自定义Diff,UCloud编排工具用于检查执行计划中的输入错误处理,通过组织整个编排工作流的生命周期,将错误消息严格地分成四个正式元组。压缩为(动词、附加动作、资源名称、ID),转换为人类可读的描述性信息,反馈给用户,输入异常可以准确地位于源行,前提是提供一定的交互式纠错功能。

图5:错误消息四边形的自然语言表示示例接下来,UCloud通过API一致性项目,实现了所有操作的幂等性质,如下所述。它识别(即操作是否有副作用,是否创建了真正的资源),对所有幂等(无副作用)的操作执行自动重试,极大地提高了编排工具的容错能力,保证了自动重试机制真正安全。在非幂等运算中,Terraform的状态管理机制允许您轻松地重新运行编排计划,只重试失败的创建过程。UCloud编排工具还使用Terraform内置的等待机制,为异步操作提供同步封装。当资源被创建时,它等待资源完成,然后轮询直到查询成功,以确保操作的原子性和资源状态的一致性。最后,对于上述重试或待机机制,使用指数函数递增的间隔(Exponential Backoff)和优雅的终止(Gracefully Shutdown)方案,进一步提高资源流程的容错能力。基于Terraform的资源编排具有固有的局限性。例如,它更适合构建基础设施,而不适合特定的常规任务,如列表查询和交换机。要批量重新启动主机,您可以使用Terraform使用数据源查找相应的数据,定义输出变量,并将输出变量的值作为参数传递给外部脚本。在这样的临时查询场景中,与Ansible等配置管理工具相比,它没有明显的优势。因此,除了资源编排外,UCloud还开发了UCloud CLI工具,以扩展资源编排功能。例如,使用CLI查询并重新启动您在UCloud编排工具中创建的资源。

图6:使用CLI查询和重新启动使用UCloud编排工具创建的资源UCloud提供了UCloud CLI与资源编排的集成,允许直接使用CLI权限配置信息。您还可以使用编排工具的功能调用UCloud CLI来执行额外的资源管理操作。

图7:Terraform与CLI的集成示例在连接资源编排和UCloud CLI后,资源编排可以重用CLI的即席查询功能,CLI可以重用资源编排保留的资源拓扑信息,如主机列表、网络CIDR信息等,极大地扩展了双方的产品访问能力。从项目一开始,UCloud资源编排优化就把最终用户使用的一致性和可用性作为核心要求。为了满足这些要求,我们必须突破一些关键的工程技术障碍,包括:1.确保用户能够在版本之间和云之间平稳过渡。2.同时,它自动化了资源编排工具所依赖的基本API的管理,并从源头上提高了编排工具的可用性。3.资源编排作为进入关键基础设施的手段,本身就需要适当的质量保证。首先,对于资源编排工具的升级,UCloud将严格遵循Terraform的模式更改策略,在资源属性发生破坏性更改时提供版本迁移的实现,从而确保最终用户在升级工具时自动将资源状态平稳迁移到新版本。其次,对于云平台之间的迁移,UCloud实现了通用的样式转换函数,为UCloud接口命名大写Camel名称,统一映射到Terraform常用的小写下划线Snake样式,并使用Terraform建议的产品命名,以降低用户跨云迁移成本。最终用户只需对模板进行轻微更改,即可通过资源编排工具顺利访问UCloud。作为UCloud重要的产品访问方式,自动资源编排的变更对整个UCloud产品有很强的依赖性,接口变更对接时的小错误都可能导致灾难性后果。一致性工程的一个关键目标是快速响应产品新功能的变化,同时最大限度地降低劳动力成本,自动化更改,并最大限度地减少错误。为了能够统一管理API,防止产品之间的信息隔离,UCloud很早以前就构建了一个公共统一的API 管理平台,将所有现有的Web API定义聚合到一个统一的API注册表中,并使用自定义格式来正式描述API架构。API 管理平台将API场景抽象到测试集TestSet中,将单个API调用抽象到测试用例TestCase中,然后使用自定义表达式语法构建随机参数并将其注入到用例中并执行。

图8:API 管理平台示意图基于API 管理平台,UCloud资源编排团队为API SDK创建了一个自动生成程序,并通过严格形式化的API定义将其转换为Go SDK代码。它还通过编写递归下降表达式解析器将测试用例中的表达式语法转换为Go代码。它实现了API定义与Go代码的直接映射,并以低成本同步上游更改。

图9:通过编写API建模工具转换API SDK代码此外,UCloud还在API 管理平台和SDK之间编写API建模工具,并抽象出统一标记API幂等特性的中间层,为资源编排工具提供了真正安全的重试机制。这就完成了整个调用链接的接口一致性项目的构建,实现了从API 管理平台到SDK到Terraform的完整语义映射,从而降低了SDK开发和维护成本,同时消除了人为更改带来的不确定影响。质量工程建设资源编排作为大规模云资源管理的首选方式,涉及到关键基础设施的运营和管理,编排工具本身的质量非常重要。

图10:资源编排持续集成清单作为一个开源项目,UCloud资源编排工具有三个质量周期,如表2所示。没有开源协作周期,没有使用Travis CI进行代码样式检查和单元测试,也没有实际的API请求。UCloud使用Kubernetes上的Gitlab CI进行样式检查、单元测试和集成测试。集成测试通过调用实时API来操作云中的实际资源,并在每天清晨执行每日回归。在Terraform的官方存储库周期之前,合作伙伴Hashicorp将使用TeamCity进行完整的批量验收测试,并在所有测试完成后发布新版本。为了确保代码不会随着时间的推移而腐烂,并提前消除拼写错误、安全密钥泄露和不合理抽象等隐藏危险,UCloud Access产品团队选择了三个不同维度的静态检查工具来量化代码质量。GoReportCard

经过长时间的发展,Terraform已经成为行业内常用的资源编排工具,近年来国内外的朋友们开始支持基于Terraform的资源编排系统,这证明了行业内对通用资源编排系统的强烈需求。UCloud深入研究了Terraform的内部机制,并在此基础上深入探索了UCloud下一代资源编排系统,在研发过程中多次优化,开启了整个环节的基础工程建设,最后通过适当的质量工程实践,确保了资源编排的可靠性和稳定性。有关UCloud Terraform的更多信息和示例,请参阅UCloud资源编排官方文档。

返回列表
上一篇:
下一篇:

文章评论