6.8. 检查可组合服务架构

核心 heat 模板集合包含两组可组合服务模板:

  • deployment 包含关键 OpenStack 服务的模板。
  • puppet/services 包含用于配置可组合服务的传统模板。在某些情况下,可组合服务使用此目录中的模板来实现兼容性。在大多数情况下,可组合服务使用 部署 目录中的模板。

每个模板包含一个标识其目的的描述。例如,deployment/time/ntp-baremetal-puppet.yaml 服务模板包含以下描述:

description: >
  NTP service deployment using puppet, this YAML file
  creates the interface between the HOT template
  and the puppet manifest that actually installs
  and configure NTP.

这些服务模板注册为特定于 Red Hat OpenStack Platform 部署的资源。这意味着,您可以使用 overcloud-resource-registry-puppet.j2.yaml 文件中定义的唯一 heat 资源命名空间调用每个资源。所有服务将 OS::TripleO::Services 命名空间用于其资源类型。

有些资源直接使用基本可组合服务模板:

resource_registry:
  ...
  OS::TripleO::Services::Ntp: deployment/time/ntp-baremetal-puppet.yaml
  ...

但是,核心服务需要容器并使用容器化服务模板。例如,keystone 容器化服务使用以下资源:

resource_registry:
  ...
  OS::TripleO::Services::Keystone: deployment/keystone/keystone-container-puppet.yaml
  ...

这些容器化模板通常引用其他模板以包含依赖项。例如,deployment/keystone/keystone-container-puppet.yaml 模板将基本模板的输出存储在 ContainersCommon 资源中:

resources:
  ContainersCommon:
    type: ../containers-common.yaml

然后,容器化模板可以包含来自 containers-common.yaml 模板的功能和数据。

overcloud.j2.yaml heat 模板包含基于 Jinja2 的代码部分,用于在 roles_data.yaml 文件中定义每个自定义角色的服务列表:

{{role.name}}Services:
  description: A list of service resources (configured in the heat
               resource_registry) which represent nested stacks
               for each service that should get installed on the {{role.name}} role.
  type: comma_delimited_list
  default: {{role.ServicesDefault|default([])}}

对于默认角色,这会创建以下服务列表参数: ControllerServicesComputeServicesBlockStorageServicesObjectStorageServicesCephStorageServices

您可以在 roles_data.yaml 文件中定义每个自定义角色的默认服务。例如,默认 Controller 角色包含以下内容:

- name: Controller
  CountDefault: 1
  ServicesDefault:
    - OS::TripleO::Services::CACerts
    - OS::TripleO::Services::CephMon
    - OS::TripleO::Services::CephExternal
    - OS::TripleO::Services::CephRgw
    - OS::TripleO::Services::CinderApi
    - OS::TripleO::Services::CinderBackup
    - OS::TripleO::Services::CinderScheduler
    - OS::TripleO::Services::CinderVolume
    - OS::TripleO::Services::Core
    - OS::TripleO::Services::Kernel
    - OS::TripleO::Services::Keystone
    - OS::TripleO::Services::GlanceApi
    - OS::TripleO::Services::GlanceRegistry
...

然后,这些服务被定义为 ControllerServices 参数的默认列表。

注意

您还可以使用环境文件覆盖服务参数的默认列表。例如,您可以在环境文件中将 ControllerServices 定义为 parameter_default,以覆盖 roles_data.yaml 文件中的 services 列表。