金鱼哥RHCA回忆录:CL210管理计算资源--课外普及之Heat组件详解

举报
金鱼哥 发表于 2022/08/05 17:35:47 2022/08/05
【摘要】 第七章 管理计算资源--课外普及之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工具。


📑二、工作流程

在这里插入图片描述

  1. 用户在 Horizon 中或者命令行中提交包含模板和参数输入的请求

  2. Horizon 或者命令行工具会将接收到的请求转化为 REST 格式的 API 调用 Heat-api 或者是 Heat-api-cfn。

    1. Heat-api 和 Heat-api-cfn 会验证模板的正确性,然后通过 AMQP 异步传递给 Heat Engine 来处理请求。
  3. Heat Engine 接收到请求后,会把请求解析为各种类型的资源,每种资源都对应 OpenStack 其它的服务客户端,然后通过发送 REST 的请求给其它服务。

  4. 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 回忆录

如果这篇【文章】有帮助到你,希望可以给【金鱼哥】点个赞👍,创作不易,相比官方的陈述,我更喜欢用【通俗易懂】的文笔去讲解每一个知识点。

如果有对【运维技术】感兴趣,也欢迎关注❤️❤️❤️ 【金鱼哥】❤️❤️❤️,我将会给你带来巨大的【收获与惊喜】💕💕!

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。