6.2. 使用情景 2:使用 CLI 创建一个基本的 Overcloud

这个使用情景会创建一个小型的、企业级 OpenStack Platform 环境。它在 Overcloud 中包括两个节点:一个 Controller 节点和一个 Compute 节点。这两个机器都是使用 IPMI 进行电源管理的裸机系统。这个使用情景侧重于展示 director 通过使用命令行工具创建一个小型的、可以在今后对 Compute 节点进行扩展的生产级别 Red Hat Enterprise Linux OpenStack Platform 环境。

流程

  1. 在 director 中创建一个节点定义模板并注册空白节点。
  2. 检查所有节点的硬件。
  3. 手工为节点添加标签(tag)来标记为角色。
  4. 创建 flavor 并通过添加标签把它们标记为角色。
  5. 创建 Heat 模板来分离 External 网络。
  6. 使用 director 的默认计划和额外的网络分离模板创建 Overcloud 环境。

配置要求

  • 第 3 章 安装 Undercloud 中创建的 director 节点
  • 两个裸机。这些系统需要满足 Controller 节点和 Compute 节点对配置的要求。请参阅以下内容:
    因为 director 会把 Red Hat Enterprise Linux 7 镜像复制到每个节点,因此这些节点当前不需要操作系统。
  • Provisioning 网络的一个网络连接(被配置为一个原生 VLAM)。所有节点必须都连接到这个网络,并需要满足 第 2.3 节 “网络要求” 中的要求。在这个示例中,我们使用 192.0.2.0/24 作为 Provisioning 子网,分配的 IP 地址信息如下:

    表 6.2. Provisioning 网络 IP 分配信息

    节点名
    IP 地址
    MAC 地址
    IPMI IP 地址
    director
    192.0.2.1
    aa:aa:aa:aa:aa:aa
    Controller
    DHCP
    bb:bb:bb:bb:bb:bb
    192.0.2.205
    Compute
    DHCP
    cc:cc:cc:cc:cc:cc
    192.0.2.206
  • 用来进行 External 网络连接的一个网络。所有节点必须连接到这个网络。在这个示例中,我们使用 10.1.1.0/24 作为 External 网络。
  • 所有其它网络类型使用 Provisioning 网络作为 OpenStack 服务

6.2.1. 为基本 Overcloud 注册节点

在本节中,我们创建一个节点定义模板。这个文件(instackenv.json)是一个 JSON 格式的文件,它包括了环境中的两个节点的硬件信息和电源管理信息。例如:
{
    "nodes":[
        {
            "mac":[
                "bb:bb:bb:bb:bb:bb"
            ],
            "cpu":"4",
            "memory":"6144",
            "disk":"40",
            "arch":"x86_64",
            "pm_type":"pxe_ipmitool",
            "pm_user":"admin",
            "pm_password":"p@55w0rd!",
            "pm_addr":"192.0.2.205"
        },
        {
            "mac":[
                "cc:cc:cc:cc:cc:cc"
            ],
            "cpu":"4",
            "memory":"6144",
            "disk":"40",
            "arch":"x86_64",
            "pm_type":"pxe_ipmitool",
            "pm_user":"admin",
            "pm_password":"p@55w0rd!",
            "pm_addr":"192.0.2.206"
        }
    ]
}
这个模板使用以下属性
mac
节点上的网络接口的 MAC 地址列表。只为每个系统的 Provisioning NIC 使用 MAC 地址。
cpu
节点上的 CPU 数量。
memory
内存大小(以 MB 为单位)。
disk
硬盘的大小(以 GB 为单位)。
arch
系统架构。
pm_type
使用的电源管理驱动。在这个示例中使用 IPMI 驱动(pxe_ipmitool)。
pm_user, pm_password
IPMI 的用户名和密码。
pm_addr
IPMI 设备的 IP 地址。

注意

如需了解更多与所支持的电源管理类型和选项相关的信息,请参阅 附录 B, 电源管理驱动
在创建完模板后,把这个文件保存到 stack 用户的家目录(/home/stack/instackenv.json),然后把它导入到 director。使用以下命令:
$ openstack baremetal import --json ~/instackenv.json
这会导入模板,并把模板中的每个节点注册到 director。
为所有节点分配内核和 ramdisk 镜像:
$ openstack baremetal configure boot
现在,节点已在 director 中注册并被配置。使用以下命令可以在 CLI 中查看这些节点的列表:
$ openstack baremetal list

6.2.2. 检查节点硬件

注册节点后,需要检查每个节点的硬件属性。运行以下命令:
$ openstack baremetal introspection bulk start

重要

确保这个过程成功完成。它可能需要 15 分钟来检查这些裸机节点。

6.2.3. 手工为节点添加标签

在注册并检查完每个节点的硬件后,需要为它们添加标签(tag)来把它们标记为特定的档案。这些档案标签把节点匹配为 flavor,从而通过 flavor 分配实施角色。因为在基本的实施使用情景中只有两个节点,因此我们会手工为节点添加标签。如果环境中有大量的节点,可以使用在高级实施使用情景中介绍的自动健康检查(Automated Health Check,简称 AHC)工具。如需了解更多与 AHC 工具相关的信息,请参阅 第 6.3.3 节 “使用自动健康检查(Automated Health Check,简称 AHC)工具自动为节点加标签”
为了通过添加标签把节点标记为特定的档案,把 profile 选项添加到每个节点的 properties/capabilities 参数中。例如,把环境中的两个节点分别标记为使用 controller 档案和 compute 档案,使用以下命令:
$ ironic node-update 58c3d07e-24f2-48a7-bbb6-6843f0e8ee13 add properties/capabilities='profile:compute,boot_option:local'
$ ironic node-update 1a4e30da-b6dc-499d-ba87-0bd8a3819bc0 add properties/capabilities='profile:control,boot_option:local'
其中的 profile:computeprofile:control 选项会把节点标记为相关的档案。
这些命令同时也设置了 boot_option:local 参数,它定义了每个节点的引导模式。

6.2.4. 为基本使用情景创建 flavor

另外,director 还需要一组硬件档案(或称为 flavor)以供注册的节点使用。在这个使用情景中,我们会分别为 Compute 节点和 Controller 节点各创建一个档案。
$ openstack flavor create --id auto --ram 6144 --disk 40 --vcpus 4 control
$ openstack flavor create --id auto --ram 6144 --disk 40 --vcpus 4 compute
这为您的节点创建了两个 flavor:controlcompute。我们还为每个 flavor 设置了额外的属性。
$ openstack flavor set --property "cpu_arch"="x86_64" --property "capabilities:boot_option"="local" --property "capabilities:profile"="compute" compute
$ openstack flavor set --property "cpu_arch"="x86_64" --property "capabilities:boot_option"="local" --property "capabilities:profile"="control" control
capabilities:boot_option 为 flavor 设置了引导模式,capabilities:profile 定义了要使用的档案。这会和在 第 6.2.3 节 “手工为节点添加标签” 中被添加了相同标签的相关节点进行连接。

6.2.5. 分离 External 网络

director 提供了配置分离 overcloud 网络的方法。这意味着,Overcloud 环境把不同类型的网络数据分离到不同的网络,从而可以把特定的网络数据分配给特定的网络接口或接口绑定。在配置完分离的网络后,director 会配置 OpenStack 服务来使用分离的网络。如果没有配置分离的网络,所有服务都会在 Provisioning 网络中运行。
这个使用情景使用两个分离的网络:
  • 网络 1 - Provisioning 网络。Internal API、Storage、Storage Management 和 Tenant 网络也使用这个网络。
  • 网络 2 - External 网络。这个网络使用一个专用的接口来连接 Overcloud 以外的环境。
以下小节介绍了如何创建 Heat 模板来把 External 网络和其它所有服务进行分离。

6.2.5.1. 创建自定义接口模板

Overcloud 网络配置需要一组网络接口模板。您可以对这些模板进行定制来基于角色对节点进行配置。这些模板是 YAML 格式的标准 Heat 模板(请参阅 第 5 章 了解 Heat 模板)。director 包括了一组模板实例以供参考:
  • /usr/share/openstack-tripleo-heat-templates/network/config/single-nic-vlans - 这个目录中包括了基于角色的、带有 VLAN 配置的单独 NIC 的模板。
  • /usr/share/openstack-tripleo-heat-templates/network/config/bond-with-vlans - 这个目录中包括了基于角色的、绑定 NIC 配置的模板。
对于基本的 Overcloud 用户情景,我们使用默认的单独 NIC 示例配置。把默认的配置目录复制到 stack 用户的家目录,命名为 nic-configs
$ cp -r /usr/share/openstack-tripleo-heat-templates/network/config/single-nic-vlans ~/templates/nic-configs
这会创建一组本地的 Heat 模板,它们定义了 External 网络使用的一个单网络接口配置。每个模板都包括标准的 parametersresourcesoutput 项。这里,我们只编辑 resources 项,每个 resources 以以下内容开始:
resources:
  OsNetConfigImpl:
    type: OS::Heat::StructuredConfig
    properties:
      group: os-apply-config
      config:
        os_net_config:
          network_config:
这会创建一个对 os-apply-config 命令和 os-net-config 子命令的请求来为一个节点配置网络属性。network_config 项中包括了自定义的接口配置,这些配置以类型的形式进行组织,它们包括:
interface
定义一个单独网络接口。这个配置指定了每个接口需要使用实际的接口名("eth0"、"eth1"、"enp0s25")还是使用接口编号("nic1"、"nic2"、"nic3")。
            - type: interface
              name: nic2
vlan
定义一个 VLAN。使用从 parameters 项中传递来的 VLAN ID 和子网。
            - type: vlan
              vlan_id: {get_param: ExternalNetworkVlanID}
              addresses:
                - ip_netmask: {get_param: ExternalIpSubnet}
ovs_bond
定义 Open vSwitch 中的绑定。一个绑定会把两个 interfaces 组合在一起来起到冗余和增加带宽的目的。
            - type: ovs_bond
              name: bond1
              members:
              - type: interface
                name: nic2
              - type: interface
                name: nic3
ovs_bridge
在 Open vSwitch 中定义网桥。网桥把多个 interfacebondvlan 对象连接在一起。
            - type: ovs_bridge
              name: {get_input: bridge_name}
              members:
                - type: ovs_bond
                  name: bond1
                  members:
                    - type: interface
                      name: nic2
                      primary: true
                    - type: interface
                      name: nic3
                - type: vlan
                  device: bond1
                  vlan_id: {get_param: ExternalNetworkVlanID}
                  addresses:
                    - ip_netmask: {get_param: ExternalIpSubnet}
如需了解更详细的信息,请参阅 附录 D, 网络接口参数
对于基本的使用情景,修改每个接口模板来把 External 网络移到 nic2。这可以保证在每个节点上使用第二个网络接口作为 External 网络。例如,在 templates/nic-configs/controller.yaml 模板中:
          network_config:
            - type: ovs_bridge
              name: {get_input: bridge_name}
              use_dhcp: true
              members:
                - type: interface
                  name: nic1
                  # force the MAC address of the bridge to this interface
                  primary: true
                - type: vlan
                  vlan_id: {get_param: InternalApiNetworkVlanID}
                  addresses:
                    - ip_netmask: {get_param: InternalApiIpSubnet}
                - type: vlan
                  vlan_id: {get_param: StorageNetworkVlanID}
                  addresses:
                    - ip_netmask: {get_param: StorageIpSubnet}
                - type: vlan
                  vlan_id: {get_param: StorageMgmtNetworkVlanID}
                  addresses:
                    - ip_netmask: {get_param: StorageMgmtIpSubnet}
                - type: vlan
                  vlan_id: {get_param: TenantNetworkVlanID}
                  addresses:
                    - ip_netmask: {get_param: TenantIpSubnet}
            - type: interface
              name: nic2
              addresses:
                - ip_netmask: {get_param: ExternalIpSubnet}
              routes:
                - ip_netmask: 0.0.0.0/0
                  next_hop: {get_param: ExternalInterfaceDefaultRoute}
上面的实例创建了一个新接口(nic2),重新分配 External 网络地址,并路由到新的接口。
附录 E, 网络接口模板示例 中包括了更多网络接口模板示例。
请注意,许多参数使用了 get_param 功能。我们在一个针对于我们的网络所创建的一个环境文件中定义它们。

重要

禁用没有使用的接口来避免不必要的默认路由和网络回路。例如:
- type: interface
  name: nic1
  use_dhcp: true
确定从所有网桥上删除了这些接口。

6.2.5.2. 创建一个基本 Overcloud 网络环境模板

网络环境文件描述了 Overcloud 的网络环境,并指向在前一节中提到的网络接口配置文件。我们在定义网络 IP 地址范围的同时还定义子网。我们需要根据本地环境对这些值进行定制。
这个使用情景使用以下网络环境文件(被保存为 /home/stack/templates/network-environment.yaml):
resource_registry:
  OS::TripleO::BlockStorage::Net::SoftwareConfig: /home/stack/templates/nic-configs/cinder-storage.yaml
  OS::TripleO::Compute::Net::SoftwareConfig: /home/stack/templates/nic-configs/compute.yaml
  OS::TripleO::Controller::Net::SoftwareConfig: /home/stack/templates/nic-configs/controller.yaml
  OS::TripleO::ObjectStorage::Net::SoftwareConfig: /home/stack/templates/nic-configs/swift-storage.yaml
  OS::TripleO::CephStorage::Net::SoftwareConfig: /home/stack/templates/nic-configs/ceph-storage.yaml

parameters:
  # Set to "br-ex" if using floating IPs on native VLAN on bridge br-ex
  Controller-1::NeutronExternalNetworkBridge: "''"

parameter_defaults:
  ExternalNetCidr: 10.1.1.0/24
  ExternalAllocationPools: [{'start': '10.1.1.2', 'end': '10.1.1.50'}]
  ExternalNetworkVlanID: 100
  ExternalInterfaceDefaultRoute: 10.1.1.1
resource_registry 项包括了到每个节点角色的网络接口模板的连接。请注意,ExternalAllocationPools 参数只定义了一个小的 IP 地址范围。因此,我们可以在以后定义一个独立的浮动 IP 地址范围。
parameters 项为浮动 IP 地址定义了使用的网桥。如果浮动 IP 地址使用标记的 VLAN(tagged VLAN),把这个值设为一对单引号(这会使用默认值 br-int)。在其它情况下,把它设置为默认的外部网桥值(通常是 br-ex)。

重要

NeutronExternalNetworkBridge 参数需要 Controller-1:: 前缀,并在创建一个基于计划的 Overcloud 时是 parameters 项的一般分。这是因为计划处理参数的方式。如果需要创建一个自定义的、基于 Heat 模板的 Overcloud(如高级 Overcloud 使用情景中提到的系统),这个参数只是 NeutronExternalNetworkBridge,并被放置在 parameter_defaults 项中。如需了解这两者间的不同,请参阅 第 6.3.7.2 节 “创建一个高级的 Overcloud 网络环境模板”
parameter_defaults 项包括了一组参数,它们被用来定义每个网络类型的网络选项。如需获得这些参数的详细信息,请参阅 附录 F, 网络环境选项
在这个使用情景中只定义了 External 网络的选项。其它所有网络流量类型被自动分配到 Provisioning 网络。

重要

由于资源可用性的问题,在创建 Overcloud 后改变网络配置可能会出现配置问题。例如,一个用户在网络分离模板中修改了一个网络的子网范围,因为这个资源可能已在使用,重新配置操作会失败。

6.2.6. 创建基本的 Overcloud

创建 OpenStack 环境的最后一个阶段是运行相关的命令来创建它。默认的计划会安装一个 Controller 节点和一个 Compute 节点。

过程 6.7. 创建 Overcloud

  1. 运行以下命令来查看 Overcloud 计划:
    $ openstack management plan list
    
    这会显示计划以及它的 UUID。记录下 UUID 以供下一步使用。
  2. 运行以下命令开始基本 Overcloud 的创建。使用前一步获得的实际 UUID 值替换 [UUID]
    $ openstack overcloud deploy --plan "[UUID]" -e /usr/share/openstack-tripleo-heat-templates/environments/network-isolation.yaml -e /home/stack/network-environment.yaml --control-flavor control --compute-flavor compute
    
    这个命令包括以下的额外选项:
    • --plan - 指定创建 Overcloud 使用的计划。它的值是 Overcloud 计划的 UUID。
    • -e /usr/share/openstack-tripleo-heat-templates/environments/network-isolation.yaml - -e 选项为 Overcloud 计划添加了一个额外的环境文件。在这里,它是一个初始化网络分离配置的环境文件。
    • -e /home/stack/templates/network-environment.yaml - -e 选项为 Overcloud 计划添加了一个环境文件。在这里,它是在 第 6.2.5.2 节 “创建一个基本 Overcloud 网络环境模板” 中创建的网络环境文件。
    • --control-flavor control - 为 Controller 节点使用一个特定的 flavor。
    • --compute-flavor compute - 为 Compute 节点使用一个特定的 flavor。

注意

运行以下命令可以获得选项的完全列表:
$ openstack help overcloud deploy
附录 G, 实施参数 包括了其它参数示例。
Overcloud 创建过程开始,director 会部署您的节点。这个过程需要一些时间完成。要查看 Overcloud 创建的状态,在另外一个终端窗口中以 stack 用户身份运行:
$ source ~/stackrc                # Initializes the stack user to use the CLI commands
$ heat stack-list --show-nested
heat stack-list --show-nested 命令会显示创建 Overcloud 的当前状态。

重要

请注意,这里使用了 -e 选项为 Overcloud 添加了环境文件。director 需要为 第 7 章 创建 Overcloud 后执行的任务 中的特定功能使用这些环境文件。

6.2.7. 访问基本的 Overcloud

director 产生一个文件来配置和验证 Overcloud 和 Undercloud 间的通讯。director 把这个文件保存为 stack 用户家目录的 overcloudrc 文件。运行以下命令来使用这个文件:
$ source ~/overcloudrc
这会加载从 director 主机的 CLI 访问 Overcloud 所需的环境变量。要返回 director 主机的原来的环境,运行以下命令:
$ source ~/stackrc

6.2.8. 完成基本的 Overcloud 创建

这包括创建基本的 Overcloud。如需了解更多创建后的功能,请参阅 第 7 章 创建 Overcloud 后执行的任务