编排服务经过运行调用生成运行中云应用程序的OpenStack API为描述云应用程序提供基于模板的编排。该软件将其余OpenStack核心组件整合进一个单文件模板系统。模板容许你建立不少种类的OpenStack资源,如实例,浮点IP,云硬盘,安全组和用户。它也提供高级功能,如实例高可用,实例自动缩放,和嵌套栈。这使得OpenStack的核心项目有着庞大的用户群。html
服务使部署人员可以直接或者经过定制化插件来与编排服务集成,简单来讲就是用户能够预约义一个格式的任务模板,其中定义了一系列的相关任务,交给heat就会按必定的顺序执行heat模板中定义的任务。python
用户在horizon中或者命令行中提交包含模板和参数输入的请求,转化为REST格式的api调用,Heat-api和heat-api-cfn会验证模板的正确性,而后经过消息列队传递给heat engine来处理。
heat中的模板是openstack资源的集合,经过定义模板,能够将须要建立的资源在模板中描述,用此模板能够屡次建立须要的资源api
Heat-api:提供REST API服务,是与其余组件交换的入口,接收api请求传给heat-engine
Heat-api-cfn:提供兼容AWS CloudFormation的api,接收请求转发给heat-engine
Heat-engine:核心组件,主要实现资源调度,资源生命周期管理等做用,自身并不提供资源建立功能,只负责编排资源后交给其余组件去处理安全
heat模板默认编写语言是YAML,关于yaml语言的定义和使用https://yaml.org/start.html网络
resource ID:资源ID,在模板的resources部分中必须是惟一的
type:资源类型:例如OS::Nova::Server或OS::Neutron::Port,必选属性
properties:特定资源的属性列表,可选属性
metadata:特定资源的元数据,可选
depends_on:资源依赖模板中的一个或者多个资源上,可选属性
update_policy:删除资源的策略,可选
deletion_policy:删除资源的策略。容许的删除策略是delete,retain和snapshot,可选,默认策略是从stack中删除资源时删除物理资源
external_id:容许为现有外部(到堆栈)资源指定resource_id,可选属性
condition:资源的条件,决定是否建立资源架构
stack:资源的集合,管理一组资源的基本单位,用户操做的最小单位,经过对stack的生命周期管理,进而完成应用的部署和对资源的管理负载均衡
经常使用命令
stack list
stack create
stack show
stack delete
stack output list
stack resource list
stack event showide
基础架构资源编排:对计算、存储和网络等基础资源进行编排,支持用户自定义脚本配置虚拟机
应用资源编排:实现对虚拟机的复杂配置,例如软件安装,配置软件
高级编排:例如应用的负载均衡和自动伸缩
第三方工具集成编排:复用现有的Ansible Playbook配置工具
对于不一样的openstack资源,heat提供了不一样的资源类型。
例如虚拟机,heat提供了OS::Nova::Server,并提供参数,(key,image,flavor),参数能够在模板中指定,也能够在建立stack时提供学习
经常使用的是OS::Heat::SoftwareConfig和OS::Heat::SoftwareDeployment
HOT模板能够经过在Openstack中建立yaml文件进行编写,也能够从外部导入已经完成的HOT模板
登录controller节点,导入管理员环境变量
. admin-openrc.sh
安装python-heatclient
sudo apt install python-heatclient
而后输入如下命令,查看当前可用的镜像,规格,密钥对等信息
openstack image list openstack flavor list openstack keypair list
建立一个demo-template.yaml文件,做为HOT模板
touch demo-template.yaml vi demo-tempalte.yaml
按照以下编写,注意每一个":"后都要有空格,即时没有字符也要有空格
能够用notpad++将文件写完后,上传,避免写错
heat_template_version: 2015-10-15 parameters: NetID: type: string description: Network ID to use for the instance. resources: server: type: OS::Nova::Server properties: image: Img_cli flavor: Flavor_cli key_name: KeyPairCli networks: - network: { get_param: NetID } outputs: instance_name: description: Name of the instance. value: { get_attr: [server,name] } instance_ip: description: IP address of the instance. value: { get_attr: [server,first_address] }
其中resources.server中的image,flavor,key_name为环境中可用的镜像、规格和密钥对
查看当前网络
openstack network list
记录provider的id
执行如下命令设置环境变量的NET_ID
export NET_ID=<NETWORK_ID>
使用HOT模板 demo-template.yaml,建立堆栈Stack_demo
openstack stack create -t demo-template.yaml --parameter "NetID=$NET_ID" Stack_demo
等待几分钟后,查看堆栈的建立过程
openstack stack event list Stack_demo
查看堆栈列表,状态变为CREATE_COMPLETE表示建立成功
openstack stack list
查看堆栈的详细信息
openstack stack show Stack_demo
查看堆栈建立完成后输出的虚拟机实例名称和IP
openstack stack output show --all Stack_demo
查看虚拟机实例列表进行确认
openstack server list