CL210管理计算资源--课外普及之Heat组件详解
内容整理各大文章,由于CL210并没有对组件的解释,还是得普及一下才能更好地进行学习。🎹 个人简介:大家好,我是 金鱼哥,CSDN运维领域新星创作者,华为云·云享专家,阿里云社区·专家博主
📚个人资质:CCNA、HCNP、CSNA(网络分析师),软考初级、中级网络工程师、RHCSA、RHCE、RHCA、RHCI、ITIL😜
💬格言:努力不一定成功,但要想成功就必须努力🔥🎈支持我:可点赞👍、可收藏⭐️、可留言📝
📜一:简介
📑一、什么Heat
1. Heat 是一套业务流程平台,旨在帮助用户更轻松地配置以 OpenStack 为基础的云体系。利用Heat应用程序,开发人员能够在程序中使用模板以实现资源的自动化部署。Heat能够启动应用、创建虚拟机并自动处理整个流程。它还拥有出色的跨平台兼容性,能够与 Amazon Web Services 业务流程平台 CloudFormation (CFN)相对接——这意味着用户完全可以将 AWS 模板引入 OpenStack 环境当中。
2. Heat 是 OpenStack 提供的自动编排功能的组件,基于描述性的模板,来编排复合云应用程序。
📑二、为什么需要Heat
1. 更快更有效的管理 OpenStack 的资源:云平台系统在相对比较稳定的情况下,管理成本逐渐变成首要的解决问题。云上自动化能力是一个云平台的刚需,可以有效降低维护难度。Heat 采用了模板方式来设计或者定义编排,为方便用户使用,Heat 还提供了大量的模板例子,使用户能够方便地得到想要的编排。
2. 更小的研发成本:引入 Heat,对于不了解 OpenStack 的研发者来说,可以更快的接入现有的业务系统。开发者更关心的是授权认证和对虚拟资源的增删改,而对于底层的状态并不用太多了解。
📑三、概念
1. 堆栈(stack):管理资源的集合。单个模板中定义的实例化资源的集合,是 Heat 管理应用程序的逻辑单元,往往对应一个应用程序。
2. 模板(template):如何使用代码定义和描述堆栈。描述了所有组件资源以及组件资源之间的关系,是 Heat 的核心。
3. 资源(resource):将在编排期间创建或修改的对象。资源可以是网络、路由器、子网、实例、卷、浮动IP、安全组等。
4. 参数(parameters):heat模板中的顶级key,定义在创建或更新 stack 时可以传递哪些数据来定制模板。
5. 参数组(parameter_groups):用于指定如何对输入参数进行分组,以及提供参数的顺序。
6. 输出(outputs):heat模板中的顶级key,定义实例化后 stack 将返回的数据。
📜二:架构
📑一、核心架构
Heat 服务包含以下重要的组件:
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
heat-engine是heat中的核心模块,处理主要的逻辑业务。此模块提供heat最主要的功能,执行模板内容,最终完成应用系统的创建和部署,并把执行结果返回给API调用者。当heat engine 拿到请求后,会把请求解析为各种类型的资源,每种资源都对应OpenStack 其它的服务客户端,然后通过发送REST 的请求给其它服务。通过如此的解析和协作,最终完成请求的处理。
5. heat-cfntools
完成虚拟机实例内部的操作配置任务,需要单独下载。这个工具用来完成虚拟机实例内部的操作配置任务。在创建虚拟机镜像时,需要在镜像中安装heat-cfntools工具。
📑二、工作流程
- 用户在 Horizon 中或者命令行中提交包含模板和参数输入的请求
Horizon 或者命令行工具会将接收到的请求转化为 REST 格式的 API 调用 Heat-api 或者是 Heat-api-cfn。
- Heat-api 和 Heat-api-cfn 会验证模板的正确性,然后通过 AMQP 异步传递给 Heat Engine 来处理请求。
- Heat Engine 接收到请求后,会把请求解析为各种类型的资源,每种资源都对应 OpenStack 其它的服务客户端,然后通过发送 REST 的请求给其它服务。
- Heat Engine 在这里的作用分为三层: 第一层处理 Heat 层面的请求,就是根据模板和输入参数来创建Stack,这里的 Stack 是由各种资源组合而成。 第二层解析 Stack 里各种资源的依赖关系,Stack 和嵌套 Stack 的关系。第三层就是根据解析出来的关系,依次调用各种服务客户段来创建各种资源。
📜三、模板
📑一、 概念:Heat 模板全称为heat orchestration template,简称为HOT。
模版中有四个关键段:
- Parameters(可选):定义用户在创建stack需要输入的参数。
- Mappings (可选):定义一组静态 Key/ValuePair。用Fn::FindInMap可以查找对应的值。
- Resources (必填):定义你的应用所依赖的Resources,以及Resources之间的关系。比如你的应用依赖于哪些包,该如何配置网络,需要的CPU,Memory多少等等。
- Outputs (可选): 描述给用户的返回值。
📑二、模板详解
1. 典型 Heat 模板结构
heat_template_version: queens ### HOT版本
description: ### 说明
# a description of the template
parameter_groups: ### 指定参数顺序
- label: <human-readable label of parameter group>
description: <description of the parameter group>
parameters:
- <param name>
- <param name>
parameters: ### 传递的参数
<param name>: ### 参数名
type: <string | number | json | comma_delimited_list | boolean> ### 参数类型
label: <human-readable name of the parameter> ### 标签
description: <description of the parameter>
default: <default value for parameter>
hidden: <true | false> ### 是否隐藏
constraints: ### 已有的内置参数:OS::stack_name、OS::stack_id、OS::project_id
<parameter constraints>
immutable: <true | false>
resources: ### 资源对象
<resource ID>: ### 资源的ID
type: <resource type> ### 资源的类型
properties: ### 资源的属性
<property name>: <property value>
metadata: ### 资源的元数据
<resource specific metadata>
depends_on: <resource ID or list of ID>
update_policy: <update policy>
deletion_policy: <deletion policy>
outputs: ### 返回值
<parameter name>: ### 参数名
description: <description> ### 说明
value: <parameter value> ### 输出值
2. 例子
heat_temp_version:2022-06-06
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.small
image: F18-x86_64-cfntools
outputs:
instance_ip:
description: IP address of the deployed compute instance
value: { get_attr: [my_instance, first_address] }
📑三、模板内部函数
1. get_attr:获取所创建资源的属性
语法
get_attr:
- <resource name> ### 必须是模板 resouce 段中指定的资源。
- <attribute name> ### 要获取的属性,如果属性对应的值是list 或map, 则可以指定key/index来获取具体的值。
- <key/index 1> (optional)
- <key/index 2> (optional)
- ...
示例
resources:
my_instance:
type: OS::Nova::Server
# ...
outputs:
instance_ip:
description: IP address of the deployed compute instance
value: { get_attr: [my_instance, first_address] }
instance_private_ip:
description: Private IP address of the deployed compute instance
value: { get_attr: [my_instance, networks, private, 0] }
2. get_file:获取文件的内容
语法
get_file: <content key>
示例
resources:
my_instance:
type: OS::Nova::Server
properties:
# general properties ...
user_data:
get_file: my_instance_user_data.sh
my_other_instance:
type: OS::Nova::Server
properties:
# general properties ...
user_data:
get_file: http://example.com/my_other_instance_user_data.sh
3. get_param:引用模板中指定的参数
语法
get_param:
- <parameter name>
- <key/index 1> (optional)
- <key/index 2> (optional)
- ...
示例
parameters:
instance_type:
type: string
label: Instance Type
description: Instance type to be used.
server_data:
type: json
resources:
my_instance:
type: OS::Nova::Server
properties:
flavor: { get_param: instance_type}
metadata: { get_param: [ server_data, metadata ] }
key_name: { get_param: [ server_data, keys, 0 ] }
输出
{"instance_type": "m1.tiny",
{"server_data": {"metadata": {"foo": "bar"},"keys": ["a_key","other_key"]}}}
4. get_resource:获取模板中指定的资源
语法
get_resource: <resource ID>
示例
resources:
instance_port:
type: OS::Neutron::Port
properties: ...
instance:
type: OS::Nova::Server
properties:
...
networks:
port: { get_resource: instance_port }
5. list_join:使用指定的分隔符将一个list中的字符串合成一个字符串
语法
list_join:
- <delimiter>
- <list to join>
示例输出:one,two,three
list_join: [', ', ['one', 'two', 'and three']]
6. digest:在指定的值上使用algorithm
语法
digest:
- <algorithm> ### 可用的值是hashlib(md5, sha1, sha224, sha256, sha384, and sha512) 或openssl的相关值
- <value>
示例
# from a user supplied parameter
pwd_hash: { digest: ['sha512', { get_param: raw_password }] }
7. repeat:迭代fore_each中的列表,按照template的格式生成一个list
语法
repeat:
template:
<template>
for_each:
<var>: <list>
示例
parameters:
ports:
type: comma_delimited_list
label: ports
default: "80,443,8080"
protocols:
type: comma_delimited_list
label: protocols
default: "tcp,udp"
resources:
security_group:
type: OS::Neutron::SecurityGroup
properties:
name: web_server_security_group
rules:
repeat:
for_each:
<%port%>: { get_param: ports }
<%protocol%>: { get_param: protocols }
template:
protocol: <%protocol%>
port_range_min: <%port%>
结果
[{‘protocal’: tcp, ‘prot_range_min’:80},
{‘protocal’: tcp, ‘prot_range_min’:443},
{‘protocal’: tcp, ‘prot_range_min’:8080},
{‘protocal’:udp, ‘prot_range_min’:80},
{‘protocal’:udp, ‘prot_range_min’:443},
{‘protocal’:udp, ‘prot_range_min’:8080}]
8. resource_facade:检索资源的数据
9. str_replace:使用params中的值替换template中的占位符,从而构造一个新的字符串
语法
str_replace:
template: <template string>
params: <parameter mappings>
示例
resources:
my_instance:
type: OS::Nova::Server
# general metadata and properties ...
outputs:
Login_URL:
description: The URL to log into the deployed application
value:
str_replace:
template: http://host/MyApplication
params:
host: { get_attr: [ my_instance, first_address ] }
10. str_split:将一个字符串按照分隔符分隔成一个list
语法
str_split:
- ','
- string,to,split
示例
str_split: [',', 'string,to,split']
结果
['string', 'to', 'split']
📑四、对软件配置和部署的编排
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。
📜四:常用操作
📑一、栈、资源、模板管理
📑二、软件、快照管理
💡总结
RHCA认证需要经历5门的学习与考试,还是需要花不少时间去学习与备考的,好好加油,可以噶🤪。
以上就是【金鱼哥】对 第七章 管理计算资源--课外普及之Heat组件详解 的简述和讲解。希望能对看到此文章的小伙伴有所帮助。
💾 红帽认证专栏系列:
RHCSA专栏: 戏说 RHCSA 认证
RHCE专栏: 戏说 RHCE 认证
此文章收录在RHCA专栏: RHCA 回忆录
如果这篇【文章】有帮助到你,希望可以给【金鱼哥】点个赞👍,创作不易,相比官方的陈述,我更喜欢用【通俗易懂】的文笔去讲解每一个知识点。
如果有对【运维技术】感兴趣,也欢迎关注❤️❤️❤️ 【金鱼哥】❤️❤️❤️,我将会给你带来巨大的【收获与惊喜】💕💕!