基于Tosca和Terraform的多云资源编排探索

01 导言

随着企业采用多云战略和迁移到云平台,需要依赖不同的云资源来支持业务系统。传统的手动开通和配置资源关联关系的方法在多云环境下变得耗时且复杂,给运维带来困难。

为了应对多云环境中基础设施管理的复杂性,寻找一种高效的多云资源编排方法至关重要。资源编排可以对混合云资源进行编排,实现快速部署和管理,并降低管理复杂性、人工成本和运维成本。核心过程是设计蓝图、编排资源,并将编排结果作为实施模板传递给云平台,实现资源的统一开通、变更和回收。

尽管资源编排是降低成本和提高效率的有效方法,但在实施过程中也面临一些困难和挑战。以下是其中的几个主要方面:

  • 多云平台的异构性:不同的云服务提供商之间存在差异,这意味着在跨多个云平台进行资源编排时,需要处理不同的语法和语义,增加了编排模板的复杂性和学习成本。
  • 依赖关系管理:资源之间可能存在复杂的依赖关系,这需要准确定义和管理,处理依赖关系可能涉及解决循环依赖、处理资源创建的先后顺序等问题。
  • 配置参数的灵活性:不同的云服务和场景可能需要不同的配置参数和选项。资源编排需要提供灵活的配置能力和对需求的个性化定制能力,增加了编排模板的复杂性。

为了解决上述困难,可以采用两个标准来进行多云资源编排:标准描述文件和标准云平台对接。通过这两个标准对云平台的差异进行统一定义,使混合云编排变得简单可操作。在业界中,TOSCA和Terraform是两个备受关注的资源编排工具。

TOSCA提出了蓝图拓扑编排标准规范,定义了资源之间的拓扑关系和依赖关系,可以实现对复杂应用和服务的编排。Terraform则可以对资源编排的产物进行简化的实施部署,实现基础设施即代码(IaC)的理念,可以通过编写可重复使用的代码来描述和管理基础设施资源。

本文将基于TOSCA和Terraform这两个工具进行多云资源编排的探索与讨论,以帮助企业更好地实现混合云环境下的资源编排和管理。

02 TOSCA规范与Terraform工具

TOSCA规范

TOSCA(Topology and Orchestration Specification for Cloud Applications)是由OASIS组织制定的云应用拓扑编排规范。它定义了云资源编排的拓扑结构、组件关系、属性和操作等信息,以便于方便地描述云资源的拓扑结构和行为。

简而言之,TOSCA旨在制定一套蓝图拓扑编排标准规范,通过使用统一标准来描述云平台上应用的拓扑结构。TOSCA有以下一些优点:

  • 高度可扩展性:TOSCA可以在多个层次上描述云原生应用程序,包括服务部署、网络拓扑等。因此,它非常适合在复杂的分布式系统中管理和编排应用程序。
  • 独立于云平台:TOSCA模板可以在多个云平台上运行,因为它是一个独立于云平台的标准。
  • 生命周期管理:TOSCA模板中的工作流可以描述应用程序的整个生命周期,从创建部署环境到在生产环境中运行的监视和维护,可以进行全生命周期管理。

但是,TOSCA也有一些缺点,例如:

  • 相对复杂:TOSCA需要编写XML或YAML格式的模板,语法和语义相对复杂,因此需要一定的技术水平。
  • 缺少良好的工具支持:目前,TOSCA的工具生态系统尚不够完善,使用起来可能会比较困难。
  • 更适合应用程序描述:TOSCA更适合描述和管理整个应用程序,而不是管理云基础架构。

TOSCA的主要概念包括两个要素:节点(Node)和关系(Relationship)。TOSCA规范定义了一系列原生的节点类型(Node Types),用于表示云应用中的不同组件和功能。TOSCA规范中定义了一些原生节点类型,这些原生的节点类型提供了一种描述云资源中不同类型组件属性和行为的方式,便于进行模板编写和云资源管理。通过使用和派生这些节点类型,可以更加方便和标准化地描述和管理云资源中的各个组件。

Terraform工具

Terraform是由HashiCorp开发的开源工具,旨在管理云基础架构。它采用声明式编程风格,使用户能够编写基础架构模板,以描述需要部署的所有资源及其相互关系。这样的模板描述方式允许用户以可重复、可维护的方式定义和管理云基础架构,确保资源的一致性和可扩展性。

Terraform通过描述文件进行直接实施部署,即通过定义Terraform的描述文件(.tf文件),可以将其发送给Terraform服务进行执行(terraform apply),从而与云平台进行无缝对接,实现对描述文件中所定义的资源进行部署和开通。这种方式能够简化和自动化云资源的管理过程,使得部署和配置变得更加高效和可靠。

它具有以下优点:

  • 易于使用:Terraform采用声明式编程风格,用户可以更简单、清晰地定义和管理基础架构。
  • 可扩展:Terraform具有通过插件机制工作的灵活性,可以很容易地集成到其他工具和流程中。
  • 模块:Terraform将基础架构的各种组件以模块的方式进行封装,从而更容易地重用。

但是,Terraform也存在一些缺点:

  • 更适合管理基础架构:Terraform更适合管理云基础架构,而不是管理完整的应用程序。
  • 学习成本高:虽然Terraform的语言很简单,但功能十分丰富。这意味着使用它需要一定的学习成本。
  • 非标准: Terraform并不是一个标准,需要在不同的云平台上学习相应的DSL。

目前,Terraform已经得到了多个云平台的支持,包括公有云、专有云、Docker、Kubernetes。通过Terraform的统一管理,用户能够在多个云平台和基础设施上进行资源的配置和部署,实现跨平台、跨服务商的自动化管理。

应用场景

在实际应用中,TOSCA和Terraform在不同场景下发挥着各自的作用。TOSCA主要适用于管理和编排云原生应用程序,而Terraform则更适用于管理更底层的基础架构。以下是两种工具常见的应用场景:

云原生资源编排:TOSCA模板能够描述云原生应用程序的完整生命周期,包括部署、配置和管理等过程。通过TOSCA,多个组件和服务可以被编排成一个完整的云原生应用程序。

云基础架构管理:Terraform可以以模块化的方式编排云基础架构资源,使得各种资源和服务能够更清晰地进行管理。通过使用Terraform,可以通过代码来管理多个云基础架构,实现对基础设施的统一管理。

03 结合资源编排和实施部署

在实际应用中,TOSCA和Terraform可以分别应用于不同的资源编排场景。由于TOSCA和Terraform各自具有优势和劣势,可以将它们的长处结合起来形成更优的解决方案。例如,TOSCA在蓝图编排方面表现出色,可以利用其优势为多云资源编排提供标准化的蓝图编排规范,实现跨平台的编排。而Terraform则拥有丰富的社区生态和良好的云平台对接模式,可以快速与不同的云平台进行集成。

主要思路是采用TOSCA进行蓝图设计模式,通过蓝图编排将业务所需的云产品组件组织成符合TOSCA 1.3 YAML规范的蓝图模板。然后,将该模板转换为符合Terraform实施描述文件的统一格式,以便进行实施。具体架构如下所示:

第一步:首先根据TOSCA规范定义云产品组件,并进行蓝图编排,以生成符合TOSCA规范的蓝图描述文件(YAML格式)。

第二步:利用配置转换器,将TOSCA描述文件转换为Terraform描述文件。可以借助报文转换器等工具来进行此转换,具体细节不再详述。

第三步:利用Terraform描述文件和Terraform服务进行云产品的编排和实施部署。

04 阿里公有云蓝图编排实施部署实操

下面将通过一个实操来简要描述如何利用TOSCA蓝图编排并使用Terraform进行开通操作。假设需要部署一个 web 网站,该网站依赖三个云资源:虚拟专有网络(VPC)、虚拟交换机(VSwitch)和云服务器(ECS)。案例将模拟在阿里云杭州节点上进行这三个虚拟产品的实施部署,其中 ECS 将部署在 VSwitch 下方,而 VSwitch 的网络分配依赖于 VPC。

在过去的情况下,可能需要先在阿里云上开通 VPC,然后在 VPC 上创建一个 VSwitch,并最后创建一个 ECS。简单来说,这需要三个单独的实施部署操作。

通过资源编排的方式,可以将 VPC、VSwitch 和 ECS 编排在一个蓝图拓扑描述文件中,遵循 TOSCA 规范。然后,可以将这个蓝图描述文件转换为 Terraform 的描述文件,以实现统一的开通操作。这样一来,就可以通过资源编排来简化整个部署过程,实现快速而一致的云资源开通。

实践步骤一:TOSCA 蓝图编排

根据需求背景,使用可视化的蓝图设计工具(或手动编排拓扑文件,或使用基于TOSCA的开源编排工具,例如Cloudify),编排出符合TOSCA规范的蓝图描述文件,如下所示:

图片

该描述文件定义了一个包含VPC、VSwitch网络关系的ECS(Elastic Compute Service)规范,其中包括三个自定义云资源节点类型:

alicloud.nodes.VPC:派生 tosca.nodes.Network 节点类型,表示网络。具有属性,如CIDR。

alicloud.nodes.vSwitch:派生 tosca.nodes.Network 节点类型,表示虚拟交换机。具有属性,如CIDR。

alicloud.nodes.ECSInstance:派生 tosca.nodes.Compute 节点类型,表示ECS实例。具有属性,如镜像ID、实例类型和实例名称。

其中,组件定义的属性可以作为用户填写,如果有其他需要输入属性,也可在该节点增加。在relationships节点上,描述了三者的关系和互相依赖前提。

该描述文件采用YAML格式,其中节点描述继承了TOSCA规范的派生节点,后续可以不断扩展与继承。描述文件简单通过节点和关系来描述蓝图拓扑的节点、属性和关联关系,使其具有较高的通用性。

实践步骤二:把TOSCA转换成Terraform描述文件

将TOSCA规范描述文件转换为Terraform描述文件目前没有现成开源解决方案。因此,需自研定制化接口进行转换。当然,TOSCA规范也支持自定义接口实现,以调用其他开源组件进行开通操作。

下面是通过转换工具生成的Terraform描述文件main.tf的示例:

在这里需要介绍的是,Terraform核心文件包括两个部分。首先是编排执行文件,其文件后缀名采用tf(在本案例中为main.tf)。该文件用于定义和执行资源编排的操作。其次是本地状态文件,其文件后缀名采用tfstate。本地状态文件用于记录当前资源的状态和配置信息。

后缀名tf文件:业务编排的主文件,可以将所有内容合并到一个tf文件中,也可以根据不同的云产品将其划分为多个文件。无论是合并还是划分,只要文件后缀名为tf,它们之间可以相互引用和调用。

后缀名tfstate:本地状态文件,它由Terraform服务在实施部署后自动创建。该文件记录了实施部署生成的实例信息和状态。

在tf文件中,可以观察到以下几个节点,将对它们进行简单介绍:

terraform 节点:用于指定要下载的云平台提供的provider。这些provider是各大云平台在Terraform生态圈中开源提供的工具,通过使用这些provider,我们可以无缝对接云平台进行资源的开通。

provider 节点:主要用于提供授权信息,包括企业或个人云平台账号的AK/SK(Access Key/Secret Key)。这些信息用于进行云平台的认证和授权。

data 节点:用于在云平台中进行查询操作。在许多情况下,开通某种云产品需要使用已部署的其他云产品的属性进行关联。通过data节点,我们可以根据属性值查询云平台的数据,以便于提供即将开通的资源所需的信息。

resource 节点:用于描述将要实施部署的资源节点信息。这些资源节点可以是将要部署、变更或删除的资源。在执行Terraform时,根据该节点的信息与本地状态文件以及远程云平台的状态信息进行比对,决定是进行新的部署、变更部署还是回收部署。

output 节点:用于返回实施部署后的一些资源实例信息。在这里,我们定义了返回的三个资源实例的ID,以方便进行多云产品的资源管理记录。

实践步骤三:通过Terraform服务执行描述文件

准备好了Terraform描述文件后,可以通过Terraform服务进行执行。Terraform的执行过程主要包括三个关键步骤:init、plan和apply。

(1) terraform init:这一步是进行provider的初始化。在本案例中,我们描述了对接阿里公有云且使用1.204.1版本的情况。由于在此之前没有进行提前下载,因此在执行该命令时,Terraform将自动进行下载。以下是示例输出:

(2)  terraform plan: 这一步用于检查main.tf中的逻辑是否合理,并且可以在plan执行日志中查看将要进行的资源状态变更情况。根据案例的执行日志可以看到terraform根据模板计划新增了4个实例(Plan: 4 to add, 0 to change, 0 to destroy)。执行该命令后的输出如下所示:

(3) terraform apply:通过使用terraform apply命令,可以执行实施部署。如果需要传递参数,可以通过apply命令进行传递,例如AK/SK等敏感信息不适合明文写入文件中,这里只是为了演示方便。执行该命令后,可以观察到terraform已根据描述文件中的关联关系自动推算出实施部署云产品的依赖顺序。这也是terraform的一个重要优势,在混合云编排场景中,各种云产品之间的相互依赖以及执行顺序的复杂分析都可以通过terraform直接解决。以下是具体的执行日志:

(4) 实施成功后,可以在阿里公有云上看到已部署的产品。如下图所示,可以看到ECS ID为i-bp11o38dc5haho1667hc已成功部署在阿里公有云上。这证明实施操作已经顺利完成:

(5) 到目前为止,已成功实现了蓝图式自动化部署。基于这种模式,企业可以在多云产品规划方面进行上层业务封装。最终,企业能够实现资源编排、应用编排、自动化部署以及云解决方案自动化开通等各种场景需求。这为企业提供了更高效和自动化的云部署解决方案。

04 参考文献列表

TOSCA-Simple-Profile-YAML-v1.3.pdf介绍文档:https://docs.oasis-open.org/tosca/TOSCA-Simple-Profile-YAML/v1.3/os/TOSCA-Simple-Profile-YAML-v1.3-os.html

Terraform官方介绍:https://www.terraform.io/

Terraform实战介绍:https://lonegunmanb.github.io/introduction-terraform/5.5.console.html

Terraform语法介绍:https://bbs.huaweicloud.com/blogs/163482

《实战》作者:斯科特·温克勒(Scott Winkler) 译者:赵利通

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/606298.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

mysql索引失效的情况

目录 1破坏最左前缀法则2在索引列上做任何计算、函数操作,会导致索引失效而转向全表扫描。3存储引擎不能使用索引中范围条件右边的列4Mysql在使用不等于时无法使用索引会导致全表查询5is null可以使用索引,但是is not null无法使用索引6like以通配符开头…

Packet Tracer - Configure AAA Authentication on Cisco Routers

Packet Tracer - 在思科路由器上配置 AAA 认证 地址表 目标 在R1上配置本地用户账户,并使用本地AAA进行控制台和vty线路的身份验证。从R1控制台和PC-A客户端验证本地AAA身份验证功能。配置基于服务器的AAA身份验证,采用TACACS协议。从PC-B客户端验证基…

软件测试|测试平台开发-Flask入门:Flask动态路由

前言 之前我们介绍了flask发送http请求,以及flaskURL的详解,我们使用的路由都是固定的,一个路径和一个视图函数绑定,当访问这条路径时会触发相应的处理函数。但是当我们要处理更为复杂的情况时,比如我们有多个用户&am…

Mybatis面经

Mybatis 📑前言 本文主要是【Mybatis】——Mybatis面经的文章,如果有什么需要改进的地方还请大佬指出⛺️ 🎬作者简介:大家好,我是听风与他🥇 ☁️博客首页:CSDN主页听风与他 🌄每…

【书生·浦语大模型实战营03】《基于 InternLM 和 LangChain 搭建你的知识库》学习笔记

《基于 InternLM 和 LangChain 搭建你的知识库》 常见术语 RAG: Retrieval Augmented Generation,检索增强生成 1. 大模型开发范式 1.1 RAG VS Finetune RAGFinetune低成本可个性化微调可实时更新知识覆盖面广受基座模型影响大成本高昂单次回答知识有限无法实时…

Elasticsearch:Search tutorial - 使用 Python 进行搜索 (二)

这个是继上一篇文章 “Elasticsearch:Serarch tutorial - 使用 Python 进行搜索 (一)” 的续篇。在今天的文章中,我们接着来完成如何进行分页及过滤。 分页 - pagination 应用程序处理大量结果通常是不切实际的。 因此&#xff0…

代码随想录二刷 |二叉树 | 验证二叉搜索树

代码随想录二刷 |二叉树 | 验证二叉搜索树 题目描述解题思路递归法迭代法 代码实现递归法迭代法 题目描述 98.验证二叉搜索树 给定一个二叉树,判断其是否是一个有效的二叉搜索树。 假设一个二叉搜索树具有如下特征: 节点的左子…

Eureka的自我保护机制

一:Eureka的自我保护机制是什么? 保护模式主要用于一组客户端和Eureka Server之间存在网络分区场景下的保护。一旦进入保护模式,Eureka Server将会尝试保护其服务注册表中的信息,不再删除服务注册表中的数据,也就是不…

关于电脑屏幕亮度的调整,看这篇文章就够了

你可能需要定期更改屏幕亮度。当外面很亮的时候,你想把它调大,这样你就能看到。当你在黑暗的房间里时,你会希望它变暗,这样就不会伤害你的眼睛。降低屏幕亮度也有助于节省电力并延长笔记本电脑的电池寿命。 除了手动更改屏幕亮度外,Windows还可以通过多种方式自动更改屏幕…

Pytorch常用的函数(六)常见的归一化总结(BatchNorm/LayerNorm/InsNorm/GroupNorm)

Pytorch常用的函数(六)常见的归一化总结(BatchNorm/LayerNorm/InsNorm/GroupNorm) 常见的归一化操作有:批量归一化(Batch Normalization)、层归一化(Layer Normalization)、实例归一化(Instance Normaliza…

【React系列】React生命周期、setState深入理解、 shouldComponentUpdate和PureComponent性能优化、脚手架

本文来自#React系列教程:https://mp.weixin.qq.com/mp/appmsgalbum?__bizMzg5MDAzNzkwNA&actiongetalbum&album_id1566025152667107329) 一. 生命周期 1.1. 认识生命周期 很多的事物都有从创建到销毁的整个过程,这个过程称之为是生命周期&…

案例分析——如何优化跨境直播网络

跨境直播 风口已至 这些年越来越多商家加入直播带货行列,各种玩法日渐成熟。而TikTok作为当前国外最火爆的直播平台,不少卖家都会定期做TikTok直播引流,但时常会面临着远程访问导致直播画面模糊、卡顿掉线、延迟高,甚至可能限流黑…

Django 4.2.7 ORM 连接MySQLServer 完成单表CRUD

文章目录 Django ORM介绍1.使用pycharm新建一个Django项目2.修改settings.py文件中 DATABASES3.创建APP4.创建模型5.操作数据库 Django ORM介绍 Django 模型使用自带的 ORM。 对象关系映射(Object Relational Mapping,简称 ORM )用于实现面向…

OpenHarmony内存泄漏指南 - 解决问题(综合)

本系列文章旨在提供定位与解决OpenHarmony应用与子系统内存泄露的常见手段与思路,将会分成几个部分来讲解。首先我们需要掌握发现内存泄漏问题的工具与方法,以及判断是否可能存在泄漏。接着需要掌握定位泄漏问题的工具,以及抓取trace、分析tr…

Golang : Bson\Json互转

代码 package bson_jsonimport ("encoding/json""errors""fmt""gopkg.in/mgo.v2/bson""os""testing" )type User struct {Name string json:"name,omitempty" bson:"name,omitempty"CSD…

静态网页设计——天行九歌(HTML+CSS+JavaScript)(dw、sublime Text、webstorm、HBuilder X)

前言 声明:该文章只是做技术分享,若侵权请联系我删除。!! 感谢大佬的视频:https://www.bilibili.com/video/BV1de411m7y4/?vd_source5f425e0074a7f92921f53ab87712357b 源码:https://space.bilibili.com…

java回溯算法、最短路径算法、最小生成树算法

回溯算法 回溯算法实际上一个类似枚举的搜索尝试过程,主要是在搜索尝试过程中寻找问题的解,当发现已不满足求解条件时,就“回溯”返回,尝试别的路径。 最短路径算法 从某顶点出发,沿图的边到达另一顶点所经过的路径中…

高通开发系列 - toolchain交叉编译器编译kernel以及生成boot镜像

By: fulinux E-mail: fulinux@sina.com Blog: https://blog.csdn.net/fulinus 喜欢的盆友欢迎点赞和订阅! 你的喜欢就是我写作的动力! 返回:专栏总目录 目录 背景概述分析过程generate_defconfig.sh脚本环境准备合并其他几个配置文件开始编译生成dtb镜像

Python-PyQt5树莓派上位机

Python-PyQt5树莓派上位机 一个使用PythonQT设计的树莓派的上位机,功能大概如下 1.笔记本电脑与树莓派的通讯是否成功显示(给个信号显示判断是否通讯成功); 2.阈值的设置显示; 3.图像成像的显示; 4.是否发生…

【python爬虫】如何开始写爬虫?来给你一条清晰的学习路线吧~

记录一下我自己从零开始写python爬虫的心得吧! 我刚开始对爬虫不是很了解,又没有任何的计算机、编程基础,确实有点懵逼。从哪里开始,哪些是最开始应该学的,哪些应该等到有一定基础之后再学,也没个清晰的概…