HEAT服务

编排服务通过运行调用生成运行中云应用程序的OpenStack API为描述云应用程序提供基于模板的编排。该软件将其他OpenStack核心组件整合进一个单文件模板系统。模板允许你创建很多种类的OpenStack资源,如实例,浮点IP,云硬盘,安全组和用户。它也提供高级功能,如实例高可用,实例自动缩放,和嵌套栈。这使得OpenStack的核心项目有着庞大的用户群。

服务使部署人员能够直接或者通过定制化插件来与编排服务集成,简单来说就是用户可以预定义一个格式的任务模板,其中定义了一系列的相关任务,交给heat就会按一定的顺序执行heat模板中定义的任务。

架构

用户在horizon中或者命令行中提交包含模板和参数输入的请求,转化为REST格式的api调用,Heat-api和heat-api-cfn会验证模板的正确性,然后通过消息列队传递给heat engine来处理。 heat中的模板是openstack资源的集合,通过定义模板,可以将需要创建的资源在模板中描述,用此模板可以多次创建需要的资源

组件

Heat-api:提供REST API服务,是与其他组件交换的入口,接收api请求传给heat-engine Heat-api-cfn:提供兼容AWS CloudFormation的api,接收请求转发给heat-engine 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:资源的条件,决定是否创建资源

Heat Stack

stack:资源的集合,管理一组资源的基本单位,用户操作的最小单位,通过对stack的生命周期管理,进而完成应用的部署和对资源的管理

常用命令 stack list stack create stack show stack delete stack output list stack resource list stack event show

编排场景

基础架构资源编排:对计算、存储和网络等基础资源进行编排,支持用户自定义脚本配置虚拟机 应用资源编排:实现对虚拟机的复杂配置,例如软件安装,配置软件 高级编排:例如应用的负载均衡和自动伸缩 第三方工具集成编排:复用现有的Ansible Playbook配置

基础架构编排

对于不同的openstack资源,heat提供了不同的资源类型。 例如虚拟机,heat提供了OS::Nova::Server,并提供参数,(key,image,flavor),参数可以在模板中指定,也可以在创建stack时提供

软件配置和部署的编排

常用的是OS::Heat::SoftwareConfig和OS::Heat::SoftwareDeployment

自动伸缩的编排

负载均衡的编排

配置管理工具集成

编排管理

编写HOT模板创建简单虚拟机实例

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