Red Hat Training

A Red Hat training course is available for Red Hat OpenStack Platform

第 6 章 为 Overcloud 配置高级的定制环境

本章是 第 5 章 配置基本 Overcloud 的要求 一章的延续。到目前为止,director 已注册了节点并为 Overcloud 的创建配置了所需的服务。现在,您可以使用本章介绍的方法对 Overcloud 进行定制。

6.1. 了解 Heat 模板

本章中的自定义配置使用 Heat 模板和环境变量来定义 Overcloud 的特定功能,如网络分离(network isolation)和网络接口配置。本节对 Heat 模板进行了一个基本的介绍,从而使您可以对 Red Hat OpenStack Platform director 中使用的模板结构和格式有所了解。

6.1.1. Heat 模板

director 使用 Heat Orchestration Templates(HOT)作为模板格式来组成 Overcloud 的部署计划。HOT 格式的模板通常使用 YAML 格式。一个模板的目的是创建一个栈(stack),栈中包括了一组资源集合,Heat 会创建并配置每个资源。资源就是 OpenStack 中的对象(object),它包括计算资源、网络配置、安全组、扩展规则和自定义资源。
一个 Heat 模板有以下 3 个主要项:
  • 参数 - 一组传递给 heat 的参数,可以被用来自定义一个栈,并设置在没有传递值时相关参数所使用的默认值。这些参数在模板的 parameters 项中定义。
  • 资源 - 一组作为栈的一部分需要创建和配置的对象。OpenStack 包括一组分布在所有组件中的资源,它们在模板的 resources 项中定义。
  • 输出 - 一组在栈创建后传递给 heat 的值。您可以通过 heat API 或客户端工具程序来访问这些值。它们在模板的 output 项中定义。
以下是一个基本 heat 模板的示例:
heat_template_version: 2013-05-23

description: > A very basic Heat template.

parameters:
  key_name:
    type: string
    default: lars
    description: Name of an existing key pair to use for the instance
  flavor:
    type: string
    description: Instance type for the instance to be created
    default: m1.small
  image:
    type: string
    default: cirros
    description: ID or name of the image to use for the instance

resources:
  my_instance:
    type: OS::Nova::Server
    properties:
      name: My Cirros Instance
      image: { get_param: image }
      flavor: { get_param: flavor }
      key_name: { get_param: key_name }

output:
  instance_name:
    description: Get the instance's name
    value: { get_attr: [ my_instance, name ] }
这个模板使用资源类型 type: OS::Nova::Server 创建一个名为 my_instance 的实例,它具有特定的 flavor、镜像和关键字。这个栈会返回 instance_name 的值(My Cirros Instance)。
当 Heat 处理一个模板时会为模板创建一个栈,并为资源模板创建一组子栈。这就形成了一个分级结构的栈,它的最高级就是使用您的模板定义的主栈。使用以下命令可以查看栈的分级结构:
$ heat stack-list --show-nested

6.1.2. 环境文件

环境文件就是一个特殊类型的模板,它为 Heat 模板提供了自定义的功能。这个文件包括三个主要部分:
  • 资源注册表 - 它设置了自定义资源名,并连接到其它 heat 模板。这提供了一个创建没有存在于核心资源集合中的自定义资源的方法。它在环境文件的 resource_registry 项中设置。
  • Parameters - 应用到高级别模板参数中的常规设置。例如,您有一个模板用来部署嵌套的栈,如资源注册表映射,这些参数只需要应用于高级别的模板,而不需要在嵌套的栈中进行应用。参数在环境文件中的 parameters 部分进行定义。
  • Parameter Defaults - 这些参数会修改所有模板中的参数默认值。例如,您有一个模板用来部署嵌套的栈,如资源注册表映射,参数的默认值会应用到所有模板中。包括高级别的模板以及所有嵌套的资源。参数的默认值在环境文件的 parameter_defaults 项中定义。

重要

在为 Overcloud 创建自定义环境文件时,推荐使用 parameter_defaults 而不是 parameters,这样可以使参数应用到 Overcloud 中的所有模板中。
以下是一个基本环境文件的实例:
resource_registry:
  OS::Nova::Server::MyServer: myserver.yaml

parameter_defaults:
  NetworkName: my_network

parameters:
  MyIP: 192.168.0.1
例如,当通过一个特定 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 模板应用一个参数。在这个示例中,它只应用于 my_template.yaml 中的参数。
NetworkName 会对主 Heat 模板(在这个示例中是 my_template.yaml),以及与包括在主模板中的资源相关联的模板进行应用(在这个示例中,资源是 OS::Nova::Server::MyServer,模板是 myserver.yaml)。

6.1.3. 核心 Overcloud Heat 模板

director 为 Overcloud 包括了一个核心 Heat 模板集合,它被保存在 /usr/share/openstack-tripleo-heat-templates 中。
这个集合中包括了许多 heat 模板和环境文件。其中需要特别说明的主文件和目录是:
  • overcloud.yaml - 这是创建 Overcloud 环境所使用的主要模板。
  • overcloud-resource-registry-puppet.yaml - 这是创建 Overcloud 环境所使用的主要环境文件。它为 Puppet 模块提供了一组存储在 Overcloud 镜像中的配置。当 director 为每个节点写入 Overcloud 镜像后,Heat 将使用在环境文件中注册的资源来为每个节点进行配置。
  • environments - 一个包括了可以应用到 Overcloud 部署中的环境文件示例的目录。