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