10.3. 配置 hook
使用配置 hook 将您自己的自定义配置功能注入 overcloud 部署过程。您可以创建 hook,以在主 overcloud 服务配置前后或之后注入自定义配置,以及用于修改和包含基于 Puppet 的配置的 hook。
10.3.1. 预配置:自定义特定的 overcloud 角色
overcloud 使用 Puppet 进行 OpenStack 组件的核心配置。director 提供了一组 hook,可用于在核心配置开始前为特定节点角色执行自定义配置。这些 hook 包括以下配置:
此文档的早期版本使用 OS::TripleO::Tasks::*PreConfig
资源来为每个角色提供预配置 hook。heat 模板集合要求专用使用这些 hook,这意味着您不应该将它们用于自定义用途。反之,使用此处概述的 OS::TripleO::*ExtraConfigPre
hook。
- OS::TripleO::ControllerExtraConfigPre
- 在核心 Puppet 配置之前,应用到 Controller 节点的其他配置。
- OS::TripleO::ComputeExtraConfigPre
- 在 Puppet 核心配置之前,应用到 Compute 节点的额外配置。
- OS::TripleO::CephStorageExtraConfigPre
- 在核心 Puppet 配置前,应用到 Ceph Storage 节点的额外配置。
- OS::TripleO::ObjectStorageExtraConfigPre
- 在 Puppet 核心配置之前,应用到对象存储节点的额外配置。
- OS::TripleO::BlockStorageExtraConfigPre
- 在核心 Puppet 配置前,应用到块存储节点的额外配置。
- OS::TripleO::[ROLE]ExtraConfigPre
-
在核心 Puppet 配置之前,应用到自定义节点的额外配置。将
[ROLE]
替换为可组合角色名称。
在本例中,使用变量 nameserver 在特定角色的所有节点上附加 resolv.conf
文件:
流程
创建一个基本的 heat 模板
~/templates/nameserver.yaml
,该脚本将变量名称服务器写入节点的resolv.conf
文件中:heat_template_version: 2014-10-16 description: > Extra hostname configuration parameters: server: type: string nameserver_ip: type: string DeployIdentifier: type: string resources: CustomExtraConfigPre: type: OS::Heat::SoftwareConfig properties: group: script config: str_replace: template: | #!/bin/sh echo "nameserver _NAMESERVER_IP_" > /etc/resolv.conf params: _NAMESERVER_IP_: {get_param: nameserver_ip} CustomExtraDeploymentPre: type: OS::Heat::SoftwareDeployment properties: server: {get_param: server} config: {get_resource: CustomExtraConfigPre} actions: ['CREATE'] input_values: deploy_identifier: {get_param: DeployIdentifier} outputs: deploy_stdout: description: Deployment reference, used to trigger pre-deploy on changes value: {get_attr: [CustomExtraDeploymentPre, deploy_stdout]}
在本例中,
resource
部分包含以下参数:- CustomExtraConfigPre
-
这定义了软件配置。在本例中,我们定义 Bash
脚本
,heat 将_NAMESERVER_IP_
替换为nameserver_ip
参数中存储的值。 - CustomExtraDeploymentPre
这会执行软件配置,这是
CustomExtraConfigPre
资源的软件配置。注意以下几点:-
config
参数会引用CustomExtraConfigPre
资源,以便 heat 知道要应用的配置。 -
server
参数检索 overcloud 节点的映射。此参数由父模板提供,并在此 hook 模板中强制使用。 -
actions
参数定义何时应用配置。在这种情况下,您希望在创建 overcloud 时应用配置。可能的操作包括CREATE
、UPDATE
、DELETE
、SUSPEND
和RESUME
。 -
input_values
包含一个名为deploy_identifier
的参数,它存储父模板中的DeployIdentifier
。此参数为每个部署更新提供资源的时间戳,以确保后续 overcloud 更新中的资源恢复。
-
创建一个环境文件
~/templates/pre_config.yaml
,将 heat 模板注册到基于角色的资源类型。例如,要将配置应用到 Controller 节点,请使用ControllerExtraConfigPre
hook:resource_registry: OS::TripleO::ControllerExtraConfigPre: /home/stack/templates/nameserver.yaml parameter_defaults: nameserver_ip: 192.168.1.1
将环境文件添加到堆栈中,以及其他环境文件:
$ openstack overcloud deploy --templates \ ... -e /home/stack/templates/pre_config.yaml \ ...
这会将配置应用到所有 Controller 节点,然后再在初始 overcloud 创建或后续更新开始。
每个 hook 只能将每个资源注册到一个 heat 模板。后续用法会覆盖要使用的 heat 模板。
10.3.2. 预配置:自定义所有 overcloud 角色
overcloud 使用 Puppet 进行 OpenStack 组件的核心配置。director 提供了一个 hook,可用于在核心配置开始前配置所有节点类型:
- OS::TripleO::NodeExtraConfig
- 在核心 Puppet 配置之前,应用到所有节点角色的额外配置。
在本例中,使用变量 nameserver 在每个节点上附加 resolv.conf
文件:
流程
创建运行脚本的基本 heat 模板
~/templates/nameserver.yaml
,以使用变量 nameserver 附加每个节点的resolv.conf
文件:heat_template_version: 2014-10-16 description: > Extra hostname configuration parameters: server: type: string nameserver_ip: type: string DeployIdentifier: type: string resources: CustomExtraConfigPre: type: OS::Heat::SoftwareConfig properties: group: script config: str_replace: template: | #!/bin/sh echo "nameserver _NAMESERVER_IP_" >> /etc/resolv.conf params: _NAMESERVER_IP_: {get_param: nameserver_ip} CustomExtraDeploymentPre: type: OS::Heat::SoftwareDeployment properties: server: {get_param: server} config: {get_resource: CustomExtraConfigPre} actions: ['CREATE'] input_values: deploy_identifier: {get_param: DeployIdentifier} outputs: deploy_stdout: description: Deployment reference, used to trigger pre-deploy on changes value: {get_attr: [CustomExtraDeploymentPre, deploy_stdout]}
在本例中,
resource
部分包含以下参数:- CustomExtraConfigPre
-
此参数定义一个软件配置。在本例中,您将定义 Bash
脚本
,heat 将_NAMESERVER_IP_
替换为nameserver_ip
参数中存储的值。 - CustomExtraDeploymentPre
此参数执行软件配置,这是
CustomExtraConfigPre
资源的软件配置。注意以下几点:-
config
参数会引用CustomExtraConfigPre
资源,以便 heat 知道要应用的配置。 -
server
参数检索 overcloud 节点的映射。此参数由父模板提供,并在此 hook 模板中强制使用。 -
actions
参数定义何时应用配置。在这种情况下,您仅在创建 overcloud 时应用配置。可能的操作包括CREATE
、UPDATE
、DELETE
、SUSPEND
和RESUME
。 -
input_values
参数包含一个名为deploy_identifier
的子参数,它存储了父模板中的DeployIdentifier
。此参数为每个部署更新提供资源的时间戳,以确保后续 overcloud 更新中的资源恢复。
-
创建一个环境文件
~/templates/pre_config.yaml
,将 heat 模板注册为OS::TripleO::NodeExtraConfig
资源类型。resource_registry: OS::TripleO::NodeExtraConfig: /home/stack/templates/nameserver.yaml parameter_defaults: nameserver_ip: 192.168.1.1
将环境文件添加到堆栈中,以及其他环境文件:
$ openstack overcloud deploy --templates \ ... -e /home/stack/templates/pre_config.yaml \ ...
这会将配置应用到所有节点,然后再在初始 overcloud 创建或后续更新开始。
您可以将 OS::TripleO::NodeExtraConfig
注册到一个 heat 模板。后续用法会覆盖要使用的 heat 模板。
10.3.3. Post-configuration:自定义所有 overcloud 角色
此文档的早期版本使用 OS::TripleO::Tasks::*PostConfig
资源来为每个角色提供后配置 hook。heat 模板集合要求专用使用这些 hook,这意味着您不应该将它们用于自定义用途。反之,使用此处概述的 OS::TripleO::NodeExtraConfigPost
hook。
在完成 overcloud 创建但您希望在初始创建或后续 overcloud 更新时向所有角色添加额外的配置的情况。在这种情况下,使用以下后配置 hook:
- OS::TripleO::NodeExtraConfigPost
- 在核心 Puppet 配置后,应用到所有节点角色的额外配置。
在本例中,使用变量 nameserver 在每个节点上附加 resolv.conf
文件:
流程
创建运行脚本的基本 heat 模板
~/templates/nameserver.yaml
,以使用变量 nameserver 附加每个节点的resolv.conf
文件:heat_template_version: 2014-10-16 description: > Extra hostname configuration parameters: servers: type: json nameserver_ip: type: string DeployIdentifier: type: string EndpointMap: default: {} type: json resources: CustomExtraConfig: type: OS::Heat::SoftwareConfig properties: group: script config: str_replace: template: | #!/bin/sh echo "nameserver _NAMESERVER_IP_" >> /etc/resolv.conf params: _NAMESERVER_IP_: {get_param: nameserver_ip} CustomExtraDeployments: type: OS::Heat::SoftwareDeploymentGroup properties: servers: {get_param: servers} config: {get_resource: CustomExtraConfig} actions: ['CREATE'] input_values: deploy_identifier: {get_param: DeployIdentifier}
在本例中,
resource
部分包含以下参数:- CustomExtraConfig
-
这定义了软件配置。在本例中,您将定义 Bash
脚本
,heat 将_NAMESERVER_IP_
替换为nameserver_ip
参数中存储的值。 - CustomExtraDeployments
这会执行软件配置,这是
CustomExtraConfig
资源的软件配置。注意以下几点:-
config
参数会引用CustomExtraConfig
资源,以便 heat 知道要应用的配置。 -
servers
参数检索 overcloud 节点的映射。此参数由父模板提供,并在此 hook 模板中强制使用。 -
actions
参数定义何时应用配置。在这种情况下,您希望在创建 overcloud 时应用配置。可能的操作包括CREATE
、UPDATE
、DELETE
、SUSPEND
和RESUME
。 -
input_values
包含一个名为deploy_identifier
的参数,它存储父模板中的DeployIdentifier
。此参数为每个部署更新提供资源的时间戳,以确保后续 overcloud 更新中的资源恢复。
-
创建一个环境文件
~/templates/post_config.yaml
,它将 heat 模板注册为OS::TripleO::NodeExtraConfigPost:
资源类型。resource_registry: OS::TripleO::NodeExtraConfigPost: /home/stack/templates/nameserver.yaml parameter_defaults: nameserver_ip: 192.168.1.1
将环境文件添加到堆栈中,以及其他环境文件:
$ openstack overcloud deploy --templates \ ... -e /home/stack/templates/post_config.yaml \ ...
这会在核心配置在初始 overcloud 创建或后续更新后将配置应用到所有节点。
您可以将 OS::TripleO::NodeExtraConfigPost
注册到一个 heat 模板。后续用法会覆盖要使用的 heat 模板。
10.3.4. puppet:为角色自定义 hieradata
heat 模板集合包含一组参数,可用于将额外的配置传递给某些节点类型。这些参数将配置保存为节点上的 Puppet 配置的 hieradata:
- ControllerExtraConfig
- 添加至所有 Controller 节点的配置。
- ComputeExtraConfig
- 添加至所有 Compute 节点的配置。
- BlockStorageExtraConfig
- 添加至所有块存储节点的配置。
- ObjectStorageExtraConfig
- 添加至所有对象存储节点的配置。
- CephStorageExtraConfig
- 添加至所有 Ceph Storage 节点的配置。
- [ROLE]ExtraConfig
-
配置以添加到可组合角色。将
[ROLE]
替换为可组合角色名称。 - ExtraConfig
- 配置以添加到所有节点。
流程
要在部署后配置过程中添加额外的配置,请在
parameter_defaults
部分中创建一个包含这些参数的环境文件。例如,要将 Compute 主机的保留内存增加到 1024 MB,并将 VNC 密钥映射设置为日语,请在ComputeExtraConfig
参数中使用以下条目:parameter_defaults: ComputeExtraConfig: nova::compute::reserved_host_memory: 1024 nova::compute::vnc_keymap: ja
-
将此环境文件包含在
openstack overcloud deploy
命令中,以及与部署相关的任何其他环境文件。
您只能定义每个参数一次。后续用法会覆盖前面的值。
10.3.5. puppet:为单个节点自定义 hieradata
您可以使用 heat 模板集合为各个节点设置 Puppet hieradata:
流程
从节点的内省数据识别系统 UUID:
$ openstack baremetal introspection data save 9dcc87ae-4c6d-4ede-81a5-9b20d7dc4a14 | jq .extra.system.product.uuid
这个命令返回一个系统 UUID。例如:
"f5055c6c-477f-47fb-afe5-95c6928c407f"
创建一个环境文件来定义特定于节点的 hieradata,并将
per_node.yaml
模板注册到预配置 hook。在NodeDataLookup
参数中包含您要配置的节点的系统 UUID:resource_registry: OS::TripleO::ComputeExtraConfigPre: /usr/share/openstack-tripleo-heat-templates/puppet/extraconfig/pre_deploy/per_node.yaml parameter_defaults: NodeDataLookup: '{"f5055c6c-477f-47fb-afe5-95c6928c407f": {"nova::compute::vcpu_pin_set": [ "2", "3" ]}}'
-
将此环境文件包含在
openstack overcloud deploy
命令中,以及与部署相关的任何其他环境文件。
per_node.yaml
模板在节点上生成一组 hieradata 文件,它们对应于每个系统 UUID,并包含您定义的 hieradata。如果未定义 UUID,则生成的 hieradata 文件为空。在本例中,per_node.yaml
模板在所有 Compute 节点上运行,由 OS::TripleO::ComputeExtraConfigPre
hook 定义,但只有具有系统 UUID f5055c6c-477f-47fb-afe5-95c6928c407f
接收 hieradata 的 Compute 节点。
您可以使用此机制根据特定要求定制每个节点。
10.3.6. Puppet:应用自定义清单
在某些情况下,您可能想要在 overcloud 节点上安装和配置一些额外的组件。您可以在主配置完成后使用应用到节点的自定义 Puppet 清单来实现此目的。作为基本示例,您可能想要在每个节点上安装 motd
流程
创建一个 heat 模板
~/templates/custom_puppet_config.yaml
,它将启动 Puppet 配置。heat_template_version: 2014-10-16 description: > Run Puppet extra configuration to set new MOTD parameters: servers: type: json DeployIdentifier: type: string EndpointMap: default: {} type: json resources: ExtraPuppetConfig: type: OS::Heat::SoftwareConfig properties: config: {get_file: motd.pp} group: puppet options: enable_hiera: True enable_facter: False ExtraPuppetDeployments: type: OS::Heat::SoftwareDeploymentGroup properties: config: {get_resource: ExtraPuppetConfig} servers: {get_param: servers}
本例包括模板中的
/home/stack/templates/motd.pp
,并将其传递给配置的节点。motd.pp
文件包含安装和配置motd
所需的 Puppet 类。创建一个环境文件
~templates/puppet_post_config.yaml
,将 heat 模板注册为OS::TripleO::NodeExtraConfigPost:
资源类型。resource_registry: OS::TripleO::NodeExtraConfigPost: /home/stack/templates/custom_puppet_config.yaml
将此环境文件包含在
openstack overcloud deploy
命令中,以及与部署相关的任何其他环境文件。$ openstack overcloud deploy --templates \ ... -e /home/stack/templates/puppet_post_config.yaml \ ...
这会将
motd.pp
的配置应用到 overcloud 中的所有节点。