之前一直在看云环境下应用自动化部署方面的论文,在虚拟化环境下已有VMVare联合其他大产商推出的应用打包发布标准格式OVF,目前应该是已经发布了2.0版本,VMVare的vSphere和IBM的虚拟化产品对此都有一系列的支持。OVF解决了应用在虚拟化平台自动部署的问题,可是在面对现在的云平台环境下,还是有些不足,需要将OVF格式更进一步推进。Amazon对复杂应用系统的部署给出了自己的解决方案AWS CloudFormation,目前OpenStack社区也给出了自己对应的项目Heat。
花了一点时间从网上收集了下Heat资料,整理在下,方面大家了解,其中从部分内容是从网友的博客中摘得,还有部分内容是从OpenStack官方的文档中翻译过来,最末统一给出所参考的资料链接。
Amazon 在云计算早期,提供了Amazon Machine Images即AMI的一站式展示,这些AMI都是单个虚拟机镜像模板,通过使用Amazon的EC2服务,可以依赖于这些镜像模板迅速的创建出单一服务器上的应用。当然,创建出来的单一实例还需要用户手动去设置,完成实现服务可用的最后一步。
直接的使用AMI的方式,在面对复杂的集群应用面前就显得更加无力。Amazon为了解决此问题,推出了Amazon CloudFormation Templates。CloudFormation Templates 专门为大规模集群应用而生,通过使用这样的模板,来简化AWS资源的准备和部署,解决了传统方式上需要手动管理各项资源之间依赖的问题,实现了在EC2中迅速创建大量实例部署集群应用。
CloudFormation的推出,让Amazon更好的拥抱了企业IT领域。
OpenStack Heat 是由RedHat公司在Grizzly版放出的孵化项目。Heat项目直接对应于AWS的CloudFormation,在目前来看,还只是CloudFormation功能的一个子集。Heat可以对Amazon CloudFormation Templates进行配置,并运行在任何一个OpenStack生态环境上。
对于Heat的认识,我们可以直接从CloudFormation入手,Amazon在其官网上给出的CloudFormation介绍如下:
“AWS CloudFormation 向开发人员和系统管理员提供了一种简便地创建和管理一批相关的 AWS 资源的方法,并通过有序且可预测的方式对其进行资源配置和更新。您可以使用AWS CloudFormation 的示例模板或自己创建模板来介绍 AWS 资源以及应用程序运行时所需的任何相关依赖项或运行时参数。您可以不需要了解 AWS 服务需要配置的顺序,也不必弄清楚让这些依赖项正常运行的细枝末节。CloudFormation 为您妥善处理。当设置完成后,您可通过按受控制、可预测的方式修改和更新 AWS 资源,您可像执行软件版本控制一样对您的 AWS 基础结构进行版本控制。您可以通过 AWS 管理控制台、CloudFormation 命令行工具或 API 对模板及其相关的资源集(称为“堆栈”)进行设置和更新。”
总之,Heat是来自于AWS的CloudFormation,设计与实现上都基本和Amazon保持一致。
对于Heat的功能和实现,简单来说就是用户可以预先定义一个规定格式的任务模版,任务模版中定义了一连串的相关任务(例如用某配置开几台虚拟机,然后在其中一台中安装一个mysql服务,设定相关数据库属性,然后再配置几台虚拟机安装web服务群集等等),然后将模版交由Heat执行,就会按一定的顺序执行heat模版中定义的一连串任务。
基于预先定义的模板,Heat通过自身的orchestration Engine来实现复杂应用的创建启动。Heat原生的模板格式目前还在不停地演进中,但是对CloudFormation的格式具有良好的支持。存在的CloudFormation的模板可以在OpenStack平台通过heat来启动。
Heat client是Heat project 提供的CLI工具,类似于其他项目的client。对于heat tools的使用,可以通过安装后查看,或者通过此链接来查看。
Heat-api 类似于nova-api,提供了原生的restful API对外使用。用户对API的调用,由heat-api处理之后,最终通过RPC传递给Heat-engine来进一步处理。
heat-api-cfn组件则提供了Amazon style 的查询 API,因此可以完全兼容于Amazon的CloudFormation,对于API的请求,同heat-api类似,处理之后,通过RPC传递给heat-engine进一步处理。
heat-engine是heat中的核心模块,主要的逻辑业务处理模块。此模块最终完成应用系统的创建和部署。
这个工具是一个单独的工具,代码没在heat project里面,可以单独下载。这个工具主要用来完成虚拟机实例内部的操作配置任务。在创建虚拟机竟像时,需要在镜像中安装heat-cfntools工具。
Heat templates支持多种模板内容展示格式,包括:HOT Syntax, YAML Syntax,JSON Syntax;每种格式表达的内容都一样,只是在表现形式上存在差别。关于模板的配置选项具体可以参考此链接。
同时,Heat templates还支持多种资源格式,包括OpenStack自身的资源格式,Amazon的资源格式和RackSpace的资源格式。目前,Heat templates所支持的内容还在进一步演变中,会越来越完善。
现在先参考官方贴出的一个简单例子,该模板中包含一个虚拟机实例,链接在此。
从此模板中可以看出,该配置具有很大的灵活性,并且与OpenStack紧密融合,此点相比OVF来说,是天生的优势。下面再帖一个配置选项中的大致格式作为参考。
现在简单的描述heat是迅速创建一个复杂的应用并且完成最终的配置工作的整个流程。
第一步,需要在虚拟机镜像中安装cloud-init和heat-cfntools两个工具。前者cloud-init是用来处理虚拟机实例早期的一些配置工作的,主要完成以下几方面的配置:
整个cloud-init可以通过创建应用时指定—user-data-file或者—user-data选项来设置。User-data的具体选项可以通过此链接来查看。
目前Heat没有放出一个完整的roadmap出来,所提供的blueprint均为lanuchpad上开发者注册提交的blueprint,实为一个个的feature。可以参考此链接。