资讯专栏INFORMATION COLUMN

深度解码超实用的OpenStack Heat

pkwenda / 2959人阅读

摘要:模板中的顶级,定义实例化后将返回的数据。通过如此的解析和协作,最终完成请求的处理。服务接受请求,读入模板信息,处理后利用请求发送给。首先,调用拿到对应的。

Heat 是由AWS的EC2 Cloud Formation 演化而来,是openstack中负责Orchestration的service, 用于openstack 中资源的编排,它通过将OpenStack中的资源(resource)以模版(template)的形式组织起来。例如我们可以将一组资源,比如虚拟机实例的启动、IP绑定、软件部署等写在一个template里面,heat 通过读取配置文件来完成模版规定的动作:创建虚拟机,associate floatingip,deploy application 等等。Heat 将从这个template中创建出来的一组资源称之为“资源栈”(stack)。当对这一组资源进行操作时,只需要对stack进行操作,所以heat很适合批量资源的创建和销毁,它将一系列繁琐的人工操作自动化了起来。

Orchestration 可以理解为自动化部署、配置(provisioning and deployment)。除了资源的部署之外,还有一方面是server上应用软件的安装配置。当需要部署多个节点的时候,节点之间的依赖关系,部署顺序和配置都可以交给heat来管理。

除此之外, heat 还可以和open stack的监控(telemetry)服务Ceilometer一起实现自动伸缩,所以我们可以在heat的模版中定义一个scaling group作为一个资源。

本文将对以上内容做一个简单的介绍。

什么是Heat?

Heat向开发人员和系统管理员提供了一种简便地创建和管理一批相关的OpenStack资源的方法,并通过有序且可预测的方式对其进行资源配置和更新。用户可以使用Heat的示例模板或自己创建模板来描述OpenStack资源以及应用程序运行时所需的任何相关依赖项或运行时参数。

当设置完成后,可通过按授权控制、可预测的方式修改和更新OpenStack资源。用户可以通过OpenStack管理控制台、Heat命令行工具或 API对模板及其相关的资源集进行设置和更新。

为什么需要heat

?更快更有效的管理OpenStack的资源

云平台系统在相对比较稳定的情况下,管理成本逐渐变成首要的解决问题。云上自动化能力是一个云平台的刚需,可以有效降低维护难度。

OpenStack原生提供命令行和Horizon 来供用户管理资源。然而命令行和在浏览器中的点击,费时费力,不利于用户使用Openstack 来进行大批量的管理以支撑IT 应用。如下图所示,openstack中有众多的资源,对应了很多繁琐的操作。

Heat 在这种情况下应运而生. 如下图所示,我们可以将一些零散的资源操作都定义在heat的模版中,通过一个创建stack的操作,就能创建出我们要的资源。Heat 采用模板方式来设计或者定义编排。为方便用户使用,Heat 还提供了大量的模板例子,使用户能够方便地得到想要的编排。

更小的研发成本

引入Heat,对于不了解OpenStack的研发者来说,可以更快的接入现有的业务系统。开发者更关心的是授权认证和对虚拟资源的增删改,而对于底层的状态并不用太多了解。

术语

1. stack

Stack概念来源于AWS,是OpenStack中用来管理一组资源的基本单位。一个stack往往对应一个应用程序。Stack管理的是resource,而resource是个抽象的概念,它可以是虚拟机,可以是网络等。

Stack就是在单个模板中定义的实例化资源的集合,是Heat管理应用程序的逻辑单元。

2. template

heat的template描述了所用的所有组件资源以及组件资源之间的关系。heat模版是heat的核心。

2.1 resource

资源是底层服务的抽象,CPU、memory、disk、网络等都可以看作是资源。一个stack可以拥有很多资源。资源和资源之间会存在依赖关系。Heat在创建栈的时候会自动解析依赖关系,按顺序创建资源。在heat的template中,resources用于模板中资源的声明,在HOT模板中,应该至少有一个资源的定义,否则在实例化模板时将不会做任何事情。

2.2 parameters

heat模板中的参数,定义在创建或更新stack时可以传递哪些参数来定制模板。

2.3 parameter_groups

用于指定如何对输入参数进行分组,以及提供参数的顺序。

?2.4 outputs

heat模板中的顶级key,定义实例化后stack将返回的数据。

模版中包括七个部分:heat_template_version、description、parameter_groups、parameters、resources、outputs、conditions。除了heat_template_version和resources,其它都是可选部分。

Heat架构

Heat 是openstack 中上层的一个服务,如下图所示:

它位于其它基础组件的上层,可以将其它组件的资源以模版的形式组织起来, 如下图:

Heat 由以下组件组成:

- Heat-api:实现openstack天然支持的REST API。该组件通过把API请求经由AMQP传送给Heat engine 来处理API请求。

- Heat-api-cfn:提供兼容AWSCloudFormation的API,同时也会把API请求通过AMQP转发给Heat engine。

- Heat-engine: heat-engine是heat中的核心模块,处理主要的逻辑业务。此模块提供heat最主要的功能,执行模板内容,最终完成应用系统的创建和部署,并把执行结果返回给API调用者。当heat engine 拿到请求后,会把请求解析为各种类型的资源,每种资源都对应OpenStack 其它的服务客户端,然后通过发送REST 的请求给其它服务。通过如此的解析和协作,最终完成请求的处理。

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

- heat-cfntools:独立于heat组件的一个的工具,需要多带带下载。这个工具用来完成虚拟机实例内部的操作配置任务。在创建虚拟机镜像时,需要在镜像中安装heat-cfntools工具。

Heat 中各个组件调用逻辑如下图所示:

Heat client 接受输入命令,参数和模板,处理信息后转为REST API,请求发送到heat-api服务。Heat API服务接受请求,读入模板信息,处理后利用rpc请求发送给heat-engine。heat-engine解析template数据,调用各种资源插件,然后各种资源插件通过openstack的clients发送指令给OpenStack服务。

Heat使用

5.1 对基础架构的编排

对于不同的资源,Heat 都提供了对应的资源类型。比如对于VM,Heat 提供了OS::Nova::Server。OS::Nova::Server 有一些参数,比如key、image、flavor 等,这些参数可以直接指定,可以由客户在创建Stack 时提供,也可以由上下文其它的参数获得。创建一个VM的部分模板如下:

resources:

server:

type: OS::Nova::Server

properties:

key_name: { get_param: key_name }

image: { get_param: image }

flavor: { get_param: flavor }

user_data: |

#!/bin/bash

echo “10.10.10.10 testvm”>> /etc/hosts

在上面创建VM 的例子中,我们选择从输入参数获得OS::Nova::Server 所需的值。其中利用user_data 做了一些简单的配置。

5.2 对软件配置和部署的编排

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 对应的配置

其中最常用的是OS::Heat::SoftwareConfig 和OS::Heat::SoftwareDeployment。

OS::Heat::SoftwareConfig

下面是OS::Heat::SoftwareConfig 的用法,它指定了配置细节。

resources:

install_db_sofwareconfig

type: OS::Heat::SoftwareConfig

properties:

group: script

outputs:

- name: result

config: |

#!/bin/bash -v

yum -y install mariadb mariadb-server httpd wordpress

touch /var/log/mariadb/mariadb.log

chown mysql.mysql /var/log/mariadb/mariadb.log

systemctl start mariadb.service

OS::Heat::SoftwareDeployment

下面是OS::Heat::SoftwareDeployment 的用法,它指定了在哪台服务器上做哪项配置。另外SofwareDeployment 也指定了以何种信号传输类型来和Heat 进行通信。

sw_deployment:

type: OS::Heat::SoftwareDeployment

properties:

config: { get_resource: install_db_sofwareconfig }

server: { get_resource: server }

signal_transport: HEAT_SIGNAL

OS::Heat::SoftwareConfig 和OS::Heat::SoftwareDeployment 执行流程

OS::Heat::SoftwareConfig和OS::Heat::SoftwareDeployment协同工作,需要一系列Heat工具的自持。这些工具都是OpenStack的子项目。

首先,os-collect-config调用Heat API拿到对应VM的metadata。当metadata更新完毕后os-refresh-config开始工作了,它主要是运行下面目录所包含的脚本:

/opt/stack/os-config-refresh/pre-configure.d

/opt/stack/os-config-refresh/configure.d

/opt/stack/os-config-refresh/post-configure.d

/opt/stack/os-config-refresh/migration.d

/opt/stack/os-config-refresh/error.d

每个文件夹都应对了软件不同的阶段,比如预先配置阶段、配置阶段、后配置阶段和迁移阶段。如果任一阶段的脚本执行出现问题,它会运行error.d目录里的错误处理脚本。os-refresh-config 在配置阶段会调用一定预先定义的工具,比如heat-config,这样就触发了heat-config的应用,调用完heat-config后,又会调用os-apply-config。存在在heat-config或者os-apply-config里的都是一些脚本,也叫钩子。Heat对于各种不同的工具提供了不同的钩子脚本。用户也可以自己定义这样的脚本。

等一切调用完成无误后,heat-config-notify 会被调用,它用来发信号给Heat,告诉这个软件部署的工作已经完成。当Heat 收到heat-config-notify 发来的信号后,它会把OS::Heat::SoftwareConfig 对应资源的状态改为Complete。如果有任何错误发生,就会改为CREATE_FAILED 状态。

OS::Heat::SoftwareConfig 和OS::Heat::SoftwareDeployment 执行流程如下:

Heat  AutoScalling

基础架构的自动伸缩是一个很高级的功能。Heat提供自动伸缩组OS::Heat::AutoScalingGroup 和伸缩策略OS::Heat::ScalingPolicy,结合基于Ceilometer 的OS::Ceilometer::Alarm 实现了可以根据各种条件,比如负载,进行资源自动伸缩的功能。

Heat 自动伸缩的流程图如下:

定义自动伸缩组如下:

auto_scale_group:

type: OS::Heat::AutoScalingGroup

properties:

min_size: 1

max_size: 4

定义伸缩规则如下:

server_scaleup_policy:

type: OS::Heat::ScalingPolicy

properties:

adjustment_type: change_in_capacity

auto_scaling_group_id: {get_resource: auto_scale_group}

cooldown: 60

scaling_adjustment: 1

定义警报如下:

cpu_alarm_high:

type: OS::Ceilometer::Alarm

properties:

description: Scale-up if the average CPU > 50% for 1 minute

meter_name: cpu_util

statistic: avg

period: 60

evaluation_periods: 1

threshold: 50

alarm_actions:

- {get_attr: [server_scaleup_policy,alarm_url]}

matching_metadata: {'metadata.user_metadata.stack': {get_param: "OS::stack_id"}}

comparison_operator: gt

互动区

* 你对以上内容有什么看法?你最关注云计算哪个趋势?如果你还有想了解的技术话题,欢迎留言分享。

启迪云-高级网络工程师 邸小丽

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/5877.html

相关文章

  • 【干货】云计算新名词解析

    摘要:慢慢硬件和就绑在一起了,的,的,的微软是个例外,可在不同的服务器上跑。虚拟软件的老大自打推出它的之后,很快又推出了它的管理平台另一大佬微软比胃口还大,从操作系统到虚拟软件,当然忘不了它的管理平台。自此,成了容器的代名词。  云世界里的技术日新月异,新名词一个接着一个让人应接不暇,从虚拟化开始,VMware、HyperV、KVM,到云管理平台VSphere、SystemCenter、OpenS...

    BicycleWarrior 评论0 收藏0
  • 深度学习几何观点(1) - 流形分布定律

    摘要:老顾受邀在一些大学和科研机构做了题为深度学习的几何观点的报告,汇报了这方面的进展情况。深度学习的主要目的和功能之一就是从数据中学习隐藏的流形结构和流形上的概率分布。 (最近,哈佛大学丘成桐先生领导的团队,大连理工大学罗钟铉教授、雷娜教授领导的团队应用几何方法研究深度学习。老顾受邀在一些大学和科研机构做了题为深度学习的几何观点的报告,汇报了这方面的进展情况。这里是报告的简要记录,具体内容见【1...

    XUI 评论0 收藏0
  • 深度学习几何理解(2) - 学习能力上限

    摘要:老顾受邀在一些大学和科研机构做了题为深度学习的几何观点的报告,汇报了这方面的进展情况。特别是深度学习网络的学习能力取决于网络的超参数,如何设计超参数,目前主要依赖于经验。 (最近,哈佛大学丘成桐先生领导的团队,大连理工大学罗钟铉教授、雷娜教授领导的团队应用几何方法研究深度学习。老顾受邀在一些大学和科研机构做了题为深度学习的几何观点的报告,汇报了这方面的进展情况。这里是报告的简要记录,具体内容...

    ShevaKuilin 评论0 收藏0
  • 入门丨视频编码简述

    摘要:灵活的块划分对编码性能提升最大,块划分包括编码单元预测单元和变换单元。视频解码的意义视频转码技术是一种解决视频发送端与接收端兼容性问题的技术,它能实现不同的视频标准视频分辨率视频帧率和视频码率等之间的相互转换。 作者:图鸭科技 微信公众号:tucodec 当大家看电影追剧时,是看的高清还是标清? 图鸭君觉得只要网速够得上的小伙伴应该没有人愿意再看标清了吧!毕竟高清视频的高分辨率和...

    xiongzenghui 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<