第 10 章 使用编排服务(heat)配置 overcloud.
您可以使用编排服务(heat)在 heat 模板和环境文件中创建自定义 overcloud 配置。
10.1. 了解 heat 模板 复制链接链接已复制到粘贴板!
本指南中的自定义配置使用 heat 模板和环境文件来定义 overcloud 的某些方面。本章介绍了 heat 模板,以便您可以了解 Red Hat OpenStack Platform director 中这些模板的结构和格式。
10.1.1. Heat 模板 复制链接链接已复制到粘贴板!
director 使用 Heat 编配模板(HOT)作为 overcloud 部署计划的模板格式。metastore 格式的模板通常以 YAML 格式表示。模板的目的是定义和创建堆栈,这是 OpenStack Orchestration (heat)创建的资源集合,以及资源的配置。资源是 Red Hat OpenStack Platform (RHOSP)中的对象,可以包含计算资源、网络配置、安全组、扩展规则和自定义资源。
heat 模板包含三个主要部分:
- parameters
-
这些设置是传递给 heat 的设置,它提供了一种自定义堆栈的方法,以及用于不带传递值的参数的任何默认值。这些设置在
模板的parameter 部分中定义。 - 资源
-
使用
resources部分定义资源,如计算实例、网络和存储卷,您可以在使用此模板部署堆栈时创建这些资源。Red Hat OpenStack Platform (RHOSP)包含一组跨越所有组件的核心资源。这些是要作为堆栈的一部分创建和配置的具体对象。RHOSP 包含一组核心资源,它们跨越所有组件。它们在模板的resources部分中定义。 - 输出
-
使用
outputs部分声明云用户可以在堆栈创建后访问的输出参数。您的云用户可以使用这些参数来请求有关堆栈的详细信息,如部署的实例的 IP 地址或作为堆栈一部分部署的 Web 应用程序的 URL。
基本 heat 模板示例:
此模板使用资源类型 类型:OS::Nova::Server 创建名为 my_instance 的实例,该实例具有云用户指定的特定类别、镜像和密钥。堆栈可以返回 instance_name 的值,名为 My Cirros Instance。
当 heat 处理模板时,它会为模板创建堆栈,并为资源模板创建一组子堆栈。这会创建您通过模板定义的主堆栈中解掉的堆栈层次结构。您可以使用以下命令查看堆栈层次结构:
openstack stack list --nested
$ openstack stack list --nested
10.1.2. 环境文件 复制链接链接已复制到粘贴板!
环境文件是特殊的模板,可用于自定义 heat 模板。除了核心 heat 模板外,您还可以在部署命令中包含环境文件。环境文件包含三个主要部分:
- resource_registry
- 本节定义自定义资源名称,链接到其他 heat 模板。这提供了一种创建核心资源集合中不存在的自定义资源的方法。
- parameters
- 这些是应用于顶级模板参数的通用设置。例如,如果您有一个部署嵌套堆栈的模板,如资源 registry 映射,则参数仅适用于顶级模板,而不是应用到嵌套资源的模板。
- parameter_defaults
- 这些参数修改所有模板中参数的默认值。例如,如果您有一个部署嵌套堆栈的 heat 模板,如资源 registry 映射,参数默认为所有模板。
在为 overcloud 创建自定义环境文件时,使用 parameter_defaults 而不是 parameters,以便您的参数应用到 overcloud 的所有堆栈模板。
基本环境文件示例:
从特定 heat 模板(my_template.yaml)创建堆栈时,可能会包含此环境文件(my_env.yaml)。my_env.yaml 文件会创建一个名为 OS::Nova::Server::MyServer 的新资源类型。myserver.yaml 文件是一个 heat 模板文件,它为此资源类型提供实施,可覆盖任何内置文件。您可以在 my_template.yaml 文件中包含 OS::Nova::Server::MyServer 资源。
MyIP 仅将参数应用于使用此环境文件部署的主 heat 模板。在本例中,MyIP 仅适用于 my_template.yaml 中的参数。
networkName 应用到主 heat 模板 my_template.yaml,以及与主模板中包含的资源关联的模板,如 OS::Nova::Server::MyServer 资源及其 myserver.yaml 模板。
要使 RHOSP 将 heat 模板文件用作自定义模板资源,文件扩展名必须为 .yaml 或 .template。
10.1.3. 核心 overcloud heat 模板 复制链接链接已复制到粘贴板!
director 包含 overcloud 的核心 heat 模板集合和环境文件集合。此集合存储在 /usr/share/openstack-tripleo-heat-templates 中。
此模板集合中的主文件和目录有:
overcloud.j2.yaml- 这是 director 用于创建 overcloud 环境的主要模板文件。此文件使用 Jinja2 语法来迭代模板中的某些部分,以创建自定义角色。Jinja2 格式在 overcloud 部署期间呈现为 YAML。
overcloud-resource-registry-puppet.j2.yaml- 这是 director 用于创建 overcloud 环境的主要环境文件。它为 overcloud 镜像中存储的 Puppet 模块提供一组配置。在将 overcloud 镜像写入每个节点后,heat 会使用此环境文件中注册的资源启动每个节点的 Puppet 配置。此文件使用 Jinja2 语法来迭代模板中的某些部分,以创建自定义角色。Jinja2 格式在 overcloud 部署期间呈现为 YAML。
roles_data.yaml- 此文件包含 overcloud 中角色的定义,并将服务映射到每个角色。
network_data.yaml-
此文件包含 overcloud 中网络的定义,以及它们的属性,如子网、分配池和 VIP 状态。默认
network_data.yaml文件包含默认网络: External, Internal Api, Storage, Storage Management, Tenant, 和 Management。您可以创建自定义network_data.yaml文件,并使用-n选项将其添加到openstack overcloud deploy命令中。 plan-environment.yaml- 此文件包含 overcloud 计划的元数据定义。这包括要应用到 overcloud 的计划名称、要使用的主模板和环境文件。
capabilities-map.yaml- 此文件包含 overcloud 计划的环境文件映射。
部署-
此目录包含 heat 模板。
overcloud-resource-registry-puppet.j2.yaml环境文件使用此目录中的文件来驱动每个节点上的 Puppet 配置应用。 environments-
此目录包含额外的 heat 环境文件,可用于创建 overcloud。这些环境文件为您的生成的 Red Hat OpenStack Platform (RHOSP)环境启用额外的功能。例如,该目录包含一个环境文件,用于启用 Cinder NetApp 后端存储(
cinder-netapp-config.yaml)。 network- 此目录包含一组 heat 模板,可用于创建隔离的网络和端口。
puppet-
此目录包含控制 Puppet 配置的模板。
overcloud-resource-registry-puppet.j2.yaml环境文件使用此目录中的文件来驱动每个节点上的 Puppet 配置应用。 puppet/services-
此目录包含所有服务配置的传统 heat 模板。
部署目录中的模板替换puppet/services目录中的大多数模板。 extraconfig- 此目录包含可用于启用额外功能的模板。
10.1.4. 在 overcloud 创建中包含环境文件 复制链接链接已复制到粘贴板!
在部署命令中包括环境文件,并使用 -e 选项。您可以根据需要纳入多个环境文件。但是,环境文件的顺序非常重要,因为后续环境文件中定义的参数和资源具有优先权。例如,您有两个环境文件,其中包含一个通用资源类型 OS::TripleO::NodeExtraConfigPost,以及一个通用参数 TimeZone :
environment-file-1.yaml
environment-file-2.yaml
resource_registry: OS::TripleO::NodeExtraConfigPost: /home/stack/templates/template-2.yaml parameter_defaults: TimeZone: 'Hongkong'
resource_registry:
OS::TripleO::NodeExtraConfigPost: /home/stack/templates/template-2.yaml
parameter_defaults:
TimeZone: 'Hongkong'
在部署命令中包含这两个环境文件:
openstack overcloud deploy --templates -e environment-file-1.yaml -e environment-file-2.yaml
$ openstack overcloud deploy --templates -e environment-file-1.yaml -e environment-file-2.yaml
openstack overcloud deploy 命令通过以下进程运行:
- 从核心 heat 模板集合中加载默认配置。
-
应用
environment-file-1.yaml的配置,它会覆盖默认配置中的任何通用设置。 -
应用
environment-file-2.yaml的配置,它会覆盖来自默认配置和environment-file-1.yaml的任何通用设置。
这会对 overcloud 的默认配置进行以下更改:
-
OS::TripleO::NodeExtraConfigPost资源设置为/home/stack/templates/template-2.yaml,如environment-file-2.yaml中定义的。 -
timezone参数设置为Hongkong,如environment-file-2.yaml中定义的。 -
RabbitFDLimit参数设为65536,如environment-file-1.yaml中定义的。environment-file-2.yaml不会更改此值。
您可以使用此机制为 overcloud 定义自定义配置,而无需多个环境文件中的值冲突。
10.1.5. 使用自定义核心 heat 模板 复制链接链接已复制到粘贴板!
在创建 overcloud 时,director 使用位于 /usr/share/openstack-tripleo-heat-templates 中的核心 heat 模板。如果要自定义此核心模板集合,请使用以下 Git 工作流来管理您的自定义模板集合:
流程
创建包含 heat 模板集合的初始 Git 存储库:
将模板集合复制到
/home/stack/templates目录中:cd ~/templates cp -r /usr/share/openstack-tripleo-heat-templates .
$ cd ~/templates $ cp -r /usr/share/openstack-tripleo-heat-templates .Copy to Clipboard Copied! Toggle word wrap Toggle overflow 进入自定义模板目录并初始化 Git 存储库:
cd ~/templates/openstack-tripleo-heat-templates git init .
$ cd ~/templates/openstack-tripleo-heat-templates $ git init .Copy to Clipboard Copied! Toggle word wrap Toggle overflow 配置 Git 用户名和电子邮件地址:
git config --global user.name "<USER_NAME>" git config --global user.email "<EMAIL_ADDRESS>"
$ git config --global user.name "<USER_NAME>" $ git config --global user.email "<EMAIL_ADDRESS>"Copy to Clipboard Copied! Toggle word wrap Toggle overflow
-
将
<USER_NAME> 替换为您要使用的用户名。 将
<EMAIL_ADDRESS> 替换为您的电子邮件地址。为初始提交暂存所有模板:
git add *
$ git add *Copy to Clipboard Copied! Toggle word wrap Toggle overflow 创建初始提交:
git commit -m "Initial creation of custom core heat templates"
$ git commit -m "Initial creation of custom core heat templates"Copy to Clipboard Copied! Toggle word wrap Toggle overflow 这将创建一个包含最新核心模板集合的初始
master分支。使用此分支作为自定义分支的基础,并将新模板版本合并到此分支中。
使用自定义分支将您的更改保存到核心模板集合。使用以下步骤创建
my-customizations分支并添加自定义:创建
my-customizations分支并切换到它:git checkout -b my-customizations
$ git checkout -b my-customizationsCopy to Clipboard Copied! Toggle word wrap Toggle overflow - 编辑自定义分支中的文件。
暂存 git 中的更改:
git add [edited files]
$ git add [edited files]Copy to Clipboard Copied! Toggle word wrap Toggle overflow 将更改提交到自定义分支:
git commit -m "[Commit message for custom changes]"
$ git commit -m "[Commit message for custom changes]"Copy to Clipboard Copied! Toggle word wrap Toggle overflow 这会将您的更改作为提交添加到
my-customizations分支。当master分支更新时,您可以将my-customizations从master进行更新,这会导致 git 将这些提交添加到更新的模板集合中。这有助于跟踪您的自定义信息,并在将来的模板更新中重新显示它们。
更新 undercloud 时,
openstack-tripleo-heat-templates软件包也可能收到更新。当发生这种情况时,还必须更新自定义模板集合:将
openstack-tripleo-heat-templates软件包版本保存为环境变量:export PACKAGE=$(rpm -qv openstack-tripleo-heat-templates)
$ export PACKAGE=$(rpm -qv openstack-tripleo-heat-templates)Copy to Clipboard Copied! Toggle word wrap Toggle overflow 进入模板集合目录并为更新的模板创建新分支:
cd ~/templates/openstack-tripleo-heat-templates git checkout -b $PACKAGE
$ cd ~/templates/openstack-tripleo-heat-templates $ git checkout -b $PACKAGECopy to Clipboard Copied! Toggle word wrap Toggle overflow 删除分支中的所有文件,并将其替换为新版本:
git rm -rf * cp -r /usr/share/openstack-tripleo-heat-templates/* .
$ git rm -rf * $ cp -r /usr/share/openstack-tripleo-heat-templates/* .Copy to Clipboard Copied! Toggle word wrap Toggle overflow 为初始提交添加所有模板:
git add *
$ git add *Copy to Clipboard Copied! Toggle word wrap Toggle overflow 为软件包更新创建提交:
git commit -m "Updates for $PACKAGE"
$ git commit -m "Updates for $PACKAGE"Copy to Clipboard Copied! Toggle word wrap Toggle overflow 将分支合并到 master 中。如果使用 Git 管理系统(如 GitLab),请使用管理工作流。如果您在本地使用 git,切换到
master分支并运行git merge命令:git checkout master git merge $PACKAGE
$ git checkout master $ git merge $PACKAGECopy to Clipboard Copied! Toggle word wrap Toggle overflow
master 分支现在包含核心模板集合的最新版本。现在,您可以从这个更新的集合中重新构建 my-customization 分支。
更新
my-customization分支:进入
my-customizations分支:git checkout my-customizations
$ git checkout my-customizationsCopy to Clipboard Copied! Toggle word wrap Toggle overflow 将分支更新为
master:git rebase master
$ git rebase masterCopy to Clipboard Copied! Toggle word wrap Toggle overflow 这将更新
my-customizations分支,并重播为此分支发出的自定义提交。
解决在 rebase 过程中发生的任何冲突:
检查哪些文件包含冲突:
git status
$ git statusCopy to Clipboard Copied! Toggle word wrap Toggle overflow - 解决确定的模板文件冲突。
添加解析的文件:
git add [resolved files]
$ git add [resolved files]Copy to Clipboard Copied! Toggle word wrap Toggle overflow 继续 rebase:
git rebase --continue
$ git rebase --continueCopy to Clipboard Copied! Toggle word wrap Toggle overflow
部署自定义模板集合:
确保您已切换到
my-customization分支:git checkout my-customizations
git checkout my-customizationsCopy to Clipboard Copied! Toggle word wrap Toggle overflow 使用
--templates选项运行openstack overcloud deploy命令来指定您的本地目录:openstack overcloud deploy --templates /home/stack/templates/openstack-tripleo-heat-templates [OTHER OPTIONS]
$ openstack overcloud deploy --templates /home/stack/templates/openstack-tripleo-heat-templates [OTHER OPTIONS]Copy to Clipboard Copied! Toggle word wrap Toggle overflow
如果您指定了不带目录的 --templates 选项,director 将使用默认模板目录(/usr/share/openstack-tripleo-heat-templates)。
红帽建议在 第 10.3 节 “配置 hook” 中使用方法,而不是修改 heat 模板集合。
10.1.6. Jinja2 渲染 复制链接链接已复制到粘贴板!
/usr/share/openstack-tripleo-heat-templates 中的核心 heat 模板包含多个具有 j2.yaml 文件扩展名的文件。这些文件包含 Jinja2 模板语法,director 会将这些文件呈现成其具有 .yaml 扩展名的静态 heat 模板。例如,主 overcloud.j2.yaml 文件呈现到 overcloud.yaml 中。director 使用生成的 overcloud.yaml 文件。
启用 Jinja2 的 heat 模板使用 Jinja2 语法来创建用于迭代值的参数和资源。例如,overcloud.j2.yaml 文件包含以下代码片段:
当 director 呈现 Jinja2 语法时,director 会迭代 roles_data.yaml 文件中定义的角色,并使用角色的名称填充 {{role.name}}Count 参数。默认 roles_data.yaml 文件包含五个角色,并从我们的示例中生成以下参数:
-
ControllerCount -
ComputeCount -
BlockStorageCount -
ObjectStorageCount -
CephStorageCount
参数渲染版本示例类似如下:
director 仅从核心 heat 模板的 目录内呈现启用了 Jinja2 的模板和环境文件。以下用例演示了呈现 Jinja2 模板的正确方法。
使用案例 1:默认核心模板
模板目录: /usr/share/openstack-tripleo-heat-templates/
环境文件: /usr/share/openstack-tripleo-heat-templates/environments/ssl/enable-internal-tls.j2.yaml
director 使用默认核心模板位置(--templates),并将 enable-internal-tls.j2.yaml 文件呈现到 enable-internal-tls.yaml 中。运行 openstack overcloud deploy 命令时,请使用 -e 选项包括渲染的 enable-internal-tls.yaml 文件的名称。
openstack overcloud deploy --templates \
-e /usr/share/openstack-tripleo-heat-templates/environments/ssl/enable-internal-tls.yaml
...
$ openstack overcloud deploy --templates \
-e /usr/share/openstack-tripleo-heat-templates/environments/ssl/enable-internal-tls.yaml
...
使用案例 2:自定义核心模板
模板目录: /home/stack/tripleo-heat-installer-templates
环境文件: /home/stack/tripleo-heat-installer-templates/environments/ssl/enable-internal-tls.j2.yaml
director 使用自定义核心模板位置(--templates /home/stack/tripleo-heat-templates),director 会将自定义核心模板中的 enable-internal-tls.j2.yaml 文件呈现到 enable-internal-tls.yaml 中。运行 openstack overcloud deploy 命令时,请使用 -e 选项包括渲染的 enable-internal-tls.yaml 文件的名称。
openstack overcloud deploy --templates /home/stack/tripleo-heat-templates \
-e /home/stack/tripleo-heat-templates/environments/ssl/enable-internal-tls.yaml
...
$ openstack overcloud deploy --templates /home/stack/tripleo-heat-templates \
-e /home/stack/tripleo-heat-templates/environments/ssl/enable-internal-tls.yaml
...
使用案例 3:不正确使用
模板目录: /usr/share/openstack-tripleo-heat-templates/
环境文件: /home/stack/tripleo-heat-installer-templates/environments/ssl/enable-internal-tls.j2.yaml
director 使用自定义核心模板位置(--templates /home/stack/tripleo-heat-installer-templates)。但是,所选的 enable-internal-tls.j2.yaml 不在自定义核心模板中,因此它不会呈现到 enable-internal-tls.yaml 中。这会导致部署失败。
将 Jinja2 语法处理到静态路由中
使用 process-templates.py 脚本将 openstack-tripleo-heat-templates 的 Jinja2 语法呈现到一组静态路由中。要使用 process-templates.py 脚本呈现 openstack-tripleo-heat-templates 集合的副本,请切换到 openstack-tripleo-heat-templates 目录:
cd /usr/share/openstack-tripleo-heat-templates
$ cd /usr/share/openstack-tripleo-heat-templates
运行位于 工具 目录中的 process-templates.py 脚本,以及 -o 选项来定义自定义目录来保存静态副本:
./tools/process-templates.py -o ~/openstack-tripleo-heat-templates-rendered
$ ./tools/process-templates.py -o ~/openstack-tripleo-heat-templates-rendered
这会将所有 Jinja2 模板转换为呈现的 YAML 版本,并将结果保存到 ~/openstack-tripleo-heat-templates-rendered。