搜索

10.3. 配置 hook

download PDF

使用配置 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 文件:

流程

  1. 创建一个基本的 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 时应用配置。可能的操作包括 CREATEUPDATEDELETESUSPENDRESUME
    • input_values 包含一个名为 deploy_identifier 的参数,它存储父模板中的 DeployIdentifier。此参数为每个部署更新提供资源的时间戳,以确保后续 overcloud 更新中的资源恢复。
  2. 创建一个环境文件 ~/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
  3. 将环境文件添加到堆栈中,以及其他环境文件:

    $ 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 文件:

流程

  1. 创建运行脚本的基本 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 时应用配置。可能的操作包括 CREATEUPDATEDELETESUSPENDRESUME
    • input_values 参数包含一个名为 deploy_identifier 的子参数,它存储了父模板中的 DeployIdentifier。此参数为每个部署更新提供资源的时间戳,以确保后续 overcloud 更新中的资源恢复。
  2. 创建一个环境文件 ~/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
  3. 将环境文件添加到堆栈中,以及其他环境文件:

    $ 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 文件:

流程

  1. 创建运行脚本的基本 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 时应用配置。可能的操作包括 CREATEUPDATEDELETESUSPENDRESUME
    • input_values 包含一个名为 deploy_identifier 的参数,它存储父模板中的 DeployIdentifier。此参数为每个部署更新提供资源的时间戳,以确保后续 overcloud 更新中的资源恢复。
  2. 创建一个环境文件 ~/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
  3. 将环境文件添加到堆栈中,以及其他环境文件:

    $ 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
配置以添加到所有节点。

流程

  1. 要在部署后配置过程中添加额外的配置,请在 parameter_defaults 部分中创建一个包含这些参数的环境文件。例如,要将 Compute 主机的保留内存增加到 1024 MB,并将 VNC 密钥映射设置为日语,请在 ComputeExtraConfig 参数中使用以下条目:

    parameter_defaults:
      ComputeExtraConfig:
        nova::compute::reserved_host_memory: 1024
        nova::compute::vnc_keymap: ja
  2. 将此环境文件包含在 openstack overcloud deploy 命令中,以及与部署相关的任何其他环境文件。
重要

您只能定义每个参数一次。后续用法会覆盖前面的值。

10.3.5. puppet:为单个节点自定义 hieradata

您可以使用 heat 模板集合为各个节点设置 Puppet hieradata:

流程

  1. 从节点的内省数据识别系统 UUID:

    $ openstack baremetal introspection data save 9dcc87ae-4c6d-4ede-81a5-9b20d7dc4a14 | jq .extra.system.product.uuid

    这个命令返回一个系统 UUID。例如:

    "f5055c6c-477f-47fb-afe5-95c6928c407f"
  2. 创建一个环境文件来定义特定于节点的 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" ]}}'
  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

流程

  1. 创建一个 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 类。

  2. 创建一个环境文件 ~templates/puppet_post_config.yaml,将 heat 模板注册为 OS::TripleO::NodeExtraConfigPost: 资源类型。

    resource_registry:
      OS::TripleO::NodeExtraConfigPost: /home/stack/templates/custom_puppet_config.yaml
  3. 将此环境文件包含在 openstack overcloud deploy 命令中,以及与部署相关的任何其他环境文件。

    $ openstack overcloud deploy --templates \
        ...
        -e /home/stack/templates/puppet_post_config.yaml \
        ...

    这会将 motd.pp 的配置应用到 overcloud 中的所有节点。

Red Hat logoGithubRedditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

© 2024 Red Hat, Inc.