【Centos7系列】Openstack-heat编排

Iceboundnana 发布于 2023-08-08 1.25k 次阅读


简介

  1. Heat是一套业务流程平台,旨在帮助用户更轻松地配置以 OpenStack 为基础的云体系。利用Heat应用程序,开发人员能够在程序中使用模板以实现资源的自动化部署。Heat能够启动应用、创建虚拟机并自动处理整个流程。它还拥有出色的跨平台兼容性,能够与 AWS 业务流程平台 CloudFormation 相对接——这意味着用户完全可以将 AWS 模板引入 OpenStack 环境当中
  2. Heat 是 OpenStack 提供的自动编排功能的组件,基于描述性的模板,来编排复合云应用程序

作用

  1. 更快更有效的管理 OpenStack 的资源
  2. 降低维护难度
  3. 方便使用
  4. 更小的研发成本
    引入 Heat,对于不了解 OpenStack 的研发者来说,可以更快的接入现有的业务系统。开发者更关心的是授权认证和对虚拟资源的增删改,而对于底层的状态并不用太多了解

概念

1、堆栈(stack)
管理资源的集合。单个模板中定义的实例化资源的集合,是 Heat 管理应用程序的逻辑单元,往往对应一个应用程序

2、模板(template)
描述了所有组件资源以及组件资源之间的关系,是 Heat 的核心

3、资源(resource)
将在编排期间创建或修改的对象。资源可以是网络、路由器、子网、实例、卷、浮动IP、安全组等

4、参数(parameters)
heat模板中的顶级key,定义在创建或更新 stack 时可以传递哪些数据来定制模板

5、参数组(parameter_groups)
用于指定如何对输入参数进行分组,以及提供参数的顺序

6、输出(outputs)
heat模板中的顶级key,定义实例化后 stack 将返回的数据

架构


​​​​1、heat command-line client​​​​

CLI通过与 heat-api 通信,来调用 API 实现相关功能。终端开发者可以直接使用编排 REST API

​​​​2、heat-api​​​​

实现 OpenStack 原生支持的 REST API。该组件通过把 API 请求经由 AMQP 传送给 Heat engine 来处理 API 请求

​​​​3、heat-api-cfn​​​​

提供与 AWS CloudFormation 兼容的、AWS 风格的查询 API,处理请求并通过 AMQP 将它们发送到 heat-engine

​​​​4、heat-engine​​​​

执行模板内容,最终完成应用系统的创建和部署,并把执行结果返回给 API 调用者

​​​​5、heat-cfntools​​​​

完成虚拟机实例内部的操作配置任务,需单独下载


工作流程

  1. 用户在 Horizon 中或者命令行中提交包含模板和参数输入的请求
  2. Horizon 或者命令行工具会将接收到的请求转化为 REST 格式的 API 调用 Heat-api 或者是 Heat-api-cfn
  3. Heat-api 和 Heat-api-cfn 会验证模板的正确性,然后通过 AMQP 异步传递给 Heat Engine 来处理请求
  4. Heat Engine 接收到请求后,会把请求解析为各种类型的资源,每种资源都对应 OpenStack 其它的服务客户端,然后通过发送 REST 的请求给其它服务
  5. Heat Engine 在这里的作用分为三层
  • 第一层处理 Heat 层面的请求,就是根据模板和输入参数来创建 Stack,这里的 Stack 是由各种资源组合而成
  • 第二层解析 Stack 里各种资源的依赖关系,Stack 和嵌套 Stack 的关系
  • 第三层就是根据解析出来的关系,依次调用各种服务客户段来创建各种资源

模板

Heat 模板全称为heat orchestration template,简称为HOT

典型模板结构


示例

[root@controller ~]# cat ceilometer_alarm.yaml
heat_template_version: 2016-04-08
description: AWS::CloudWatch::Alarm using Ceilometer.
parameters:
user_name:
type: string
label: User Name
description: User name to be configured for the application
port_number:
type: number
label: Port Number
description: Port number to be configured for the web server
resources:
my_instance:
type: OS::Nova::Server
properties:
flavor: m1.flavor
image: centos
outputs:
instance_ip:
description: IP address of the deployed compute instance
value: { get_attr: [my_instance, first_address] }
[root@controller ~]# openstack stack create --parameter user_name=root --parameter port_number=80 -t ceilometer_alarm.yaml alarm
+---------------------+------------------------------------------+
| Field               | Value                                    |
+---------------------+------------------------------------------+
| id                  | 406a45bf-1afd-497e-ad14-01782a439707     |
| stack_name          | alarm                                    |
| description         | AWS::CloudWatch::Alarm using Ceilometer. |
| creation_time       | 2021-05-19T06:06:12Z                     |
| updated_time        | None                                     | 
| stack_status        | CREATE_IN_PROGRESS                       |
| stack_status_reason | Stack CREATE started                     |
+---------------------+------------------------------------------+

常用管理操作

栈、资源、模板

软件、快照

Editing template

创建云主机

heat_template_version: 2014-10-16

resources:
  server:
    type: OS::Nova::Server # 资源类型
    properties:
      flavor: m1.m1 # 实例类型
      image: centos # 镜像
      name: test # 实例名称
      networks:
        - network: entnet # 指定网络

创建容器

heat_template_version: 2014-10-16

resources:
  swift_container:
    type: OS::Swift::Container # 资源类型
    properties:
      name: container # 容器名称

创建实例类型

heat_template_version: 2014-10-16

resources:
  nova_flavor:
    type: OS::Nova::Flavor # 资源类型
    properties: # 属性
      disk: 20 # 磁盘大小(GB)
      flavorid: 1234 # ID
      is_public: true # 是否共享
      name: m1.flavor # 实例类型名称
      ram: 1024 # 内存大小(MB)
      vcpus: 1 # vcpu数量

创建 volume

heat_template_version: 2014-10-16
resources:
my_new_volume:
type: OS::Cinder::Volume
properties:
size: 10

创建Net

1、创建名为Heat-Network网络,选择不共享
2、创建子网名为Heat-Subnet,子网网段设置为10.20.2.0/24
3、开启DHCP服务,地址池为10.20.2.20-10.20.2.100

heat_template_version: 2014-10-16
resources:
network_1:
type: OS::Neutron::Net
properties:
admin_state_up: true
name: Heat-Network
shared: false
subnet_1:
type: OS::Neutron::Subnet
properties:
allocation_pools:
- end: 10.20.2.100
start: 10.20.2.10
cidr: 10.20.2.0/24
enable_dhcp: true
host_routes: []
name: Heat-Subnet
network_id:
get_resource: network_1

此作者没有提供个人介绍。
最后更新于 2023-08-08