分布式计算节点和存储部署


Red Hat OpenStack Platform 17.0

部署 Red Hat OpenStack Platform 分布式计算节点技术

OpenStack Documentation Team

摘要

您可以使用分布式计算节点(DCN)架构部署 Red Hat OpenStack Platform (RHOSP),用于 heat 堆栈分离边缘站点可操作性。每个站点都可以具有自己的镜像服务(glance)多存储的 Ceph 存储后端。

第 1 章 了解 DCN

分布式计算节点(DCN)架构适用于边缘用例,允许在共享一个通用的集中式 control plane 的同时远程部署远程计算节点。DCN 架构使您能够在战略上定位工作负载,更接近您的操作需求,以获得更高的性能。

中央位置可由任何角色组成,但至少需要三个控制器。Compute 节点可以存在于边缘,以及中央位置。

DCN 架构是一个 hub 和 spoke 路由网络部署。DCN 与使用 Red Hat OpenStack Platform director 进行路由的置备和 control plane 网络的 spine 和 leaf 部署相当。

  • hub 是带有核心路由器和数据中心网关(DC-GW)的中央站点。
  • spoke 是远程边缘或页(leaf)。

边缘位置没有控制器,使其架构与 Red Hat OpenStack Platform 的传统部署不同:

  • control plane 服务在中央位置远程运行。
  • 未安装 Pacemaker。
  • 块存储服务(cinder)以主动/主动模式运行。
  • etcd 部署为分布式锁定管理器(DLM)。
高级别 dcn

1.1. 分布式计算节点架构所需的软件

下表显示了在分布式计算节点(DCN)架构中部署 Red Hat OpenStack Platform 所需的软件和最低版本:

Expand
平台版本选填

Red Hat Enterprise Linux

9

Red Hat OpenStack Platform

17.0

Red Hat Ceph Storage

5

1.2. 多堆栈设计

当您使用 DCN 设计部署 Red Hat OpenStack Platform (RHOSP)时,您可以使用 Red Hat director 的多个堆栈部署和管理功能将每个站点部署为不同的堆栈。

不支持将 DCN 架构作为单一堆栈进行管理,除非部署是从 Red Hat OpenStack Platform 13 升级的。不支持的方法来分割现有堆栈,但您可以将堆栈添加到预先存在的部署中。更多信息请参阅 第 A.3 节 “迁移到多堆栈部署”

Central 位置是 RHOSP 的传统堆栈部署,但您不需要使用中央堆栈部署 Compute 节点或 Red Hat Ceph 存储。

使用 DCN,您可以将每个位置部署为不同的可用区(AZ)。

1.3. DCN 存储

您可以在不使用存储的情况下,或使用 Ceph 在超融合节点上部署每个边缘站点。您部署的存储专用于部署它的站点。

DCN 架构使用 Glance 多存储。对于在没有存储的情况下部署的边缘站点,可以使用额外的工具,以便您可以在计算服务(nova)缓存中缓存和存储镜像。nova 中的缓存 Glance 镜像通过避免通过 WAN 链接下载镜像的过程,为实例提供更快的引导时间。更多信息请参阅 第 10 章 将 glance 镜像预缓存到 nova

1.4. DCN 边缘

使用分布式计算节点架构,您可以在中央站点部署控制节点,并使用这些控制器管理地理分散的边缘站点。当您部署边缘站点时,您仅部署计算节点,这将使边缘站点架构与 Red Hat OpenStack Platform 的传统部署不同。当您在边缘站点启动实例时,所需的镜像会自动复制到本地镜像服务(glance)存储中。您可以使用 glance 多存储在实例启动期间节省时间,从而将镜像从中央镜像存储复制到边缘站点。如需更多信息,请参阅具有多个存储的镜像服务

在边缘站点:

  • control plane 服务在中央位置远程运行。
  • Pacemaker 不会在 DCN 站点中运行。
  • 块存储服务(cinder)以主动/主动模式运行。
  • etcd 部署为分布式锁定管理器(DLM)。

第 2 章 规划分布式 Compute 节点(DCN)部署

在规划 DCN 架构时,请检查您需要的技术是否可用并提供支持。

2.1. DCN 架构上的存储注意事项

DCN 架构目前不支持以下功能:

  • 在边缘站点之间复制卷快照。您可以通过从卷创建镜像并使用 glance 来复制镜像来解决此问题。复制镜像后,您可以从其中创建卷。
  • 边缘 Ceph Rados 网关(RGW)
  • 边缘的 CephFS。
  • 边缘站点的实例高可用性(HA)。
  • 站点之间的 RBD 镜像功能.
  • 实例迁移、实时或冷迁移,可以在边缘站点之间,或者从中央位置到边缘站点。您仍然可以在站点边界内迁移实例。要在站点之间移动镜像,必须对镜像进行快照,并使用 glance image-import。如需更多信息,请参阅在 站点之间创建和复制确认镜像快照

另外,您必须考虑以下几点:

  • 在将镜像复制到边缘站点之前,必须将镜像上传到中央位置;每个镜像的副本必须存在于中央位置的镜像服务(glance)中。
  • 您必须将 RBD 存储驱动程序用于镜像、计算和块存储服务。
  • 对于每个站点,分配一个唯一的可用区,并为 NovaComputeAvailabilityZone 和 CinderStorageAvailabilityZone 参数使用相同的值。
  • 您可以将离线卷从边缘站点迁移到中央位置,反之亦然。您无法直接在边缘站点之间迁移卷。

2.2. DCN 架构上的网络的注意事项

DCN 架构目前不支持以下功能:

  • Octavia
  • DPDK 节点上的 DHCP
  • conntrack 用于 TC Flower Hardware Offload

DCN 上提供了 TC Flower Hardware Offload 的 conntrack 作为技术预览,因此红帽不会完全支持使用这些解决方案。此功能只应用于 DCN 进行测试,不应在生产环境中部署。有关技术预览功能的更多信息,请参阅覆盖范围详情。

以下 ML2/OVS 技术被完全支持:

  • DPDK 节点上没有 DHCP 的 OVS-DPDK
  • SR-IOV
  • TC 流硬件卸载,没有 conntrack
  • 边缘带有网络节点的 Neutron 可用区(AZ),每个站点有一个 AZ
  • 路由提供商网络

以下 ML2/OVN 网络技术被完全支持:

  • DPDK 节点上没有 DHCP 的 OVS-DPDK
  • SR-IOV (没有 DHCP)
  • TC 流硬件卸载,没有 conntrack
  • 路由提供商网络
  • 支持 Neutron AZ 的 OVN GW (网络节点)

另外,您必须考虑以下几点:

  • 网络延迟:平衡往返时间(RTT)的延迟,以及预期的并发 API 操作数,以保持可接受的性能。最大 TCP/IP 吞吐量与 RTT 相反。您可以通过调整内核 TCP 参数来降低高带宽的问题。如果跨站点通信超过 100 ms,请联系红帽支持。
  • Network outs:如果边缘站点临时丢失与中央站点的连接,则在停机期间,不会在受影响的边缘站点执行 OpenStack control plane API 或 CLI 操作。例如,边缘站点中的 Compute 节点无法创建实例的快照、签发身份验证令牌或删除镜像。常规 OpenStack control plane API 和 CLI 操作在此中断期间仍然可以正常工作,并可继续提供具有工作连接的其他边缘站点。Image type:在部署带有 Ceph 存储的 DCN 架构时,您必须使用 raw 镜像。
  • 镜像大小:

    • overcloud 节点镜像 - overcloud 节点镜像从中央 undercloud 节点下载。这些镜像可能是在调配期间将在所有必要网络中传输至边缘站点的大型文件。
    • 实例镜像:如果边缘没有块存储,则镜像服务镜像会先遍历 WAN。镜像在本地复制或缓存到目标边缘节点,供以后使用。glance 镜像没有大小限制。传输时间因可用带宽和网络延迟而异。

      如果边缘有块存储,则镜像异步复制到 WAN,以便在边缘快速引导时间。

  • 提供商网络 :这是 DCN 部署的建议网络方法。如果您在远程站点使用提供商网络,则必须考虑网络服务(neutron)不会将任何限制或检查放在可附加可用网络的位置。例如,如果您在边缘站点 A 中使用提供商网络,您必须确保不要尝试在边缘站点 B 中附加到提供商网络。这是因为当将其绑定到 Compute 节点时,提供商网络上没有验证检查。
  • 特定于站点的网络:如果您使用特定于某个站点的网络,则 DCN 网络中的一个限制:当您使用 Compute 节点部署集中式 neutron 控制器时,neutron 中没有触发器将特定的 Compute 节点识别为远程节点。因此,Compute 节点收到其他 Compute 节点列表,并互相自动形成隧道;隧道通过中央站点从边缘到边缘。如果您使用 VXLAN 或 Geneve,则每个站点中的每个 Compute 节点都会形成一个带有所有其他 Compute 节点和 Controller 节点的隧道,无论它们是本地还是远程的。如果您在任何地方使用相同的 neutron 网络,则这不是问题。使用 VLAN 时,neutron 期望所有 Compute 节点都有相同的网桥映射,并且所有 VLAN 都位于每个站点。
  • 其它站点: 如果需要从中央站点扩展到其他远程站点,您可以使用 Red Hat OpenStack Platform director 上的 openstack CLI 来添加新的网络段和子网。
  • 如果没有预置备边缘服务器,您必须配置 DHCP 转发,以便在路由片段上内省和调配。
  • 路由必须在云或将每个边缘站点连接到 hub 的网络基础架构中配置。您应该实施一个网络设计,为每个 Red Hat OpenStack Platform 集群网络(外部、内部 API 等)分配一个 L3 子网。

第 3 章 在 undercloud 中配置路由 spine-leaf

本节介绍如何配置 undercloud 以适应带有可组合网络的路由的 spine-leaf 的用例。

3.1. 配置 spine leaf provisioning 网络

要为您的 spine leaf 基础架构配置调配网络,请编辑 undercloud.conf 文件并设置以下流程中包含的相关参数。

流程

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

    [stack@director ~]$ cp /usr/share/python-tripleoclient/undercloud.conf.sample ~/undercloud.conf
    Copy to Clipboard Toggle word wrap
  3. 编辑 undercloud.conf 文件。
  4. [DEFAULT] 部分中设置以下值:

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

      local_ip = 192.168.10.1/24
      Copy to Clipboard Toggle word wrap
    2. undercloud_public_host 设置为 undercloud 的外部面向外部 IP 地址:

      undercloud_public_host = 10.1.1.1
      Copy to Clipboard Toggle word wrap
    3. undercloud_admin_host 设置为 undercloud 的管理 IP 地址。此 IP 地址通常位于 leaf0 上:

      undercloud_admin_host = 192.168.10.2
      Copy to Clipboard Toggle word wrap
    4. local_interface 设置为本地网络的桥接接口:

      local_interface = eth1
      Copy to Clipboard Toggle word wrap
    5. enable_routed_networks 设置为 true

      enable_routed_networks = true
      Copy to Clipboard Toggle word wrap
    6. 使用 subnets 参数定义子网列表。在路由 spine 和 leaf 中为每个 L2 片段定义一个子网:

      subnets = leaf0,leaf1,leaf2
      Copy to Clipboard Toggle word wrap
    7. 使用 local_subnet 参数指定与 undercloud 本地物理 L2 段关联的子网:

      local_subnet = leaf0
      Copy to Clipboard Toggle word wrap
    8. 设置 undercloud_nameservers 的值。

      undercloud_nameservers = 10.11.5.19,10.11.5.20
      Copy to Clipboard Toggle word wrap
      提示

      您可以通过查找 /etc/resolv.conf 来查找用于 undercloud 名称服务器的 DNS 服务器当前的 IP 地址。

  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
    Copy to Clipboard Toggle word wrap
  6. 保存 undercloud.conf 文件。
  7. 运行 undercloud 安装命令:

    [stack@director ~]$ openstack undercloud install
    Copy to Clipboard Toggle word wrap

此配置在 provisioning 网络或 control plane 上创建三个子网。overcloud 使用每个网络来置备每个对应叶中的系统。

为确保将 DHCP 请求转发到 undercloud,您可能需要配置 DHCP 转发。

3.2. 配置 DHCP 转发

您可以在连接到您要转发请求的远程网络段的交换机、路由器或服务器上运行 DHCP 转发服务。

注意

不要在 undercloud 上运行 DHCP 转发服务。

undercloud 在 provisioning 网络中使用两个 DHCP 服务器:

  • 内省 DHCP 服务器。
  • 置备 DHCP 服务器。

您必须配置 DHCP 转发,将 DHCP 请求转发到 undercloud 上的两个 DHCP 服务器。

您可以将 UDP 广播与支持它的设备一起使用,将 DHCP 请求中继到 undercloud 置备网络的 L2 网络段中。或者,您可以使用 UDP 单播,将 DHCP 请求转发到特定的 IP 地址。

注意

在特定设备类型上配置 DHCP 转发已超出本文档的范围。作为参考,本文档提供了一个使用 ISC DHCP 软件中的实现的 DHCP 转发配置示例。如需更多信息,请参阅 man page dhcrelay (8)。

重要

某些转发需要 DHCP 选项 79,特别是为 DHCPv6 地址提供 DHCPv6 地址的转发,以及未在原始 MAC 地址上传递的中继。如需更多信息,请参阅 RFC6939

广播 DHCP 转发

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

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

单播 DHCP 转发

此方法使用 UDP 单播流量将 DHCP 请求转发到特定的 DHCP 服务器。当使用 UDP 单播时,您需要配置一个设备,这个设备为转发 DHCP 请求进行转发到在 undercloud 中进行内省的接口所分配的 IP地址,以及 OpenStack Networking (neutron) 服务创建用于为 ctlplane 网络托管 DHCP 服务的网络命名空间的 IP 地址。

用于内省的接口是定义为 undercloud.conf 文件中的 inspection_interface 的接口。如果没有设置此参数,undercloud 的默认接口为 br-ctlplane

注意

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

分配给 Neutron DHCP 命名空间的 IP 地址是您在 undercloud.conf 文件中为 local_subnet 配置的第一个地址。IP 范围中的第一个地址是您在配置中定义为 dhcp_start 的地址。例如,如果您使用以下配置,则 192.168.10.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
Copy to Clipboard Toggle word wrap
警告

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  |
+-------+--------+
Copy to Clipboard Toggle word wrap

dhcrelay 配置示例

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

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

这会生成以下 dhcrelay 命令:

  • dhcrelay 版本 4.2.x:

    $ sudo dhcrelay -d --no-pid 192.168.10.10 192.168.10.1 \
      -i eth0 -i eth1 -i eth2 -i eth3
    Copy to Clipboard Toggle word wrap
  • dhcrelay 版本 4.3.x 及更新版本:

    $ sudo dhcrelay -d --no-pid 192.168.10.10 192.168.10.1 \
      -iu eth0 -id eth1 -id eth2 -id eth3
    Copy to Clipboard Toggle word wrap

Cisco IOS 路由交换机配置示例

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

  • 配置用于 provisioning 网络的 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
!
Copy to Clipboard Toggle word wrap

现在,您已经配置了 provisioning 网络,您可以配置剩余的 overcloud 叶网络。

3.3. 为叶节点设计角色

每个叶网络中的每个角色都需要类别和角色分配,以便您可以将节点标记到其对应的叶中。完成以下步骤以创建每个类别并将其分配给角色。

流程

  1. Source stackrc 文件:

    [stack@director ~]$ source ~/stackrc
    Copy to Clipboard Toggle word wrap
  2. 检索节点列表来识别它们的 UUID:

    (undercloud)$ openstack baremetal node list
    Copy to Clipboard Toggle word wrap
  3. 使用标识其叶网络和角色的自定义资源类为角色分配每个裸机节点。

    openstack baremetal node set \
     --resource-class baremetal.<ROLE> <node>
    Copy to Clipboard Toggle word wrap
    • 将 <ROLE> 替换为标识角色的名称。
    • 将 <node> 替换为裸机节点的 ID。

      例如,输入以下命令将 UUID 为 58c3d07e-24f2-48a7-bbb6-6843f0e8ee13 的节点标记到 Leaf2 上的 Compute 角色:

      (undercloud)$ openstack baremetal node set \
       --resource-class baremetal.COMPUTE-LEAF2 58c3d07e-24f2-48a7-bbb6-6843f0e8ee13
      Copy to Clipboard Toggle word wrap
  4. 如果还没有定义,请将每个角色添加到 overcloud-baremetal-deploy.yaml 中。
  5. 定义您要分配给角色节点的资源类:

    - name: <role>
      count: 1
      defaults:
        resource_class: baremetal.<ROLE>
    Copy to Clipboard Toggle word wrap
    • 将 <role> 替换为角色的名称。
    • 将 <ROLE> 替换为标识角色的名称。
  6. 在 baremetal-deploy.yaml 文件中,定义您要分配给角色节点的资源类。指定您要部署的角色、配置集、数量和相关网络:

    - name: <role>
      count: 1
      hostname_format: <role>-%index%
      ansible_playbooks:
        - playbook: bm-deploy-playbook.yaml
      defaults:
        resource_class: baremetal.<ROLE>
        profile: control
        networks:
          - network: external
            subnet: external_subnet
          - network: internal_api
            subnet: internal_api_subnet01
          - network: storage
            subnet: storage_subnet01
          - network: storage_mgmt
            subnet: storage_mgmt_subnet01
          - network: tenant
            subnet: tenant_subnet01
        network_config:
          template: templates/multiple_nics/multiple_nics_dvr.j2
          default_route_network:
            - external
    Copy to Clipboard Toggle word wrap
    • 将 <role> 替换为角色的名称。
    • 将 <ROLE> 替换为标识角色的名称。

      注意

      您必须为您要部署的每个堆栈创建一个 baremetal-deploy.yaml 环境文件,在 /home/stack/<stack> 中。

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

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

注意

undercloud.conf 文件中指定为 local_subnet 的子网物理网络名称始终命名为 ctlplane

流程

  1. Source stackrc 文件:

    $ source ~/stackrc
    Copy to Clipboard Toggle word wrap
  2. 检查裸机节点:

    $ openstack baremetal node list
    Copy to Clipboard Toggle word wrap
  3. 确保裸机节点处于 enrollmanageable 状态。如果裸机节点不在这些状态之一,在 baremetal 端口上设置 physical_network 属性的命令会失败。要将所有节点设置为 manageable 状态,请运行以下命令:

    $ for node in $(openstack baremetal node list -f value -c Name); do openstack baremetal node manage $node --wait; done
    Copy to Clipboard Toggle word wrap
  4. 检查哪些 baremetal 端口与哪些 baremetal 节点关联:

    $ openstack baremetal port list --node <node-uuid>
    Copy to Clipboard Toggle word wrap
  5. 为端口设置 physical-network 参数。在以下示例中,在配置中定义三个子网:leaf0, leaf1, 和 leaf2。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>
    Copy to Clipboard Toggle word wrap
  6. 在部署 overcloud 之前内省节点。包括 --all-manageable and--provide 选项来将节点设置为可用于部署:

    $ openstack overcloud node introspect --all-manageable --provide
    Copy to Clipboard Toggle word wrap

3.5. 将新叶添加到 spine-leaf provisioning 网络中

当增加可包括添加新物理站点的网络容量时,您可能需要向 Red Hat OpenStack Platform spine-leaf provisioning 网络添加新叶和对应的子网。在 overcloud 上置备叶时,会使用对应的 undercloud leaf。

先决条件

  • 您的 RHOSP 部署使用 spine-leaf 网络拓扑。

流程

  1. 以 stack 用户身份登录 undercloud 主机。
  2. 提供 undercloud 凭证文件:

    $ source ~/stackrc
    Copy to Clipboard Toggle word wrap
  3. /home/stack/undercloud.conf 文件中,执行以下操作:

    1. 找到 subnets 参数,并为您要添加的叶添加新子网。

      子网代表路由 spine 和 leaf 中的 L2 片段:

      示例

      在本例中,为新叶(leaf3)添加了一个新的子网(leaf3):

      subnets = leaf0,leaf1,leaf2,leaf3
      Copy to Clipboard Toggle word wrap
    2. 为您添加的子网创建一个部分。

      示例

      在本例中,为新子网 (leaf3) 增加了 [leaf3] 部分:

      [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
      
      [leaf3]
      cidr = 192.168.13.0/24
      dhcp_start = 192.168.13.10
      dhcp_end = 192.168.13.90
      inspection_iprange = 192.168.13.100,192.168.13.190
      gateway = 192.168.13.1
      masquerade = False
      Copy to Clipboard Toggle word wrap
  4. 保存 undercloud.conf 文件。
  5. 重新安装 undercloud:

    $ openstack undercloud install
    Copy to Clipboard Toggle word wrap

第 4 章 为 DCN 部署准备 overcloud 模板

4.1. 使用独立 heat 堆栈的先决条件

在使用单独的 heat 堆栈创建部署前,您的环境必须满足以下先决条件:

  • 安装了 Red Hat OpenStack Platform director 17.0 实例。
  • 对于 Ceph Storage 用户:访问 Red Hat Ceph Storage 5。
  • 对于中央位置:三个可以充当中央 Controller 节点的节点。所有三个 Controller 节点都必须处于相同的 heat 堆栈。您不能在单独的 heat 堆栈之间分割 Controller 节点或任何 control plane 服务。
  • 如果您计划在边缘部署 Ceph 存储,Ceph 存储是中央位置的要求。
  • 对于每个额外的 DCN 网站:三个 HCI 计算节点。
  • 所有节点都必须预先置备,或者能够从中央部署网络进行 PXE 引导。您可以使用 DHCP 转发为 DCN 启用这个连接。
  • ironic 已内省所有节点。
  • 红帽建议将 <role>HostnameFormat 参数保留为默认值:%stackname%-<role>-%index%。如果没有包含 %stackname% 前缀,您的 overcloud 会在不同的堆栈中为分布式计算节点使用相同的主机名。确保您的分布式计算节点使用 %stackname% 前缀来区分节点与不同边缘站点。例如,如果您部署名为 dcn0dcn1 的两个边缘站点,则堆栈名称前缀可帮助您区分 dcn0-distributedcompute-0 和 dcn1-distributedcompute-0。
  • 提供 centralrc 身份验证文件,以便在边缘站点和中央位置调度工作负载。您不需要为边缘站点自动生成身份验证文件。

4.2. 示例独立的 heat 堆栈部署的限制

本文档提供了一个示例部署,它在 Red Hat OpenStack Platform 上使用单独的 heat 堆栈。这个示例环境有以下限制:

  • spine/Leaf networking - 本指南中的示例不演示路由要求,在分布式计算节点(DCN)部署中需要。
  • Ironic DHCP Relay - 本指南不包括如何使用 DHCP 转发配置 Ironic。

4.3. 设计您的独立 heat 堆栈部署

要在单独的 heat 堆栈内对部署进行分段,您必须首先使用 control plane 部署单个 overcloud。然后,您可以为分布式计算节点(DCN)站点创建单独的堆栈。以下示例显示了不同节点类型的单独堆栈:

  • 控制器节点:一个名为 central 的独立 heat 堆栈,例如,部署控制器。为 DCN 站点创建新的 heat 堆栈时,您必须使用 中央 堆栈中的数据创建它们。Controller 节点必须可用于任何实例管理任务。
  • DCN 站点:您可以拥有独立的、唯一命名的 heat 堆栈,如 dcn 0、dcn1 等。使用 DHCP 转发将 provisioning 网络扩展到远程站点。
注意

您必须为每个堆栈创建单独的可用区(AZ)。

4.4. 管理独立的 heat 堆栈

本指南中的流程演示了如何为三个 heat 堆栈组织环境文件: centraldcn0dcn1。红帽建议将每个 heat 堆栈的模板存储在单独的目录中,以保持每个部署的信息被隔离。

流程

  1. 定义 中央 heat 堆栈:

    $ mkdir central
    $ touch central/overrides.yaml
    Copy to Clipboard Toggle word wrap
  2. 中央 heat 堆栈中的数据提取到所有 DCN 站点的通用目录中:

    $ mkdir dcn-common
    $ touch dcn-common/overrides.yaml
    $ touch overcloud-deploy/central/central-export.yaml
    Copy to Clipboard Toggle word wrap

    central-export.yaml 文件稍后由 openstack overcloud export 命令创建。

  3. 定义 dcn0 站点。

    $ mkdir dcn0
    $ touch dcn0/overrides.yaml
    Copy to Clipboard Toggle word wrap

要部署更多 DCN 站点,请按数字创建额外的 dcn 目录。

注意

touch 用于提供文件组织示例。每个文件都必须包含适当的内容才能成功部署。

4.5. 检索容器镜像

使用以下流程及其示例文件内容来检索使用单独的 heat 堆栈部署所需的容器镜像。通过使用边缘站点的环境文件运行 openstack container image prepare 命令,您必须确保包含可选或边缘特定服务的容器镜像。

如需更多信息,请参阅 准备容器镜像

流程

  1. 将 Registry Service Account 凭证添加到 containers.yaml

    parameter_defaults:
      ContainerImagePrepare:
      - push_destination: true
        set:
          ceph_namespace: registry.redhat.io/rhceph
          ceph_image: rhceph-5-rhel9
          ceph_tag: latest
          name_prefix: openstack-
          namespace: registry.redhat.io/rhosp17-rhel9
          tag: latest
      ContainerImageRegistryCredentials:
        # https://access.redhat.com/RegistryAuthentication
        registry.redhat.io:
          registry-service-account-username: registry-service-account-password
    Copy to Clipboard Toggle word wrap
  2. 将环境文件生成为 images-env.yaml

    sudo openstack tripleo container image prepare \
    -e containers.yaml \
    --output-env-file images-env.yaml
    Copy to Clipboard Toggle word wrap

    生成的 images-env.yaml 文件是作为生成它的堆栈的 overcloud 部署过程的一部分。

4.6. 为边缘创建快速数据路径角色

要在边缘使用快速数据路径服务,您必须创建一个自定义角色来定义快速数据路径和边缘服务。当您为部署创建 roles 文件时,您可以包括新创建的角色来定义分布式计算节点架构和快速数据路径服务(如 DPDK 或 SR-IOV)所需的服务。

例如,使用 DPDK 为 distributedCompute 创建自定义角色:

先决条件

成功安装 undercloud。有关更多信息 ,请参阅安装 undercloud

流程

  1. stack 用户身份登录 undercloud 主机。
  2. 复制 默认角色 目录:

    cp -r /usr/share/openstack-tripleo-heat-templates/roles ~/.
    Copy to Clipboard Toggle word wrap
  3. DistributedCompute.yaml 文件创建一个名为 DistributedComputeDpdk.yaml 的新文件:

    cp roles/DistributedCompute.yaml roles/DistributedComputeDpdk.yaml
    Copy to Clipboard Toggle word wrap
  4. 将 DPDK 服务添加到新的 DistributedComputeDpdk.yaml 文件中。您可以通过在 ComputeOvsDpdk.yaml 文件中识别没有存在于 DistributedComputeDpdk.yaml 文件中的的参数来识别需要添加的参数。

    diff -u roles/DistributedComputeDpdk.yaml roles/ComputeOvsDpdk.yaml
    Copy to Clipboard Toggle word wrap

    在输出中,前面带有 + 的参数存在于 ComputeOvsDpdk.yaml 文件中,但没有存在于 DistributedComputeDpdk.yaml 文件中。在新的 DistributedComputeDpdk.yaml 文件中包括这些参数。

  5. 使用 DistributedComputeDpdk.yaml 创建 DistributedComputeDpdk 角色文件 :

    openstack overcloud roles generate --roles-path ~/roles/ -o ~/roles/roles-custom.yaml DistributedComputeDpdk
    Copy to Clipboard Toggle word wrap

您可以使用相同的方法为 SR-IOV 创建快速数据路径角色,或 SR-IOV 和 DPDK 的组合来满足您的要求。

如果您计划在没有块存储的情况下部署边缘站点,请查看以下操作:

如果您计划使用 Red Hat Ceph Storage 部署边缘站点,请查看以下操作:

第 5 章 安装中央位置

当您使用分布式计算节点(DCN)架构部署 Red Hat OpenStack 平台时,您必须提前决定您的存储策略。如果您在中央位置部署没有 Red Hat Ceph Storage 的 Red Hat OpenStack Platform,则无法使用 Red Hat Ceph Storage 部署任何边缘站点。此外,在重新部署后,您也没有将 Red Hat Ceph Storage 添加到中央位置的选项。

当您为分布式计算节点(DCN)架构部署中央位置时,您可以部署集群:

  • 具有或没有 Compute 节点
  • 使用或不使用 Red Hat Ceph Storage

5.1. 在没有边缘存储的情况下部署中央控制器

如果使用 Object Storage 服务(swift)作为中央位置的镜像服务(glance),则可在边缘站点部署分布式计算节点集群。由于各个架构的不同角色和网络配置文件,在稍后部署没有块存储的站点无法更新块存储。

重要: 以下流程使用 lvm 作为生产环境不支持的 Cinder 的后端。您必须将经过认证的块存储解决方案部署为 Cinder 的后端。

以类似于典型的 overcloud 部署的方式部署中央控制器集群。此集群不需要任何 Compute 节点,因此您可以将计算计数设置为 0 以覆盖默认值 1。Central 控制器具有特定的存储和 Oslo 配置要求。使用以下步骤满足这些要求。

先决条件

  • 您必须创建 network_data.yamlvip_data.yaml 文件,特定于您的环境。您可以在 /usr/share/openstack-tripleo-heat-templates/network-data-samples 中找到示例文件。
  • 您必须创建一个特定于环境的 overcloud-baremetal-deploy.yaml 文件。有关更多信息,请参阅为 overcloud 置备裸机节点

流程

以下流程概述了中央位置初始部署的步骤。

注意

下列步骤详细说明了与 example DCN 部署关联的部署命令和环境文件,而无需 glance 多存储。这些步骤不包括不相关,但所有必要的配置方面,如网络。

  1. 以 stack 用户身份登录 undercloud。
  2. 查找 stackrc 文件:

    [stack@director ~]$ source /home/stack/stackrc
    Copy to Clipboard Toggle word wrap
  3. 生成环境文件:

    sudo openstack tripleo container image prepare \
    -e containers.yaml \
    --output-env-file /home/stack/central/central-images-env.yaml
    Copy to Clipboard Toggle word wrap
  4. 在主目录中,为您要部署的每个堆栈创建目录。将 network_data.yamlvip_data.yamlovercloud-baremetal-deploy.yaml 模板(用于中央位置)移到 /home/stack/central/

    mkdir /home/stack/central
    mkdir /home/stack/dcn0
    mkdir /home/stack/dcn1
    
    mv network_data.yaml /home/stack/central
    mv vip_data.yaml /home/stack/central
    mv overcloud-baremetal-deploy.yaml /home/stack/central
    Copy to Clipboard Toggle word wrap
  5. 为 overcloud 调配网络。此命令取 overcloud 网络的定义文件作为输入。您必须使用命令中的输出文件来部署 overcloud:

    (undercloud)$ openstack overcloud network provision \
    --output /home/stack/central/overcloud-networks-deployed.yaml \
    /home/stack/central/network_data.yaml
    Copy to Clipboard Toggle word wrap
  6. 为 overcloud 调配虚拟 IP。此命令取虚拟 IP 的定义文件作为输入。您必须使用命令中的输出文件来部署 overcloud:

    (undercloud)$ openstack overcloud network vip provision \
    --stack central \
    --output /home/stack/central/overcloud-vip-deployed.yaml \
    /home/stack/central/vip_data.yaml
    Copy to Clipboard Toggle word wrap
  7. 置备裸机实例。该命令为裸机节点使用一个定义文件作为输入。您必须使用命令中的输出文件来部署 overcloud:

    (undercloud)$ openstack overcloud node provision \
    --stack central \
    --network-config \
    -o /home/stack/central/deployed_metal.yaml \
    /home/stack/central/overcloud-baremetal-deploy.yaml
    Copy to Clipboard Toggle word wrap
  8. 使用类似如下的设置创建一个名为 central/overrides.yaml 的文件:

    parameter_defaults:
      NtpServer:
        - 0.pool.ntp.org
        - 1.pool.ntp.org
      GlanceBackend: swift
    Copy to Clipboard Toggle word wrap
    • ControllerCount: 3 指定将部署三个节点。它们将 swift 用于 glance,lvm 用于 cinder,并为边缘计算节点托管 control-plane 服务。
    • ComputeCount: 0 是一个可选参数,用于防止 Compute 节点部署中央 Controller 节点。
    • GlanceBackend: swift 使用 Object Storage (swift)作为镜像服务(glance)后端。

      生成的配置通过以下方式与分布式计算节点(DCN)交互:

    • DCN 上的镜像服务创建从中央对象存储后端接收的镜像的缓存副本。镜像服务使用 HTTP 将镜像从对象存储复制到本地磁盘缓存。

      注意

      中央 Controller 节点必须能够连接到分布式计算节点(DCN)站点。中央 Controller 节点可以使用路由的第 3 层连接。

  9. site-name.yaml 环境文件中配置您的站点的命名约定。Nova 可用区,Cinder 存储可用区必须匹配:

    cat > /home/stack/central/site-name.yaml << EOF
    parameter_defaults:
        NovaComputeAvailabilityZone: central
        ControllerExtraConfig:
            nova::availability_zone::default_schedule_zone: central
        NovaCrossAZAttach: false
    EOF
    Copy to Clipboard Toggle word wrap
  10. 部署中央 Controller 节点。例如,您可以使用包含以下内容的 deploy.sh 文件:

    openstack overcloud deploy \
    --deployed-server \
    --stack central \
    --templates /usr/share/openstack-tripleo-heat-templates/ \
    -n /home/stack/central/network_data.yaml \
    -e /usr/share/openstack-tripleo-heat-templates/environments/network-environment.yaml \
    -e /usr/share/openstack-tripleo-heat-templates/environments/podman.yaml \
    -e /usr/share/openstack-tripleo-heat-templates/environments/nova-az-config.yaml \
    -e /home/stack/central/overcloud-networks-deployed.yaml \
    -e /home/stack/central/overcloud-vip-deployed.yaml \
    -e /home/stack/central/deployed_metal.yaml
    Copy to Clipboard Toggle word wrap
注意

您必须在 openstack overcloud deploy 命令中包含用于配置网络的 heat 模板。为边缘架构设计需要 spine 和 leaf networking。如需了解更多详细信息,请参阅 Spine Leaf Networking

5.2. 使用存储部署中央站点

要使用多个存储和 Ceph Storage 作为后端部署镜像服务,请完成以下步骤:

先决条件

  • 您必须创建 network_data.yamlvip_data.yaml 文件,特定于您的环境。您可以在 /usr/share/openstack-tripleo-heat-templates/network-data-samples 中找到示例文件。
  • 您必须创建一个特定于环境的 overcloud-baremetal-deploy.yaml 文件。有关更多信息,请参阅为 overcloud 置备裸机节点
  • 您在中央位置和每个可用区都有 Ceph 集群的硬件,或者在需要存储服务的每个地理位置。
  • 您有三个镜像服务(glance)服务器的硬件位于中央位置,并在每个可用区中,或者在需要存储服务的每个地理位置。在边缘位置,镜像服务部署到 DistributedComputeHCI 节点。

流程

部署 Red Hat OpenStack Platform 中心位置,以便镜像服务(glance)可用于多个存储。

  1. 以 stack 用户身份登录 undercloud。
  2. 查找 stackrc 文件:

    [stack@director ~]$ source /home/stack/stackrc
    Copy to Clipboard Toggle word wrap
  3. 生成环境文件 /home/stack/central/central-images-env.yaml

    sudo openstack tripleo container image prepare \
    -e containers.yaml \
    --output-env-file /home/stack/central/central-images-env.yaml
    Copy to Clipboard Toggle word wrap
  4. 使用适合您的环境的角色,为中央位置生成角色:

    openstack overcloud roles generate Compute Controller CephStorage \
    -o /home/stack/central/central_roles.yaml
    Copy to Clipboard Toggle word wrap
  5. 在主目录中,为您要部署的每个堆栈创建目录。将 network_data.yamlvip_data.yamlovercloud-baremetal-deploy.yaml 模板(用于中央位置)移到 /home/stack/central/

    mkdir /home/stack/central
    mkdir /home/stack/dcn0
    mkdir /home/stack/dcn1
    
    mv network_data.yaml /home/stack/central
    mv vip_data.yaml /home/stack/central
    mv overcloud-baremetal-deploy.yaml /home/stack/central
    Copy to Clipboard Toggle word wrap
  6. 为 overcloud 调配网络。此命令取 overcloud 网络的定义文件作为输入。您必须使用命令中的输出文件来部署 overcloud:

    openstack overcloud network provision \
    --output /home/stack/central/overcloud-networks-deployed.yaml \
    /home/stack/central/network_data.yaml
    Copy to Clipboard Toggle word wrap
  7. 为 overcloud 调配虚拟 IP。此命令取虚拟 IP 的定义文件作为输入。您必须使用命令中的输出文件来部署 overcloud:

    openstack overcloud network vip provision \
    --stack central \
    --output /home/stack/central/overcloud-vip-deployed.yaml \
    /home/stack/central/vip_data.yaml
    Copy to Clipboard Toggle word wrap
  8. 置备裸机实例。该命令为裸机节点使用一个定义文件作为输入。您必须使用命令中的输出文件来部署 overcloud:

    openstack overcloud node provision \
    --stack central \
    --network-config \
    -o /home/stack/central/deployed_metal.yaml \
    /home/stack/central/overcloud-baremetal-deploy.yaml
    Copy to Clipboard Toggle word wrap
  9. 如果要使用超融合存储部署中央位置,则必须使用以下参数创建一个 initial-ceph.conf 配置文件。如需更多信息,请参阅为 HCI 配置 Red Hat Ceph Storage 集群

    [osd]
    osd_memory_target_autotune = true
    osd_numa_auto_affinity = true
    [mgr]
    mgr/cephadm/autotune_memory_target_ratio = 0.2
    Copy to Clipboard Toggle word wrap
  10. 使用 deployed_metal.yaml 文件作为 openstack overcloud ceph deploy 命令的输入。openstack overcloud ceph deploy 命令输出 描述部署的 Ceph 集群的 yaml 文件:

    openstack overcloud ceph deploy \
    --stack central \
    /home/stack/central/deployed_metal.yaml \
    --config /home/stack/central/initial-ceph.conf \ 
    1
    
    --output /home/stack/central/deployed_ceph.yaml \
    --container-image-prepare /home/stack/containers.yaml \
    --network-data /home/stack/network-data.yaml \
    --cluster central \
    --roles-data /home/stack/central/central_roles.yaml
    Copy to Clipboard Toggle word wrap
    1
    仅在部署超融合基础架构时包括 initial-ceph.com。
  11. 在继续操作前,验证功能 Ceph 部署。使用 ssh 连接到运行 ceph-mon 服务的服务器。在 HCI 部署中,这是控制器节点。运行以下命令:

    cephadm shell --config /etc/ceph/central.conf \
    --keyring /etc/ceph/central.client.admin.keyring
    Copy to Clipboard Toggle word wrap
    注意

    您必须使用-- config 和- keyring 参数。

  12. site-name.yaml 环境文件中配置您的站点的命名约定。Nova 可用区和 Cinder 存储可用区必须匹配:

    parameter_defaults:
        NovaComputeAvailabilityZone: central
        ControllerExtraConfig:
            nova::availability_zone::default_schedule_zone: central
        NovaCrossAZAttach: false
        CinderStorageAvailabilityZone: central
        GlanceBackendID: central
    Copy to Clipboard Toggle word wrap
  13. 配置一个 glance.yaml 模板,其内容类似如下:

    parameter_defaults:
        GlanceEnabledImportMethods: web-download,copy-image
        GlanceBackend: rbd
        GlanceStoreDescription: 'central rbd glance store'
        GlanceBackendID: central
        CephClusterName: central
    Copy to Clipboard Toggle word wrap
  14. 为中央位置部署堆栈:

    openstack overcloud deploy \
    --deployed-server \
    --stack central \
    --templates /usr/share/openstack-tripleo-heat-templates/ \
    -r /home/stack/central/central_roles.yaml \
    -n ~/network-data.yaml \
    -e /usr/share/openstack-tripleo-heat-templates/environments/network-environment.yaml \
    -e /usr/share/openstack-tripleo-heat-templates/environments/podman.yaml \
    -e /usr/share/openstack-tripleo-heat-templates/environments/cephadm/cephadm.yaml \
    -e /usr/share/openstack-tripleo-heat-templates/environments/nova-az-config.yaml \
    -e /home/stack/central/overcloud-networks-deployed.yaml \
    -e /home/stack/central/overcloud-vip-deployed.yaml \
    -e /home/stack/central/deployed_metal.yaml \
    -e /home/stack/central/deployed_ceph.yaml \
    -e ~/central/glance.yaml
    Copy to Clipboard Toggle word wrap
  15. 在为中央位置部署 overcloud 后,导出边缘站点的额外堆栈部署所需的数据,并放置在 /home/stack/overcloud-deploy 目录中。确保存在 central-export.yaml 文件:

    stat /home/stack/overcloud-deploy/central/central-export.yaml
    Copy to Clipboard Toggle word wrap
  16. 导出 Ceph 特定数据:

    openstack overcloud export ceph \
    --stack central \
    --output-file /home/stack/dcn-common/central_ceph_external.yaml
    Copy to Clipboard Toggle word wrap

5.3. 集成外部 Ceph

您可以部署分布式计算节点(DCN)架构的核心位置,并集成预部署的 Red Hat Ceph Storage 解决方案。当您在没有 director 的情况下部署 Red Hat Ceph Storage 时,director 没有环境中 Red Hat Ceph Storage 的信息。您无法运行 openstack overcloud export ceph 命令,必须手动创建 central_ceph_external.yaml

先决条件

  • 您必须创建 network_data.yamlvip_data.yaml 文件,特定于您的环境。您可以在 /usr/share/openstack-tripleo-heat-templates/network-data-samples 中找到示例文件。
  • 您必须创建一个特定于环境的 overcloud-baremetal-deploy.yaml 文件。有关更多信息,请参阅为 overcloud 置备裸机节点
  • Ceph 集群的硬件位于中央位置,每个可用区中,或需要存储服务的每个地理位置。

以下是两个或多个堆栈部署示例:

  • 一个堆栈位于中央位置,称为 central
  • 一个堆栈位于名为 dcn0 的边缘站点。
  • dcn0 类似部署的其他堆栈,如 dcn1dcn2 等等。

dcn external ceph at central

流程

您可以按照与现有 Red Hat Ceph Storage 集群集成的流程,安装中央位置,使其与预先存在的 Red Hat Ceph Storage 解决方案集成。将 Red Hat Ceph Storage 与 DCN 部署的中央站点没有特殊要求,但在部署 overcloud 前,仍必须完成 DCN 特定步骤:

  1. 以 stack 用户身份登录 undercloud。
  2. 查找 stackrc 文件:

    [stack@director ~]$ source ~/stackrc
    Copy to Clipboard Toggle word wrap
  3. 生成环境文件 ~/central/central-images-env.yaml

    sudo openstack tripleo container image prepare \
    -e containers.yaml \
    --output-env-file ~/central/central-images-env.yaml
    Copy to Clipboard Toggle word wrap
  4. 在主目录中,为您要部署的每个堆栈创建目录。使用此选项分隔专为其各自站点设计的模板。将 network_data.yamlvip_data.yamlovercloud-baremetal-deploy.yaml 模板(用于中央位置)移到 /home/stack/central/

    mkdir /home/stack/central
    mkdir /home/stack/dcn0
    mkdir /home/stack/dcn1
    
    mv network_data.yaml /home/stack/central
    mv vip_data.yaml /home/stack/central
    mv overcloud-baremetal-deploy.yaml /home/stack/central
    Copy to Clipboard Toggle word wrap
  5. 为 overcloud 调配网络。此命令取 overcloud 网络的定义文件作为输入。您必须使用命令中的输出文件来部署 overcloud:

    openstack overcloud network provision \
    --output /home/stack/central/overcloud-networks-deployed.yaml \
    /home/stack/central/network_data.yaml
    Copy to Clipboard Toggle word wrap
  6. 为 overcloud 调配虚拟 IP。此命令取虚拟 IP 的定义文件作为输入。您必须使用命令中的输出文件来部署 overcloud:

    openstack overcloud network vip provision \
    --stack central \
    --output /home/stack/central/overcloud-vip-deployed.yaml \
    /home/stack/central/vip_data.yaml
    Copy to Clipboard Toggle word wrap
  7. 置备裸机实例。该命令为裸机节点使用一个定义文件作为输入。您必须使用命令中的输出文件来部署 overcloud:

    openstack overcloud node provision \
    --stack central \
    --network-config \
    -o /home/stack/central/deployed_metal.yaml \
    /home/stack/central/overcloud-baremetal-deploy.yaml
    Copy to Clipboard Toggle word wrap
  8. site-name.yaml 环境文件中配置您的站点的命名约定。Compute (nova)可用区和 Block Storage (cinder)可用域必须匹配:

    cat > /home/stack/central/site-name.yaml << EOF
    parameter_defaults:
        NovaComputeAvailabilityZone: central
        ControllerExtraConfig:
            nova::availability_zone::default_schedule_zone: central
        NovaCrossAZAttach: false
        CinderStorageAvailabilityZone: central
        GlanceBackendID: central
    EOF
    Copy to Clipboard Toggle word wrap
  9. 使用类似以下内容的内容配置 external-ceph.yaml 模板:

    parameter_defaults:
        CinderEnableIscsiBackend: false
        CinderEnableRbdBackend: true
        CinderEnableNfsBackend: false
        NovaEnableRbdBackend: true
        GlanceBackend: rbd
        GlanceBackendID: central
        GlanceEnabledImportMethods: web-download,copy-image
        GlanceStoreDescription: 'central rbd glance store'
        CinderRbdPoolName: "openstack-cinder"
        NovaRbdPoolName: "openstack-nova"
        GlanceRbdPoolName: "openstack-images"
        CinderBackupRbdPoolName: "automation-backups"
        GnocchiRbdPoolName: "automation-metrics"
        CephClusterFSID: 38dd387e-837a-437c-891c-7fc69e17a3c
        CephClusterName: central
        CephExternalMonHost: 10.9.0.1,10.9.0.2,10.9.0.3
        CephClientKey: "AQAKtECeLemfiBBdQp7cjNYQRGW9y8GnhhFZg=="
        CephClientUserName: "openstack
    Copy to Clipboard Toggle word wrap
  10. 部署中央位置:

    openstack overcloud deploy \
    --stack central \
    --templates /usr/share/openstack-tripleo-heat-templates/ \
    -n /home/stack/central/network-data.yaml \
    ...
    -e /usr/share/openstack-tripleo-heat-templates/environments/network-environment.yaml \
    -e /usr/share/openstack-tripleo-heat-templates/environments/podman.yaml \
    -e /usr/share/openstack-tripleo-heat-templates/environments/external-ceph.yaml \
    -e /usr/share/openstack-tripleo-heat-templates/environments/nova-az-config.yaml \
    -e /home/stack/central/overcloud-networks-deployed.yaml \
    -e /home/stack/central/overcloud-vip-deployed.yaml \
    -e /home/stack/central/deployed_metal.yaml \
    -e /home/stack/central/external-ceph.yaml \
    -e /home/stack/central/overcloud-networks-deployed.yaml \
    -e /home/stack/central/central_roles.yaml
    Copy to Clipboard Toggle word wrap
  11. 在为中央位置部署 overcloud 后,导出边缘站点的额外堆栈部署所需的数据,并放置在 /home/stack/overcloud-deploy 目录中。确保存在这个 control-plane-export.yaml 文件:

    stat ~/overcloud-deploy/control-plane/control-plane-export.yaml
    Copy to Clipboard Toggle word wrap
  12. 创建名为 central_ceph_external.yaml 的环境文件,其中包含 Red Hat Ceph Storage 部署的详细信息。此文件可以传递给边缘站点的额外堆栈部署。

    parameter_defaults:
      CephExternalMultiConfig:
        - cluster: "central"
          fsid: "3161a3b4-e5ff-42a0-9f53-860403b29a33"
          external_cluster_mon_ips: "172.16.11.84, 172.16.11.87, 172.16.11.92"
          keys:
            - name: "client.openstack"
              caps:
                mgr: "allow *"
                mon: "profile rbd"
                osd: "profile rbd pool=vms, profile rbd pool=volumes, profile rbd pool=images"
              key: "AQD29WteAAAAABAAphgOjFD7nyjdYe8Lz0mQ5Q=="
              mode: "0600"
          dashboard_enabled: false
          ceph_conf_overrides:
            client:
              keyring: /etc/ceph/central.client.openstack.keyring
    Copy to Clipboard Toggle word wrap
    • fsid 参数是 Ceph Storage 集群的文件系统 ID:这个值在 [global] 部分的集群配置文件中指定:

      [global]
      fsid = 4b5c8c0a-ff60-454b-a1b4-9747aa737d19
      ...
      Copy to Clipboard Toggle word wrap
    • key 参数是 openstack 帐户的 ceph 客户端密钥:

      [root@ceph ~]# ceph auth list
      ...
      [client.openstack]
          key = AQC+vYNXgDAgAhAAc8UoYt+OTz5uhV7ItLdwUw==
          caps mgr = "allow *"
          caps mon = "profile rbd"
          caps osd = "profile rbd pool=volumes, profile rbd pool=vms, profile rbd pool=images, profile rbd pool=backups, profile rbd pool=metrics"
      ...
      Copy to Clipboard Toggle word wrap

      如需有关示例 central_ceph_external.yaml 文件中显示的参数的更多信息,请参阅创建自定义环境文件

第 6 章 在没有存储的情况下部署边缘

如果您使用 Object Storage 服务(swift)作为中央位置的镜像服务(glance)的后端,您可以在边缘站点部署分布式计算节点(DCN)集群。如果您在没有块存储的情况下部署站点,则无法在以后更新以使用块存储。

在不使用存储的情况下部署边缘站点时使用 compute 角色。

重要

以下流程使用 lvm 作为块存储服务(cinder)的后端,它不支持在生产环境中使用。您必须部署经过认证的块存储解决方案,作为块存储服务的后端。

6.1. 没有存储的 DCN 边缘站点的构架

要部署此架构,请使用 Compute 角色。

dcn with compute only example

没有边缘的块存储
  • control plane 上的 Object Storage (swift)服务用作 Image (glance)服务后端。
  • 多后端镜像服务不可用。

  • 实例存储在 Compute 节点上。
  • 在边缘站点不提供 Block Storage (cinder)等卷服务。

    重要

    如果您没有使用 Red Hat Ceph 存储部署中央位置,则无法在以后使用存储部署边缘站点。

    有关边缘部署没有块存储的更多信息,请参阅 第 6.2 节 “在没有存储的情况下部署边缘节点”

6.2. 在没有存储的情况下部署边缘节点

当您在边缘站点部署 Compute 节点时,您可以使用中央位置作为 control plane。您可以将新的 DCN 堆栈添加到部署中,并重复使用中央位置中的配置文件来创建新的环境文件。

先决条件

  • 您必须创建特定于环境的 network_data.yaml 文件。您可以在 /usr/share/openstack-tripleo-heat-templates/network-data-samples 中找到示例文件。
  • 您必须创建一个特定于环境的 overcloud-baremetal-deploy.yaml 文件。有关更多信息,请参阅为 overcloud 置备裸机节点

流程

  1. 以 stack 用户身份登录 undercloud。
  2. 查找 stackrc 文件:

    [stack@director ~]$ source ~/stackrc
    Copy to Clipboard Toggle word wrap
  3. 生成环境文件 ~/dcn0/dcn0-images-env.yaml[d]:

    sudo[e] openstack tripleo container image prepare \
    -e containers.yaml \
    --output-env-file ~/dcn0/dcn0-images-env.yaml
    Copy to Clipboard Toggle word wrap
  4. 为边缘位置生成 roles 文件。使用适合您的环境的角色为边缘位置生成角色:

    (undercloud)$ openstack overcloud roles \
     generate Compute \
     -o /home/stack/dcn0/dcn0_roles.yaml
    Copy to Clipboard Toggle word wrap
  5. 如果使用 ML2/OVS 进行网络覆盖,您必须编辑 Compute 角色包括 NeutronDhcpAgentNeutronMetadataAgent 服务:

    1. 为 Compute 角色创建一个角色文件:

      openstack overcloud roles \
      generate Compute \
      -o /home/stack/dcn0/dcn0_roles.yaml
      Copy to Clipboard Toggle word wrap
    2. 编辑 /home/stack/dcn0/dcn0_roles.yaml 文件,使其包含 NeutronDhcpAgentNeutronMetadataAgent 服务:

      ...
          - OS::TripleO::Services::MySQLClient
          - OS::TripleO::Services::NeutronBgpVpnBagpipe
      +   - OS::TripleO::Services::NeutronDhcpAgent
      +   - OS::TripleO::Services::NeutronMetadataAgent
          - OS::TripleO::Services::NeutronLinuxbridgeAgent
          - OS::TripleO::Services::NeutronVppAgent
          - OS::TripleO::Services::NovaAZConfig
          - OS::TripleO::Services::NovaCompute
      ...
      Copy to Clipboard Toggle word wrap

      如需更多信息,请参阅准备路由供应商网络

  6. 为 overcloud 调配网络。此命令取 overcloud 网络的定义文件作为输入。您必须使用命令中的输出文件来部署 overcloud:

    (undercloud)$ openstack overcloud network provision \
    --output /home/stack/dcn0/overcloud-networks-deployed.yaml \
    /home/stack/dcn0/network_data.yaml
    Copy to Clipboard Toggle word wrap
  7. 置备裸机实例。该命令为裸机节点使用一个定义文件作为输入。您必须使用命令中的输出文件来部署 overcloud:

    (undercloud)$ openstack overcloud node provision \
    --stack dcn0 \
    --network-config \
    -o /home/stack/dcn0/deployed_metal.yaml \
    ~/overcloud-baremetal-deploy.yaml
    Copy to Clipboard Toggle word wrap
  8. 在 site-name.yaml 环境文件中配置您的站点的命名约定。

    parameter_defaults:
        NovaComputeAvailabilityZone: dcn0
        ControllerExtraConfig:
            nova::availability_zone::default_schedule_zone: dcn0
        NovaCrossAZAttach: false
    Copy to Clipboard Toggle word wrap
  9. 为 dcn0 边缘站点部署堆栈:

    openstack overcloud deploy \
    --deployed-server \
    --stack dcn0 \
    --templates /usr/share/openstack-tripleo-heat-templates/ \
    -r /home/stack/dcn0/dcn0_roles.yaml \
    -n /home/stack/network_data.yaml \
    -e /usr/share/openstack-tripleo-heat-templates/environments/network-environment.yaml \
    -e /usr/share/openstack-tripleo-heat-templates/environments/podman.yaml \
    -e /usr/share/openstack-tripleo-heat-templates/environments/nova-az-config.yaml \
    -e /home/stack/overcloud-deploy/central/central-export.yaml \
    -e /home/stack/dcn0/overcloud-networks-deployed.yaml \
    -e /home/stack/dcn0/overcloud-vip-deployed.yaml \
    -e /home/stack/dcn0/deployed_metal.yaml
    Copy to Clipboard Toggle word wrap

6.3. 在边缘排除特定镜像类型

默认情况下,Compute 节点公告它们支持的所有镜像格式。如果您的 Compute 节点没有使用 Ceph 存储,您可以从镜像格式公告中排除 RAW 镜像。RAW 镜像格式消耗了比 QCOW2 镜像更多的网络带宽和本地存储,在使用没有 Ceph 存储的边缘站点时效率低下。使用 NovaImageTypeExcludeList 参数排除特定的镜像格式:

重要

不要在边缘站点与 Ceph 搭配使用这个参数,因为 Ceph 需要 RAW 镜像。

注意

没有公告 RAW 镜像的计算节点无法托管从 RAW 镜像创建的实例。这可能会影响 snapshot-redeploy 和 shelving。

先决条件

  • 安装了 Red Hat OpenStack Platform director
  • 已安装中央位置
  • Compute 节点可用于 DCN 部署

流程

  1. stack 用户身份登录 undercloud 主机。
  2. 查找 stackrc 凭证文件:

    $ source ~/stackrc
    Copy to Clipboard Toggle word wrap
  3. 在其中一个自定义环境文件中包含 NovaImageTypeExcludeList 参数:

    parameter_defaults:
      NovaImageTypeExcludeList:
            - raw
    Copy to Clipboard Toggle word wrap
  4. 在 overcloud 部署命令中包括 NovaImageTypeExcludeList 参数的环境文件,以及与部署相关的任何其他环境文件:

    openstack overcloud deploy --templates \
    -n network_data.yaml \
    -r roles_data.yaml \
    -e <environment_files> \
    -e <new_environment_file>
    Copy to Clipboard Toggle word wrap

第 7 章 在边缘部署存储

您可以使用 Red Hat OpenStack Platform director 扩展分布式计算节点部署,使其包含位于边缘的分布式镜像管理和持久性存储,并具有使用 Red Hat OpenStack Platform 和 Ceph Storage 的优点。

DCN arch

7.1. 使用存储进行边缘部署的角色

以下角色可用于使用存储的边缘部署。根据您选择的配置为您的环境选择适当的角色。

7.1.1. 没有超融合节点的存储

当您使用存储部署边缘且没有部署超融合节点时,请使用以下四个角色之一:

DistributedCompute
DistributedCompute 角色用于存储部署中前三个计算节点。DistributedCompute 角色包括 GlanceApiEdge 服务,可确保镜像服务在本地边缘站点而不是中央 hub 位置使用。对于任何其他节点,请使用 DistributedComputeScaleOut 角色。
DistributedComputeScaleOut
DistributedComputeScaleOut 角色包含 HAproxyEdge 服务,它允许在 DistributedComputeScaleOut 角色上创建的实例将镜像服务请求代理到在边缘站点提供该服务的节点。使用 role DistributedCompute 角色部署三个节点后,您可以使用 DistributedComputeScaleOut 角色来扩展计算资源。使用 DistrubutedComputeScaleOut 角色部署不需要的最小主机数量。
CephAll
CephAll 角色包括 Ceph OSD、Ceph mon 和 Ceph Mgr 服务。您可以使用 CephAll 角色部署最多三个节点。对于任何其他存储容量,请使用 CephStorage 角色。
CephStorage
CephStorage 角色包括 Ceph OSD 服务。如果三个 CephAll 节点不提供足够的存储容量,则根据需要添加任意数量的 CephStorage 节点。

7.1.2. 使用超融合节点存储

当您使用存储部署边缘时,并且计划具有组合计算和存储的超融合节点,请使用以下以下两个角色之一:

DistributedComputeHCI
DistributedComputeHCI 角色通过包含 Ceph 管理和 OSD 服务在边缘启用超融合部署。在使用 DistributedComputeHCI 角色时,您必须使用三个节点。
DistributedComputeHCIScaleOut
DistributedComputeHCIScaleOut 角色包括 Ceph OSD 服务,允许在将更多节点添加到边缘时通过计算扩展存储容量。此角色还包括 HAproxyEdge 服务,用于将镜像下载请求重定向到边缘站点上的 GlanceAPIEdge 节点。此角色启用边缘的超融合部署。在使用 DistributedComputeHCI 角色时,您必须使用三个节点。

7.2. 带有存储的 DCN 边缘站点的构架

若要部署具有存储的 DCN,还必须在中央位置部署 Red Hat Ceph Storage。您必须使用 dcn-storage.yamlcephadm.yaml 环境文件。对于包含非超融合 Red Hat Ceph Storage 节点的边缘站点,请使用 DistributedCompute, DistributedComputeScaleOut, CephAll, 和 CephStorage 角色。

dcn with nonhci at edge example

在边缘使用块存储
  • Red Hat Ceph Block Devices (RBD)用作镜像(glance)服务后端。
  • 多后端镜像服务(glance)可用,以便在中央和 DCN 站点之间复制镜像。
  • Block Storage (cinder)服务在所有站点中可用,并使用 Red Hat Ceph Block Devices (RBD)驱动程序访问。
  • Block Storage (cinder)服务在 Compute 节点上运行,Red Hat Ceph Storage 在专用的存储节点上单独运行。
  • Nova 临时存储由 Ceph (RBD)支持。

    如需更多信息,请参阅 第 5.2 节 “使用存储部署中央站点”

7.3. 带有超融合存储的 DCN 边缘站点的架构

若要部署此配置,还必须在中央位置部署 Red Hat Ceph Storage。您需要配置 dcn-storage.yamlcephadm.yaml 环境文件。使用 DistributedComputeHCI,和 DistributedComputeHCIScaleOut 角色。您还可以使用 DistributedComputeScaleOut 角色来添加不参与提供 Red Hat Ceph Storage 服务的 Compute 节点。

dcn with hci at edge example

在边缘使用超融合存储
  • Red Hat Ceph Block Devices (RBD)用作镜像(glance)服务后端。
  • 多后端镜像服务(glance)可用,以便在中央和 DCN 站点之间复制镜像。
  • Block Storage (cinder)服务在所有站点中可用,并使用 Red Hat Ceph Block Devices (RBD)驱动程序访问。
  • 块存储服务和 Red Hat Ceph Storage 在 Compute 节点上运行。

    更多信息请参阅 第 7.4 节 “使用超融合存储部署边缘站点”

当您在分布式计算架构中部署 Red Hat OpenStack Platform 时,您可以选择部署多个存储拓扑,每个站点具有唯一的配置。您必须使用 Red Hat Ceph 存储部署中央位置,以使用存储部署任何边缘站点。

dcn with storage mixed example

7.4. 使用超融合存储部署边缘站点

部署中央站点后,构建边缘站点,并确保每个边缘位置主要连接到自己的存储后端,以及中央位置上的存储后端。spine 和 leaf 网络配置应包含在此配置中,增加了 ceph 需要的 storage 和 storage_mgmt 网络。如需更多信息,请参阅 Spine Leaf Networking。您必须在每个边缘站点的中央位置和存储网络之间连接存储网络,以便在站点之间移动镜像服务(glance)镜像。

确保中央位置可以与每个边缘站点的 mons 和 OSD 通信。但是,您应该在站点位置边界终止存储管理网络,因为存储管理网络用于 OSD 重新平衡。

先决条件

  • 您必须创建特定于环境的 network_data.yaml 文件。您可以在 /usr/share/openstack-tripleo-heat-templates/network-data-samples 中找到示例文件。
  • 您必须创建一个特定于环境的 overcloud-baremetal-deploy.yaml 文件。有关更多信息,请参阅为 overcloud 置备裸机节点
  • 您有三个镜像服务(glance)服务器的硬件位于中央位置,并在每个可用区中,或者在需要存储服务的每个地理位置。在边缘位置,镜像服务部署到 DistributedComputeHCI 节点。

流程

  1. 以 stack 用户身份登录 undercloud。
  2. 查找 stackrc 文件:

    [stack@director ~]$ source ~/stackrc
    Copy to Clipboard Toggle word wrap
  3. 生成环境文件 ~/dcn0/dcn0-images-env.yaml :

    sudo openstack tripleo container image prepare \
    -e containers.yaml \
    --output-env-file /home/stack/dcn0/dcn0-images-env.yaml
    Copy to Clipboard Toggle word wrap
  4. 为 dcn0 边缘位置生成适当的角色:

    openstack overcloud roles generate DistributedComputeHCI DistributedComputeHCIScaleOut \
    -o ~/dcn0/dcn0_roles.yaml
    Copy to Clipboard Toggle word wrap
  5. 为 overcloud 调配网络。此命令取 overcloud 网络的定义文件作为输入。您必须使用命令中的输出文件来部署 overcloud:

    (undercloud)$ openstack overcloud network provision \
    --output /home/stack/dcn0/overcloud-networks-deployed.yaml \
    /home/stack/network_data.yaml
    Copy to Clipboard Toggle word wrap
  6. 置备裸机实例。该命令为裸机节点使用一个定义文件作为输入。您必须使用命令中的输出文件来部署 overcloud:

    (undercloud)$ openstack overcloud node provision \
    --stack dcn0 \
    --network-config \
    -o /home/stack/dcn0/deployed_metal.yaml \
    /home/stack/overcloud-baremetal-deploy.yaml
    Copy to Clipboard Toggle word wrap
  7. 如果要使用超融合存储部署边缘站点,则必须使用以下参数创建一个 initial-ceph.conf 配置文件。如需更多信息,请参阅为 HCI 配置 Red Hat Ceph Storage 集群

    [osd]
    osd_memory_target_autotune = true
    osd_numa_auto_affinity = true
    [mgr]
    mgr/cephadm/autotune_memory_target_ratio = 0.2
    Copy to Clipboard Toggle word wrap
  8. 使用 deployed_metal.yaml 文件作为 openstack overcloud ceph deploy 命令的输入。openstack overcloud ceph deploy 命令输出 描述部署的 Ceph 集群的 yaml 文件:

    openstack overcloud ceph deploy \
    /home/stack/dcn0/deployed_metal.yaml \
    --stack dcn0 \
    --config ~/dcn0/initial-ceph.conf \ 
    1
    
    --output ~/dcn0/deployed_ceph.yaml \
    --container-image-prepare ~/containers.yaml \
    --network-data ~/network-data.yaml \
    --cluster dcn0 \
    --roles-data dcn_roles.yaml
    Copy to Clipboard Toggle word wrap
    1
    仅在部署超融合基础架构时包括 initial-ceph.conf。
  9. 在 site-name.yaml 环境文件中配置您的站点的命名约定。Nova 可用区和 Cinder 存储可用区必须匹配:

    parameter_defaults:
        NovaComputeAvailabilityZone: dcn0
        ControllerExtraConfig:
            nova::availability_zone::default_schedule_zone: dcn0
        NovaCrossAZAttach: false
        CinderStorageAvailabilityZone: dcn0
        CinderVolumeCluster: dcn0
        GlanceBackendID: dcn0
    Copy to Clipboard Toggle word wrap
  10. 配置一个 glance.yaml 模板,其内容类似如下:

    parameter_defaults:
        GlanceEnabledImportMethods: web-download,copy-image
        GlanceBackend: rbd
        GlanceStoreDescription: 'dcn0 rbd glance store'
        GlanceBackendID: dcn0
        GlanceMultistoreConfig:
          central:
            GlanceBackend: rbd
            GlanceStoreDescription: 'central rbd glance store'
            CephClusterName: central
    Copy to Clipboard Toggle word wrap
  11. 为 dcn0 位置部署堆栈:[d]

    openstack overcloud deploy \
    --deployed-server \
    --stack dcn0 \
    --templates /usr/share/openstack-tripleo-heat-templates/ \
    -r ~/dcn0/dcn0_roles.yaml \
    -n ~/dcn0/network-data.yaml \
    -e /usr/share/openstack-tripleo-heat-templates/environments/network-environment.yaml \
    -e /usr/share/openstack-tripleo-heat-templates/environments/podman.yaml \
    -e /usr/share/openstack-tripleo-heat-templates/environments/dcn-storage.yaml \
    -e /usr/share/openstack-tripleo-heat-templates/environments/cephadm/cephadm-rbd-only.yaml \
    -e /usr/share/openstack-tripleo-heat-templates/environments/nova-az-config.yaml \
    -e /home/stack/overcloud-deploy/central/central-export.yaml \
    -e /home/stack/dcn0/deployed_ceph.yaml \
    -e /home/stack/dcn-common/central_ceph_external.yaml \
    -e /home/stack/dcn0/overcloud-vip-deployed.yaml \
    -e /home/stack/dcn0/deployed_metal.yaml \
    -e /home/stack/dcn0/overcloud-networks-deployed.yaml \
    -e ~/control-plane/glance.yaml
    Copy to Clipboard Toggle word wrap

您可以将 Red Hat OpenStack Platform 配置为使用预先存在的 Ceph 集群。这称为外部 Ceph 部署。

先决条件

  • 您必须有一个预装的 Ceph 集群,该集群对于 DCN 站点而言是本地的,以便不会超过延迟要求。

流程

  1. 在 Ceph 集群中创建以下池。如果要在中央位置部署,请包含 backupsmetrics 池:

    [root@ceph ~]# ceph osd pool create volumes <_PGnum_>
    [root@ceph ~]# ceph osd pool create images <_PGnum_>
    [root@ceph ~]# ceph osd pool create vms <_PGnum_>
    [root@ceph ~]# ceph osd pool create backups <_PGnum_>
    [root@ceph ~]# ceph osd pool create metrics <_PGnum_>
    Copy to Clipboard Toggle word wrap

    将 <_PGnum_> 替换为放置组的数量。您可以使用 每个池计算器的 Ceph Placement Groups (PG) 来确定合适的值。

  2. 在 Ceph 中创建 OpenStack 客户端用户,以提供 Red Hat OpenStack Platform 环境对适当的池的访问权限:

    ceph auth add client.openstack mon 'allow r' osd 'allow class-read object_prefix rbd_children, allow rwx pool=volumes, allow rwx pool=vms, allow rwx pool=images'
    Copy to Clipboard Toggle word wrap

    保存返回的 Ceph 客户端密钥。在配置 undercloud 时,将此密钥用作 CephClientKey 参数的值。

    注意

    如果在中央位置运行此命令,并计划使用 Cinder 备份或遥测服务,请在命令中添加 allow rwx pool=backups,允许 pool=metrics。

  3. 保存 Ceph Storage 集群的文件系统 ID。Ceph 配置文件的 [global] 部分中的 fsid 参数的值是文件系统 ID:

    [global]
    fsid = 4b5c8c0a-ff60-454b-a1b4-9747aa737d19
    ...
    Copy to Clipboard Toggle word wrap

    在配置 undercloud 时,使用此值作为 CephClusterFSID 参数的值。

  4. 在 undercloud 上,创建一个环境文件,将节点配置为连接到非受管 Ceph 集群。使用可识别的命名约定,如 ceph-external-<SITE>.yaml,其中 SITE 是部署的位置,如 ceph-external-central.yaml、ceph-external-dcn1.yaml 等。

      parameter_defaults:
        # The cluster FSID
        CephClusterFSID: '4b5c8c0a-ff60-454b-a1b4-9747aa737d19'
        # The CephX user auth key
        CephClientKey: 'AQDLOh1VgEp6FRAAFzT7Zw+Y9V6JJExQAsRnRQ=='
        # The list of IPs or hostnames of the Ceph monitors
        CephExternalMonHost: '172.16.1.7, 172.16.1.8, 172.16.1.9'
        # The desired name of the generated key and conf files
        CephClusterName: dcn1
    Copy to Clipboard Toggle word wrap
    1. 将之前保存的值用于 CephClusterFSID 和 CephClientKey 参数。
    2. 使用 Ceph 监视器中以逗号分隔的 ip 地址列表,作为 CephExternalMonHost 参数的值。
    3. 您必须在边缘站点中为 CephClusterName 参数选择唯一值。重新使用名称将导致配置文件被覆盖。
  5. 如果您使用位于中央位置的 Red Hat OpenStack Platform director 部署 Red Hat Ceph Storage,您可以将 ceph 配置导出到环境文件 central_ceph_external.yaml。此环境文件将 DCN 站点连接到中央 hub Ceph 集群,因此信息特定于上一步中部署的 Ceph 集群:

    sudo -E openstack overcloud export ceph \
    --stack central \
    --output-file /home/stack/dcn-common/central_ceph_external.yaml
    Copy to Clipboard Toggle word wrap

    如果中央位置已在外部部署 Red Hat Ceph Storage,则无法使用 openstack overcloud export ceph 命令来生成 central_ceph_external.yaml 文件。您必须手动创建 central_ceph_external.yaml 文件:

    parameter_defaults:
      CephExternalMultiConfig:
        - cluster: "central"
          fsid: "3161a3b4-e5ff-42a0-9f53-860403b29a33"
          external_cluster_mon_ips: "172.16.11.84, 172.16.11.87, 172.16.11.92"
          keys:
            - name: "client.openstack"
              caps:
                mgr: "allow *"
                mon: "profile rbd"
                osd: "profile rbd pool=vms, profile rbd pool=volumes, profile rbd pool=images"
              key: "AQD29WteAAAAABAAphgOjFD7nyjdYe8Lz0mQ5Q=="
              mode: "0600"
          dashboard_enabled: false
          ceph_conf_overrides:
            client:
              keyring: /etc/ceph/central.client.openstack.keyring
    Copy to Clipboard Toggle word wrap
  6. 创建一个环境文件,其中包含每个站点的类似详情,并带有非受管 Red Hat Ceph Storage 集群用于中央位置。openstack overcloud export ceph 命令不适用于具有非受管 Red Hat Ceph Storage 集群的站点。当您更新中央位置时,此文件将允许边缘站点中的存储集群作为辅助位置

    parameter_defaults:
      CephExternalMultiConfig:
    cluster: dcn1
    …
    cluster: dcn2
    …
    Copy to Clipboard Toggle word wrap
  7. 在部署 overcloud 时,使用 external-ceph.yaml、ceph-external-<SITE>.yaml 和 central_ceph_external.yaml 环境文件:

    openstack overcloud deploy \
        --stack dcn1 \
        --templates /usr/share/openstack-tripleo-heat-templates/ \
        -r ~/dcn1/roles_data.yaml \
        -e /usr/share/openstack-tripleo-heat-templates/environments/external-ceph.yaml \
        -e /usr/share/openstack-tripleo-heat-templates/environments/dcn-storage.yaml \
        -e /usr/share/openstack-tripleo-heat-templates/environments/nova-az-config.yaml \
        -e /home/stack/dnc1/ceph-external-dcn1.yaml  \
        ....
        -e /home/stack/overcloud-deploy/central/central-export.yaml \
        -e /home/stack/dcn-common/central_ceph_external.yaml \
        -e /home/stack/dcn1/dcn_ceph_keys.yaml \
        -e /home/stack/dcn1/role-counts.yaml \
        -e /home/stack/dcn1/ceph.yaml \
        -e /home/stack/dcn1/site-name.yaml \
        -e /home/stack/dcn1/tuning.yaml \
        -e /home/stack/dcn1/glance.yaml
    Copy to Clipboard Toggle word wrap
  8. 部署所有边缘位置后重新部署中央位置。

7.6. 更新中央位置

使用示例过程配置和部署所有边缘站点后,在中央位置更新配置,以便中央镜像服务可以将镜像推送到边缘站点。

警告

此流程重启镜像服务(glance),并中断任何长时间运行的镜像服务进程。例如,如果镜像从中央镜像服务服务器复制到 DCN 镜像服务服务器,则该镜像副本会中断,您必须重启它。如需更多信息,请参阅 中断镜像服务进程后清除数据

流程

  1. 创建一个类似如下的 ~/central/glance_update.yaml 文件。这个示例包括两个边缘站点的配置,dcn0 和 dcn1 :

      parameter_defaults:
        GlanceEnabledImportMethods: web-download,copy-image
        GlanceBackend: rbd
        GlanceStoreDescription: 'central rbd glance store'
        CephClusterName: central
        GlanceBackendID: central
        GlanceMultistoreConfig:
          dcn0:
            GlanceBackend: rbd
            GlanceStoreDescription: 'dcn0 rbd glance store'
            CephClientUserName: 'openstack'
            CephClusterName: dcn0
            GlanceBackendID: dcn0
          dcn1:
            GlanceBackend: rbd
            GlanceStoreDescription: 'dcn1 rbd glance store'
            CephClientUserName: 'openstack'
            CephClusterName: dcn1
            GlanceBackendID: dcn1
    Copy to Clipboard Toggle word wrap
  2. 创建 dcn_ceph.yaml 文件。在以下示例中,此文件将中央站点上的 glance 服务配置为边缘站点的 Ceph 集群的客户端,即 dcn0dcn1

    openstack overcloud export ceph \
    --stack dcn0,dcn1 \
    --output-file ~/central/dcn_ceph.yaml
    Copy to Clipboard Toggle word wrap
  3. 使用原始模板重新部署中央站点,并包含新创建的 dcn_ceph.yamlglance_update.yaml 文件。

    openstack overcloud deploy \
    --deployed-server \
    --stack central \
    --templates /usr/share/openstack-tripleo-heat-templates/ \
    -r ~/control-plane/central_roles.yaml \
    -n ~/network-data.yaml \
    -e /usr/share/openstack-tripleo-heat-templates/environments/network-environment.yaml \
    -e /usr/share/openstack-tripleo-heat-templates/environments/podman.yaml \
    -e /usr/share/openstack-tripleo-heat-templates/environments/dcn-storage.yaml \
    -e /usr/share/openstack-tripleo-heat-templates/environments/cephadm/cephadm.yaml \
    -e /usr/share/openstack-tripleo-heat-templates/environments/nova-az-config.yaml \
    -e /home/stack/central/overcloud-networks-deployed.yaml \
    -e /home/stack/central/overcloud-vip-deployed.yaml \
    -e /home/stack/central/deployed_metal.yaml \
    -e /home/stack/central/deployed_ceph.yaml \
    -e /home/stack/central/dcn_ceph.yaml \
    -e /home/stack/central/glance_update.yaml
    Copy to Clipboard Toggle word wrap
openstack overcloud deploy \
       --stack central \
       --templates /usr/share/openstack-tripleo-heat-templates/ \
       -r ~/central/central_roles.yaml \
    ...
       -e /usr/share/openstack-tripleo-heat-templates/environments/cephadm/cephadm.yaml \
       -e /usr/share/openstack-tripleo-heat-templates/environments/nova-az-config.yaml \
       -e ~/central/central-images-env.yaml \
       -e ~/central/role-counts.yaml \
       -e ~/central/site-name.yaml
       -e ~/central/ceph.yaml \
       -e ~/central/ceph_keys.yaml \
       -e ~/central/glance.yaml \
       -e ~/central/dcn_ceph_external.yaml
Copy to Clipboard Toggle word wrap
  1. 在位于中央位置的控制器上,重新启动 cinder-volume 服务。如果您使用 cinder-backup 服务部署中央位置,则还要重启 cinder-backup 服务:

    ssh tripleo-admin@controller-0 sudo pcs resource restart openstack-cinder-volume
    ssh tripleo-admin@controller-0 sudo pcs resource restart openstack-cinder-backup
    Copy to Clipboard Toggle word wrap

7.6.1. 在中断镜像服务进程后清除数据

重启中央位置时,任何长时间运行的镜像服务(glance)进程都会中断。在重启这些进程前,您必须首先清理您重启的 Controller 节点上的数据,并在 Ceph 和镜像服务数据库中。

流程

  1. 检查并清除重启的 Controller 节点中的 Reidual 数据。将 staging 存储的 glance-api.conf 文件中的文件与镜像服务数据库中对应的镜像进行比较,如 < image_ID>.raw

    • 如果这些对应的镜像显示导入状态,您必须重新创建镜像。
    • 如果镜像显示 active 状态,则必须从 staging 中删除数据并重启副本导入。
  2. 检查和清除 Ceph 存储中的遗留数据。从暂存区域清理的镜像必须具有包含镜像的 Ceph 存储的 stores 属性中的匹配记录。Ceph 中的镜像名称是镜像服务数据库中的 image id。
  3. 清除镜像服务数据库。从导入作业中清除处于导入状态的镜像:

    $ glance image-delete <image_id>
    Copy to Clipboard Toggle word wrap

7.7. 在 DCN 上部署 Red Hat Ceph Storage Dashboard

流程

若要将 Red Hat Ceph Storage 控制面板部署到中央位置,请参阅将 Red Hat Ceph Storage 仪表板添加到 overcloud 部署。在部署中央位置之前,应完成这些步骤。

要将 Red Hat Ceph Storage Dashboard 部署到边缘位置,请完成与中心相同的步骤,但您必须完成以下操作:

  • 确保 ManageNetworks 参数在模板中具有用于部署边缘站点的 false 值。将 ManageNetworks 设置为 false 时,Edge 站点将使用已在中央堆栈中创建的现有网络:

    parameter_defaults:
      ManageNetworks: false
    Copy to Clipboard Toggle word wrap
  • 您必须部署自己的解决方案以进行负载平衡,以便创建高可用性虚拟 IP。边缘站点不部署 haproxy,或 pacemaker。当您将 Red Hat Ceph Storage Dashboard 部署到边缘位置时,部署会在存储网络上公开。仪表板安装在三个 DistributedComputeHCI 节点上,具有不同 IP 地址而无需负载平衡解决方案。

您可以创建一个额外网络来托管公开 Ceph 仪表板的虚拟 IP。您不能为多个堆栈重复使用网络资源。有关重复使用网络资源的更多信息,请参阅 在多个堆栈中重复使用网络资源

要创建这个额外网络资源,请使用提供的 network_data_dashboard.yaml heat 模板。创建的网络的名称是 StorageDashboard

流程

  1. stack 身份登录 Red Hat OpenStack Platform Director。
  2. 生成 DistributedComputeHCIDashboard 角色以及适用于您的环境的任何其他角色:

    openstack overcloud roles generate DistributedComputeHCIDashboard -o ~/dnc0/roles.yaml
    Copy to Clipboard Toggle word wrap
  3. 在 overcloud deploy 命令中包含 roles.yamlnetwork_data_dashboard.yaml

    $ openstack overcloud deploy --templates \
    -r ~/<dcn>/<dcn_site_roles>.yaml \
    -n /usr/share/openstack-tripleo-heat-templates/network_data_dashboard.yaml \
    -e <overcloud_environment_files> \
    ...
    -e /usr/share/openstack-tripleo-heat-templates/environments/cephadm/cephadm-rbd-only.yaml \
    -e /usr/share/openstack-tripleo-heat-templates/environments/cephadm/ceph-dashboard.yaml \
    Copy to Clipboard Toggle word wrap
注意

部署提供了在存储网络上启用仪表板的三个 ip 地址。

验证

若要确认仪表板在中央位置运行,并且它从 Ceph 集群显示的数据正确,请参阅 访问 Ceph 控制面板

您可以通过相似的步骤确认仪表板正在边缘位置运行,但边缘位置没有负载均衡器。

  1. 检索特定于所选堆栈的仪表板管理员登录凭证:

    grep grafana_admin /home/stack/config-download/<stack>/cephadm/cephadm-extra-vars-heat.yml
    Copy to Clipboard Toggle word wrap
  2. 在特定于所选堆栈的清单中,/home/stack/config-download/<stack>/cephadm/inventory.yml,找到 DistributedComputeHCI 角色主机列表,并保存所有三个 storage_ip 值。在以下示例中,前两个仪表板 IP 为 172.16.11.84 和 172.16.11.87:

    DistributedComputeHCI:
      hosts:
        dcn1-distributed-compute-hci-0:
          ansible_host: 192.168.24.16
    ...
    storage_hostname: dcn1-distributed-compute-hci-0.storage.localdomain
    storage_ip: 172.16.11.84
    ...
        dcn1-distributed-compute-hci-1:
    ansible_host: 192.168.24.22
    ...
    storage_hostname: dcn1-distributed-compute-hci-1.storage.localdomain
    storage_ip: 172.16.11.87
    Copy to Clipboard Toggle word wrap
  3. 如果 Ceph 控制面板可以访问,则您可以检查这些 IP 地址中的一个是否活跃。这些 IP 地址位于存储网络上,且没有路由。如果这些 IP 地址不可用,您必须为您从清单获得的三个 IP 地址配置负载均衡器,以获取虚拟 IP 地址进行验证。

第 8 章 替换 DistributedComputeHCI 节点

在硬件维护期间,您可能需要在边缘站点上缩减、扩展或替换 DistributedComputeHCI 节点。要替换 DistributedComputeHCI 节点,请从要替换的节点中删除服务,缩减节点数量,然后按照扩展这些节点的步骤操作。

8.1. 删除 Red Hat Ceph Storage 服务

从集群中删除 HCI (超融合)节点前,您必须删除 Red Hat Ceph Storage 服务。要删除 Red Hat Ceph 服务,您必须从要删除的节点上的集群服务中禁用和移除 ceph-osd 服务,然后停止并禁用 monmgrosd 服务。

流程

  1. 在 undercloud 上,使用 SSH 连接到您要删除的 DistributedComputeHCI 节点:

    $ ssh tripleo-admin@<dcn-computehci-node>
    Copy to Clipboard Toggle word wrap
  2. 启动 cephadm shell。使用要删除的主机的站点的配置文件和密钥环文件:

    $ sudo cephadm shell --config /etc/ceph/dcn2.conf \
    --keyring /etc/ceph/dcn2.client.admin.keyring
    Copy to Clipboard Toggle word wrap
  3. 记录与 DistributedComputeHCI 节点关联的 OSD (对象存储设备),您要删除以在以后的步骤中使用引用:

    [ceph: root@dcn2-computehci2-1 ~]# ceph osd tree -c /etc/ceph/dcn2.conf
    …
    -3       0.24399     host dcn2-computehci2-1
     1   hdd 0.04880         osd.1                           up  1.00000 1.00000
     7   hdd 0.04880         osd.7                           up  1.00000 1.00000
    11   hdd 0.04880         osd.11                          up  1.00000 1.00000
    15   hdd 0.04880         osd.15                          up  1.00000 1.00000
    18   hdd 0.04880         osd.18                          up  1.00000 1.00000
    …
    Copy to Clipboard Toggle word wrap
  4. 使用 SSH 连接到同一集群中的另一节点,并从集群中删除该监控器:

    $ sudo cephadm shell --config /etc/ceph/dcn2.conf \
    --keyring /etc/ceph/dcn2.client.admin.keyring
    
    [ceph: root@dcn-computehci2-0]# ceph mon remove dcn2-computehci2-1 -c /etc/ceph/dcn2.conf
    removing mon.dcn2-computehci2-1 at [v2:172.23.3.153:3300/0,v1:172.23.3.153:6789/0], there will be 2 monitors
    Copy to Clipboard Toggle word wrap
  5. 使用 SSH 再次登录到您要从集群中删除的节点。
  6. 停止并禁用 mgr 服务:

    [tripleo-admin@dcn2-computehci2-1 ~]$ sudo systemctl --type=service | grep ceph
    ceph-crash@dcn2-computehci2-1.service    loaded active     running       Ceph crash dump collector
    ceph-mgr@dcn2-computehci2-1.service      loaded active     running       Ceph Manager
    
    [tripleo-admin@dcn2-computehci2-1 ~]$ sudo systemctl stop ceph-mgr@dcn2-computehci2-1
    
    [tripleo-admin@dcn2-computehci2-1 ~]$ sudo systemctl --type=service | grep ceph
    ceph-crash@dcn2-computehci2-1.service  loaded active running Ceph crash dump collector
    
    [tripleo-admin@dcn2-computehci2-1 ~]$ sudo systemctl disable ceph-mgr@dcn2-computehci2-1
    Removed /etc/systemd/system/multi-user.target.wants/ceph-mgr@dcn2-computehci2-1.service.
    Copy to Clipboard Toggle word wrap
  7. 启动 cephadm shell:

    $ sudo cephadm shell --config /etc/ceph/dcn2.conf \
    --keyring /etc/ceph/dcn2.client.admin.keyring
    Copy to Clipboard Toggle word wrap
  8. 验证该节点的 mgr 服务是否已从集群中删除:

    [ceph: root@dcn2-computehci2-1 ~]# ceph -s
    
    cluster:
        id:     b9b53581-d590-41ac-8463-2f50aa985001
        health: HEALTH_WARN
                3 pools have too many placement groups
                mons are allowing insecure global_id reclaim
    
      services:
        mon: 2 daemons, quorum dcn2-computehci2-2,dcn2-computehci2-0 (age 2h)
        mgr: dcn2-computehci2-2(active, since 20h), standbys: dcn2-computehci2-0 
    1
    
        osd: 15 osds: 15 up (since 3h), 15 in (since 3h)
    
      data:
        pools:   3 pools, 384 pgs
        objects: 32 objects, 88 MiB
        usage:   16 GiB used, 734 GiB / 750 GiB avail
        pgs:     384 active+clean
    Copy to Clipboard Toggle word wrap
    1
    当 mgr 服务成功移除时,从中删除 mgr 服务的节点将不再列出。
  9. 导出 Red Hat Ceph Storage 规格:

    [ceph: root@dcn2-computehci2-1 ~]# ceph orch ls --export > spec.yml
    Copy to Clipboard Toggle word wrap
  10. 编辑 spec.yaml 文件中的规格:

    • 从 spec.yml 中删除主机 <dcn-computehci-node> 的所有实例
    • 从以下内容中删除 <dcn-computehci-node> 条目的所有实例:

      • service_type: osd
      • service_type: mon
      • service_type: host
  11. 重新应用 Red Hat Ceph Storage 规格:

    [ceph: root@dcn2-computehci2-1 /]# ceph orch apply -i spec.yml
    Copy to Clipboard Toggle word wrap
  12. 删除您使用 ceph osd tree 来标识的 OSD:

    [ceph: root@dcn2-computehci2-1 /]# ceph orch osd rm --zap 1 7 11 15 18
    Scheduled OSD(s) for removal
    Copy to Clipboard Toggle word wrap
  13. 验证正在移除的 OSD 的状态。在以下命令返回没有输出前不要继续:

    [ceph: root@dcn2-computehci2-1 /]# ceph orch osd rm status
    OSD_ID  HOST                    STATE     PG_COUNT  REPLACE  FORCE  DRAIN_STARTED_AT
    1       dcn2-computehci2-1      draining  27        False    False  2021-04-23 21:35:51.215361
    7       dcn2-computehci2-1      draining  8         False    False  2021-04-23 21:35:49.111500
    11      dcn2-computehci2-1      draining  14        False    False  2021-04-23 21:35:50.243762
    Copy to Clipboard Toggle word wrap
  14. 验证您要删除的主机上没有剩余的守护进程:

    [ceph: root@dcn2-computehci2-1 /]# ceph orch ps dcn2-computehci2-1
    Copy to Clipboard Toggle word wrap

    如果守护进程仍然存在,您可以使用以下命令删除它们:

    [ceph: root@dcn2-computehci2-1 /]# ceph orch host drain dcn2-computehci2-1
    Copy to Clipboard Toggle word wrap
  15. 从 Red Hat Ceph Storage 集群中删除 <dcn-computehci-node> 主机:

    [ceph: root@dcn2-computehci2-1 /]# ceph orch host rm dcn2-computehci2-1
    Removed host ‘dcn2-computehci2-1’
    Copy to Clipboard Toggle word wrap

8.2. 删除 Image 服务(glance)服务

当您将其从服务中删除时,从节点移除镜像服务。

流程

  • 要禁用镜像服务,请使用您要删除的节点上的 systemctl 禁用它们:

    [root@dcn2-computehci2-1 ~]# systemctl stop tripleo_glance_api.service
    [root@dcn2-computehci2-1 ~]# systemctl stop  tripleo_glance_api_tls_proxy.service
    
    [root@dcn2-computehci2-1 ~]# systemctl disable tripleo_glance_api.service
    Removed /etc/systemd/system/multi-user.target.wants/tripleo_glance_api.service.
    [root@dcn2-computehci2-1 ~]# systemctl disable  tripleo_glance_api_tls_proxy.service
    Removed /etc/systemd/system/multi-user.target.wants/tripleo_glance_api_tls_proxy.service.
    Copy to Clipboard Toggle word wrap

8.3. 删除 Block Storage (cinder)服务

在将 cinder-volumeetcd 服务从服务中删除时,您必须从 DistributedComputeHCI 节点中删除 cinder-volume 和 etcd 服务。

流程

  1. 在您要删除的节点上识别并禁用 cinder-volume 服务:

    (central) [stack@site-undercloud-0 ~]$ openstack volume service list --service cinder-volume
    | cinder-volume | dcn2-computehci2-1@tripleo_ceph | az-dcn2    | enabled | up    | 2022-03-23T17:41:43.000000 |
    (central) [stack@site-undercloud-0 ~]$ openstack volume service set --disable dcn2-computehci2-1@tripleo_ceph cinder-volume
    Copy to Clipboard Toggle word wrap
  2. 在堆栈中登录到不同的 DistributedComputeHCI 节点:

    $ ssh tripleo-admin@dcn2-computehci2-0
    Copy to Clipboard Toggle word wrap
  3. 删除与您要删除的节点关联的 cinder-volume 服务:

    [root@dcn2-computehci2-0 ~]# podman exec -it cinder_volume cinder-manage service remove cinder-volume dcn2-computehci2-1@tripleo_ceph
    Service cinder-volume on host dcn2-computehci2-1@tripleo_ceph removed.
    Copy to Clipboard Toggle word wrap
  4. 在您要删除的节点上停止并禁用 tripleo_cinder_volume 服务:

    [root@dcn2-computehci2-1 ~]# systemctl stop tripleo_cinder_volume.service
    [root@dcn2-computehci2-1 ~]# systemctl disable tripleo_cinder_volume.service
    Removed /etc/systemd/system/multi-user.target.wants/tripleo_cinder_volume.service
    Copy to Clipboard Toggle word wrap

8.4. 删除 DistributedComputeHCI 节点

provisioned 参数设置为 false,并将节点从堆栈中删除。禁用 nova-compute 服务,并删除相关的网络代理。

流程

  1. 复制 baremetal-deployment.yaml 文件:

    cp /home/stack/dcn2/overcloud-baremetal-deploy.yaml \
    /home/stack/dcn2/baremetal-deployment-scaledown.yaml
    Copy to Clipboard Toggle word wrap
  2. 编辑 baremetal-deployement-scaledown.yaml 文件。确定您要删除的主机,并将 provisioned 参数设置为 false

    instances:
    ...
      - hostname: dcn2-computehci2-1
        provisioned: false
    Copy to Clipboard Toggle word wrap
  3. 从堆栈中删除节点:

    openstack overcloud node delete --stack dcn2 --baremetal-deployment /home/stack/dcn2/baremetal_deployment_scaledown.yaml
    Copy to Clipboard Toggle word wrap
  4. 可选:如果要重复使用该节点,请使用 ironic 来清理磁盘。如果节点托管 Ceph OSD,则需要此项:

    openstack baremetal node manage $UUID
    openstack baremetal node clean $UUID --clean-steps '[{"interface":"deploy", "step": "erase_devices_metadata"}]'
    openstack baremetal provide $UUID
    Copy to Clipboard Toggle word wrap
  5. 重新部署中央站点。包括用于初始配置的所有模板:

    openstack overcloud deploy \
    --deployed-server \
    --stack central \
    --templates /usr/share/openstack-tripleo-heat-templates/ \
    -r ~/control-plane/central_roles.yaml \
    -n ~/network-data.yaml \
    -e /usr/share/openstack-tripleo-heat-templates/environments/network-environment.yaml \
    -e /usr/share/openstack-tripleo-heat-templates/environments/podman.yaml \
    -e /usr/share/openstack-tripleo-heat-templates/environments/dcn-storage.yaml \
    -e /usr/share/openstack-tripleo-heat-templates/environments/cephadm/cephadm.yaml \
    -e /usr/share/openstack-tripleo-heat-templates/environments/nova-az-config.yaml \
    -e /home/stack/central/overcloud-networks-deployed.yaml \
    -e /home/stack/central/overcloud-vip-deployed.yaml \
    -e /home/stack/central/deployed_metal.yaml \
    -e /home/stack/central/deployed_ceph.yaml \
    -e /home/stack/central/dcn_ceph.yaml \
    -e /home/stack/central/glance_update.yaml
    Copy to Clipboard Toggle word wrap

8.5. 替换已删除的 DistributedComputeHCI 节点

8.5.1. 替换已删除的 DistributedComputeHCI 节点

要将新的 HCI 节点添加到 DCN 部署中,您必须使用额外的节点重新部署边缘堆栈,执行该堆栈的 ceph 导出,然后为中央位置执行堆栈更新。中央位置的堆栈更新添加了特定于边缘站点的配置。

先决条件

节点数在您要替换节点的堆栈的 nodes_data.yaml 文件中正确,或添加新节点。

流程

  1. 在您的部署脚本调用的一个模板中将 EtcdIntialClusterState 参数设置为 existing

    parameter_defaults:
      EtcdInitialClusterState: existing
    Copy to Clipboard Toggle word wrap
  2. 使用特定于堆栈的部署脚本重新部署:

    (undercloud) [stack@site-undercloud-0 ~]$ ./overcloud_deploy_dcn2.sh
    …
    Overcloud Deployed without error
    Copy to Clipboard Toggle word wrap
  3. 从堆栈导出 Red Hat Ceph Storage 数据:

    (undercloud) [stack@site-undercloud-0 ~]$ sudo -E openstack overcloud export ceph --stack dcn1,dcn2 --config-download-dir /var/lib/mistral --output-file ~/central/dcn2_scale_up_ceph_external.yaml
    Copy to Clipboard Toggle word wrap
  4. 将 dcn_ceph_external.yaml 替换为 deploy 脚本中新生成的 dcn2_scale_up_ceph_external.yaml,用于中央位置。
  5. 中心执行堆栈更新:

    (undercloud) [stack@site-undercloud-0 ~]$ ./overcloud_deploy.sh
    ...
    Overcloud Deployed without error
    Copy to Clipboard Toggle word wrap

8.6. 验证已替换 DistributedComputeHCI 节点的功能

  1. 确保启用了 status 字段的值,并且 State 字段的值为 up

    (central) [stack@site-undercloud-0 ~]$ openstack compute service list -c Binary -c Host -c Zone -c Status -c State
    +----------------+-----------------------------------------+------------+---------+-------+
    | Binary         | Host                                    | Zone       | Status  | State |
    +----------------+-----------------------------------------+------------+---------+-------+
    ...
    | nova-compute   | dcn1-compute1-0.redhat.local            | az-dcn1    | enabled | up    |
    | nova-compute   | dcn1-compute1-1.redhat.local            | az-dcn1    | enabled | up    |
    | nova-compute   | dcn2-computehciscaleout2-0.redhat.local | az-dcn2    | enabled | up    |
    | nova-compute   | dcn2-computehci2-0.redhat.local         | az-dcn2    | enabled | up    |
    | nova-compute   | dcn2-computescaleout2-0.redhat.local    | az-dcn2    | enabled | up    |
    | nova-compute   | dcn2-computehci2-2.redhat.local         | az-dcn2    | enabled | up    |
    ...
    Copy to Clipboard Toggle word wrap
  2. 确保所有网络代理都处于 up 状态:

    (central) [stack@site-undercloud-0 ~]$ openstack network agent list -c "Agent Type" -c Host -c Alive -c State
    +--------------------+-----------------------------------------+-------+-------+
    | Agent Type         | Host                                    | Alive | State |
    +--------------------+-----------------------------------------+-------+-------+
    | DHCP agent         | dcn3-compute3-1.redhat.local            | :-)   | UP    |
    | Open vSwitch agent | central-computehci0-1.redhat.local      | :-)   | UP    |
    | DHCP agent         | dcn3-compute3-0.redhat.local            | :-)   | UP    |
    | DHCP agent         | central-controller0-2.redhat.local      | :-)   | UP    |
    | Open vSwitch agent | dcn3-compute3-1.redhat.local            | :-)   | UP    |
    | Open vSwitch agent | dcn1-compute1-1.redhat.local            | :-)   | UP    |
    | Open vSwitch agent | central-computehci0-0.redhat.local      | :-)   | UP    |
    | DHCP agent         | central-controller0-1.redhat.local      | :-)   | UP    |
    | L3 agent           | central-controller0-2.redhat.local      | :-)   | UP    |
    | Metadata agent     | central-controller0-1.redhat.local      | :-)   | UP    |
    | Open vSwitch agent | dcn2-computescaleout2-0.redhat.local    | :-)   | UP    |
    | Open vSwitch agent | dcn2-computehci2-5.redhat.local         | :-)   | UP    |
    | Open vSwitch agent | central-computehci0-2.redhat.local      | :-)   | UP    |
    | DHCP agent         | central-controller0-0.redhat.local      | :-)   | UP    |
    | Open vSwitch agent | central-controller0-1.redhat.local      | :-)   | UP    |
    | Open vSwitch agent | dcn2-computehci2-0.redhat.local         | :-)   | UP    |
    | Open vSwitch agent | dcn1-compute1-0.redhat.local            | :-)   | UP    |
    ...
    Copy to Clipboard Toggle word wrap
  3. 验证 Ceph 集群的状态:

    1. 使用 SSH 连接到新的 DistributedComputeHCI 节点,并检查 Ceph 集群的状态:

      [root@dcn2-computehci2-5 ~]# podman exec -it ceph-mon-dcn2-computehci2-5 \
      ceph -s -c /etc/ceph/dcn2.conf
      Copy to Clipboard Toggle word wrap
    2. 验证新节点的 ceph mon 和 ceph mgr 服务都存在:

      services:
          mon: 3 daemons, quorum dcn2-computehci2-2,dcn2-computehci2-0,dcn2-computehci2-5 (age 3d)
          mgr: dcn2-computehci2-2(active, since 3d), standbys: dcn2-computehci2-0, dcn2-computehci2-5
          osd: 20 osds: 20 up (since 3d), 20 in (since 3d)
      Copy to Clipboard Toggle word wrap
    3. 使用 'ceph osd tree' 验证 ceph osds 的状态。确保新节点的所有 osds 都为 STATUS up:

      [root@dcn2-computehci2-5 ~]# podman exec -it ceph-mon-dcn2-computehci2-5 ceph osd tree -c /etc/ceph/dcn2.conf
      ID CLASS WEIGHT  TYPE NAME                           STATUS REWEIGHT PRI-AFF
      -1       0.97595 root default
      -5       0.24399     host dcn2-computehci2-0
       0   hdd 0.04880         osd.0                           up  1.00000 1.00000
       4   hdd 0.04880         osd.4                           up  1.00000 1.00000
       8   hdd 0.04880         osd.8                           up  1.00000 1.00000
      13   hdd 0.04880         osd.13                          up  1.00000 1.00000
      17   hdd 0.04880         osd.17                          up  1.00000 1.00000
      -9       0.24399     host dcn2-computehci2-2
       3   hdd 0.04880         osd.3                           up  1.00000 1.00000
       5   hdd 0.04880         osd.5                           up  1.00000 1.00000
      10   hdd 0.04880         osd.10                          up  1.00000 1.00000
      14   hdd 0.04880         osd.14                          up  1.00000 1.00000
      19   hdd 0.04880         osd.19                          up  1.00000 1.00000
      -3       0.24399     host dcn2-computehci2-5
       1   hdd 0.04880         osd.1                           up  1.00000 1.00000
       7   hdd 0.04880         osd.7                           up  1.00000 1.00000
      11   hdd 0.04880         osd.11                          up  1.00000 1.00000
      15   hdd 0.04880         osd.15                          up  1.00000 1.00000
      18   hdd 0.04880         osd.18                          up  1.00000 1.00000
      -7       0.24399     host dcn2-computehciscaleout2-0
       2   hdd 0.04880         osd.2                           up  1.00000 1.00000
       6   hdd 0.04880         osd.6                           up  1.00000 1.00000
       9   hdd 0.04880         osd.9                           up  1.00000 1.00000
      12   hdd 0.04880         osd.12                          up  1.00000 1.00000
      16   hdd 0.04880         osd.16                          up  1.00000 1.00000
      Copy to Clipboard Toggle word wrap
  4. 验证新 DistributedComputeHCI 节点的 cinder-volume 服务处于 Status 'enabled' 和 State 'up':

    (central) [stack@site-undercloud-0 ~]$ openstack volume service list --service cinder-volume -c Binary -c Host -c Zone -c Status -c State
    +---------------+---------------------------------+------------+---------+-------+
    | Binary        | Host                            | Zone       | Status  | State |
    +---------------+---------------------------------+------------+---------+-------+
    | cinder-volume | hostgroup@tripleo_ceph          | az-central | enabled | up    |
    | cinder-volume | dcn1-compute1-1@tripleo_ceph    | az-dcn1    | enabled | up    |
    | cinder-volume | dcn1-compute1-0@tripleo_ceph    | az-dcn1    | enabled | up    |
    | cinder-volume | dcn2-computehci2-0@tripleo_ceph | az-dcn2    | enabled | up    |
    | cinder-volume | dcn2-computehci2-2@tripleo_ceph | az-dcn2    | enabled | up    |
    | cinder-volume | dcn2-computehci2-5@tripleo_ceph | az-dcn2    | enabled | up    |
    +---------------+---------------------------------+------------+---------+-------+
    Copy to Clipboard Toggle word wrap
    注意

    如果 cinder-volume 服务的 State 停机,则该服务尚未在该节点上启动。

  5. 使用 ssh 连接到新的 DistributedComputeHCI 节点,并使用 'systemctl' 检查 Glance 服务的状态:

    [root@dcn2-computehci2-5 ~]# systemctl --type service | grep glance
      tripleo_glance_api.service                        loaded active     running       glance_api container
      tripleo_glance_api_healthcheck.service            loaded activating start   start glance_api healthcheck
      tripleo_glance_api_tls_proxy.service              loaded active     running       glance_api_tls_proxy container
    Copy to Clipboard Toggle word wrap

8.7. DistributedComputeHCI 状态向下故障排除

如果替换节点在 EtcdInitialClusterState 参数值没有设置为 existing 的情况下部署,则替换节点的 cinder-volume 服务会在运行 openstack volume service list 时显示 down

流程

  1. 登录到替换节点并检查 etcd 服务的日志。检查在 /var/log/containers/stdouts/etcd.log 日志文件中是否显示 etcd 服务报告了一个集群 ID 不匹配的问题。

    2022-04-06T18:00:11.834104130+00:00 stderr F 2022-04-06 18:00:11.834045 E | rafthttp: request cluster ID mismatch (got 654f4cf0e2cfb9fd want 918b459b36fe2c0c)
    Copy to Clipboard Toggle word wrap
  2. EtcdInitialClusterState 参数设置为 部署模板中的现有 值,并重新运行部署脚本。
  3. 使用 SSH 连接到替换节点,并以 root 用户身份运行以下命令:

    [root@dcn2-computehci2-4 ~]# systemctl stop tripleo_etcd
    [root@dcn2-computehci2-4 ~]# rm -rf /var/lib/etcd/*
    [root@dcn2-computehci2-4 ~]# systemctl start tripleo_etcd
    Copy to Clipboard Toggle word wrap
  4. 再次检查 /var/log/containers/stdouts/etcd.log 日志文件,以验证节点是否已成功加入集群:

    2022-04-06T18:24:22.130059875+00:00 stderr F 2022-04-06 18:24:22.129395 I | etcdserver/membership: added member 96f61470cd1839e5 [https://dcn2-computehci2-4.internalapi.redhat.local:2380] to cluster 654f4cf0e2cfb9fd
    Copy to Clipboard Toggle word wrap
  5. 检查 cinder-volume 服务的状态,确定在运行 openstack volume service list 时它在替换节点上为 up

第 9 章 使用密钥管理器进行部署

如果您在 Red Hat OpenStack Platform 16.1.2 发布前部署了边缘站点,则需要重新生成 roles.yaml 来实现此功能: 要实施该功能,请重新生成用于 DCN 站点部署的 roles.yaml 文件。

$ openstack overcloud roles generate DistributedComputeHCI DistributedComputeHCIScaleOut -o ~/dcn0/roles_data.yaml
Copy to Clipboard Toggle word wrap

9.1. 使用密钥管理器部署边缘站点

如果要在边缘站点包含对 Key Manager (barbican)服务的访问,您必须在中央位置配置 barbican。有关安装和配置 barbican 的详情,请参考 部署 Barbican

  • 您可以通过包含 /usr/share/openstack-tripleo-heat-templates/environments/services/barbican-edge.yaml 来配置从 DCN 站点对 barbican 的访问。

    openstack overcloud deploy \
        --stack dcn0 \
        --templates /usr/share/openstack-tripleo-heat-templates/ \
        -r ~/dcn0/roles_data.yaml \
        ....
        -e /usr/share/openstack-tripleo-heat-templates/environments/services/barbican-edge.yaml
    Copy to Clipboard Toggle word wrap

第 10 章 将 glance 镜像预缓存到 nova

当您将 OpenStack Compute 配置为使用本地临时存储时,将缓存 glance 镜像来快速部署实例。如果实例所需的镜像尚未缓存,则在创建实例时,它将下载到 Compute 节点的本地磁盘。

下载 glance 镜像的过程需要大量时间,具体取决于镜像大小和网络特征,如带宽和延迟。

如果您尝试启动实例,且镜像在本地的 Ceph 集群中不可用,则启动实例将失败,并显示以下信息:

Build of instance 3c04e982-c1d1-4364-b6bd-f876e399325b aborted: Image 20c5ff9d-5f54-4b74-830f-88e78b9999ed is unacceptable: No image locations are accessible
Copy to Clipboard Toggle word wrap

您在 Compute 服务日志中看到以下内容:

'Image %s is not on my ceph and [workarounds]/ never_download_image_if_on_rbd=True; refusing to fetch and upload.',
Copy to Clipboard Toggle word wrap

由于 nova.conf 配置文件中的一个参数(名为 never_download_image_if_on_rbd)对于 DCN 部署被默认设为 true,则实例会启动失败。您可以使用 heat 参数 NovaDisableImageDownloadToRbd 控制这个值,您可以在 dcn-storage.yaml 文件中找到。

如果您在部署 overcloud 前将 NovaDisableImageDownloadToRbd 的值设置为 false,则会出现以下情况:

  • 如果本地不可用,计算服务(nova)将自动流传输位于 中央位置 的镜像。
  • 您不会从 glance 镜像使用 COW 副本。
  • 计算(nova)存储可能包含同一镜像的多个副本,具体取决于使用它的实例数量。
  • 您可以饱和到 中央位置 以及 nova 存储池的 WAN 链接。

红帽建议将此值设置为 true,并确保在启动实例前在本地提供所需的镜像。有关为边缘提供镜像的更多信息,请参阅 第 A.1.3 节 “将镜像复制到新站点”

对于本地镜像,您可以使用 tripleo_nova_image_cache.yml ansible playbook 预缓存常用的镜像或镜像来加快虚拟机的创建速度。

10.1. 运行 tripleo_nova_image_cache.yml ansible playbook

先决条件

  • 在 shell 环境中对正确 API 的身份验证凭证。

在每个步骤提供的命令之前,您必须确保提供正确的身份验证文件。

流程

  1. 为您的 overcloud 堆栈创建 ansible 清单目录:

    $ mkdir inventories
    
    $ find ~/overcloud-deploy/*/config-download \
      -name tripleo-ansible-inventory.yaml |\
      while read f; do cp $f inventories/$(basename $(dirname $f)).yaml; done
    Copy to Clipboard Toggle word wrap
  2. 创建您要预缓存的镜像 ID 列表:

    1. 检索可用镜像的完整列表:

      $ source centralrc
      
      $ openstack image list
      +--------------------------------------+---------+--------+
      | ID                                   | Name    | Status |
      +--------------------------------------+---------+--------+
      | 07bc2424-753b-4f65-9da5-5a99d8383fe6 | image_0 | active |
      | d5187afa-c821-4f22-aa4b-4e76382bef86 | image_1 | active |
      +--------------------------------------+---------+--------+
      Copy to Clipboard Toggle word wrap
    2. 创建名为 nova_cache_args.yml 的 ansible playbook 参数文件,并添加您要预缓存的镜像 ID:

      ---
      tripleo_nova_image_cache_images:
        - id: 07bc2424-753b-4f65-9da5-5a99d8383fe6
        - id: d5187afa-c821-4f22-aa4b-4e76382bef86
      Copy to Clipboard Toggle word wrap
  3. 运行 tripleo_nova_image_cache.yml ansible playbook:

    $ source centralrc
    
    $ ansible-playbook -i inventories \
    --extra-vars "@nova_cache_args.yml" \
    /usr/share/ansible/tripleo-playbooks/tripleo_nova_image_cache.yml
    Copy to Clipboard Toggle word wrap

10.2. 性能考虑

您可以指定您要与 ansible forks 参数同时下载的镜像数量,默认值为 5。您可以通过增加 forks 参数的值来减少发布此镜像的时间,但您必须将这个值与 network 和 glance-api 负载的增加进行平衡。

使用- -forks 参数调整并发,如下所示:

ansible-playbook -i inventory.yaml \
--forks 10 \
--extra-vars "@nova_cache_args.yml" \
/usr/share/ansible/tripleo-playbooks/tripleo_nova_image_cache.yml
Copy to Clipboard Toggle word wrap

10.3. 将镜像分发优化到 DCN 站点

您可以使用代理进行 glance 镜像分布来减少 WAN 流量。配置代理时:

  • Glance 镜像下载到充当代理的单个 Compute 节点。
  • 代理将 glance 镜像重新分发到清单中的其他 Compute 节点。

您可以将以下参数放在 nova_cache_args.yml ansible 参数文件中,以配置代理节点。

tripleo_nova_image_cache_use_proxy 参数设置为 true 以启用镜像缓存代理。

镜像代理使用安全复制 scp 将镜像分发到清单中的其他节点。SCP 效率高于具有高延迟的网络,如 DCN 站点之间的 WAN。红帽建议您将 playbook 目标限制为单个 DCN 位置,该位置与单个堆栈相关联。

使用 tripleo_nova_image_cache_proxy_hostname 参数来选择镜像缓存代理。默认代理是 ansible 清单文件中的第一个计算节点。使用 tripleo_nova_image_cache_plan 参数将 playbook 清单限制为单个站点:

tripleo_nova_image_cache_use_proxy: true
tripleo_nova_image_cache_proxy_hostname: dcn0-novacompute-1
tripleo_nova_image_cache_plan: dcn0
Copy to Clipboard Toggle word wrap

10.4. 配置 nova-cache 清理

当出现以下任一条件满足时,后台进程会定期运行,以从 nova 缓存中删除镜像:

  • 该镜像没有被实例使用。
  • 镜像的年龄大于 nova 参数 remove_unused_original_minimum_age_seconds 的值。

remove_unused_original_minimum_age_seconds 参数的默认值为 86400。该值以秒为单位表示,等于 24 小时。您可以在初始部署期间,或使用 NovaImageCachTTL tripleo-heat-templates 参数或云堆栈更新期间控制这个值:

parameter_defaults:
  NovaImageCacheTTL: 604800 # Default to 7 days for all compute roles
  Compute2Parameters:
    NovaImageCacheTTL: 1209600 # Override to 14 days for the Compute2 compute role
Copy to Clipboard Toggle word wrap

当您指示 playbook 预缓存 Compute 节点上已存在的镜像时,ansible 不会报告更改,但镜像的年龄被重置为 0。运行 ansible play 比 NovaImageCacheTTL 参数的值更频繁,以维护镜像的缓存。

第 11 章 DCN 的 tls-e

警告

本发行版本中提供了此功能的内容作为 文档预览,因此不由红帽完全验证。它只用于测试,不要在生产环境中使用。

您可以在为分布式计算节点基础架构设计的云上启用 TLS (传输层安全)。您可以选择只为公共访问启用 TLS,或者在带有 TLS-e 的每个网络上启用 TLS,允许在所有内部和外部数据流上进行加密。

您不能在边缘堆栈上启用公共访问,因为边缘站点没有公共端点。有关用于公共访问的 TLS 的更多信息,请参阅在 Overcloud 公共端点上启用 SSL/TLS

11.1. 使用 TLS-e 部署分布式计算节点架构

先决条件

当您使用 Red Hat Identity Manager (IdM)在 Red Hat OpenStack Platform (RHOSP)分布式计算节点架构上配置 TLS-e 时,请根据为 Red Hat Identity Manager 部署的 Red Hat Enterprise Linux 版本执行以下操作。

Red Hat Enterprise Linux 8.4
  1. 在 Red Hat Identity Management 节点上,在 ipa-ext.conf 文件中允许可信子网到 ACL 中:
 acl "trusted_network" {
   localnets;
   localhost;
   192.168.24.0/24;
   192.168.25.0/24;
 };
Copy to Clipboard Toggle word wrap
  1. /etc/named/ipa-options-ext.conf 文件中,允许递归和查询缓存:

    allow-recursion { trusted_network; };
    allow-query-cache { trusted_network; };
    Copy to Clipboard Toggle word wrap
  2. 重启 'named-pkcs11 服务:

    systemctl restart named-pkcs11
    Copy to Clipboard Toggle word wrap
Red Hat Enterprise Linux 8.2
如果您在 Red Hat Enterprise Linux (RHEL) 8.2 上有 Red Hat Identity Manager (IdM) 8.2,您必须升级 Red Hat Enterprise Linux,然后按照 RHEL 8.4 的说明进行操作
Red Hat Enterprise Linux 7.x
如果您在 Red Hat Enterprise Linux (RHEL) 7x 上有 Red Hat Identity Manager (IdM),您必须手动为您的域名添加访问控制指令(ACI)。例如,如果域名是 redhat.local,请在 Red Hat Identity Manager 上运行以下命令以配置 ACI:
ADMIN_PASSWORD=redhat_01
DOMAIN_LEVEL_1=local
DOMAIN_LEVEL_2=redhat

cat << EOF | ldapmodify -x -D "cn=Directory Manager" -w ${ADMIN_PASSWORD}
dn: cn=dns,dc=${DOMAIN_LEVEL_2},dc=${DOMAIN_LEVEL_1}
changetype: modify
add: aci
aci: (targetattr = "aaaarecord || arecord || cnamerecord || idnsname || objectclass || ptrrecord")(targetfilter = "(&(objectclass=idnsrecord)(|(aaaarecord=)(arecord=)(cnamerecord=)(ptrrecord=)(idnsZoneActive=TRUE)))")(version 3.0; acl "Allow hosts to read DNS A/AAA/CNAME/PTR records"; allow (read,search,compare) userdn = "ldap:///fqdn=*,cn=computers,cn=accounts,dc=${DOMAIN_LEVEL_2},dc=${DOMAIN_LEVEL_1}";)
EOF
Copy to Clipboard Toggle word wrap

流程

对于分布式计算节点(DCN)架构,需要使用基于 ansible 的 tripleo-ipa 方法来实现 TLS-e,而不是前面的 novajoin 方法。有关使用 tripleo-ipa 部署 TLS-e 的更多信息,请参阅使用 Ansible 实施 TLS-e

要使用 tripleo-ipa for DCN 架构部署 TLS-e,您还需要完成以下步骤:

  1. 如果您要在边缘部署存储,请在为边缘堆栈修改的 tripleo heat 模板中包括以下参数:

    TEMPLATES=/usr/share/openstack-tripleo-heat-templates
    
    resource_registry:
      OS::TripleO::Services::IpaClient:
        ${TEMPLATES}/deployment/ipa/ipaservices-baremetal-ansible.yaml
    Copy to Clipboard Toggle word wrap

由于中央位置和边缘位置之间设计的不同,请不要在边缘堆栈中包含以下文件:

tls-everywhere-endpoints-dns.yaml
在边缘站点中会忽略此文件,它设置的端点会被从中央堆栈导出的端点覆盖。
haproxy-public-tls-certmonger.yaml
此文件会导致部署失败,因为边缘没有公共端点。

第 12 章 创建用于外部访问的 Ceph 密钥

警告

本发行版本中提供了此功能的内容作为 文档预览,因此不由红帽完全验证。它只用于测试,不要在生产环境中使用。

对 Ceph 存储的外部访问是从不是本地的任何站点访问 Ceph。位于 cental 位置的 Ceph 存储是边缘(DCN)站点外部的,就像位于边缘的 Ceph 存储一样,对于中央位置是外部的。

使用 Ceph 存储部署 central 或 DCN 站点时,您可以选择将默认的 openstack 密钥环用于本地和外部访问。备用情况下,您可以创建单独的密钥以供非本地站点访问。

如果您决定使用额外的 Ceph 密钥访问外部站点,每个密钥必须具有相同的名称。在以下示例中 key 的名称是 external

如果您使用单独的密钥通过非本地站点访问,您可以在不中断本地访问的情况下撤销和重新发布外部密钥以响应安全事件。但是,将单独的密钥用于外部访问将导致无法访问某些功能,如跨可用区备份和离线卷迁移。您必须根据所需的功能集平衡安全状况的需求。

默认情况下,central 和所有 DCN 站点的密钥将被共享。

12.1. 创建用于外部访问的 Ceph 密钥

完成以下步骤,为非本地访问创建 外部 密钥。

Process

  1. 创建用于外部访问的 Ceph 密钥。这个密钥是敏感的。您可以使用以下方法生成密钥:

    python3 -c 'import os,struct,time,base64; key = os.urandom(16) ; \
    header = struct.pack("<hiih", 1, int(time.time()), 0, len(key)) ; \
    print(base64.b64encode(header + key).decode())'
    Copy to Clipboard Toggle word wrap
  2. 在您要部署的堆栈的目录中,使用上一命令的输出为密钥创建一个 ceph_keys.yaml 环境文件,其内容如下:

    parameter_defaults:
      CephExtraKeys:
        - name: "client.external"
          caps:
            mgr: "allow *"
            mon: "profile rbd"
            osd: "profile rbd pool=vms, profile rbd pool=volumes, profile rbd pool=images"
          key: "AQD29WteAAAAABAAphgOjFD7nyjdYe8Lz0mQ5Q=="
          mode: "0600"
    Copy to Clipboard Toggle word wrap
  3. 在站点的部署中包含 ceph_keys.yaml 环境文件。例如,要使用 ceph_keys.yaml 环境文件部署中央站点,请运行以下命令:

     overcloud deploy \
             --stack central \
             --templates /usr/share/openstack-tripleo-heat-templates/ \
             ….
             -e ~/central/ceph_keys.yaml
    Copy to Clipboard Toggle word wrap

12.2. 使用外部 Ceph 密钥

您只能使用已部署的密钥。有关使用 外部 密钥部署站点的详情,请参考 第 12.1 节 “创建用于外部访问的 Ceph 密钥”。这应该同时为中央和边缘站点完成。

  • 当您部署使用中心提供的一个外部密钥的边缘站点时,请完成以下操作:

    1. 为边缘站点创建 dcn_ceph_external.yaml 环境文件。您必须包含 cephx-key-client-name 选项,才能指定要包含的部署密钥。

      sudo -E openstack overcloud export ceph \
      --stack central \
      --cephx-key-client-name external \
      --output-file ~/dcn-common/dcn_ceph_external.yaml
      Copy to Clipboard Toggle word wrap
    2. 包含 dcn_ceph_external.yaml 文件,以便边缘站点可在中央站点访问 Ceph 集群。包含 ceph_keys.yaml 文件,用于在边缘站点为 Ceph 集群部署外部密钥。
  • 在部署边缘站点后更新中央位置时,请确保中央位置使用 dcn 外部 键:

    1. 确保 CephClientUserName 参数与所导出的密钥匹配。如果您使用这些示例所示的名称 external,请创建 glance_update.yaml 类似如下:

        parameter_defaults:
          GlanceEnabledImportMethods: web-download,copy-image
          GlanceBackend: rbd
          GlanceStoreDescription: 'central rbd glance store'
          CephClusterName: central
          GlanceBackendID: central
          GlanceMultistoreConfig:
          dcn0:
             GlanceBackend: rbd
            GlanceStoreDescription: 'dcn0 rbd glance store'
            CephClientUserName: 'external'
            CephClusterName: dcn0
            GlanceBackendID: dcn0
          dcn1:
            GlanceBackend: rbd
            GlanceStoreDescription: 'dcn1 rbd glance store'
            CephClientUserName: 'external'
            CephClusterName: dcn1
            GlanceBackendID: dcn1
      Copy to Clipboard Toggle word wrap
    2. 使用 openstack overcloud export ceph 命令,从中央位置包含 DCN 边缘访问 的外部 密钥。要做到这一点,必须为- stack 参数提供以逗号分隔的堆栈列表,并包含 cephx-key-client-name 选项:

      sudo -E openstack overcloud export ceph \
      --stack dcn0,dcn1,dcn2 \
      --cephx-key-client-name external \
      --output-file ~/central/dcn_ceph_external.yaml
      Copy to Clipboard Toggle word wrap
    3. 使用原始模板重新部署中央站点,并包含新创建的 dcn_ceph_external.yamlglance_update.yaml 文件。

      openstack overcloud deploy \
             --stack central \
             --templates /usr/share/openstack-tripleo-heat-templates/ \
             -r ~/central/central_roles.yaml \
          ...
             -e /usr/share/openstack-tripleo-heat-templates/environments/cephadm/cephadm.yaml \
             -e /usr/share/openstack-tripleo-heat-templates/environments/nova-az-config.yaml \
             -e ~/central/central-images-env.yaml \
             -e ~/central/role-counts.yaml \
             -e ~/central/site-name.yaml
             -e ~/central/ceph.yaml \
             -e ~/central/ceph_keys.yaml \
             -e ~/central/glance.yaml \
             -e ~/central/dcn_ceph_external.yaml
      Copy to Clipboard Toggle word wrap

附录 A. 部署迁移选项

本节包括与 DCN 存储相关的主题验证,以及迁移或更改架构。

A.1. 验证边缘存储

通过测试 glance multi-store 和实例创建,确保中央站点和边缘站点的部署正常工作。

您可以将镜像导入到可在本地文件系统中可用的 glance 中,或者在 web 服务器上可用。

注意

始终将镜像副本存储在中央站点,即使没有在中央位置使用该镜像的实例。

先决条件

  1. 使用 glance stores-info 命令,检查可通过镜像服务提供的存储。在以下示例中,有三个存储可用: central、dcn1 和 dcn2。它们分别对应于中央位置和边缘站点中的 glance 存储:

      $ glance stores-info
      +----------+----------------------------------------------------------------------------------+
      | Property | Value                                                                            |
      +----------+----------------------------------------------------------------------------------+
      | stores   | [{"default": "true", "id": "central", "description": "central rbd glance         |
      |          | store"}, {"id": "dcn0", "description": "dcn0 rbd glance store"},                 |
      |          | {"id": "dcn1", "description": "dcn1 rbd glance store"}]                          |
      +----------+----------------------------------------------------------------------------------+
    Copy to Clipboard Toggle word wrap

A.1.1. 从本地文件导入

您必须首先将镜像上传到中央位置的存储,然后将镜像复制到远程站点。

  1. 确保您的镜像文件采用 RAW 格式。如果镜像不是 raw 格式,则必须在将镜像导入到镜像服务前转换它:

    file cirros-0.5.1-x86_64-disk.img
    cirros-0.5.1-x86_64-disk.img: QEMU QCOW2 Image (v3), 117440512 bytes
    
    qemu-img convert -f qcow2 -O raw cirros-0.5.1-x86_64-disk.img cirros-0.5.1-x86_64-disk.raw
    Copy to Clipboard Toggle word wrap
    Import the image into the default back end at the central site:
    Copy to Clipboard Toggle word wrap
    glance image-create \
    --disk-format raw --container-format bare \
    --name cirros --file cirros-0.5.1-x86_64-disk.raw \
    --store central
    Copy to Clipboard Toggle word wrap

A.1.2. 从 Web 服务器导入镜像

如果镜像托管在 web 服务器上,您可以使用 GlanceImageImportPlugins 参数将镜像上传到多个存储中。

此流程假设在 glance 中启用了默认镜像转换插件。此功能自动将 QCOW2 文件格式转换为 RAW 镜像,它们是 Ceph RBD 的最佳选择。您可以通过运行 glance image-show ID | grep disk_format 来确认 glance 镜像采用 RAW 格式。

流程

  1. 使用 glance 命令的 image-create-via-import 参数从 Web 服务器导入镜像。使用- -stores 参数。

    # glance image-create-via-import \
    --disk-format qcow2 \
    --container-format bare \
    --name cirros \
    --uri http://download.cirros-cloud.net/0.4.0/cirros-0.4.0-x86_64-disk.img \
    --import-method web-download \
    --stores central,dcn1
    Copy to Clipboard Toggle word wrap

    在本例中,qcow2 cirros 镜像从官方 Cirros 站点下载,由 glance 转换为 RAW,并导入到中央站点和边缘站点 1 (由- stores 参数指定)。

或者,您可以将 --- stores 替换为--all-stores True,将镜像上传到所有存储。

A.1.3. 将镜像复制到新站点

您可以将现有镜像从中央位置复制到边缘站点,这可让您在新创建的位置访问之前创建的镜像。

  1. 将 glance 镜像的 UUID 用于复制操作:

    ID=$(openstack image show cirros -c id -f value)
    
    glance image-import $ID --stores dcn0,dcn1 --import-method copy-image
    Copy to Clipboard Toggle word wrap
    注意

    在本例中,-- stores 选项指定 cirros 镜像将从中央站点复制到边缘站点 dcn1 和 dcn2。或者,您可以使用 --all-stores True 选项,将镜像上传到目前没有该镜像的所有存储中。

  2. 确认镜像的副本位于每个存储中。请注意,store 键(属性映射中的最后一个项)被设置为 central,dcn0,dcn1

      $ openstack image show $ID | grep properties
      | properties       | direct_url=rbd://d25504ce-459f-432d-b6fa-79854d786f2b/images/8083c7e7-32d8-4f7a-b1da-0ed7884f1076/snap, locations=[{u'url: u'rbd://d25504ce-459f-432d-b6fa-79854d786f2b/images/8083c7e7-32d8-4f7a-b1da-0ed7884f1076/snap', u'metadata': {u'store': u'central'}}, {u'url': u'rbd://0c10d6b5-a455-4c4d-bd53-8f2b9357c3c7/images/8083c7e7-32d8-4f7a-b1da-0ed7884f1076/snap', u'metadata': {u'store': u'dcn0'}}, {u'url': u'rbd://8649d6c3-dcb3-4aae-8c19-8c2fe5a853ac/images/8083c7e7-32d8-4f7a-b1da-0ed7884f1076/snap', u'metadata': {u'store': u'dcn1'}}], os_glance_failed_import=', os_glance_importing_to_stores=', os_hash_algo='sha512, os_hash_value=b795f047a1b10ba0b7c95b43b2a481a59289dc4cf2e49845e60b194a911819d3ada03767bbba4143b44c93fd7f66c96c5a621e28dff51d1196dae64974ce240e, os_hidden=False, stores=central,dcn0,dcn1 |
    Copy to Clipboard Toggle word wrap
注意

始终将镜像副本存储在中央站点中,即使该站点中没有使用它的虚拟机。

您可以使用边缘站点的镜像来创建持久的根卷。

流程

  1. 识别要作为卷创建的镜像的 ID,并将该 ID 传递给 openstack volume create 命令:

    IMG_ID=$(openstack image show cirros -c id -f value)
    openstack volume create --size 8 --availability-zone dcn0 pet-volume-dcn0 --image $IMG_ID
    Copy to Clipboard Toggle word wrap
  2. 确定新创建的卷的卷 ID,并将其传递给 openstack server create 命令:

    VOL_ID=$(openstack volume show -f value -c id pet-volume-dcn0)
    openstack server create --flavor tiny --key-name dcn0-key --network dcn0-network --security-group basic --availability-zone dcn0 --volume $VOL_ID pet-server-dcn0
    Copy to Clipboard Toggle word wrap
  3. 您可以通过在 dcn0 边缘站点的 ceph-mon 容器中运行 rbd 命令,以验证卷是否基于镜像,以列出 volumes 池。

    $ sudo podman exec ceph-mon-$HOSTNAME rbd --cluster dcn0 -p volumes ls -l
    NAME                                      SIZE  PARENT                                           FMT PROT LOCK
    volume-28c6fc32-047b-4306-ad2d-de2be02716b7 8 GiB images/8083c7e7-32d8-4f7a-b1da-0ed7884f1076@snap   2      excl
    $
    Copy to Clipboard Toggle word wrap
  4. 确认您可以创建实例的 root 卷的 cinder 快照。确保服务器停止停止以静止数据以创建干净的快照。使用-- force 选项,因为实例关闭时卷状态为 in-use

    openstack server stop pet-server-dcn0
    openstack volume snapshot create pet-volume-dcn0-snap --volume $VOL_ID --force
    openstack server start pet-server-dcn0
    Copy to Clipboard Toggle word wrap
  5. 列出 dcn0 Ceph 集群上 volumes 池的内容,以显示新创建的快照。

    $ sudo podman exec ceph-mon-$HOSTNAME rbd --cluster dcn0 -p volumes ls -l
    NAME                                                                                      SIZE  PARENT                                           FMT PROT LOCK
    volume-28c6fc32-047b-4306-ad2d-de2be02716b7                                               8 GiB images/8083c7e7-32d8-4f7a-b1da-0ed7884f1076@snap   2      excl
    volume-28c6fc32-047b-4306-ad2d-de2be02716b7@snapshot-a1ca8602-6819-45b4-a228-b4cd3e5adf60 8 GiB images/8083c7e7-32d8-4f7a-b1da-0ed7884f1076@snap   2 yes
    Copy to Clipboard Toggle word wrap
  1. 验证您可以在 dcn0 站点创建一个新镜像。确保服务器停止静止数据以创建清理快照:

    NOVA_ID=$(openstack server show pet-server-dcn0 -f value -c id)
    openstack server stop $NOVA_ID
    openstack server image create --name cirros-snapshot $NOVA_ID
    openstack server start $NOVA_ID
    Copy to Clipboard Toggle word wrap
  2. 将镜像从 dcn0 边缘站点复制回 hub 位置,这是 glance 的默认后端:

    IMAGE_ID=$(openstack image show cirros-snapshot -f value -c id)
    glance image-import $IMAGE_ID --stores central --import-method copy-image
    Copy to Clipboard Toggle word wrap

有关 glance 多存储操作的更多信息,请参阅 使用多个存储的镜像服务

A.2. 迁移到 spine 和 leaf 部署

可以使用预先存在的网络配置将现有云迁移到带有 spine leaf 架构的现有云。因此,需要以下条件:

  • 所有裸机端口都必须将其 physical-network 属性值设置为 ctlplane
  • 参数 enable_routed_networks 被添加,在 undercloud.conf 中设置为 true,随后重新运行 undercloud 安装命令,openstack undercloud install

重新部署 undercloud 后,overcloud 被视为一个 spine leaf,它带有一个 leaf leaf0。您可以通过以下步骤为部署添加额外的置备。

  1. 将所需的子网添加到 undercloud.conf,如在 undercloud 中配置路由的 spine-leaf 所示。
  2. 重新运行 undercloud 安装命令 openstack undercloud install
  3. 将所需的额外网络和角色分别添加到 overcloud 模板 network_data.yamlroles_data.yaml 中。

    注意

    如果您在网络配置文件中使用 {{network.name}}InterfaceRoutes 参数,则需要确保 NetworkDeploymentActions 参数包含值 UPDATE

      NetworkDeploymentActions: ['CREATE','UPDATE'])
    Copy to Clipboard Toggle word wrap
  4. 最后,重新运行包含云部署的所有相关 heat 模板的 overcloud 安装脚本。

A.3. 迁移到多堆栈部署

您可以通过将现有部署视为中央站点并添加额外的边缘站点,从单一堆栈部署迁移到多堆栈部署。

从本发行版本中的单堆栈迁移到多堆栈的功能是一个技术预览,因此不受红帽完全支持。它只应用于测试,不应部署在生产环境中。有关技术预览功能的更多信息,请参阅覆盖范围详细信息

您不能分割现有的堆栈。如果需要,您可以缩减现有的堆栈,以移除计算节点。然后可将这些计算节点添加到边缘站点。

注意

如果删除所有计算节点,则此操作会创建工作负载中断。

A.4. 在边缘站点之间备份和恢复

您可以在边缘站点和可用区中的分布式计算节点(DCN)架构中备份和恢复块存储服务(cinder)卷。cinder-backup 服务在中央可用区(AZ)中运行,备份存储在中央 AZ 中。块存储服务不会在 DCN 站点存储备份。

先决条件

  • 中央站点使用位于 /usr/share/openstack-tripleo-heat-templates/environmentscinder-backup.yaml 环境文件进行部署。如需更多信息,请参阅 块存储备份服务部署
  • Block Storage 服务(cinder) CLI 可用。
  • 所有站点都必须使用常见的 openstack cephx 客户端名称。有关更多信息,请参阅为外部访问创建 Ceph 密钥

流程

  1. 在第一个 DCN 站点中创建卷的备份:

    $ cinder --os-volume-api-version 3.51 backup-create --name <volume_backup> --availability-zone <az_central> <edge_volume>
    Copy to Clipboard Toggle word wrap
    • <volume_backup > 替换为卷备份的名称。
    • <az_central > 替换为托管 cinder-backup 服务的中央可用区的名称。
    • 将 < edge_volume > 替换为您要备份的卷的名称。

      注意

      如果您在 Ceph 密钥环时遇到问题,您可能需要重启 cinder-backup 容器,以便主机中的密钥环从主机复制到容器。

  2. 将备份恢复到第二个 DCN 站点中的新卷:

    $ cinder --os-volume-api-version 3.51 create --availability-zone <az_2> --name <new_volume> --backup-id <volume_backup> <volume_size>
    Copy to Clipboard Toggle word wrap
    • 将 &lt ;az_ 2> 替换为您要恢复备份的可用区的名称。
    • <new_volume > 替换为新卷的名称。
    • 将 &lt ;volume_backup > 替换为您在上一步中创建的卷备份的名称。
    • 将 &lt ;volume_size > 替换为一个等于或大于原始卷大小的值。

法律通告

Copyright © 2025 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.
Red Hat logoGithubredditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

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

让开源更具包容性

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

關於紅帽

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

Theme

© 2026 Red Hat
返回顶部