金鱼哥RHCA回忆录:CL210云应用程序自动化(理论)
🎹 个人简介:大家好,我是 金鱼哥,CSDN运维领域新星创作者,华为云·云享专家,阿里云社区·专家博主
📚个人资质:CCNA、HCNP、CSNA(网络分析师),软考初级、中级网络工程师、RHCSA、RHCE、RHCA、RHCI、ITIL😜
💬格言:努力不一定成功,但要想成功就必须努力🔥🎈支持我:可点赞👍、可收藏⭐️、可留言📝
📜创建应用程序栈
📑Heat编排及服务
在管理OpenStack基础设施时,使用脚本可能会使创建和管理所有基础设施资源变得困难。即使是基础结构中的版本控制和变更跟踪也具有挑战性。跨多个开发和测试环境复制生产环境变得更加困难。
编排服务(heat)为开发人员和系统管理员提供了创建和管理相关OpenStack服务集合的简单和可重复的方法。编排服务以有序和可预测的方式部署OpenStack资源。用户创建一个编排模板来描述执行应用程序所需的OpenStack资源和运行时参数。编排服务处理这些OpenStack资源的部署顺序并解决任何依赖关系。在使用编排服务配置基础设施时,编排模板描述要配置的资源及其设置。因为模板是文本文件,所以您可以使用版本控制系统来控制模板版本,以跟踪基础结构的更改。
📑理解编排服务体系结构
编排堆栈是通过同一个接口部署和管理的多个基础设施资源的集合,可以使用Horizon仪表板或命令行界面。堆栈通过提供统一的人类可读格式来标准化和加速交付。该业务流程最初是AWS CloudFormation的一个模拟版本,这使得它与CloudFormation (CFN)使用的模板格式兼容,但它也支持自己的本地模板格式。编排服务执行用YAML编写的Heat编排模板(Heat orchestration Template, HOT)。YAML格式是一种人类可读的数据序列化语言。
模板和输入参数一起调用编排REST API,使用仪表板或OpenStack CLI命令部署堆栈。编排API服务通过AMQP使用远程过程调用(RPC)将请求转发给编排引擎服务。可选地,编排CFN服务通过RPC将AWS CloudFormation-compatible请求发送到编排引擎服务。业务流程引擎服务解释业务流程模板并启动堆栈。编排引擎服务生成的事件被编排APl服务使用,以提供启动的编排堆栈的状态。
Heat编排服务
在Red Hat OpenStack平台中,编排服务是由heat提供的。业务流程模板指定要部署的资源之间的关系。模板中指定的关系使编排引擎能够调用不同的OpenStack APls,以正确的顺序部署资源。业务流程模板使用资源类型创建各种资源,如实例、卷、安全组和其他资源。接下来,使用嵌套堆栈创建更复杂的资源。编排模板主要部署各种基础设施组件。不同的软件配置管理工具,如Ansible, Puppet等。可以与编制模板集成,以部署软件并对该软件进行配置更改。
📑编排用例和推荐的实践
可以重复使用业务流程模板创建相同业务流程堆栈的相同副本。可以将用YAML格式编写的模板放在源代码控制系统下,以维护基础设施部署的各种版本。编排使组织和部署OpenStack资源集合变得容易。业务流程模板允许您描述任何依赖关系或在运行时传递特定参数。在编排模板中,参数用于在运行时创建堆栈时定制模板的各个方面。以下推荐的实践可以帮助您计划和组织编排堆栈的部署。
-
使用构建在彼此之上的多层堆栈是组织编排堆栈的最佳方法。当扩展堆栈时,将所有资源放在一个堆栈中管理起来会很麻烦,并且会扩大要供应的资源的范围。
-
在使用嵌套堆栈时,可以将资源名或ID硬编码到调用堆栈中。然而,硬编码资源名称或ID会使模板难以重用,并可能增加部署堆栈的开销。
-
在更新堆栈之后,应该首先通过执行堆栈部署的演练来验证基础设施中的更改。
-
在启动堆栈之前,确保编排堆栈部署的所有资源都在项目配额限制之内。
-
随着基础设施的增长,在每个模板中声明资源变得重复,这样的共享资源应该作为单独的堆栈维护,并在嵌套堆栈中使用。嵌套堆栈是创建其他堆栈的堆栈。
-
在业务流程模板中声明参数时,使用约束来定义输入参数的格式。约束允许您描述有效的输入值,以便编排引擎在创建堆栈之前捕获任何无效值。
-
在使用模板创建或更新堆栈之前,可以使用OpenStack CLI对其进行验证。验证模板有助于捕获语法和一些语义错误,例如在编排堆栈创建任何资源之前的循环依赖关系。
📑配置编排域用户
编排堆栈域用户允许业务流程服务在启动的实例中授权和执行操作。编排服务APls提供执行这些操作所需的元数据。下面的操作在一个实例中执行:
-
编排服务为在实例中运行的代理提供元数据。这些代理轮询更改,并将编排API在元数据中提供的配置应用到实例。
-
当事件成功完成或处于失败状态时,将向编排引擎传递一个信号。例如,当使用cloud-init在实例上应用软件配置时,将向编排服务传递一个指示完成状态的信号。
-
当应用程序从实例内部向编排引擎提供应用程序级别状态或计量表时。例如,为了响应性能或服务质量的某些度量,允许执行自动缩放操作。
默认的overcloud部署包含一个heat_stack域和一个heat_stack_domain_admin作为堆栈域用户。heat_stack_domain_admin用户负责管理堆栈域用户,管理范围仅限于heat_stack域。
堆栈时部署,要求创建堆栈域用户在启动的实例执行任务编排服务创建一个新的项目在heat_stack域中的域项目与编排堆栈和堆栈是分开他人的项目。对于编排堆栈中任何需要用户的资源,编排服务将在堆栈域中的项目中创建用户。创建的用户被分配为heat_stack_user角色。
📑配置文件和日志
在容器化架构中,配置文件存储在/var/lib/config-data/puppet-generated/heat/etc/heat中。编排服务使用heat.conf文件配置。一些最常见的配置选项可以在下表中找到:
参数 | 描述 |
---|---|
encrypt_parameters_and_properties | 对资源的参数和属性进行加密。在存储到数据库之前标记为隐藏。此参数接受布尔值。 |
stack_user_domain_name | 包含编排服务定义的用户的标识域名。该参数接受一个字符串值。默认值是heat_stack域。 |
stack_domain_admin | 负责管理堆栈域中的用户和项目的标识用户名。这个参数需要一个字符串值。默认值是heat_stack_domain_admin用户。 |
heat_stack_user_role | 与在堆栈域中创建的用户相关联的标识用户角色名。该参数接受一个字符串值。默认值是heat_stack_user角色。 |
num_engine_workers | 在主机上分叉并运行的heat_engine进程的数量。该参数接受一个整数值。默认值是运行heat_engine服务的主机上的cpu数量,或者4,或者更大。 |
stack_action_timeout | 默认超时周期(以秒为单位),用于超时创建和更新堆栈。默认值是3600秒(1小时)。 |
编排服务(heat-api,heat-engine,heat-api-cfn)的日志文件存储在heat-api所在主机的/var/log/containers/heat目录中。。
编排服务的日志文件
📜编写Heat编排模板
📑改造vi中tab键功能
为了能更加轻松的编辑playbook,可设置在vi编辑yaml文件时,按下tab键会进行一个双空格缩进。
在 $HOME/.vimrc 添加以下内容
autocmd FileType yaml setlocal ai ts=2 sw=2 et
参数解释:
set ai # 自动缩进
set ts=2 # tabstop,表示按一个tab之后,显示出来的相当于几个空格,默认的是8个。
set sw=2 #shiftwidth,表示每一级缩进的长度
set et # expandtab,将tab转成空格,缩进用空格来表示
📑编排模板(HEAT)语言
Heat编排模板(Heat Orchestration Template, HOT)是编排服务支持的语言。模板使用YAML语法来描述各种资源和属性。
每个业务流程模板必须包含一个正确的业务流程模板版本的heat_template_version键。编排模板版本定义了编排服务所支持的模板格式和有效且受编排服务支持的特性。openstack orchestration template version list 命令列出了所有受支持的模板版本。命令输出的别名列中列出的名称也可以用于指定模板版本
模板中的description键是可选的,但是可以包含描述模板用途的文本。通过使用YAML中的折叠块(>),可以向description键添加多行文本。折叠块将每个换行符替换为一个空格,忽略缩进。
使用输入参数自定义模板
在部署编排堆栈期间,可以使用输入参数自定义模板。输入参数在编排模板的参数部分定义。每个参数都被定义为一个单独的嵌套块,带有必需的属性,比如type或default。
在编排模板中,参数部分使用以下语法和属性为模板定义输入参数。
下表显示了用于定义输入参数的支持属性列表:
输入参数支持的属性表
属性 | 描述 |
---|---|
type | 参数的数据类型。支持的数据类型是字符串、数字、JSON、逗号分隔的列表和布尔值。 |
label | 可读的参数名称。此属性是可选的。 |
description | 参数的简短描述。此属性是可选的。 |
default | 如果没有为参数输入值,则使用的默认值。此属性是可选的。 |
hidden | 确定参数的值是否隐藏在有关编排模板创建的堆栈的列表信息中。此属性是可选的,默认值为false。 |
constraints | 用于验证参数输入值的约束。constraints属性可以应用于不同约束的列表。此属性是可选的。 |
immutable | 定义参数是否可以更新。如果参数值被更改且属性值被设置为true,则堆栈将无法更新。 |
custom_constraints属性添加了一个额外的验证步骤来验证资源是否存在。使用编排插入实现自定义约束。custom_constraints属性使用与编排插件关联的名称。例如,使用以下语法来确保块存储(cinder)卷的存在:
在堆栈部署期间定义资源
编排模板中的资源部分定义了在部署堆栈期间提供的资源。每个资源都被定义为带有其必需属性的独立嵌套块。比如类型和属性。properties属性定义了提供资源所需的属性。
模板中的资源部分使用以下语法和属性为堆栈定义资源。
下表显示了用于定义资源的属性列表:
资源支持的属性表
属性 | 描述 |
---|---|
resource ID | 用户定义的资源名。必须在模板的参考资料部分唯一地引用它。 |
type | 此属性使用资源类型名称。核心OpenStack资源作为内置资源包含在编排引擎服务中。编排服务使用自定义资源提供对资源插件的支持。此属性是强制性的,必须在声明资源时指定。 |
properties | 此属性用于指定与资源类型关联的属性列表。属性值要么是硬编解码器,要么使用内部函数来检索值。此属性是可选的。 |
资源类型
资源需要类型属性。例如实例和各种依赖于资源类型的属性。使用openstack orchestration resource type list命令列出可用的资源类型。
OS:Heat::ResourceGroup资源类型创建一个或多个相同的资源。资源定义作为嵌套堆栈传递。ResourceGroup资源类型所需的属性是resource_def, resource_def属性的值是要供应的资源的定义。count属性设置要提供的资源数量。。使用以下语法创建OS::Nova::Server资源类型的两个资源。
index_var属性设置一个值,资源组中的资源使用该值替换为组中给定资源的当前索引,以自定义分组实例的name属性,以便在列出时区分它们。该属性的默认值为%index%,它提供了资源组中给定资源的当前索引。
在本例中,定义了一个资源组来启动四个实例。使用list_join函数和%index%值对这些实例进行如下命名:
固有函数
HOT提供了几个内置函数,用于执行模板中的特定任务。编排模板中的内部函数将值分配给在创建堆栈期间可用的属性。下面列出了一些广泛使用的固有函数。
get_attr
get_attr函数引用资源的属性。此函数接受资源名和属性名作为参数,以检索资源的属性值。这个示例展示了get_attr函数如何检索与实例资源关联的第一个IP地址,该实例资源被设置为堆栈的输出值。
get_param
get_param函数引用模板的一个输入参数并返回该输入参数的值。此函数接受参数名作为参数,以检索模板中声明的输入参数的值。这个示例展示了如何get_param函数检索instance_flavor输入参数的值,该参数被设置为flavor属性的值。
get_resource
get_resource函数引用模板中的一个资源。该函数将资源名作为参数来检索所引用资源的资源ID。这个示例展示了get_resource函数如何检索被设置为port属性值的端口资源的资源ID。
str_replace
str_replace函数将输入字符串中的变量替换为您指定的值。输入字符串和变量一起被传递给函数的template属性。变量的值使用params属性作为键值对实例化。这个示例展示了str_replace函数如何用实例资源的第一个IP地址替换模板中的varname变量。
list_join
list_join函数将一组字符串附加到单个值中,由指定的分隔符分隔。如果分隔符是空字符串,它将连接所有字符串。这个示例展示了列表连接函数如何将实例名与用于设置instance_name属性值的随机值连接起来。
📑在模板中创建等待条件
可以使用等待条件和等待条件句柄暂停堆栈的创建,并在继续部署堆栈之前等待信号。例如,在考虑创建实例完成之前,您可能需要下载并配置一个实例上的应用程序。下面的列表提供了一个带有等待条件句柄的等待条件如何工作的摘要:
-
当编排模板创建等待条件并将等待条件句柄引用到资源时,它将等待条件的状态报告为CREATE_IN_ PROGRESS。堆栈部署一直等待,直到它收到所需数量的成功信号,或者等待条件的超时时间已过。成功信号的必要数量是由OS::Heat::WaitCondition资源类型的count属性定义的。超时是由os::Heat:: Waitcondition资源类型的超时属性定义的。
-
如果编排服务在超时期限到期前收到所需数量的成功信号,则继续创建堆栈:否则,它将等待条件的状态设置为创建FAILED。
-
如果等待条件在超时期限到期前收到所需数量的成功信号,则编排服务将该等待条件标记为CREATE_COMPLETE,并继续创建堆栈。
要在编排模板中使用等待条件,请声明以下资源:
- 在堆栈模板中声明OS::Heat::WaitconditionHandle资源类型的资源。等待条件句柄资源没有属性。但是,对等待条件句柄资源的引用解析为预签名URL,资源可以使用该URL向等待条件发出成功或失败的信号。下面的例子在模板中声明了一个名为demo_wait_handle的等待条件句柄资源:
解析为等待条件句柄的预签名URL包含使用对等待条件句柄资源访问受限的用户帐户的凭据生成的令牌。此用户是在创建等待条件句柄时创建的,并与属于堆栈的项目关联在专门用于编排服务的标识域中。
- 在堆栈模板中声明一个OS::Heat::Waitcondition资源类型。等待条件资源有两个必需的属性:handle,它是对模板中声明的等待条件句柄的引用;和timeout,这是编排服务在恢复创建堆栈之前等待的秒数。您可以选择设置count属性,该属性确定在编排服务恢复创建堆栈之前,等待条件必须接收到的成功信号的数量。下面的示例声明了一个名为demo_wait_condition的等待条件资源。该资源使用demo_wait_handle作为等待条件句柄,超时时间为600秒,默认计数为2。
- 引用定义的等待条件句柄资源来接收信号,以标记资源的创建为CREATE_COMPLETE或CREATE _FAILED。下面的模板示例使用curl_cli属性进行通知。在下面的示例中,在接收到两个成功信号后,demo_server资源被标记为CREATE_COMPLETE:
📑软件配置使用Heat编排模板
编排模板提供了多种选项,以在编排堆栈提供的实例上配置软件。软件配置应用于实例上安装的软件的频率变化是如何实现软件配置的决定因素。广泛地说,使用编配模板实现软件配置变化有三种选择:
-
使用自定义镜像,其中包括已安装的和已确认的软件。当在实例的生命周期中不需要更改软件配置时,可以使用此方法。
-
使用user-data脚本和cloud-init来确认镜像中预装的软件。当在实例的生命周期(启动时)需要更改一次软件配置时,可以使用此方法。当使用此选项进行软件配置更改时,必须将实例替换为新实例。
-
使用OS::Heat::SoftwareDeployment资源类型。这允许在实例的整个生命周期中对其应用任意数量的软件配置更改。
在Heat编排模板中指定user-data脚本
在配置实例时,可以指定一个user-data脚本来配置安装在实例上的软件。可以将软件安装到镜像中,或者使用use-rdata脚本安装。在HOT语言中,用户数据是使用OS::Nova::Server资源类型的user-data属性提供的。使用user-data属性提供的数据可以是shell脚本或cloud-init脚本。str_replace_intrinsic函数用于根据堆栈中的参数或资源设置变量值。user_data_format属性定义实例处理用户数据的方式。使用RAW作为user_data_format属性的值,用户数据将未经修改地传递给实例。
在下面的示例中,使用str_replace函数为资源定义用户数据。启动实例并执行用户数据脚本以创建名为/tmp/demofile的文件。$demo变量被设置为使用demofile作为文件名称。
当使用openstack stack update命令更改用户数据和更新编排堆栈时,将删除实例并使用更新后的user-data脚本重新创建实例。
要使用user-data属性提供复杂的脚本,请使用get_file内部函数。get_file函数将文件的名称作为其参数。
在下面的示例中,get_file函数将脚本文件的名称作为参数,以user-data脚本的形式执行。
描述软件部署资源类型
使用OS::Heat::SoftwareDeployment资源类型来启动软件配置变化,而不需要用新的实例替换实例。示例用例是不能用新实例替换实例,但在实例的生命周期中需要对软件配置进行更改的情况。该OS:: Heat::SoftwareDeployment资源类型允许您在一个实例的生命周期中多次添加或删除软件配置。使用编排堆栈执行软件配置更改需要三种资源类型
- 该OS::Heat:: SoftwareConfig资源类型使集成与各种软件配置工具,如Ansible, shell脚本,或Puppet。资源类型创建不可变的软件配置,以便对软件配置的任何更改都将用新的配置替换旧的配置。该OS:: Heat::Softwareconfig资源类型的属性有config、group、inputs和outputs。组属性定义要使用的软件配置工具的名称,例如脚本、可配置工具或伪配置工具。config属性设置配置脚本或清单,这些脚本或清单指定在实例上执行的实际软件配置。inputs和outputs属性表示软件配置的输入和输出选项。
在下面的示例中,软件配置资源的group属性设置为script。输入参数被设置为使用为其定义的filename和content项input属性。使用为outputs属性定义的result项返回输出。config属性将配置脚本设置为使用demo-script.sh
- 该OS::Heat::SoftwareDeployment资源类型应用使用OS::Heat::SoftwareConfig资源类型定义的软件配置。SoftwareDeployment资源类型允许您使用Softwareconfig资源类型的inputs属性根据已定义的输入变量输入值。当状态更改为IN_PROGRESS时,实例可以使用已被变量值替换的软件配置。当从业务流程APl接收到成功信号时,状态更改为创建完成。
对于OS::Heat::SoftwareDeployment资源类型,所需的属性是server属性。server属性是对应用配置更改的资源的ID的引用。其他可选属性包括action、config和input_value。action属性定义何时需要基于编排堆栈状态启动软件配置。action属性支持CREATE、UPDATE、SUSPENT和RESUME操作。当对实例应用更改时,config属性引用软件配置资源的资源ID来执行。input_values属性将值映射到软件配置资源中定义的输入变量。
在下面使用input_values属性的示例中,输入参数被传递给软件配置资源the_config。在创建或更新堆栈时调用软件部署,以创建或更新the_server资源。
OS::Nova::Server资源类型定义应用软件配置更改的实例。属性的user_data_format属性OS::Nova::Server资源类型必须使用SOFTWARE_CONFIG值来支持使用OS::Heat::SoftwareDeployment资源类型的软件配置变化。
OS::Heat::SoftwareDeployment资源类型要求编排代理通过轮询编排API来收集和处理配置更改。你必须将这些编排代理嵌入镜像。必须包含python-heat-agent包,并通过shell脚本提供对软件配置的支持。对其他软件配置工具的支持可以从python-heat-agent-ansible包(用于可执行剧本)或python-heat-agent-puppet (用于puppet清单)中获得。
用于在实例上应用软件配置更改的其他代理如下所示:
-
os-collection-config代理轮询编排API,以获得与OS::Nova::Server资源类型关联的已更新资源元数据。
-
当软件配置中发生更改时,os-refresh-config代理将执行,该更改由os-collection-config代理轮询。它通过删除旧的配置并用新的配置替换它来刷新配置。os-refresh-config代理使用为部署定义的组属性来处理配置。它使用heat-config-hook脚本应用软件配置更改。heat-config-hook脚本由python-heat-agent*包提供。完成后,hook使用heat-config-notify脚本将成功或失败的配置部署通知编排API。
-
os-apply-config代理将编排模板提供的软件配置数据转换为服务配置文件。
💡总结
RHCA认证需要经历5门的学习与考试,还是需要花不少时间去学习与备考的,好好加油,可以噶🤪。
以上就是【金鱼哥】对 第八章 云应用程序自动化(理论) 的简述和讲解。希望能对看到此文章的小伙伴有所帮助。
💾红帽认证专栏系列:
RHCSA专栏:戏说 RHCSA 认证
RHCE专栏:戏说 RHCE 认证
此文章收录在RHCA专栏:RHCA 回忆录
如果这篇【文章】有帮助到你,希望可以给【金鱼哥】点个赞👍,创作不易,相比官方的陈述,我更喜欢用【通俗易懂】的文笔去讲解每一个知识点。
如果有对【运维技术】感兴趣,也欢迎关注❤️❤️❤️ 【金鱼哥】❤️❤️❤️,我将会给你带来巨大的【收获与惊喜】💕💕!
- 点赞
- 收藏
- 关注作者
评论(0)