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 地址信息如下:
    Expand
    表 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"
        }
    ]
}
Copy to Clipboard Toggle word wrap
这个模板使用以下属性
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
Copy to Clipboard Toggle word wrap
这会导入模板,并把模板中的每个节点注册到 director。
为所有节点分配内核和 ramdisk 镜像:
$ openstack baremetal configure boot
Copy to Clipboard Toggle word wrap
现在,节点已在 director 中注册并被配置。使用以下命令可以在 CLI 中查看这些节点的列表:
$ openstack baremetal list
Copy to Clipboard Toggle word wrap

6.2.2. 检查节点硬件

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

重要

确保这个过程成功完成。它可能需要 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'
Copy to Clipboard Toggle word wrap
其中的 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
Copy to Clipboard Toggle word wrap
这为您的节点创建了两个 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
Copy to Clipboard Toggle word wrap
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
Copy to Clipboard Toggle word wrap
这会创建一组本地的 Heat 模板,它们定义了 External 网络使用的一个单网络接口配置。每个模板都包括标准的 parametersresourcesoutput 项。这里,我们只编辑 resources 项,每个 resources 以以下内容开始:
resources:
  OsNetConfigImpl:
    type: OS::Heat::StructuredConfig
    properties:
      group: os-apply-config
      config:
        os_net_config:
          network_config:
Copy to Clipboard Toggle word wrap
这会创建一个对 os-apply-config 命令和 os-net-config 子命令的请求来为一个节点配置网络属性。network_config 项中包括了自定义的接口配置,这些配置以类型的形式进行组织,它们包括:
interface
定义一个单独网络接口。这个配置指定了每个接口需要使用实际的接口名("eth0"、"eth1"、"enp0s25")还是使用接口编号("nic1"、"nic2"、"nic3")。
            - type: interface
              name: nic2
Copy to Clipboard Toggle word wrap
vlan
定义一个 VLAN。使用从 parameters 项中传递来的 VLAN ID 和子网。
            - type: vlan
              vlan_id: {get_param: ExternalNetworkVlanID}
              addresses:
                - ip_netmask: {get_param: ExternalIpSubnet}
Copy to Clipboard Toggle word wrap
ovs_bond
定义 Open vSwitch 中的绑定。一个绑定会把两个 interfaces 组合在一起来起到冗余和增加带宽的目的。
            - type: ovs_bond
              name: bond1
              members:
              - type: interface
                name: nic2
              - type: interface
                name: nic3
Copy to Clipboard Toggle word wrap
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}
Copy to Clipboard Toggle word wrap
如需了解更详细的信息,请参阅 附录 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}
Copy to Clipboard Toggle word wrap
上面的实例创建了一个新接口(nic2),重新分配 External 网络地址,并路由到新的接口。
附录 E, 网络接口模板示例 中包括了更多网络接口模板示例。
请注意,许多参数使用了 get_param 功能。我们在一个针对于我们的网络所创建的一个环境文件中定义它们。

重要

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

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
Copy to Clipboard Toggle word wrap
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
    
    Copy to Clipboard Toggle word wrap
    这会显示计划以及它的 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
    
    Copy to Clipboard Toggle word wrap
    这个命令包括以下的额外选项:
    • --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
Copy to Clipboard Toggle word wrap
附录 G, 实施参数 包括了其它参数示例。
Overcloud 创建过程开始,director 会部署您的节点。这个过程需要一些时间完成。要查看 Overcloud 创建的状态,在另外一个终端窗口中以 stack 用户身份运行:
$ source ~/stackrc                # Initializes the stack user to use the CLI commands
$ heat stack-list --show-nested
Copy to Clipboard Toggle word wrap
heat stack-list --show-nested 命令会显示创建 Overcloud 的当前状态。

重要

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

6.2.7. 访问基本的 Overcloud

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

6.2.8. 完成基本的 Overcloud 创建

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

学习

尝试、购买和销售

社区

关于红帽文档

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

让开源更具包容性

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

關於紅帽

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

Theme

© 2025 Red Hat