文章目录
- Heat简介
- Heat编排服务,使OpenStack智能化
- Heat在OpenStack中的定位
- Heat作用
- Heat与其他服务的交互关系
- Heat架构
- Heat架构
- Heat组件
- Heat Engine架构
- Heat模板
- Heat模板默认编写语言-YAML
- Heat模板-“Hello World”
- HOT模板-结构
- HOT模板-Resource
- HOT模板-查询Resource Type
- Heat Stack
- Heat Stack常用命令
- Heat典型编排场景
- Heat编排场景
- Heat对基础架构资源的编排
- Heat对软件配置和部署的编排
- Heat对资源自动伸缩的编排
- Heat负载均衡的编排
- Heat和配置管理工具集成
Heat简介
Heat编排服务,使OpenStack智能化
- 为云应用程序编排OpenStack基础架构资源
- 提供OpenStack原生Rest API和CloudFormation兼容的查询API
- 首次出现在OpenStack的“Havana”版本中
- 依赖Keystone认证服务
Heat在OpenStack中的定位
- Heat是OpenStack编排服务之一,负责云应用程序基础设施资源的编排
- Heat提供一个OpenStack原生的REST API与一个与AWS CloudFormation兼容的查询API
[!tip]
Heat基于文本文件形式的模板为云应用程序编排基础设施资源,可以像代码一样处理。
Heat提供了一个OpenStack原生的REST API和一个与CloudFormation兼容的查询API。
Heat还提供与OpenStack Telemetry服务集成的自动扩展服务,因此您可以将扩展组作为资源包含在模板中。
Heat作用
- Heat是一种通过OpenStack原生REST API使用声明性模板格式编排复合云应用程序的服务,提供与其他OpenStack核心项目的紧密集成
- Heat模板以文本文件的形式描述了云应用程序的基础架构,文本文件可供用户读写,并且支持通过版本控制工具进行管理
- Heat模板指定资源之间的关系,使得Heat能够调用OpenStack API以正确的顺序创建用户所需的基础架构,从而完全启动用户的应用程序
[!tip]
模板允许创建大多数OpenStack资源类型(例如实例、浮动IP、卷、安全组和用户等),以及一些更高级的功能,例如实例高可用性、实例自动缩放和嵌套堆栈。
Heat与其他服务的交互关系
[!tip]
Heat是位于Nova、Neutron等服务之上的一个组件,它充当了OpenStack对外接口的角色,用户不需要直接接触OpenStack其他服务,只需把对各种资源的需求写在Heat模版里,Heat就会自动调用相关服务的接口来配置资源,从而满足用户的需求。
Heat架构
Heat架构
[!tip]
用户在Horizon中或者命令行中提交包含模板和参数输入的请求,Horizon或者命令行工具会把请求转化为REST格式的API调用,然后调用Heat-api或者是Heat-api-cfn。Heat-api 和Heat-api-cfn会验证模板的正确性,然后通过消息队列传递给Heat Engine来处理请求。
Heat中的模板是OpenStack资源的集合(虚拟机、网络、存储、告警、浮动IP、安全组、伸缩组、嵌套stack等),通过定义模板,可以将需要创建的资源在模板中描述,用此模板可以多次创建需要的资源。
Heat组件
- Heat-api:提供了一个OpenStack-native REST API,它通过RPC将API请求发送到Heat-engine来处理API请求
- Heat-api-cfn:提供了一个与AWS CloudFormation兼容的AWS Query API,并通过RPC将API请求发送到Heat-engine来处理API请求
- Heat-engine:Heat的核心,主要职责是协调模板的启动并将事件返回给API使用者
[!tip]
Heat-api:提供REST API服务,是其他组件与Heat交互的入口,接收API请求并传送给heat-engine。
Heat-api-cfn:提供兼容AWS CloudFormation的API,接收API请求并转发给heat-engine。
Heat-engine:Heat的核心,主要实现任务调度、资源生命周期管理等作用,自身并不提供资源创建功能,只负责编排资源后交由其他组件去处理。
Heat Engine架构
[!tip]
Heat Engine在这里的作用分为三层:
第一层处理Heat层面的请求,就是根据模板和输入参数来创建Stack(包含各种资源的集合)。
第二层解析Stack里各种资源的依赖关系,Stack和嵌套Stack的关系。
第三层客户端就是根据解析出来的关系,依次调用各种服务客户段来创建各种资源。
Heat模板
- Template:模板是OpenStack资源的集合(虚拟机、网络、存储、告警、浮动IP、安全组、伸缩组、嵌套stack等),通过定义模板,在模板中描述需要创建的资源,使用模板可以多次创建需要的资源。
[!tip]
HOT正在超越CFN的功能,下文以HOT模板为例介绍。
Heat模板默认编写语言-YAML
- YAML Ain’t Markup Language
- 使用缩进(一个或多个空格)排版
- 序列项用短划线表示
- MAP中的key-value对用冒号表示
[!tip]
https://yaml.org/start.html。
Heat模板-“Hello World”
[!tip]
heat_template_version:每个HOT模板必须包含带有有效HOT版本的heat_template_version键,例如2015-10-15,上图由于QA要求未呈现。
Description:虽然描述是可选的,但最好包含一些有用的文本来描述用户可以使用模板执行的操作。
HOT模板-结构
[!tip]
Heat template version:支持如下版本字段,建议根据实际的OpenStack版本选择匹配的Heat模板版本号:
2013-05-23
2014-10-16
2015-04-30
2015-10-15
2016-04-08
2016-10-14或newton
2017-02-24或ocata
2017-09-01或pike
2018-03-02或queens
2018-08-31或rocky
HOT模板-Resource
resources:<resource ID>:type:<resource type>properties:<property name>:<property value>metadata:<resource specific metadata>depends_on:<resource ID or list of ID>update_policy:<update policy>deletion_policy:<deletion policy>external_id:<external resource ID>condition:<condition name or expression or boolean>- type:必选字段,描述Heat模板使用哪种类型的资源,例如OS::Nova::Server或OS::Neutron::Port
[!tip]
resource ID
资源ID,在模板的resources部分中必须是唯一的。
type
资源类型,例如OS::Nova::Server或OS::Neutron::Port,必选属性。
properties
特定于资源的属性列表。可以在适当的位置或通过函数提供属性值,可选属性。
metadata
特定于资源的元数据。此部分是可选的。
depends_on
资源依赖模板中的一个或多个资源上,可选属性。
update_policy
以嵌套字典的形式更新资源的策略,可选属性。
deletion_policy
删除资源的策略。允许的删除策略是Delete,Retain和Snapshot。该属性是可选的,默认策略是从Stack中删除资源时删除物理资源。
[!tip]
external_id
允许为现有外部(到堆栈)资源指定resource_id,可选属性。
Condition
资源的条件,决定是否创建资源,可选属性。
Newton版本开始支持。
HOT模板-查询Resource Type
- Heat中支持的资源非常多,当进行资源定义时,可以使用命令查询资源所需的参数及类型
- 查找需要创建的资源:
$ openstack orchestration resourcetypelist- 列出资源详情:
$ openstack orchestration resourcetypeshow NAMEHeat Stack
- Stack:资源的集合,管理一组资源的基本单位, 用户操作的最小单位
- 通过对Stack的生命周期管理,进而完成应用的部署和对资源的管理
- Stack示例:
$ openstack stack create--templateserver_console.yaml--parameter"image=ubuntu"Heat Stack常用命令
stack list stack create stack show stack delete stack output list stack resource list stack event showHeat典型编排场景
Heat编排场景
- Heat从多方位支持对资源进行设计和编排:
- 基础架构资源编排:对计算、存储和网络等基础资源进行编排,支持用户自定义脚本配置虚拟机
- 应用资源编排:实现对虚拟机的复杂配置,例如安装软件、配置软件
- 高级功能编排:例如应用的负载均衡和自动伸缩
- 第三方工具集成编排:例如复用用户环境中现有的Ansible Playbook配置,节省配置时间
Heat对基础架构资源的编排
- 对于不同的OpenStack资源,Heat提供了不同的资源类型
- 例如虚拟机,Heat提供了OS::Nova::Server,并提供一些参数(key、image、flavor等),参数可以直接在模板中直接指定,也可以在创建Stack时提供
- 使用模板创建资源
$ openstack stack create-templateserver_console.yaml--parameter“image=ubuntu” STACK_NAME[!tip]
更多Heat模板示例,请参考如下链接:
https://github.com/openstack/heat-templates/blob/master/hot/server_console.yaml。
Heat对软件配置和部署的编排
- Heat 提供了多种资源类型来支持对于软件配置和部署的编排,其中最常用的是 OS::Heat::SoftwareConfig 和 OS::Heat::SoftwareDeployment
[!tip]
Heat提供了多种资源类型来支持对于软件配置和部署的编排,例如:
OS::Heat::CloudConfig: VM引导程序启动时的配置,由OS::Nova::Server引用。
OS::Heat::SoftwareConfig:描述软件配置。
OS::Heat::SoftwareDeployment:执行软件部署。
OS::Heat::SoftwareDeploymentGroup:对一组VM执行软件部署。
OS::Heat::SoftwareComponent:针对软件的不同生命周期部分,对应描述软件配置。
OS::Heat::StructuredConfig:和OS::Heat::SoftwareConfig类似,但是用Map来表述配置。
OS::Heat::StructuredDeployment:执行OS::Heat::StructuredConfig对应的配置。
OS::Heat::StructuredDeploymentsGroup:对一组VM执行OS::Heat::StructuredConfig对应的配置。
Heat对资源自动伸缩的编排
- Heat提供自动伸缩组和伸缩策略,结合Ceilometer可以实现根据各种条件,比如负载,进行资源自动伸缩的功能
Heat负载均衡的编排
- Heat提供自动负载均衡编排,由一组不同的资源类型来实现
[!tip]
负载均衡也是一个很高级应用,它也是由一组不同的资源类型来实现的。资源类型包括:
OS::Neutron::Pool:定义资源池,一般可以由VM组成。
OS::Neutron::PoolMember:定义资源池的成员。
OS::Neutron::HealthMonitor:定义健康监视器,根据自定的协议,比如TCP来监控资源的状态,并提供给OS::Neutron::Pool来调整请求分发。
OS::Neutron::LoadBalancer:关联资源池以定义整个负载均衡。
Heat和配置管理工具集成
- Heat在基于OS::Heat::SoftwareConfig 和 OS::Heat::SoftwareDeployment 的协同使用上,提供了对Chef、Puppet和 Ansible等流行配置管理工具的支持
[!tip]
随着DevOps的流行,大量配置管理的工具应运而生,比如Chef、Puppet和Ansible。各种工具除了提供一个平台框架外,更是针对大量的中间件和软件部署提供了可以灵活配置和引用的脚本。
管理工具集成