![ccb47c610a29271f8ffd21beaa698148.png](https://i-blog.csdnimg.cn/blog_migrate/57b32ceb6ba1c8d8e08b878a6369ebe2.jpeg)
OpenStack 是一个开源的云计算软件平台,通常被当作是IaaS (infrastructure-as-a-service)的典型代表。OpenStack Heat是一个用来管理OpenStack中基础设施以及应用的整个生命周期的项目,它可以极大地简化和加速应用的部署。本文将给大家重点介绍一下OpenStack Heat,并以部署AVE应用为例,分享一些我们对OpenStack Heat的认识和实践。
作者:Dell EMC中国研发中心 林巍 于靖
0. Avamar是什么?AVE又是什么?
Avamar是戴尔易安信的一款企业级数据产品,它通过变长去重技术,可以对用户数据进行快速、高效的备份和恢复。Avamar Virtual Edition (AVE) 是Avamar的虚拟化版本,旨在为用户提供虚拟环境下的数据备份和恢复解决方案。更多关于Avamar的信息可以参考文末链接。
![6f88fe23acfe7d964ee7a9347ebb6dae.png](https://i-blog.csdnimg.cn/blog_migrate/10ace966fbfa47327f8b4d20de60eaad.jpeg)
1. Heat是什么?有什么作用?
Heat是OpenStack Orchestration计划的主要项目。它实现了一个编排引擎(orchestration engine),该引擎可以解析txt格式的模板文件(template),并调用OpenStack-native REST API 和 CloudFormation-compatible Query API来启动多个复合云应用程序。模板文件描述了云应用的相关基础设施,以设施间的关系,模板可以进行版本控制。Heat旨在将OpenStack的其他核心组件集成到单一文件的模板系统中。这些模板允许创建大部分OpenStack资源类型(例如虚机,floating IP,volume,security groups和用户)以及一些更高级的功能,例如虚机高可用性,虚机自动调整和容器嵌套等。通过提供与其他OpenStack核心项目的紧密集成,Heat会使所有OpenStack核心项目都获得更大的用户群。
2. Heat由哪些部分组成,如何工作?
Heat主要由四部分组成:Heat tool是一个CLI,它通过heat-api来调用AWS CloudFormation APIs ;heat-api 提供OpenStack-native REST API,后者将要处理的request发送给heat-engine;heat-engine的主要职责是协调模板的加载和返回事件给API调用者;heat-api-cfn组件提供了一种AWS风格的查询API,它会将API请求发送至heat-engine来处理。
![bee5d84c1aae8c2b08860a4985b1f44c.png](https://i-blog.csdnimg.cn/blog_migrate/d4f3536b5f8c9cefdea858316e99421b.jpeg)
3.如何写出一个Heat模板,Heat模板包含哪些内容
Heat模板全称是Heat Orchestration Template,简称HOT。 HOT模板一般以yaml格式定义,下图2展示了其标准结构组织。
![86e5100c5be522210b2047f6d84ca2f0.png](https://i-blog.csdnimg.cn/blog_migrate/5122cc919d445a2a7edc83be0c1f6792.jpeg)
以一个我们自己使用过的template为例,和大家一起看一下模板中的内容如何呈现:
![0787e10ac79ff7c4f3c5a110b84c08ef.png](https://i-blog.csdnimg.cn/blog_migrate/8a56b098e6a922d36bf9ccb975fd43c1.jpeg)
该模板主要包含四个部分:template 版本,template介绍,参数和资源。下面着重介绍下resources和parameters两个部分。图4中罗列了resources资源。
![a7b63444eaa4ad41ab4fe97cc6488ff7.png](https://i-blog.csdnimg.cn/blog_migrate/29ac0e9318b9c259b914464294024bd6.jpeg)
本例中,resources总共定义了6个部分的内容,即资源(1)-(6)。字段含义如下,如图5所示,资源(1)名称为web_secgroup,其类型为OpenStack Neutron project下的SecurityGroup。该资源的属性中properties中定义了若干规则rules,比如第一个rule的协议为icmp,其ethertype是IPv6.
![5d3f5583601bbe5de35e308d7ceb4c30.png](https://i-blog.csdnimg.cn/blog_migrate/0a9cb79e0741a7a1d4c683b510c11ab1.jpeg)
如图6所示,资源(2)是虚机端口部分定义了一个名为instance_port的资源,该资源类型为Neutron下的Port,资源属性中包含了network和前面介绍的security_group。
![26c5e6382f67233de78983046093d565.png](https://i-blog.csdnimg.cn/blog_migrate/978713d78329fb8dbca8a30a05e62e3b.jpeg)
资源(3)是avamar_init,其资源类型为Heat下的CloudConfig,其属性中有cloud_config项,该项用于组织将会在虚机第一次启动后执行的脚本。本例中我们尝试让其执行一个Python脚本来完成特定的任务。
![fe7e86257acd4d04fb5a8e615c64c095.png](https://i-blog.csdnimg.cn/blog_migrate/98e61aff41ddeb4b7aad8b977aece2c9.jpeg)
图8,资源(4)虚机部分不但定义了虚机资源,还定义了它与其他资源之间的联系。该资源的类型为Nova下Server,虚机资源属性包含:flavor,需要事先创建,会规定诸如cpu个数,RAM大小等;image,规定用哪一个镜像来创建虚机,这里我们使用的是一个AVE的image;网络资源networks引用上面的instance_port资源;key_name为一个非对称加密的keypair,也需要launch之前就创建好;user_data引用的是上面所述的avamar_init资源,其格式为RAW.
![4f9c9d3fd98afcfa603bf411a2d20c9b.png](https://i-blog.csdnimg.cn/blog_migrate/d87b06ff56975ad0297410976a9c9044.jpeg)
资源(5)avamar_volume部分定义了该资源的类型为Cinder 下 Volume,该volume大小为25G. 资源(6)volume_attachment定义了该volume和对应的instance的挂载关系,该资源的类型为Cinder下VolumeAttachment。如图所示,该资源将名为avamar_volume的volume资源挂在名为avamar_instance的虚机资源下。
![ec7eaacd75739dd04d540212a55bde03.png](https://i-blog.csdnimg.cn/blog_migrate/ae17d4fe684dacd420da78dd41ae9d9c.jpeg)
使用这个模板我们便可以很轻松地在OpenStack上部署一个AVE环境。除了以上列出的资源类型外,Heat还支持一些其他的资源类型,比如OpenStack的类型:
https://docs.openstack.org/heat/pike/template_guide/openstack.html
以及CloudFormation 的兼容资源类型:
https://docs.openstack.org/heat/pike/template_guide/cfn.html
4. Heat模板中parameters部分
下面介绍下parameters部分,参数部分允许指定实例化模板时必须提供的输入参数。这些参数通常用于定制每一次虚机部署(例如,通过设置自定义用户名或密码)或绑定到特定资源(如特定image)。每个参数都在一个单独的嵌套块中定义,其中第一行中定义的参数名称以及附加属性。
![f84dcac09388b6f29da36fc93bfb4b23.png](https://i-blog.csdnimg.cn/blog_migrate/68c1063a22d120232d1577017d6bf3e0.jpeg)
从图10中可以看出,在parameters部分我们可以对template中用到的参数进行自定义,包括类型,标签,甚至用正则来对输入参数进行检查和限制。其中也有部分属性是optional的,用户可根据需要自行选择。如果大家对parameters这部分感兴趣的话也可以到下面的链接再展开进一步阅读:
https://docs.openstack.org/heat/latest/template_guide/hot_spec.html#parameter-groups-section
另外值得一提的是parameters的传递方式,主要有三种,分别是template内parameters部分给出,environment file给出以及WEB GUI手动填入,并且后面两种方式传递的参数会对第一种方式传递的参数进行覆盖。对于方式一,上文已经介绍的比较详细了,只需要在template内的parametes部分直接定义好,如图11。
![18a05496498ab7dfbba807acd4bd075a.png](https://i-blog.csdnimg.cn/blog_migrate/b54c874a04bd1b487a4794c2f005fc67.jpeg)
第二种方式是在launch一个新的stack时,传入一个environment 文件,该文件中给出各个参数的值,对template中 的部分参数进行覆盖。如图12 是一个我们用过的environment 文件。方式二是我们推荐的参数传递方式,在该方式下,我们开发出template模板,并在其中的parameters部分(图11)定义好各种参数的default值。用户可以下载该模板, 再搭配自己编写的environment文件来launch新的stack。从图12例子中可以看出,编写这样一个environment文件其实是比较简单的。方式二中,template由我们提供,environment文件由用户自己编写。这样做,一方面提升了用户体验,用户可以更快速地部署AVE;另一方面也保留了个性化的选择 ,用户可以根据自己的需求,灵活地在environment文件中来设置部分参数。
![ebf7c530b0f8fc1c2c267f678e345b7b.png](https://i-blog.csdnimg.cn/blog_migrate/2bdb3e53fd21c2eeed8ed4c011a836e4.jpeg)
方式三是通过WEB GUI来手动填入各项参数,如图13。显然。当参数比较多的时候,这种方式的用户体验是比较差的,而且每次launch一个新的stack时都需要重新填写,所以我们还是推荐以方式二来传递参数。
![444b6a3fa9d6179db3e42ba3753b5a91.png](https://i-blog.csdnimg.cn/blog_migrate/b8d0e981e4d6f726a226c0a7f9bd502b.jpeg)
5.如何使用HOT
用户可以通过两种方式来使用HOT,一个是WEB GUI,另一个是CLI。如果您的OpenStack环境安装了Horizon和Heat,当从WEB GUI上launch一个新的stack时 ,在如图14所示的Select Template这一步时,您可以导入编写好的template文件。同时也可以导入environment 文件。下一步就是如图13更改参数,就可以了。
![3d442b64f73193ee502a573183ef3727.png](https://i-blog.csdnimg.cn/blog_migrate/e053f564a3a0ccec89fcbdf4943501f0.jpeg)
等待几分钟后,stack创建完成,所有资源的拓扑图如图15,每个小圆圈代表一个资源,连线代表两个资源具有联系。从图中可以看到,位于中心部分的是虚机instance资源,它与五个资源有联系,右上角三个相同的资源是volume资源,它们和instance之间通过volume_attachment资源相连接;左下角是web_secgroup资源,它和中心的instance资源通过instance_port相连;正下方是avamar_init资源和instance相关联。
![0dd6f6c3b0aad23aba48a377c36f4041.png](https://i-blog.csdnimg.cn/blog_migrate/465aeb7122477f2e5b252cb022e9985a.png)
在Resources页面可以看到本次部署过程之中部署了哪些资源,如图16所示,上文提到的资源都都可以在这个列表中找到部署。
![0f60bcd01d6620a5141082856c4b1876.png](https://i-blog.csdnimg.cn/blog_migrate/17b06def1369c0a6446f000d85c9116b.jpeg)
第二种HOT使用方式是通过CLI,如果我们想launch一个stack,需要使用openstack的stackcreate 命令,其基本用法如图17所示。
![fa6389fa5dfb262e041f979e9e0c4b7f.png](https://i-blog.csdnimg.cn/blog_migrate/85a794d43f00468a31d86d740ed38ffd.jpeg)
如果模板没有问题的话,create成功后会有如图18的信息输出。
![a6bfb24bc76c6fb40af5025bfb861333.png](https://i-blog.csdnimg.cn/blog_migrate/8dfa5ebeb7cdb4bfa7fc73f4037bb87f.jpeg)
如何用OpenStack Heat来部署AVE就给大家介绍到这里,在此感谢Yongsheng对本文提出的一些修改意见。
参考文档
1.https://www.emc.com/data-protection/avamar.htm
2.https://shop.dellemc.com/en-us/AVAMAR-PRODUCTS/Dell-EMC-Avamar-Data-Protection-Software/p/EMC-Avamar
3.https://docs.openstack.org/heat/8.0.0/developing_guides/architecture.html