Red Hat Training

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

spine Leaf Networking

Red Hat OpenStack Platform 13

使用 Red Hat OpenStack Platform director 配置路由的初始网络

OpenStack Documentation Team

摘要

本指南介绍了如何在 overcloud 上配置路由自叶网络的基本场景。这包括设置 undercloud、编写主配置文件并创建节点角色。

第 1 章 简介

本指南提供有关如何为 Red Hat OpenStack Platform 环境构建预置网络拓扑的信息。这包括端到端的场景和示例文件,以帮助在您自己的环境中复制更广泛的网络拓扑。

1.1. spine-leaf networking

Red Hat OpenStack Platform 的可组合网络架构使您能够将网络适应流行的路由叶型数据中心拓扑。在路由机型的实用应用程序中,叶叶表示为可组合的 Compute 或 Storage 角色,这通常位于数据中心机架中,如 图 1.1 “Route spine-leaf 示例” 所示。Leaf 0 机架具有 undercloud 节点、控制器和计算节点。可组合网络呈现给节点,节点已分配给可组合角色。在这个图表中:

  • StorageLeaf 网络呈现给 Ceph 存储和 Compute 节点。
  • NetworkLeaf 代表您希望构成的任何网络的示例。

图 1.1. Route spine-leaf 示例

249 OpenStack Spine Leaf 更新 0522 路由

1.2. 网络拓扑

路由自叶型裸机环境具有一个或多个第 3 层交换机,交换机在单独的第 2 层广播域中路由隔离 VLAN 之间的流量。

这种设计的目的是根据功能隔离流量。例如,如果控制器节点在内部 API 网络中托管 API,当计算节点访问 API 时,它应使用自己的内部 API 网络版本。要使此路由正常工作,您需要强制为内部 API 网络流量使用所需接口的路由。这可使用 supernet 路由进行配置。例如,如果您使用 172.18.0.0/24 作为控制器节点 的内部 API 网络,您可以将 172.18.1.0/24 用于第二个 内部 API 网络,对第三个内部 API 网络使用 172.1 8.2.0/24,以此类推。因此,您可以有一个指向更大 172.18.0.0/16 supernet 的路由,每个第 2 层域中的每个角色都使用本地 内部 API 网络上的网关 IP。

这种情境使用以下网络:

表 1.1. leaf 0 Networks

Network附加角色InterfaceBridge子网

置备/Control Plane

All

nic1

br-ctlplane (undercloud)

192.168.10.0/24

存储

Controller

nic2

 

172.16.0.0/24

Storage Mgmt

Controller

nic3

 

172.17.0.0/24

内部 API

Controller

nic4

 

172.18.0.0/24

租户

Controller

nic5

 

172.19.0.0/24

外部

Controller

nic6

br-ex

10.1.1.0/24

表 1.2. leaf 1 Networks

Network附加角色InterfaceBridge子网

置备/Control Plane

All

nic1

br-ctlplane (undercloud)

192.168.11.0/24

Storage1

Compute1、Ceph1

nic2

 

172.16.1.0/24

storage Mgmt1

Ceph1

nic3

 

172.17.1.0/24

内部 API1

Compute1

nic4

 

172.18.1.0/24

Tenant1

Compute1

nic5

 

172.19.1.0/24

表 1.3. leaf 2 Networks

Network附加角色InterfaceBridge子网

置备/Control Plane

All

nic1

br-ctlplane (undercloud)

192.168.12.0/24

Storage2

Compute2、Ceph2

nic2

 

172.16.2.0/24

Storage Mgmt2

Ceph2

nic3

 

172.17.2.0/24

内部 API2

Compute2

nic4

 

172.18.2.0/24

Tenant2

Compute2

nic5

 

172.19.2.0/24

表 1.4. Supernet 路由

Network子网

存储

172.16.0.0/16

Storage Mgmt

172.17.0.0/16

内部 API

172.18.0.0/16

租户

172.19.0.0/16

249 OpenStack Spine Leaf 更新 0522 API 网络

1.3. spine-leaf 要求

要在带有第 3 层路由架构的网络上部署 overcloud,您必须满足以下要求:

第 3 层路由
网络基础架构必须配置了路由,才能启用不同 L-2 网段之间的流量。这可以是静态的,也可以动态配置。
DHCP-Relay
每个不是 undercloud 的本地层2段都必须提供 dhcp-relay。您必须在连接 undercloud 的 provisioning 网络段上,转发 DHCP 请求到 undercloud。
注意

undercloud 使用两个 DHCP 服务器。一个用于裸机恢复节点内省,另一个用于部署 overcloud 节点。确保读取 DHCP 转发配置,以了解配置 dhcp-relay 时的要求。

1.4. spine-leaf 限制

  • 有些角色(如 Controller 角色)使用虚拟 IP 地址和集群。这种功能背后的机制需要在这些节点之间进行第 2 层网络连接。这些节点都放置在同一叶中。
  • 类似的限制适用于网络程序节点。网络服务使用虚拟路由器冗余协议(VRRP)在网络中实施高可用性默认路径。由于 VRRP 使用虚拟路由器 IP 地址,您必须将 master 和备份节点连接到同一个 L2 网络段。
  • 将租户或提供商网络与 VLAN 分段搭配使用时,您必须在所有网络器和 Compute 节点之间共享特定的 VLAN。
注意

可以使用多组 Networker 节点来配置网络服务。每个网络设置共享路由,VRRP 将在各组网络器节点上提供高度可用的默认路径。在这种配置中,共享网络的所有网络节点必须位于同一 L2 网络段中。

第 2 章 配置 undercloud

本节介绍了如何将 undercloud 配置为适应可组合网络的路由工作范围。

2.1. 配置 spine leaf provisioning 网络

要为 spine leaf 基础架构配置 provisioning 网络,请编辑 undercloud.conf 文件并设置以下步骤中定义的相关参数。

流程

  1. stack 用户的身份登录 undercloud。
  2. 如果您还没有 undercloud.conf,请复制示例模板文件:

    [stack@director ~]$ cp /usr/share/instack-undercloud/undercloud.conf.sample ~/undercloud.conf
  3. 编辑 undercloud.conf
  4. [DEFAULT] 部分中:

    1. local_ip 设置为 leaf0 上的 undercloud IP:

      local_ip = 192.168.10.1/24
    2. undercloud_public_vip 设置为 undercloud 的外 IP 地址:

      undercloud_public_vip = 10.1.1.1
    3. undercloud_admin_vip 设置为 undercloud 的管理 IP 地址。这个 IP 地址通常位于 leaf0 中:

      undercloud_admin_vip = 192.168.10.2
    4. local_interface 设置为为本地网络桥接的接口:

      local_interface = eth1
    5. enable_routed_networks 设置为 true

      enable_routed_networks = true
    6. 使用 subnets 参数定义子网列表。在路由的 spine 和 leafe 中为每个第 2 层段定义一个子网:

      subnets = leaf0,leaf1,leaf2
    7. 使用 local_subnet 参数指定与物理层 2 段本地关联的子网:

      local_subnet = leaf0
  5. 为每个使用 subnets 参数定义的子网创建一个新部分:

    [leaf0]
    cidr = 192.168.10.0/24
    dhcp_start = 192.168.10.10
    dhcp_end = 192.168.10.90
    inspection_iprange = 192.168.10.100,192.168.10.190
    gateway = 192.168.10.1
    masquerade = False
    
    [leaf1]
    cidr = 192.168.11.0/24
    dhcp_start = 192.168.11.10
    dhcp_end = 192.168.11.90
    inspection_iprange = 192.168.11.100,192.168.11.190
    gateway = 192.168.11.1
    masquerade = False
    
    [leaf2]
    cidr = 192.168.12.0/24
    dhcp_start = 192.168.12.10
    dhcp_end = 192.168.12.90
    inspection_iprange = 192.168.12.100,192.168.12.190
    gateway = 192.168.12.1
    masquerade = False
  6. 保存 undercloud.conf 文件。
  7. 运行 undercloud 安装命令:

    [stack@director ~]$ openstack undercloud install

这会在 provisioning 网络 / control plane 上创建三个子网。overcloud 使用每个网络来调配各个不同叶内的系统。

为确保正确转发对 undercloud 的 DHCP 请求,您可能需要配置 DHCP 转发。下一节提供了如何配置 DHCP 转发的一些信息。

2.2. 配置 DHCP 转发

undercloud 使用置备网络上的两个 DHCP 服务器:

  • 个用于内省。
  • 一个用于调配。

配置 DHCP 转发时,请确保将 DHCP 请求转发到 undercloud 上的两个 DHCP 服务器。

您可以将 UDP 广播用于支持它的设备,将 DHCP 请求中继到连接 undercloud 置备网络的 L2 网络段中。或者,也可以使用 UDP 单播,该单播将 DHCP 请求中继到特定的 IP 地址。

注意

在特定设备类型上配置 DHCP 转发不在本课程的讨论范围之内。作为参考,本文档提供了使用 ISC DHCP 软件中的实现的 DHCP 转发配置示例。有关如何使用此实施的详情,请参考 man page dhcrelay (8)。

广播 DHCP 转发

这个方法使用 UDP 广播流量转发 DHCP 请求到 DHCP 服务器所在的 L2 网络网段。网络片段中的所有设备接收广播流量。在使用 UDP 广播时,undercloud 上的 DHCP 服务器都会接收转发的 DHCP 请求。根据实现,这通常通过指定接口或 IP 网络地址来配置:

Interface
指定连接到 DHCP 请求转发的 L2 网络片段的接口。
IP 网络地址
指定 DHCP 请求转发的 IP 网络的网络地址。

单播 DHCP 转发

此方法利用 UDP 单播流量中继到特定 DHCP 服务器的 DHCP 请求。在使用 UDP 单播时,您必须配置提供 DHCP 转发的设备,以将 DHCP 请求中继到分配给分配给 undercloud 上内省的接口的 IP 地址,以及由 OpenStack Networking (neutron)服务创建的网络命名空间的 IP 地址,以托管 ctlplane 网络的 DHCP 服务。

内省的接口是 undercloud.conf 中的 inspection_interface 定义的接口。

注意

通常使用 br-ctlplane 接口进行内省。undercloud.conf 中定义为 local_ip 的 IP 地址位于 br-ctlplane 接口。

分配给 Neutron DHCP 命名空间的 IP 地址是 undercloud.conf 中为 local_subnet 配置的第一个地址。IP 范围中的第一个地址是配置中 dhcp_start 定义的地址。例如:在使用以下配置时,192.168. 10 将是 IP 地址:

[DEFAULT]
local_subnet = leaf0
subnets = leaf0,leaf1,leaf2

[leaf0]
cidr = 192.168.10.0/24
dhcp_start = 192.168.10.10
dhcp_end = 192.168.10.90
inspection_iprange = 192.168.10.100,192.168.10.190
gateway = 192.168.10.1
masquerade = False
警告

DHCP 命名空间的 IP 地址会自动分配。在大多数情况下,它是 IP 范围中的第一个地址。在 undercloud 上运行以下命令,确保验证情况是这种情况:

$ openstack port list --device-owner network:dhcp -c "Fixed IP Addresses"
+----------------------------------------------------------------------------+
| Fixed IP Addresses                                                         |
+----------------------------------------------------------------------------+
| ip_address='192.168.10.10', subnet_id='7526fbe3-f52a-4b39-a828-ec59f4ed12b2' |
+----------------------------------------------------------------------------+
$ openstack subnet show 7526fbe3-f52a-4b39-a828-ec59f4ed12b2 -c name
+-------+--------+
| Field | Value  |
+-------+--------+
| name  | leaf0  |
+-------+--------+

dhcrelay 配置示例

在以下示例中,dhcp 软件包中的 dhcrelay 命令使用以下配置:

  • 转发传入的 DHCP 请求的接口: eth1、 eth2eth3
  • 在网络段上接口 undercloud DHCP 服务器连接到: eth0
  • 用于内省的 DHCP 服务器正在侦听 IP 地址:"192.168.10.1。
  • 用于调配的 DHCP 服务器正在侦听 IP 地址 192.168.10.10

这会生成以下 dhcrelay 命令:

$ sudo dhcrelay -d --no-pid 172.20.0.10 172.20.0.1 \
  -i eth0 -i eth1 -i eth2 -i eth3

Cisco IOS 路由交换机配置示例

这个示例使用以下 Cisco IOS 配置来执行以下任务:

  • 配置 VLAN,以用于我们的调配网络。
  • 添加 leaf 的 IP 地址。
  • 将 UDP 和 BOOTP 请求转发到侦听 IP 地址的内省 DHCP 服务器:192. 168.10.1.
  • 将 UDP 和 BOOTP 请求转发到侦听 IP 地址 192.168.10.10 的调配 DHCP 服务器。
interface vlan 2
ip address 192.168.24.254 255.255.255.0
ip helper-address 192.168.10.1
ip helper-address 192.168.10.10
!

现在您已配置了 provisioning 网络,您可以配置剩余的 overcloud leaf 网络。您可以使用一系列配置文件完成此操作。

2.3. 为叶网络创建类别和标记节点

每个 leaf 网络中的每个角色都需要一个类别和角色分配,以便您可以将节点标记为其各自的叶向。此流程演示了如何创建每个类别并将其分配到角色。

流程

  1. Source stackrc 文件:

    $ source ~/stackrc
  2. 为每个自定义角色创建类别:

    $ ROLES="control0 compute_leaf0 compute_leaf1 compute_leaf2 ceph-storage_leaf0 ceph-storage_leaf1 ceph-storage_leaf2"
    $ for ROLE in $ROLES; do openstack flavor create --id auto --ram 4096 --disk 40 --vcpus 1 $ROLE ; done
    $ for ROLE in $ROLES; do openstack flavor set --property "cpu_arch"="x86_64" --property "capabilities:boot_option"="local" --property "capabilities:profile"="$ROLE" $ROLE ; done
  3. 将节点标记为其对应的 leaf network。例如,运行以下命令,将具有 UUID 58c3d07e-24f2-48a7-bbb6-6843f0e8ee13 的节点标记到 Leaf2 上的计算角色:

    $ openstack baremetal node set --property capabilities='profile:compute_leaf2,boot_option:local' 58c3d07e-24f2-48a7-bbb6-6843f0e8ee13
  4. 创建一个环境文件(~/templates/node-data.yaml),其中包含类别到角色的映射:

    parameter_defaults:
      OvercloudController0Flavor: control0
      Controller0Count: 3
      OvercloudCompute0Flavor: compute_leaf0
      Compute0Count: 3
      OvercloudCompute1Flavor: compute_leaf1
      Compute1Count: 3
      OvercloudCompute2Flavor: compute_leaf2
      Compute2Count: 3
      OvercloudCephStorage0Flavor: ceph-storage_leaf0
      CephStorage0Count: 3
      OvercloudCephStorage1Flavor: ceph-storage_leaf1
      CephStorage1Count: 3
      OvercloudCephStorage2Flavor: ceph-storage_leaf2
      CephStorage2Count: 3

    您还可以使用每个对应的 *Count' 参数设置要在 overcloud 中部署的节点数量。

2.4. 将裸机节点端口映射到 control plane 网络片段

要在 L3 路由网络中启用部署,裸机端口必须配置其 physical_network 字段。每个裸机端口都与 OpenStack Bare Metal (ironic)服务的裸机节点关联。物理网络名称是 undercloud 配置中的 子网 选项中使用的名称。

注意

undercloud.conf 中指定为 local_subnet 的子网物理网络名称是特殊的。它始终命名为 ctlplane

流程

  1. Source stackrc 文件:

    $ source ~/stackrc
  2. 检查裸机节点:

    $ openstack baremetal node list
  3. 确保裸机节点是 注册manageable 状态。如果裸机节点不在这些状态之一,则用于在 baremetal 端口上设置 physical_network 属性的命令将失败。要将所有节点设置为 manageable 状态,请运行以下命令:

    $ for node in $(openstack baremetal node list -f value -c Name); do openstack baremetal node manage $node --wait; done
  4. 检查哪些裸机端口与哪个裸机恢复节点关联。例如:

    $ openstack baremetal port list --node <node-uuid>
  5. 为端口设置 physical-network 参数。在以下示例中,在配置中定义三个子网: leaf0、leaf 1leaf2。local_subnet 是 leaf0。由于 local_subnet 的物理网络始终为 ctlplane,因此连接到 leaf0 的 baremetal 端口使用 ctlplane。其余端口使用其他 leaf 名称:

    $ openstack baremetal port set --physical-network ctlplane <port-uuid>
    $ openstack baremetal port set --physical-network leaf1 <port-uuid>
    $ openstack baremetal port set --physical-network leaf2 <port-uuid>
    $ openstack baremetal port set --physical-network leaf2 <port-uuid>
  6. 在部署 overcloud 前,确保节点处于 available 状态:

    $ openstack overcloud node provide --all-manageable

第 3 章 备选置备网络方法

本节包含有关将调配网络配置为适应可组合网络路由的准备方法的信息。

3.1. VLAN Provisioning 网络

在本例中,director 通过 provisioning 网络部署新的 overcloud 节点,并在第 3 层拓扑中使用 VLAN 隧道(请参阅 图 3.1 “VLAN 置备网络拓扑”)。这允许 director 的 DHCP 服务器将 DHCPOFFER 广播发送到任何 leaf。要建立此隧道,在 Top-of-Rack (ToR) leaf switch 之间中继 VLAN。在此图中,存储租用 网络会看到 Ceph 存储和 Compute 节点。NetworkLeaf 代表您希望构成的任何网络的示例。

图 3.1. VLAN 置备网络拓扑

249 OpenStack Spine Leaf updates 0522 VLAN

3.2. VXLAN 置备网络

在本例中,director 通过 provisioning 网络部署新的 overcloud 节点,并使用 VXLAN 隧道在第 3 层拓扑间跨级别部署(请参阅 图 3.2 “VXLAN 置备网络拓扑”)。这允许 director 的 DHCP 服务器将 DHCPOFFER 广播发送到任何 leaf。要建立此隧道,请在 Top-of-Rack (ToR) leaf switches 上配置 VXLAN 端点。

图 3.2. VXLAN 置备网络拓扑

249 OpenStack Spine Leaf 更新 0522 VXLAN

第 4 章 配置 overcloud

现在,您已配置了 undercloud,您可以配置剩余的 overcloud leaf 网络。您可以使用一系列配置文件完成此操作。之后,您部署 overcloud,生成的部署具有多个可用路由的网络集。

4.1. 创建网络数据文件

要定义 leaf 网络,您可以创建一个网络数据文件,其中包含每个可组合网络及其属性的 YAML 格式列表。默认网络数据位于 undercloud 上,位于 /usr/share/openstack-tripleo-heat-templates/network_data.yaml

流程

  1. stack 用户的本地目录中创建一个新的 network_data_spine_leaf.yaml 文件。使用默认 network_data 文件:

    $ cp /usr/share/openstack-tripleo-heat-templates/network_data.yaml /home/stack/network_data_spine_leaf.yaml
  2. network_data_spine_leaf.yaml 文件中,创建一个 YAML 列表,用于将每个网络和 leaf 网络定义为可组合网络项。例如,内部 API 网络及其 leaf 网络使用以下语法定义:

    # Internal API
    - name: InternalApi
      name_lower: internal_api
      vip: true
      ip_subnet: '172.18.0.0/24'
      allocation_pools: [{'start': '172.18.0.4', 'end': '172.18.0.250'}]
    - name: InternalApi1
      name_lower: internal_api1
      vip: false
      ip_subnet: '172.18.1.0/24'
      allocation_pools: [{'start': '172.18.1.4', 'end': '172.18.1.250'}]
    - name: InternalApi2
      name_lower: internal_api2
      vip: false
      ip_subnet: '172.18.2.0/24'
      allocation_pools: [{'start': '172.18.2.4', 'end': '172.18.2.250'}]
注意

您不能在网络数据文件中定义 Control Plane 网络,因为 undercloud 已创建这些网络。但是,您需要手动设置参数,以便 overcloud 能够相应地配置其 NIC。

注意

为包含基于 Controller 的服务的网络定义 vip: true。在本例中,In al Api 包含这些服务。

有关所有可组合网络的完整示例,请参阅 附录 A, network_data 文件示例

4.2. 创建角色数据文件

本节演示如何为每个叶定义每个可组合角色,并将可组合的网络附加到每个对应角色。

流程

  1. stack 用户本地目录中创建 自定义角色 director:

    $ mkdir ~/roles
  2. 将默认 Controller、Compute 和 Ceph Storage 角色从 director 的核心模板集合复制到 ~/roles 目录。重命名 Leaf 1 的文件:

    $ cp /usr/share/openstack-tripleo-heat-templates/roles/Controller.yaml ~/roles/Controller.yaml
    $ cp /usr/share/openstack-tripleo-heat-templates/roles/Compute.yaml ~/roles/Compute1.yaml
    $ cp /usr/share/openstack-tripleo-heat-templates/roles/CephStorage.yaml ~/roles/CephStorage1.yaml
  3. 编辑 Compute1.yaml 文件:

    $ vi ~/roles/Compute1.yaml
  4. 编辑此文件中 的名称网络HostnameFormatDefault 参数,以便它们与 Leaf 1 特定参数一致。例如:

    - name: Compute1
      ...
      networks:
        - InternalApi1
        - Tenant1
        - Storage1
      HostnameFormatDefault: '%stackname%-compute1-%index%'

    保存这个文件。

  5. 编辑 CephStorage1.yaml 文件:

    $ vi ~/roles/CephStorage1.yaml
  6. 编辑此文件中的 名称和 网络参数,以便它们与 Leaf 1 特定参数一致。另外,添加 HostnameFormatDefault 参数,再定义 Ceph Storage 节点的 Leaf 1 主机名。例如:

    - name: CephStorage1
      ...
      networks:
        - Storage1
        - StorageMgmt1
      HostnameFormatDefault: '%stackname%-cephstorage1-%index%'

    保存这个文件。

  7. 复制 Leaf 1 Compute 和 Ceph Storage 文件,作为您的 Leaf 2 和 Leaf 3 文件的基础:

    $ cp ~/roles/Compute1.yaml ~/roles/Compute2.yaml
    $ cp ~/roles/Compute1.yaml ~/roles/Compute3.yaml
    $ cp ~/roles/CephStorage1.yaml ~/roles/CephStorage2.yaml
    $ cp ~/roles/CephStorage1.yaml ~/roles/CephStorage3.yaml
  8. 编辑 Leaf 2 和 Leaf 3 文件中的 名称、network 和 HostnameFormatDefault 参数,以便它们与对应的 Leaf 网络参数一致。例如,Leaf 2 Compute 文件中的参数具有以下值:

    - name: Compute2
      ...
      networks:
        - InternalApi2
        - Tenant2
        - Storage2
      HostnameFormatDefault: '%stackname%-compute2-%index%'

    Leaf 2 Ceph Storage 参数具有以下值:

    - name: CephStorage2
      ...
      networks:
        - Storage2
        - StorageMgmt2
      HostnameFormatDefault: '%stackname%-cephstorage2-%index%'
  9. 当角色就绪时,使用以下命令生成完整角色数据文件:

    $ openstack overcloud roles generate --roles-path ~/roles -o roles_data_spine_leaf.yaml Controller Compute1 Compute2 Compute3 CephStorage1 CephStorage2 CephStorage3

    这会创建一个完整的 roles_data_spine_leaf.yaml 文件,其中包含每个对应 leaf 网络的所有自定义角色。

有关此文件的完整示例,请参阅 附录 C, roles_data 文件示例

每个角色都有自己的 NIC 配置。在配置 spine-leaf 配置前,您需要创建一个基础 NIC 模板集来适合您的当前的 NIC 配置。

4.3. 创建自定义 NIC 配置

每个角色都需要自己的 NIC 配置。创建 NIC 模板的基本集合副本,并进行修改以适合您的当前的 NIC 配置。

流程

  1. 进入核心 Heat 模板目录:

    $ cd /usr/share/openstack-tripleo-heat-templates
  2. 使用 tools/process-templates.py 脚本、自定义 network_data 文件和自定义 roles_data 文件呈现 Jinja2 模板:

    $ tools/process-templates.py -n /home/stack/network_data_spine_leaf.yaml \
        -r /home/stack/roles_data_spine_leaf.yaml \
        -o /home/stack/openstack-tripleo-heat-templates-spine-leaf
  3. 进入主目录:

    $ cd /home/stack
  4. 复制其中一个默认 NIC 模板的内容,以用作自旋模板的基础。例如,复制 single-nic-vlans

    $ cp -r openstack-tripleo-heat-templates-spine-leaf/network/config/single-nic-vlans/* \
        /home/stack/templates/spine-leaf-nics/.
  5. 删除渲染的模板目录:

    $ rm -rf openstack-tripleo-heat-templates-spine-leaf

Resources

  • 如需有关 自定义 NIC 模板 的更多信息,请参阅高级 Overcloud 自定义指南中的 "自定义网络接口模板"。

4.4. 编辑自定义 Controller NIC 配置

渲染的模板包含大部分内容,这是适合 spine-leaf 配置所需的大部分内容。但是,需要一些额外的配置更改。按照以下步骤修改 Leaf0 上 Controller 节点的 YAML 结构。

流程

  1. 进入您的自定义 NIC 目录:

    $ cd ~/templates/spine-leaf-nics/
  2. 编辑 controller0.yaml 的模板。
  3. 滚动到 parameters 部分中的 ControlPlaneSubnetCidrControlPlaneDefaultRoute 参数。这些参数类似于以下片断:

      ControlPlaneSubnetCidr: # Override this via parameter_defaults
        default: '24'
        description: The subnet CIDR of the control plane network.
        type: string
      ControlPlaneDefaultRoute: # Override this via parameter_defaults
        description: The default route of the control plane network.
        type: string

    修改这些参数以适合 Leaf0:

      ControlPlane0SubnetCidr: # Override this via parameter_defaults
        default: '24'
        description: The subnet CIDR of the control plane network.
        type: string
      ControlPlane0DefaultRoute: # Override this via parameter_defaults
        description: The default route of the control plane network.
        type: string
  4. 滚动到 parameters 部分中的 EC2MetadataIp 参数。这个参数类似以下片断:

      EC2MetadataIp: # Override this via parameter_defaults
        description: The IP address of the EC2 metadata server.
        type: string

    修改此参数以适合 Leaf0:

      Leaf0EC2MetadataIp: # Override this via parameter_defaults
        description: The IP address of the EC2 metadata server.
        type: string
  5. 滚动到网络配置部分。本节类似以下示例:

    resources:
      OsNetConfigImpl:
        type: OS::Heat::SoftwareConfig
        properties:
          group: script
          config:
            str_replace:
              template:
                get_file: ../../scripts/run-os-net-config.sh
              params:
                $network_config:
                  network_config:

    将脚本的位置改为绝对路径:

    resources:
      OsNetConfigImpl:
        type: OS::Heat::SoftwareConfig
        properties:
          group: script
          config:
            str_replace:
              template:
                get_file: /usr/share/openstack-tripleo-heat-templates/network/scripts/run-os-net-config.sh
              params:
                $network_config:
                  network_config:
  6. network_config 部分,定义 control plane / provisioning 接口。例如:

                  network_config:
                  - type: ovs_bridge
                    name: bridge_name
                    use_dhcp: false
                    dns_servers:
                      get_param: DnsServers
                    addresses:
                    - ip_netmask:
                        list_join:
                        - /
                        - - get_param: ControlPlaneIp
                          - get_param: ControlPlane0SubnetCidr
                    routes:
                    - ip_netmask: 169.254.169.254/32
                      next_hop:
                        get_param: Leaf0EC2MetadataIp
                    - ip_netmask: 192.168.10.0/24
                      next_hop:
                        get_param: ControlPlane0DefaultRoute

    请注意,本例中使用的参数特定于 Leaf0: ControlPlane0SubnetCidrLeaf0EC2MetadataIpControlPlane0DefaultRoute。还请注意,在 provisioning 网络(192.168.10.0/24)上用于 Leaf0 的 CIDR,它用作路由。

  7. members 部分中的每个 VLAN 包含相关的 Leaf0 参数。例如,存储网络 VLAN 信息应类似于以下代码片段:

                    - type: vlan
                      vlan_id:
                        get_param: Storage0NetworkVlanID
                      addresses:
                      - ip_netmask:
                          get_param: Storage0IpSubnet

    添加一个部分来为路由定义参数。这包括 supernet 路由(本例中为StorageSupernet )和 leaf default 路由(本例中为Storage0InterfaceDefaultRoute ):

                    - type: vlan
                      vlan_id:
                        get_param: Storage0NetworkVlanID
                      addresses:
                      - ip_netmask:
                          get_param: Storage0IpSubnet
                      routes:
                      - ip_netmask:
                          get_param: StorageSupernet
                        next_hop:
                          get_param: Storage0InterfaceDefaultRoute

    为以下 Controller 网络添加 VLAN 结构的路由: 存储StorageMgmtInternalApiTenant

  8. 保存这个文件。

4.5. 创建自定义 Compute NIC 配置

此流程为 Leaf0 Leaf1 和 Leaf2 上的 Compute 节点创建 YAML 结构。

流程

  1. 进入您的自定义 NIC 目录:

    $ cd ~/templates/spine-leaf-nics/
  2. 编辑 compute0.yaml 的模板。
  3. 滚动到 parameters 部分中的 ControlPlaneSubnetCidrControlPlaneDefaultRoute 参数。这些参数类似于以下片断:

      ControlPlaneSubnetCidr: # Override this via parameter_defaults
        default: '24'
        description: The subnet CIDR of the control plane network.
        type: string
      ControlPlaneDefaultRoute: # Override this via parameter_defaults
        description: The default route of the control plane network.
        type: string

    修改这些参数以适合 Leaf0:

      ControlPlane0SubnetCidr: # Override this via parameter_defaults
        default: '24'
        description: The subnet CIDR of the control plane network.
        type: string
      ControlPlane0DefaultRoute: # Override this via parameter_defaults
        description: The default route of the control plane network.
        type: string
  4. 滚动到 parameters 部分中的 EC2MetadataIp 参数。这个参数类似以下片断:

      EC2MetadataIp: # Override this via parameter_defaults
        description: The IP address of the EC2 metadata server.
        type: string

    修改此参数以适合 Leaf0:

      Leaf0EC2MetadataIp: # Override this via parameter_defaults
        description: The IP address of the EC2 metadata server.
        type: string
  5. 滚动到网络配置部分。本节类似以下片断:

    resources:
      OsNetConfigImpl:
        type: OS::Heat::SoftwareConfig
        properties:
          group: script
          config:
            str_replace:
              template:
                get_file: ../../scripts/run-os-net-config.sh
              params:
                $network_config:
                  network_config:

    将脚本的位置改为绝对路径:

    resources:
      OsNetConfigImpl:
        type: OS::Heat::SoftwareConfig
        properties:
          group: script
          config:
            str_replace:
              template:
                get_file: /usr/share/openstack-tripleo-heat-templates/network/scripts/run-os-net-config.sh
              params:
                $network_config:
                  network_config:
  6. network_config 部分,定义 control plane / provisioning 接口。例如:

                  network_config:
                  - type: interface
                    name: nic1
                    use_dhcp: false
                    dns_servers:
                      get_param: DnsServers
                    addresses:
                    - ip_netmask:
                        list_join:
                        - /
                        - - get_param: ControlPlaneIp
                          - get_param: ControlPlane0SubnetCidr
                    routes:
                    - ip_netmask: 169.254.169.254/32
                      next_hop:
                        get_param: Leaf0EC2MetadataIp
                    - ip_netmask: 192.168.10.0/24
                      next_hop:
                        get_param: ControlPlane0DefaultRoute

    请注意,本例中使用的参数特定于 Leaf0: ControlPlane0SubnetCidrLeaf0EC2MetadataIpControlPlane0DefaultRoute。还请注意,在 provisioning 网络(192.168.10.0/24)上用于 Leaf0 的 CIDR,它用作路由。

  7. members 部分中的每个 VLAN 应包含相关的 Leaf0 参数。例如,存储网络 VLAN 信息应类似于以下代码片段:

                    - type: vlan
                      vlan_id:
                        get_param: Storage0NetworkVlanID
                      addresses:
                      - ip_netmask:
                          get_param: Storage0IpSubnet

    添加一个部分来为路由定义参数。这包括 supernet 路由(本例中为StorageSupernet )和 leaf default 路由(本例中为Storage0InterfaceDefaultRoute ):

                    - type: vlan
                      vlan_id:
                        get_param: Storage0NetworkVlanID
                      addresses:
                      - ip_netmask:
                          get_param: Storage0IpSubnet
                      routes:
                      - ip_netmask:
                          get_param: StorageSupernet
                        next_hop:
                          get_param: Storage0InterfaceDefaultRoute

    为以下控制器网络添加 VLAN 结构: 存储InternalApiTenant

  8. 保存这个文件。
  9. 编辑 compute1.yaml 并执行相同的步骤。以下是更改列表:

    • ControlPlaneSubnetCidr 更改为 ControlPlane1SubnetCidr
    • ControlPlaneDefaultRoute 更改为 ControlPlane1DefaultRoute
    • EC2MetadataIp 更改为 Leaf1EC2MetadataIp
    • 将网络配置脚本从 ../. /scripts/run-os-net-config.sh 改为 /usr/share/openstack-tripleo-heat-templates/network/scripts/run-os-net-config.sh
    • 修改 control plane / provisioning 接口以使用 Leaf1 参数。
    • 修改每个 VLAN,使其包含 Leaf1 路由。

    完成后保存这个文件。

  10. 编辑 compute2.yaml 并执行相同的步骤。以下是更改列表:

    • ControlPlaneSubnetCidr 更改为 ControlPlane2SubnetCidr
    • ControlPlaneDefaultRoute 更改为 ControlPlane2DefaultRoute
    • EC2MetadataIp 更改为 Leaf2EC2MetadataIp
    • 将网络配置脚本从 ../. /scripts/run-os-net-config.sh 改为 /usr/share/openstack-tripleo-heat-templates/network/scripts/run-os-net-config.sh
    • 修改 control plane / provisioning 接口,以使用 Leaf2 参数。
    • 修改每个 VLAN,使其包含 Leaf2 路由。

    完成后保存这个文件。

4.6. 创建自定义 Ceph Storage NIC 配置

此流程为 Leaf0 Leaf1 和 Leaf2 上的 Ceph Storage 节点创建 YAML 结构。

流程

  1. 进入您的自定义 NIC 目录:

    $ cd ~/templates/spine-leaf-nics/
  2. 滚动到 parameters 部分中的 ControlPlaneSubnetCidrControlPlaneDefaultRoute 参数。这些参数类似于以下片断:

      ControlPlaneSubnetCidr: # Override this via parameter_defaults
        default: '24'
        description: The subnet CIDR of the control plane network.
        type: string
      ControlPlaneDefaultRoute: # Override this via parameter_defaults
        description: The default route of the control plane network.
        type: string

    修改这些参数以适合 Leaf0:

      ControlPlane0SubnetCidr: # Override this via parameter_defaults
        default: '24'
        description: The subnet CIDR of the control plane network.
        type: string
      ControlPlane0DefaultRoute: # Override this via parameter_defaults
        description: The default route of the control plane network.
        type: string
  3. 滚动到 parameters 部分中的 EC2MetadataIp 参数。这个参数类似以下片断:

      EC2MetadataIp: # Override this via parameter_defaults
        description: The IP address of the EC2 metadata server.
        type: string

    修改此参数以适合 Leaf0:

      Leaf0EC2MetadataIp: # Override this via parameter_defaults
        description: The IP address of the EC2 metadata server.
        type: string
  4. 滚动到网络配置部分。本节类似以下片断:

    resources:
      OsNetConfigImpl:
        type: OS::Heat::SoftwareConfig
        properties:
          group: script
          config:
            str_replace:
              template:
                get_file: ../../scripts/run-os-net-config.sh
              params:
                $network_config:
                  network_config:

    将脚本的位置改为绝对路径:

    resources:
      OsNetConfigImpl:
        type: OS::Heat::SoftwareConfig
        properties:
          group: script
          config:
            str_replace:
              template:
                get_file: /usr/share/openstack-tripleo-heat-templates/network/scripts/run-os-net-config.sh
              params:
                $network_config:
                  network_config:
  5. network_config 部分,定义 control plane / provisioning 接口。例如:

                  network_config:
                  - type: interface
                    name: nic1
                    use_dhcp: false
                    dns_servers:
                      get_param: DnsServers
                    addresses:
                    - ip_netmask:
                        list_join:
                        - /
                        - - get_param: ControlPlaneIp
                          - get_param: ControlPlane0SubnetCidr
                    routes:
                    - ip_netmask: 169.254.169.254/32
                      next_hop:
                        get_param: Leaf0EC2MetadataIp
                    - ip_netmask: 192.168.10.0/24
                      next_hop:
                        get_param: ControlPlane0DefaultRoute

    请注意,本例中使用的参数特定于 Leaf0: ControlPlane0SubnetCidrLeaf0EC2MetadataIpControlPlane0DefaultRoute。还请注意,在 provisioning 网络(192.168.10.0/24)上用于 Leaf0 的 CIDR,它用作路由。

  6. members 部分中的每个 VLAN 都包含相关的 Leaf0 参数。例如,存储网络 VLAN 信息应类似于以下代码片段:

                    - type: vlan
                      vlan_id:
                        get_param: Storage0NetworkVlanID
                      addresses:
                      - ip_netmask:
                          get_param: Storage0IpSubnet

    添加一个部分来为路由定义参数。这包括 supernet 路由(本例中为StorageSupernet )和 leaf default 路由(本例中为Storage0InterfaceDefaultRoute ):

                    - type: vlan
                      vlan_id:
                        get_param: Storage0NetworkVlanID
                      addresses:
                      - ip_netmask:
                          get_param: Storage0IpSubnet
                      routes:
                      - ip_netmask:
                          get_param: StorageSupernet
                        next_hop:
                          get_param: Storage0InterfaceDefaultRoute

    为以下 Controller 网络添加 VLAN 结构: 存储StorageMgmt

  7. 保存这个文件。
  8. 编辑 ceph-storage1.yaml 并执行相同的步骤。以下是更改列表:

    • ControlPlaneSubnetCidr 更改为 ControlPlane1SubnetCidr
    • ControlPlaneDefaultRoute 更改为 ControlPlane1DefaultRoute
    • EC2MetadataIp 更改为 Leaf1EC2MetadataIp
    • 将网络配置脚本从 ../. /scripts/run-os-net-config.sh 改为 /usr/share/openstack-tripleo-heat-templates/network/scripts/run-os-net-config.sh
    • 修改 control plane / provisioning 接口,以使用 Leaf1 参数。
    • 修改每个 VLAN,使其包含 Leaf1 路由。

    完成后保存这个文件。

  9. 编辑 ceph-storage2.yaml 并执行相同的步骤。以下是更改列表:

    • ControlPlaneSubnetCidr 更改为 ControlPlane2SubnetCidr
    • ControlPlaneDefaultRoute 更改为 ControlPlane2DefaultRoute
    • EC2MetadataIp 更改为 Leaf2EC2MetadataIp
    • 将网络配置脚本从 ../. /scripts/run-os-net-config.sh 改为 /usr/share/openstack-tripleo-heat-templates/network/scripts/run-os-net-config.sh
    • 修改 control plane / provisioning 接口,以使用 Leaf2 参数。
    • 修改每个 VLAN,使其包含 Leaf2 路由。

    完成后保存这个文件。

4.7. 创建网络环境文件

这个过程创建了基本网络环境文件,供以后使用。

流程

  1. 在 stack 用户的 templates 目录中创建 network-environment.yaml 文件。
  2. 在环境文件中添加以下部分:

    resource_registry:
    
    parameter_defaults:

    注意以下几点:

    • resource_registry 会将网络资源映射到对应的 NIC 模板。
    • parameter_defaults 将定义与配置相关的其他网络参数。

接下来的几个部分将详细信息添加到您的网络环境文件,以配置 spine leaf 架构的某些方面。完成后,您可以使用 openstack overcloud deploy 命令包含此文件。

4.8. 将网络资源映射到 NIC 模板

此流程将网络配置的相关资源映射到对应的 NIC 模板。

流程

  1. 编辑 network-environment.yaml 文件。
  2. 将资源映射添加到您的 resource_registry。资源名称采用以下格式:

    OS::TripleO::[ROLE]::Net::SoftwareConfig: [NIC TEMPLATE]

    对于本指南的场景,resource_registry 包含以下资源映射:

    resource_registry:
      OS::TripleO::Controller0::Net::SoftwareConfig: ./spine-leaf-nics/controller0.yaml
      OS::TripleO::Compute0::Net::SoftwareConfig: ./spine-leaf-nics/compute0.yaml
      OS::TripleO::Compute1::Net::SoftwareConfig: ./spine-leaf-nics/compute1.yaml
      OS::TripleO::Compute2::Net::SoftwareConfig: ./spine-leaf-nics/compute2.yaml
      OS::TripleO::CephStorage0::Net::SoftwareConfig: ./spine-leaf-nics/cephstorage0.yaml
      OS::TripleO::CephStorage1::Net::SoftwareConfig: ./spine-leaf-nics/cephstorage1.yaml
      OS::TripleO::CephStorage2::Net::SoftwareConfig: ./spine-leaf-nics/cephstorage2.yaml
  3. 保存 network-environment.yaml 文件。

4.9. spine leaf 路由

每个角色都需要在每个隔离的网络上路由,指向用于相同功能的其他子网。因此,当 Compute1 节点与 InternalApi VIP 上的控制器联系时,流量应该通过 InternalApi1 网关为目标。因此,从控制器返回到 InternalApi1 网络的流量应该经过 InternalApi 网络网关。

supernet 路由应用到每个角色上的所有隔离网络,以避免通过默认网关发送流量,默认为非控制器上的 Control Plane 网络,以及控制器上的 外部网络

您需要在隔离的网络上配置这些路由,因为 Red Hat Enterprise Linux 默认在入站流量上实施严格的反向路径过滤。如果 API 正在侦听 内部 API 接口,并且请求进入该 API,则仅当返回路径路由位于 内部 API 接口时,它才会接受请求。如果服务器正在侦听 内部 API 网络,但客户端的返回路径是通过 Control Plane,则服务器会因为反向路径过滤器而丢弃请求。

下图显示了通过 control plane 路由流量,这将无法成功。从路由器返回到控制器节点的返回路由与 VIP 正在侦听的接口不匹配,因此数据包会被丢弃。192.168.24.0/24 直接连接到控制器,因此被视为对 Control Plane 网络的本地。

图 4.1. 通过 Control Plane 路由流量

OpenStack Spine Leaf 466050 0218 拓扑

为了进行比较,示意图显示了通过内部 API 网络运行的路由:

图 4.2. 通过内部 API 路由流量

OpenStack Spine Leaf 466050 0218 拓扑 control plane

4.10. 为可组合网络分配路由

此流程定义叶型网络的路由。

流程

  1. 编辑 network-environment.yaml 文件。
  2. 将 supernet 路由参数添加到 parameter_defaults 部分。每个隔离的网络都应该应用一个 supernet 路由。例如:

    parameter_defaults:
      StorageSupernet: 172.16.0.0/16
      StorageMgmtSupernet: 172.17.0.0/16
      InternalApiSupernet: 172.18.0.0/16
      TenantSupernet: 172.19.0.0/16
    注意

    网络接口模板应包含每个网络的 supernet 参数。例如:

    - type: vlan
      vlan_id:
        get_param: Storage0NetworkVlanID
      addresses:
      - ip_netmask:
          get_param: Storage0IpSubnet
      routes:
      - ip_netmask:
          get_param: StorageSupernet
        next_hop:
          get_param: Storage0InterfaceDefaultRoute
  3. ServiceNetMap HostnameResolveNetwork 参数添加到 parameter_defaults 部分,为该部分提供叶有主机名列表,用于解析其他 leaf 节点。例如:

    parameter_defaults:
      ...
      ServiceNetMap:
        Compute1HostnameResolveNetwork: internal_api1
        Compute2HostnameResolveNetwork: internal_api2
        Compute3HostnameResolveNetwork: internal_api3
        CephStorage1HostnameResolveNetwork: storage1
        CephStorage2HostnameResolveNetwork: storage2
        CephStorage3HostnameResolveNetwork: storage3

    Compute 节点使用 leaf's 内部 API 网络和 Ceph Storage 节点使用leaf 的 Storage 网络。

  4. 将以下 ExtraConfig 设置添加到 parameter_defaults 部分,以解决计算和 Ceph Storage 节点上特定组件的路由:

    表 4.1. compute ExtraConfig 参数

    参数设置为该值

    nova::compute::libvirt::vncserver_listen

    VNC 服务器侦听的 IP 地址。

    nova::compute::vncserver_proxyclient_address

    运行 VNC 代理客户端的服务器 IP 地址。

    neutron::agents::ml2::ovs::local_ip

    OpenStack Networking (neutron)隧道端点的 IP 地址。

    cold_migration_ssh_inbound_addr

    用于冷迁移 SSH 连接的本地 IP 地址。

    live_migration_ssh_inbound_addr

    用于实时迁移 SSH 连接的本地 IP 地址。

    nova::migration::libvirt::live_migration_inbound_addr

    用于实时迁移流量的 IP 地址。

    注意

    如果使用 SSL/TLS,请将网络名称加上 "fqdn_" 的前面,以确保根据 FQDN 检查证书。

    nova::my_ip

    主机上计算(nova)服务的 IP 地址。

    tripleo::profile::base::database::mysql::client::mysql_client_bind_address

    数据库客户端的 IP 地址。在本例中,它是 Compute 节点上的 mysql 客户端。

    表 4.2. CephAnsibleExtraConfig 参数

    参数设置为该值

    public_network

    包含 Ceph 节点(每个叶一个)的所有存储网络的逗号分隔列表,如 172.16.0.0/24,172.16.1.0/24,172.16.2.0/24

    cluster_network

    包含 Ceph 节点的存储管理网络(每个叶一个)的逗号分隔列表,例如 172.17.0.0/24,172.17.1.0/24,172.17.2.0/24,172.17.2.0/24

    例如:

    parameter_defaults:
      ...
      Compute1ExtraConfig:
        nova::compute::libvirt::vncserver_listen: "%{hiera('internal_api1')}"
        nova::compute::vncserver_proxyclient_address: "%{hiera('internal_api1')}"
        neutron::agents::ml2::ovs::local_ip: "%{hiera('tenant1')}"
        cold_migration_ssh_inbound_addr: "%{hiera('internal_api1')}"
        live_migration_ssh_inbound_addr: "%{hiera('internal_api1')}"
        nova::migration::libvirt::live_migration_inbound_addr: "%{hiera('internal_api1')}"
        nova::my_ip: "%{hiera('internal_api1')}"
        tripleo::profile::base::database::mysql::client::mysql_client_bind_address: "%{hiera('internal_api1')}"
    
      Compute2ExtraConfig:
        nova::compute::libvirt::vncserver_listen: "%{hiera('internal_api2')}"
        nova::compute::vncserver_proxyclient_address: "%{hiera('internal_api2')}"
        neutron::agents::ml2::ovs::local_ip: "%{hiera('tenant2')}"
        cold_migration_ssh_inbound_addr: "%{hiera('internal_api2')}"
        live_migration_ssh_inbound_addr: "%{hiera('internal_api2')}"
        nova::migration::libvirt::live_migration_inbound_addr: "%{hiera('internal_api2')}"
        nova::my_ip: "%{hiera('internal_api2')}"
        tripleo::profile::base::database::mysql::client::mysql_client_bind_address: "%{hiera('internal_api2')}"
    
      Compute3ExtraConfig:
        nova::compute::libvirt::vncserver_listen: "%{hiera('internal_api3')}"
        nova::compute::vncserver_proxyclient_address: "%{hiera('internal_api3')}"
        neutron::agents::ml2::ovs::local_ip: "%{hiera('tenant3')}"
        cold_migration_ssh_inbound_addr: "%{hiera('internal_api3')}"
        live_migration_ssh_inbound_addr: "%{hiera('internal_api3')}"
        nova::migration::libvirt::live_migration_inbound_addr: "%{hiera('internal_api3')}"
        nova::my_ip: "%{hiera('internal_api3')}"
        tripleo::profile::base::database::mysql::client::mysql_client_bind_address: "%{hiera('internal_api3')}"
    
      CephAnsibleExtraConfig:
        public_network: '172.16.0.0/24,172.16.1.0/24,172.16.2.0/24'
        cluster_network: '172.17.0.0/24,172.17.1.0/24,172.17.2.0/24'

4.11. 设置 control plane 参数

您通常使用 network_data 文件为隔离自叶网络定义网络详情。例外是 undercloud 创建的 control plane 网络。但是,overcloud 需要访问每个分支的 control plane。这需要一些额外的参数,这些参数在 network-environment.yaml 文件中定义。例如,以下代码片段来自 Leaf0 上 Controller 角色的 NIC 模板

- type: interface
  name: nic1
  use_dhcp: false
  dns_servers:
    get_param: DnsServers
  addresses:
  - ip_netmask:
      list_join:
      - /
      - - get_param: ControlPlaneIp
        - get_param: ControlPlane0SubnetCidr
  routes:
  - ip_netmask: 169.254.169.254/32
    next_hop:
      get_param: Leaf0EC2MetadataIp
  - ip_netmask: 192.168.10.0/24
    next_hop:
      get_param: ControlPlane0DefaultRoute

在本例中,我们需要为 Leaf 0 上的对应 Control Plane 网络定义 IP、子网、元数据 IP 和默认路由。

流程

  1. 编辑 network-environment.yaml 文件。
  2. parameter_defaults 部分中:

    1. 将映射添加到主 control plane 子网:

      parameter_defaults:
        ...
        ControlPlaneSubnet: leaf0
    2. 为每个 spine-leaf 网络添加 control plane 子网映射:

      parameter_defaults:
        ...
        Controller0ControlPlaneSubnet: leaf0
        Compute0ControlPlaneSubnet: leaf0
        Compute1ControlPlaneSubnet: leaf1
        Compute2ControlPlaneSubnet: leaf2
        CephStorage0ControlPlaneSubnet: leaf0
        CephStorage1ControlPlaneSubnet: leaf1
        CephStorage2ControlPlaneSubnet: leaf2
    3. 为每个 leaf 添加 control plane 路由:

      parameter_defaults:
        ...
        ControlPlane0DefaultRoute: 192.168.10.1
        ControlPlane0SubnetCidr: '24'
        ControlPlane1DefaultRoute: 192.168.11.1
        ControlPlane1SubnetCidr: '24'
        ControlPlane2DefaultRoute: 192.168.12.1
        ControlPlane2SubnetCidr: '24'

      默认路由参数通常是为每个置备子网的网关设置的 IP 地址。如需更多信息,请参阅 undercloud.conf 文件。

    4. 为 EC2 元数据 IP 添加参数:

      parameter_defaults:
        ...
        Leaf0EC2MetadataIp: 192.168.10.1
        Leaf1EC2MetadataIp: 192.168.11.1
        Leaf2EC2MetadataIp: 192.168.12.1

      它们作为 EC2 元数据服务的 control plane (169.254.169.254/32)的路由,您应该在 provisioning 网络中的每个叶都设置为对应的 网关

  3. 保存 network-environment.yaml 文件。

4.12. 部署 spine-leaf enabled overcloud

现在,我们的所有文件均为我们的部署做好准备。本节提供了每个文件和部署命令的回顾:

流程

  1. 检查 /home/stack/template/network_data_spine_leaf.yaml 文件,并确保该文件包含每个 leaf 的每个网络。

    注意

    目前没有为网络子网和 allocation_pools 值执行验证。请确定您一致地定义这些,并且现有网络不会有冲突。

  2. 检查 ~/templates/spine-leaf-nics/ 中包含的 NIC 模板,并确保每个叶上每个角色的接口已正确定义。
  3. 检查 network-environment.yaml 环境文件,并确保它包含不超出网络数据文件控制的所有自定义参数。这包括引用每个角色的自定义 NIC 模板的路由、control plane 参数和 resource_registry 部分。
  4. 检查 /home/stack/templates/roles_data_spine_leaf.yaml 值,并确保为每个叶都定义了角色。
  5. 检查 '/home/stack/templates/nodes_data.yaml 文件,确保所有角色都具有分配的类别和节点数。也请检查每个 leaf 的所有节点都已正确标记。
  6. 运行 openstack overcloud deploy 命令,以应用 spine leaf 配置。例如:

    openstack overcloud deploy --templates \
    -n /home/stack/template/network_data_spine_leaf.yaml \
    -r /home/stack/templates/roles_data_spine_leaf.yaml \
    -e /usr/share/openstack-tripleo-heat-templates/environments/network-isolation.yaml \
    -e /home/stack/templates/network-environment.yaml \
    -e /home/stack/templates/nodes_data.yaml \
    -e [OTHER ENVIRONMENT FILES]
    • network-isolation.yaml 是同一位置(network-isolation.j2.yaml)中的 Jinja2 文件内容。包含此文件,以确保 director 将每个网络与其正确的树叶隔离开来。这可确保在 overcloud 创建过程中动态创建网络。
    • network-isolation.yaml 和其他基于网络的环境文件后面包括 network-environment.yaml 文件。这样可确保 network-environment.yaml 中定义的任何参数和资源覆盖之前在其他环境文件中定义的相同的参数和资源。
    • 添加额外的环境文件。例如,包含容器镜像位置或 Ceph 集群配置的环境文件。
  7. 等待 spine-leaf enabled overcloud 部署完毕。

附录 A. network_data 文件示例

# Storage
- name: Storage
  vip: true
  name_lower: storage
  ip_subnet: '172.16.0.0/24'
  allocation_pools: [{'start': '172.16.0.4', 'end': '172.16.0.250'}]
- name: Storage1
  vip: false
  name_lower: storage1
  ip_subnet: '172.16.1.0/24'
  allocation_pools: [{'start': '172.16.1.4', 'end': '172.16.1.250'}]
- name: Storage2
  vip: false
  name_lower: storage2
  ip_subnet: '172.16.2.0/24'
  allocation_pools: [{'start': '172.16.2.4', 'end': '172.16.2.250'}]

# StorageMgmt
- name: StorageMgmt
  name_lower: storage_mgmt
  vip: true
  ip_subnet: '172.17.0.0/24'
  allocation_pools: [{'start': '172.17.0.0', 'end': '172.17.0.250'}]
- name: StorageMgmt1
  name_lower: storage_mgmt1
  vip: false
  ip_subnet: '172.17.1.0/24'
  allocation_pools: [{'start': '172.17.1.4', 'end': '172.17.1.250'}]
- name: StorageMgmt2
  name_lower: storage_mgmt2
  vip: false
  ip_subnet: '172.17.2.0/24'
  allocation_pools: [{'start': '172.17.2.4', 'end': '172.17.2.250'}]

# Internal API
- name: InternalApi
  name_lower: internal_api
  vip: true
  ip_subnet: '172.18.0.0/24'
  allocation_pools: [{'start': '172.18.0.4', 'end': '172.18.0.250'}]
- name: InternalApi1
  name_lower: internal_api1
  vip: false
  ip_subnet: '172.18.1.0/24'
  allocation_pools: [{'start': '172.18.1.4', 'end': '172.18.1.250'}]
- name: InternalApi2
  name_lower: internal_api2
  vip: false
  ip_subnet: '172.18.2.0/24'
  allocation_pools: [{'start': '172.18.2.4', 'end': '172.18.2.250'}]

# Tenant
- name: Tenant
  vip: false  # Tenant network does not use VIPs
  name_lower: tenant
  ip_subnet: '172.19.0.0/24'
  allocation_pools: [{'start': '172.19.0.4', 'end': '172.19.0.250'}]
- name: Tenant1
  vip: false  # Tenant network does not use VIPs
  name_lower: tenant1
  ip_subnet: '172.19.1.0/24'
  allocation_pools: [{'start': '172.19.1.4', 'end': '172.19.1.250'}]
- name: Tenant2
  vip: false  # Tenant network does not use VIPs
  name_lower: tenant2
  ip_subnet: '172.19.2.0/24'
  allocation_pools: [{'start': '172.19.2.4', 'end': '172.19.2.250'}]

- name: External
  vip: true
  name_lower: external
  ip_subnet: '10.0.0.0/24'
  allocation_pools: [{'start': '10.0.0.4', 'end': '10.0.0.250'}]
  gateway_ip: '10.0.0.1'

附录 B. 自定义 NIC 模板

以下是一个模板,供您开始使用为 spine leaf 网络配置网络接口模板。请注意,resource 部分不完整,需要您的接口定义。

heat_template_version: queens

parameters:
  # Supernets
  StorageSupernet:
    type: string
  StorageMgmtSupernet:
    type: string
  InternalApiSupernet:
    type: string
  TenantSupernet:
    type: string
  ExternalSupernet:
    type: string

  # Default Routes
  ControlPlane0DefaultRoute:
    type: string
  ControlPlane1DefaultRoute:
    type: string
  ControlPlane2DefaultRoute:
    type: string
  StorageInterfaceDefaultRoute:
    type: string
  Storage1InterfaceDefaultRoute:
    type: string
  Storage2InterfaceDefaultRoute:
    type: string
  StorageMgmtInterfaceDefaultRoute:
    type: string
  StorageMgmt1InterfaceDefaultRoute:
    type: string
  StorageMgmt2InterfaceDefaultRoute:
    type: string
  InternalApiInterfaceDefaultRoute:
    type: string
  InternalApi1InterfaceDefaultRoute:
    type: string
  InternalApi2InterfaceDefaultRoute:
    type: string
  TenantInterfaceDefaultRoute:
    type: string
  Tenant1InterfaceDefaultRoute:
    type: string
  Tenant2InterfaceDefaultRoute:
    type: string
  ExternalInterfaceDefaultRoute:
    type: string

  # IP subnets
  StorageIpSubnet:
    default: ''
    type: string
  Storage1IpSubnet:
    default: ''
    type: string
  Storage2IpSubnet:
    default: ''
    type: string
  StorageMgmtIpSubnet:
    default: ''
    type: string
  StorageMgmt1IpSubnet:
    default: ''
    type: string
  StorageMgmt2IpSubnet:
    default: ''
    type: string
  InternalApiIpSubnet:
    default: ''
    type: string
  InternalApi1IpSubnet:
    default: ''
    type: string
  InternalApi2IpSubnet:
    default: ''
    type: string
  TenantIpSubnet:
    default: ''
    type: string
  Tenant1IpSubnet:
    default: ''
    type: string
  Tenant2IpSubnet:
    default: ''
    type: string
  ExternalIpSubnet:
    default: ''
    type: string
  ManagementIpSubnet:
    default: ''
    type: string

  # VLAN IDs
  StorageNetworkVlanID:
    type: number
  Storage1NetworkVlanID:
    type: number
  Storage2NetworkVlanID:
    type: number
  StorageMgmtNetworkVlanID:
    type: number
  StorageMgmt1NetworkVlanID:
    type: number
  StorageMgmt2NetworkVlanID:
    type: number
  InternalApiNetworkVlanID:
    type: number
  InternalApi1NetworkVlanID:
    type: number
  InternalApi1NetworkVlanID:
    type: number
  TenantNetworkVlanID:
    type: number
  Tenant1NetworkVlanID:
    type: number
  Tenant2NetworkVlanID:
    type: number
  ExternalNetworkVlanID:
    type: number
  ManagementNetworkVlanID:
    type: number

  # Subnet CIDR
  ControlPlane0SubnetCidr:
    type: string
  ControlPlane1SubnetCidr:
    type: string
  ControlPlane1SubnetCidr:
    type: string

  ControlPlaneIp:
    type: string
  DnsServers:
    type: comma_delimited_list

  # EC2 metadata server IPs
  Leaf0EC2MetadataIp:
    type: string
  Leaf1EC2MetadataIp:
    type: string
  Leaf2EC2MetadataIp:
    type: string

resources:
  OsNetConfigImpl:
    type: OS::Heat::SoftwareConfig
    properties:
      group: script
      config:
        str_replace:
          template:
            get_file: /usr/share/openstack-tripleo-heat-templates/network/scripts/run-os-net-config.sh
          params:
            $network_config:
              network_config:
                [NETWORK CONFIG HERE]

outputs:
  OS::stack_id:
    description: The OsNetConfigImpl resource.
    value:
      get_resource: OsNetConfigImpl

附录 C. roles_data 文件示例

###############################################################################
# Role: Controller0                                                           #
###############################################################################
- name: Controller0
  description: |
    Controller role that has all the controler services loaded and handles
    Database, Messaging and Network functions.
  CountDefault: 1
  tags:
    - primary
    - controller
  networks:
    - External
    - InternalApi
    - Storage
    - StorageMgmt
    - Tenant
  default_route_networks: ['External']
  HostnameFormatDefault: '%stackname%-controller0-%index%'
  uses_deprecated_params: True
  deprecated_param_extraconfig: 'controllerExtraConfig'
  deprecated_param_flavor: 'OvercloudControlFlavor'
  deprecated_param_image: 'controllerImage'
  deprecated_nic_config_name: 'controller.yaml'
  ServicesDefault:
    - OS::TripleO::Services::Aide
    - OS::TripleO::Services::AodhApi
    - OS::TripleO::Services::AodhEvaluator
    - OS::TripleO::Services::AodhListener
    - OS::TripleO::Services::AodhNotifier
    - OS::TripleO::Services::AuditD
    - OS::TripleO::Services::BarbicanApi
    - OS::TripleO::Services::BarbicanBackendSimpleCrypto
    - OS::TripleO::Services::BarbicanBackendDogtag
    - OS::TripleO::Services::BarbicanBackendKmip
    - OS::TripleO::Services::BarbicanBackendPkcs11Crypto
    - OS::TripleO::Services::CACerts
    - OS::TripleO::Services::CeilometerApi
    - OS::TripleO::Services::CeilometerCollector
    - OS::TripleO::Services::CeilometerExpirer
    - OS::TripleO::Services::CeilometerAgentCentral
    - OS::TripleO::Services::CeilometerAgentNotification
    - OS::TripleO::Services::CephExternal
    - OS::TripleO::Services::CephMds
    - OS::TripleO::Services::CephMgr
    - OS::TripleO::Services::CephMon
    - OS::TripleO::Services::CephRbdMirror
    - OS::TripleO::Services::CephRgw
    - OS::TripleO::Services::CertmongerUser
    - OS::TripleO::Services::CinderApi
    - OS::TripleO::Services::CinderBackendDellPs
    - OS::TripleO::Services::CinderBackendDellSc
    - OS::TripleO::Services::CinderBackendDellEMCUnity
    - OS::TripleO::Services::CinderBackendDellEMCVMAXISCSI
    - OS::TripleO::Services::CinderBackendDellEMCVNX
    - OS::TripleO::Services::CinderBackendDellEMCXTREMIOISCSI
    - OS::TripleO::Services::CinderBackendNetApp
    - OS::TripleO::Services::CinderBackendScaleIO
    - OS::TripleO::Services::CinderBackendVRTSHyperScale
    - OS::TripleO::Services::CinderBackup
    - OS::TripleO::Services::CinderHPELeftHandISCSI
    - OS::TripleO::Services::CinderScheduler
    - OS::TripleO::Services::CinderVolume
    - OS::TripleO::Services::Clustercheck
    - OS::TripleO::Services::Collectd
    - OS::TripleO::Services::Congress
    - OS::TripleO::Services::Docker
    - OS::TripleO::Services::Ec2Api
    - OS::TripleO::Services::Etcd
    - OS::TripleO::Services::ExternalSwiftProxy
    - OS::TripleO::Services::Fluentd
    - OS::TripleO::Services::GlanceApi
    - OS::TripleO::Services::GlanceRegistry
    - OS::TripleO::Services::GnocchiApi
    - OS::TripleO::Services::GnocchiMetricd
    - OS::TripleO::Services::GnocchiStatsd
    - OS::TripleO::Services::HAproxy
    - OS::TripleO::Services::HeatApi
    - OS::TripleO::Services::HeatApiCloudwatch
    - OS::TripleO::Services::HeatApiCfn
    - OS::TripleO::Services::HeatEngine
    - OS::TripleO::Services::Horizon
    - OS::TripleO::Services::Ipsec
    - OS::TripleO::Services::IronicApi
    - OS::TripleO::Services::IronicConductor
    - OS::TripleO::Services::IronicPxe
    - OS::TripleO::Services::Iscsid
    - OS::TripleO::Services::Keepalived
    - OS::TripleO::Services::Kernel
    - OS::TripleO::Services::Keystone
    - OS::TripleO::Services::LoginDefs
    - OS::TripleO::Services::ManilaApi
    - OS::TripleO::Services::ManilaBackendCephFs
    - OS::TripleO::Services::ManilaBackendIsilon
    - OS::TripleO::Services::ManilaBackendNetapp
    - OS::TripleO::Services::ManilaBackendUnity
    - OS::TripleO::Services::ManilaBackendVNX
    - OS::TripleO::Services::ManilaBackendVMAX
    - OS::TripleO::Services::ManilaScheduler
    - OS::TripleO::Services::ManilaShare
    - OS::TripleO::Services::Memcached
    - OS::TripleO::Services::MistralApi
    - OS::TripleO::Services::MistralEngine
    - OS::TripleO::Services::MistralExecutor
    - OS::TripleO::Services::MistralEventEngine
    - OS::TripleO::Services::MongoDb
    - OS::TripleO::Services::MySQL
    - OS::TripleO::Services::MySQLClient
    - OS::TripleO::Services::NeutronApi
    - OS::TripleO::Services::NeutronBgpVpnApi
    - OS::TripleO::Services::NeutronSfcApi
    - OS::TripleO::Services::NeutronCorePlugin
    - OS::TripleO::Services::NeutronDhcpAgent
    - OS::TripleO::Services::NeutronL2gwAgent
    - OS::TripleO::Services::NeutronL2gwApi
    - OS::TripleO::Services::NeutronL3Agent
    - OS::TripleO::Services::NeutronLbaasv2Agent
    - OS::TripleO::Services::NeutronLbaasv2Api
    - OS::TripleO::Services::NeutronLinuxbridgeAgent
    - OS::TripleO::Services::NeutronMetadataAgent
    - OS::TripleO::Services::NeutronML2FujitsuCfab
    - OS::TripleO::Services::NeutronML2FujitsuFossw
    - OS::TripleO::Services::NeutronOvsAgent
    - OS::TripleO::Services::NeutronVppAgent
    - OS::TripleO::Services::NovaApi
    - OS::TripleO::Services::NovaConductor
    - OS::TripleO::Services::NovaConsoleauth
    - OS::TripleO::Services::NovaIronic
    - OS::TripleO::Services::NovaMetadata
    - OS::TripleO::Services::NovaPlacement
    - OS::TripleO::Services::NovaScheduler
    - OS::TripleO::Services::NovaVncProxy
    - OS::TripleO::Services::Ntp
    - OS::TripleO::Services::ContainersLogrotateCrond
    - OS::TripleO::Services::OctaviaApi
    - OS::TripleO::Services::OctaviaDeploymentConfig
    - OS::TripleO::Services::OctaviaHealthManager
    - OS::TripleO::Services::OctaviaHousekeeping
    - OS::TripleO::Services::OctaviaWorker
    - OS::TripleO::Services::OpenDaylightApi
    - OS::TripleO::Services::OpenDaylightOvs
    - OS::TripleO::Services::OVNDBs
    - OS::TripleO::Services::OVNController
    - OS::TripleO::Services::Pacemaker
    - OS::TripleO::Services::PankoApi
    - OS::TripleO::Services::RabbitMQ
    - OS::TripleO::Services::Redis
    - OS::TripleO::Services::Rhsm
    - OS::TripleO::Services::RsyslogSidecar
    - OS::TripleO::Services::SaharaApi
    - OS::TripleO::Services::SaharaEngine
    - OS::TripleO::Services::Securetty
    - OS::TripleO::Services::SensuClient
    - OS::TripleO::Services::SkydiveAgent
    - OS::TripleO::Services::SkydiveAnalyzer
    - OS::TripleO::Services::Snmp
    - OS::TripleO::Services::Sshd
    - OS::TripleO::Services::SwiftProxy
    - OS::TripleO::Services::SwiftDispersion
    - OS::TripleO::Services::SwiftRingBuilder
    - OS::TripleO::Services::SwiftStorage
    - OS::TripleO::Services::Tacker
    - OS::TripleO::Services::Timezone
    - OS::TripleO::Services::TripleoFirewall
    - OS::TripleO::Services::TripleoPackages
    - OS::TripleO::Services::Tuned
    - OS::TripleO::Services::Vpp
    - OS::TripleO::Services::Zaqar
    - OS::TripleO::Services::Ptp
###############################################################################
# Role: Compute0                                                              #
###############################################################################
- name: Compute0
  description: |
    Basic Compute Node role
  CountDefault: 1
  networks:
    - InternalApi
    - Tenant
    - Storage
  HostnameFormatDefault: '%stackname%-compute0-%index%'
  uses_deprecated_params: True
  deprecated_param_image: 'NovaImage'
  deprecated_param_extraconfig: 'NovaComputeExtraConfig'
  deprecated_param_metadata: 'NovaComputeServerMetadata'
  deprecated_param_scheduler_hints: 'NovaComputeSchedulerHints'
  deprecated_param_ips: 'NovaComputeIPs'
  deprecated_server_resource_name: 'NovaCompute'
  deprecated_nic_config_name: 'compute.yaml'
  disable_upgrade_deployment: True
  ServicesDefault:
    - OS::TripleO::Services::Aide
    - OS::TripleO::Services::AuditD
    - OS::TripleO::Services::CACerts
    - OS::TripleO::Services::CephClient
    - OS::TripleO::Services::CephExternal
    - OS::TripleO::Services::CertmongerUser
    - OS::TripleO::Services::Collectd
    - OS::TripleO::Services::ComputeCeilometerAgent
    - OS::TripleO::Services::ComputeNeutronCorePlugin
    - OS::TripleO::Services::ComputeNeutronL3Agent
    - OS::TripleO::Services::ComputeNeutronMetadataAgent
    - OS::TripleO::Services::ComputeNeutronOvsAgent
    - OS::TripleO::Services::Docker
    - OS::TripleO::Services::Fluentd
    - OS::TripleO::Services::Ipsec
    - OS::TripleO::Services::Iscsid
    - OS::TripleO::Services::Kernel
    - OS::TripleO::Services::LoginDefs
    - OS::TripleO::Services::MySQLClient
    - OS::TripleO::Services::NeutronBgpVpnBagpipe
    - OS::TripleO::Services::NeutronLinuxbridgeAgent
    - OS::TripleO::Services::NeutronVppAgent
    - OS::TripleO::Services::NovaCompute
    - OS::TripleO::Services::NovaLibvirt
    - OS::TripleO::Services::NovaMigrationTarget
    - OS::TripleO::Services::Ntp
    - OS::TripleO::Services::ContainersLogrotateCrond
    - OS::TripleO::Services::OpenDaylightOvs
    - OS::TripleO::Services::Rhsm
    - OS::TripleO::Services::RsyslogSidecar
    - OS::TripleO::Services::Securetty
    - OS::TripleO::Services::SensuClient
    - OS::TripleO::Services::SkydiveAgent
    - OS::TripleO::Services::Snmp
    - OS::TripleO::Services::Sshd
    - OS::TripleO::Services::Timezone
    - OS::TripleO::Services::TripleoFirewall
    - OS::TripleO::Services::TripleoPackages
    - OS::TripleO::Services::Tuned
    - OS::TripleO::Services::Vpp
    - OS::TripleO::Services::OVNController
    - OS::TripleO::Services::OVNMetadataAgent
    - OS::TripleO::Services::Ptp
###############################################################################
# Role: Compute1                                                              #
###############################################################################
- name: Compute1
  description: |
    Basic Compute Node role
  CountDefault: 1
  networks:
    - InternalApi1
    - Tenant1
    - Storage1
  HostnameFormatDefault: '%stackname%-compute1-%index%'
  uses_deprecated_params: True
  deprecated_param_image: 'NovaImage'
  deprecated_param_extraconfig: 'NovaComputeExtraConfig'
  deprecated_param_metadata: 'NovaComputeServerMetadata'
  deprecated_param_scheduler_hints: 'NovaComputeSchedulerHints'
  deprecated_param_ips: 'NovaComputeIPs'
  deprecated_server_resource_name: 'NovaCompute'
  deprecated_nic_config_name: 'compute.yaml'
  disable_upgrade_deployment: True
  ServicesDefault:
    - OS::TripleO::Services::Aide
    - OS::TripleO::Services::AuditD
    - OS::TripleO::Services::CACerts
    - OS::TripleO::Services::CephClient
    - OS::TripleO::Services::CephExternal
    - OS::TripleO::Services::CertmongerUser
    - OS::TripleO::Services::Collectd
    - OS::TripleO::Services::ComputeCeilometerAgent
    - OS::TripleO::Services::ComputeNeutronCorePlugin
    - OS::TripleO::Services::ComputeNeutronL3Agent
    - OS::TripleO::Services::ComputeNeutronMetadataAgent
    - OS::TripleO::Services::ComputeNeutronOvsAgent
    - OS::TripleO::Services::Docker
    - OS::TripleO::Services::Fluentd
    - OS::TripleO::Services::Ipsec
    - OS::TripleO::Services::Iscsid
    - OS::TripleO::Services::Kernel
    - OS::TripleO::Services::LoginDefs
    - OS::TripleO::Services::MySQLClient
    - OS::TripleO::Services::NeutronBgpVpnBagpipe
    - OS::TripleO::Services::NeutronLinuxbridgeAgent
    - OS::TripleO::Services::NeutronVppAgent
    - OS::TripleO::Services::NovaCompute
    - OS::TripleO::Services::NovaLibvirt
    - OS::TripleO::Services::NovaMigrationTarget
    - OS::TripleO::Services::Ntp
    - OS::TripleO::Services::ContainersLogrotateCrond
    - OS::TripleO::Services::OpenDaylightOvs
    - OS::TripleO::Services::Rhsm
    - OS::TripleO::Services::RsyslogSidecar
    - OS::TripleO::Services::Securetty
    - OS::TripleO::Services::SensuClient
    - OS::TripleO::Services::SkydiveAgent
    - OS::TripleO::Services::Snmp
    - OS::TripleO::Services::Sshd
    - OS::TripleO::Services::Timezone
    - OS::TripleO::Services::TripleoFirewall
    - OS::TripleO::Services::TripleoPackages
    - OS::TripleO::Services::Tuned
    - OS::TripleO::Services::Vpp
    - OS::TripleO::Services::OVNController
    - OS::TripleO::Services::OVNMetadataAgent
    - OS::TripleO::Services::Ptp
###############################################################################
# Role: Compute2                                                              #
###############################################################################
- name: Compute2
  description: |
    Basic Compute Node role
  CountDefault: 1
  networks:
    - InternalApi2
    - Tenant2
    - Storage2
  HostnameFormatDefault: '%stackname%-compute2-%index%'
  uses_deprecated_params: True
  deprecated_param_image: 'NovaImage'
  deprecated_param_extraconfig: 'NovaComputeExtraConfig'
  deprecated_param_metadata: 'NovaComputeServerMetadata'
  deprecated_param_scheduler_hints: 'NovaComputeSchedulerHints'
  deprecated_param_ips: 'NovaComputeIPs'
  deprecated_server_resource_name: 'NovaCompute'
  deprecated_nic_config_name: 'compute.yaml'
  disable_upgrade_deployment: True
  ServicesDefault:
    - OS::TripleO::Services::Aide
    - OS::TripleO::Services::AuditD
    - OS::TripleO::Services::CACerts
    - OS::TripleO::Services::CephClient
    - OS::TripleO::Services::CephExternal
    - OS::TripleO::Services::CertmongerUser
    - OS::TripleO::Services::Collectd
    - OS::TripleO::Services::ComputeCeilometerAgent
    - OS::TripleO::Services::ComputeNeutronCorePlugin
    - OS::TripleO::Services::ComputeNeutronL3Agent
    - OS::TripleO::Services::ComputeNeutronMetadataAgent
    - OS::TripleO::Services::ComputeNeutronOvsAgent
    - OS::TripleO::Services::Docker
    - OS::TripleO::Services::Fluentd
    - OS::TripleO::Services::Ipsec
    - OS::TripleO::Services::Iscsid
    - OS::TripleO::Services::Kernel
    - OS::TripleO::Services::LoginDefs
    - OS::TripleO::Services::MySQLClient
    - OS::TripleO::Services::NeutronBgpVpnBagpipe
    - OS::TripleO::Services::NeutronLinuxbridgeAgent
    - OS::TripleO::Services::NeutronVppAgent
    - OS::TripleO::Services::NovaCompute
    - OS::TripleO::Services::NovaLibvirt
    - OS::TripleO::Services::NovaMigrationTarget
    - OS::TripleO::Services::Ntp
    - OS::TripleO::Services::ContainersLogrotateCrond
    - OS::TripleO::Services::OpenDaylightOvs
    - OS::TripleO::Services::Rhsm
    - OS::TripleO::Services::RsyslogSidecar
    - OS::TripleO::Services::Securetty
    - OS::TripleO::Services::SensuClient
    - OS::TripleO::Services::SkydiveAgent
    - OS::TripleO::Services::Snmp
    - OS::TripleO::Services::Sshd
    - OS::TripleO::Services::Timezone
    - OS::TripleO::Services::TripleoFirewall
    - OS::TripleO::Services::TripleoPackages
    - OS::TripleO::Services::Tuned
    - OS::TripleO::Services::Vpp
    - OS::TripleO::Services::OVNController
    - OS::TripleO::Services::OVNMetadataAgent
    - OS::TripleO::Services::Ptp
###############################################################################
# Role: CephStorage0                                                          #
###############################################################################
- name: CephStorage0
  description: |
    Ceph OSD Storage node role
  networks:
    - Storage0
    - StorageMgmt0
  HostnameFormatDefault: '%stackname%-cephstorage0-%index%'
  uses_deprecated_params: False
  deprecated_nic_config_name: 'ceph-storage.yaml'
  ServicesDefault:
    - OS::TripleO::Services::Aide
    - OS::TripleO::Services::AuditD
    - OS::TripleO::Services::CACerts
    - OS::TripleO::Services::CephOSD
    - OS::TripleO::Services::CertmongerUser
    - OS::TripleO::Services::Collectd
    - OS::TripleO::Services::Docker
    - OS::TripleO::Services::Fluentd
    - OS::TripleO::Services::Ipsec
    - OS::TripleO::Services::Kernel
    - OS::TripleO::Services::LoginDefs
    - OS::TripleO::Services::MySQLClient
    - OS::TripleO::Services::Ntp
    - OS::TripleO::Services::ContainersLogrotateCrond
    - OS::TripleO::Services::Rhsm
    - OS::TripleO::Services::RsyslogSidecar
    - OS::TripleO::Services::Securetty
    - OS::TripleO::Services::SensuClient
    - OS::TripleO::Services::Snmp
    - OS::TripleO::Services::Sshd
    - OS::TripleO::Services::Timezone
    - OS::TripleO::Services::TripleoFirewall
    - OS::TripleO::Services::TripleoPackages
    - OS::TripleO::Services::Tuned
    - OS::TripleO::Services::Ptp
###############################################################################
# Role: CephStorage1                                                          #
###############################################################################
- name: CephStorage1
  description: |
    Ceph OSD Storage node role
  networks:
    - Storage1
    - StorageMgmt1
  HostnameFormatDefault: '%stackname%-cephstorage1-%index%'
  uses_deprecated_params: False
  deprecated_nic_config_name: 'ceph-storage.yaml'
  ServicesDefault:
    - OS::TripleO::Services::Aide
    - OS::TripleO::Services::AuditD
    - OS::TripleO::Services::CACerts
    - OS::TripleO::Services::CephOSD
    - OS::TripleO::Services::CertmongerUser
    - OS::TripleO::Services::Collectd
    - OS::TripleO::Services::Docker
    - OS::TripleO::Services::Fluentd
    - OS::TripleO::Services::Ipsec
    - OS::TripleO::Services::Kernel
    - OS::TripleO::Services::LoginDefs
    - OS::TripleO::Services::MySQLClient
    - OS::TripleO::Services::Ntp
    - OS::TripleO::Services::ContainersLogrotateCrond
    - OS::TripleO::Services::Rhsm
    - OS::TripleO::Services::RsyslogSidecar
    - OS::TripleO::Services::Securetty
    - OS::TripleO::Services::SensuClient
    - OS::TripleO::Services::Snmp
    - OS::TripleO::Services::Sshd
    - OS::TripleO::Services::Timezone
    - OS::TripleO::Services::TripleoFirewall
    - OS::TripleO::Services::TripleoPackages
    - OS::TripleO::Services::Tuned
    - OS::TripleO::Services::Ptp
###############################################################################
# Role: CephStorage2                                                          #
###############################################################################
- name: CephStorage2
  description: |
    Ceph OSD Storage node role
  networks:
    - Storage2
    - StorageMgmt2
  HostnameFormatDefault: '%stackname%-cephstorage2-%index%'
  uses_deprecated_params: False
  deprecated_nic_config_name: 'ceph-storage.yaml'
  ServicesDefault:
    - OS::TripleO::Services::Aide
    - OS::TripleO::Services::AuditD
    - OS::TripleO::Services::CACerts
    - OS::TripleO::Services::CephOSD
    - OS::TripleO::Services::CertmongerUser
    - OS::TripleO::Services::Collectd
    - OS::TripleO::Services::Docker
    - OS::TripleO::Services::Fluentd
    - OS::TripleO::Services::Ipsec
    - OS::TripleO::Services::Kernel
    - OS::TripleO::Services::LoginDefs
    - OS::TripleO::Services::MySQLClient
    - OS::TripleO::Services::Ntp
    - OS::TripleO::Services::ContainersLogrotateCrond
    - OS::TripleO::Services::Rhsm
    - OS::TripleO::Services::RsyslogSidecar
    - OS::TripleO::Services::Securetty
    - OS::TripleO::Services::SensuClient
    - OS::TripleO::Services::Snmp
    - OS::TripleO::Services::Sshd
    - OS::TripleO::Services::Timezone
    - OS::TripleO::Services::TripleoFirewall
    - OS::TripleO::Services::TripleoPackages
    - OS::TripleO::Services::Tuned
    - OS::TripleO::Services::Ptp

附录 D. network_environment 文件示例

resource_registry:
  OS::TripleO::ControllerLeaf2::Net::SoftwareConfig: /home/stack/nics/controllerleaf2.yaml
  OS::TripleO::ComputeLeaf3::Net::SoftwareConfig: /home/stack/nics/computeleaf3.yaml
  OS::TripleO::ComputeLeaf4::Net::SoftwareConfig: /home/stack/nics/computeleaf4.yaml
parameter_defaults:
  ControlPlaneSubnet: leaf1
  ControllerLeaf2ControlPlaneSubnet: leaf2
  ComputeLeaf3ControlPlaneSubnet: leaf3
  ComputeLeaf4ControlPlaneSubnet: leaf4
  ControlPlaneDefaultRoute: 10.10.1.1
  ControlPlaneSubnetCidr: '24'
  ControlPlane2DefaultRoute: 10.10.2.1
  ControlPlane2SubnetCidr: '24'
  ControlPlane3DefaultRoute: 10.10.3.1
  ControlPlane3SubnetCidr: '24'
  ControlPlane4DefaultRoute: 10.10.4.1
  ControlPlane4SubnetCidr: '24'
  InternalApiSupernet: 10.20.0.0/16
  TenantSupernet: 10.30.0.0/16
  ProvisioningSupernet: 10.10.0.0/16
  EC2MetadataIp: 10.10.1.10
  Leaf2EC2MetadataIp: 10.10.1.10
  Leaf3EC2MetadataIp: 10.10.1.10
  Leaf4EC2MetadataIp: 10.10.1.10

  ServiceNetMap:
    ComputeLeaf3HostnameResolveNetwork: internal_api3
    ComputeLeaf4HostnameResolveNetwork: internal_api4

  ComputeLeaf3ExtraConfig:
    nova::compute::libvirt::vncserver_listen: "%{hiera('internal_api3')}"
    nova::compute::vncserver_proxyclient_address: "%{hiera('internal_api3')}"
    neutron::agents::ml2::ovs::local_ip: "%{hiera('tenant3')}"
    cold_migration_ssh_inbound_addr: "%{hiera('internal_api3')}"
    live_migration_ssh_inbound_addr: "%{hiera('internal_api3')}"
    nova::migration::libvirt::live_migration_inbound_addr: "%{hiera('internal_api3')}"
    nova::my_ip: "%{hiera('internal_api3')}"
    tripleo::profile::base::database::mysql::client::mysql_client_bind_address: "%{hiera('internal_api3')}"

  ComputeLeaf4ExtraConfig:
    nova::compute::libvirt::vncserver_listen: "%{hiera('internal_api4')}"
    nova::compute::vncserver_proxyclient_address: "%{hiera('internal_api4')}"
    neutron::agents::ml2::ovs::local_ip: "%{hiera('tenant4')}"
    cold_migration_ssh_inbound_addr: "%{hiera('internal_api4')}"
    live_migration_ssh_inbound_addr: "%{hiera('internal_api4')}"
    nova::migration::libvirt::live_migration_inbound_addr: "%{hiera('internal_api4')}"
    nova::my_ip: "%{hiera('internal_api4')}"
    tripleo::profile::base::database::mysql::client::mysql_client_bind_address: "%{hiera('internal_api4')}"

法律通告

Copyright © 2023 Red Hat, Inc.
The text of and illustrations in this document are licensed by Red Hat under a Creative Commons Attribution–Share Alike 3.0 Unported license ("CC-BY-SA"). An explanation of CC-BY-SA is available at http://creativecommons.org/licenses/by-sa/3.0/. In accordance with CC-BY-SA, if you distribute this document or an adaptation of it, you must provide the URL for the original version.
Red Hat, as the licensor of this document, waives the right to enforce, and agrees not to assert, Section 4d of CC-BY-SA to the fullest extent permitted by applicable law.
Red Hat, Red Hat Enterprise Linux, the Shadowman logo, the Red Hat logo, JBoss, OpenShift, Fedora, the Infinity logo, and RHCE are trademarks of Red Hat, Inc., registered in the United States and other countries.
Linux® is the registered trademark of Linus Torvalds in the United States and other countries.
Java® is a registered trademark of Oracle and/or its affiliates.
XFS® is a trademark of Silicon Graphics International Corp. or its subsidiaries in the United States and/or other countries.
MySQL® is a registered trademark of MySQL AB in the United States, the European Union and other countries.
Node.js® is an official trademark of Joyent. Red Hat is not formally related to or endorsed by the official Joyent Node.js open source or commercial project.
The OpenStack® Word Mark and OpenStack logo are either registered trademarks/service marks or trademarks/service marks of the OpenStack Foundation, in the United States and other countries and are used with the OpenStack Foundation's permission. We are not affiliated with, endorsed or sponsored by the OpenStack Foundation, or the OpenStack community.
All other trademarks are the property of their respective owners.