director 的安装和使用


Red Hat OpenStack Platform 17.0

使用 Red Hat OpenStack Platform director 创建 OpenStack 云环境

OpenStack Documentation Team

摘要

使用 Red Hat OpenStack Platform director 在企业环境中安装 Red Hat OpenStack Platform 17。其中包括安装 director、规划您的环境以及使用 director 创建 OpenStack 环境。

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。我们从这四个术语开始:master、slave、黑名单和白名单。由于此项工作十分艰巨,这些更改将在即将推出的几个发行版本中逐步实施。有关更多详情,请参阅我们的首席技术官 Chris Wright 提供的消息

第 1 章 director 简介

Red Hat OpenStack Platform (RHOSP) director是一个安装和管理完整的 RHOSP 环境的工具组。director 主要基于 OpenStack 项目 TripleO。您可以使用 director 安装全面运行、精益且稳定的 RHOSP 环境,该环境可置备和控制裸机系统以用作 OpenStack 节点。

director 使用两个主要概念:undercloud 和 overcloud。首先,您要安装 undercloud,然后使用 undercloud 作为安装和配置 overcloud 的工具。

Basic Layout of undercloud and overcloud

1.1. 了解 undercloud

undercloud 是包含 Red Hat OpenStack Platform director 工具组的主要管理节点。它是一个单一系统的 OpenStack 安装,包括置备和管理组成 OpenStack 环境 (overcloud) 的 OpenStack 节点的组件。组成 undercloud 的组件具有多个功能:

环境规划
undercloud 包括用户可用于创建和分配某些节点角色的规划功能。undercloud 包括一组可分配给特定节点的默认节点角色:计算 (Compute)、控制器 (Controller) 和各种存储角色。您也可以设计自定义角色。此外,您还可以选择每个节点角色包括哪些 Red Hat OpenStack Platform 服务。这提供了对新节点类型建模,或把特定组件隔离在其自己的主机中的方法。
裸机系统控制
undercloud 使用每个节点的带外管理接口(通常是智能平台管理接口 (IPMI))进行电源管理控制,使用基于 PXE 的服务发现硬件属性并在每个节点上安装 OpenStack。您可以使用此功能将裸机系统置备为 OpenStack 节点。有关电源管理驱动程序的完整列表,请参阅 第 30 章 电源管理驱动
编配
undercloud 包含一组 YAML 模板,这些模板代表您环境中的一系列计划。undercloud 导入这些计划,并根据其中的指示创建所需的 OpenStack 环境。这些计划还可以包括 hook。通过使用 hook,可以在环境创建过程中的特定点上融入您自己的自定义设置。
undercloud 组件

undercloud 使用 OpenStack 组件作为它的基本工具组。每个组件都在 undercloud 中的一个独立容器内运行:

  • OpenStack Identity (keystone) - 提供 director 组件的验证和授权功能。
  • OpenStack Bare Metal (ironic)- 管理裸机节点。
  • OpenStack Networking (neutron) 和 Open vSwitch - 控制裸机节点的网络。
  • OpenStack Orchestration (Ephemeral Heat)- 在 director 将 overcloud 镜像写入磁盘后提供节点的编配。

1.2. 了解 overcloud

overcloud 是 undercloud 创建的 Red Hat OpenStack Platform (RHOSP) 环境。overcloud 包括多个具有不同角色的节点,这些角色是基于您要创建的 OpenStack Platform 环境定义的。undercloud 包括一组默认的 overcloud 节点角色:

Controller

Controller 节点为 OpenStack 环境提供管理、网络和高可用性功能。建议的 OpenStack 环境是在一个高可用性集群中包含三个 Controller 节点。

一个默认 Controller(控制器)节点角色支持以下组件。不是所有这些服务都默认启用。其中一些组件需要自定义或者预打包环境文件才能启用:

  • OpenStack Dashboard (horizon)
  • OpenStack Identity (keystone)
  • OpenStack Compute (nova) API
  • OpenStack Networking (neutron)
  • OpenStack Image Service (glance)
  • OpenStack Block Storage (cinder)
  • OpenStack Object Storage (swift)
  • OpenStack Orchestration (heat)
  • OpenStack Shared File Systems (manila)
  • OpenStack Bare Metal (ironic)
  • OpenStack Load Balancing-as-a-Service (octavia)
  • OpenStack Key Manager (barbican)
  • MariaDB
  • Open vSwitch
  • 高可用性服务的 Pacemaker 和 Galera。
计算

Compute 节点为 OpenStack 环境提供计算资源。随着时间的推移,可以通过添加更多节点来扩展您的环境。一个默认 Compute (计算)节点包括以下组件:

  • OpenStack Compute (nova)
  • KVM/QEMU
  • Open vSwitch
存储

存储节点为 OpenStack 环境提供存储。以下列表包含有关 RHOSP 中存储节点的各种类型的信息:

  • Ceph Storage 节点 - 用来组成存储集群。每个节点包含一个 Ceph Object Storage Daemon (OSD)。此外,当您部署 Ceph Storage 节点作为环境一部分时,director 将 Ceph Monitor 安装到 Controller 节点上。
  • Block storage (cinder) - 用作高可用性 Controller 节点的外部块存储。这类节点包括以下组件:

    • OpenStack Block Storage (cinder) 卷
    • OpenStack Telemetry 代理
    • Open vSwitch.
  • Object Storage (swift) - 这些节点为 OpenStack Swift 提供了一个外部存储层。Controller 节点通过 Swift 代理访问对象存储节点。对象存储节点包含以下组件:

    • OpenStack Object Storage (swift) 存储
    • OpenStack Telemetry 代理
    • Open vSwitch.

1.3. 了解 Red Hat OpenStack Platform 中的高可用性

Red Hat OpenStack Platform(RHOSP)director 使用 Controller 节点集群向 OpenStack Platform 环境提供高可用性服务。对于每个服务,director 在所有 Controller 节点上安装相同的组件,并作为单个服务一起管理这些 Controller 节点。在单个 Controller 节点上出现运行故障时,这种集群配置提供回退(fallback)机制。这可以使 OpenStack 用户实现某种程度的不中断运行。

OpenStack Platform director 使用以下软件来管理 Controller 节点上的组件:

  • Pacemaker - Pacemaker 是集群资源管理器。Pacemaker 管理和监控集群中所有节点上的 OpenStack 组件的可用性。
  • HA Proxy(HA 代理) - 为集群提供负载均衡和代理服务。
  • Galera - 在集群中复制 RHOSP 数据库。
  • Memcached - 提供数据库缓存服务。
注意
  • 自版本 13 起,您可以使用 director 部署计算实例的高可用性 (Instance HA)。使用 Instance HA,当 Compute 节点出现故障时,可以自动清空该 Compute 节点上的实例。

1.4. 了解 Red Hat OpenStack Platform 中的容器化

undercloud 和 overcloud 上的各个 OpenStack Platform 服务在对应节点的单独 Linux 容器内运行。这种容器化提供了一种隔离服务、维护环境和升级 Red Hat OpenStack Platform (RHOSP) 的方法。

Red Hat OpenStack Platform 17.0 支持安装在 Red Hat Enterprise Linux 9.0 操作系统上。之前,Red Hat OpenStack Platform 使用 Docker 管理容器化。OpenStack Platform 17.0 使用这些工具进行 OpenStack Platform 部署和升级。

Podman

Pod Manager (Podman) 是容器管理工具。它几乎实现所有 Docker CLI 命令,但不包括与 Docker Swarm 相关的命令。Podman 管理 pod、容器和容器镜像。Podman 可以在不在后台运行守护进程的情况下管理资源。

有关 Podman 的更多信息,请访问 Podman 网站

Buildah

Buildah 专门构建您与 Podman 一起使用的 Open Containers Initiative (OCI) 镜像。Buildah 命令复制 Dockerfile 的内容。Buildah 还提供一个较低级别的 coreutils 接口以构建容器镜像,因此您无需 Dockerfile 即可构建容器。Buildah 还使用其他脚本语言在无需守护进程的情况下构建容器镜像。

有关 Buildah 的更多信息,请访问 Buildah 网站

Skopeo
Skopeo 使操作员能够检查远程容器镜像,帮助 director 在拉取镜像时收集数据。其他功能包括在 registry 间复制容器镜像,以及从 registry 中删除镜像。

红帽支持使用以下方式为您的 overcloud 管理容器镜像:

  • 将容器镜像从 Red Hat Container Catalog 拉取到 undercloud 上的 image-serve registry,然后从 image-serve registry 拉取镜像。当您首先将镜像拉取到 undercloud 时,要避免多个 overcloud 节点同时通过外部连接拉取容器镜像。
  • 从 Satellite 6 服务器拉取容器镜像。您可以直接从 Satellite 拉取这些镜像,因为网络流量是内部流量。

本指南包含有关配置容器镜像 registry 的详细信息和执行基本容器操作的信息。

1.5. 在 Red Hat OpenStack Platform 中使用 Ceph Storage

对于使用 Red Hat OpenStack Platform (RHOSP) 为成千上万的客户端提供服务的大型机构来说,这很常见。每个 OpenStack 客户端在消耗块存储资源时可能会有自己的独特需求。在单个节点上部署 glance(镜像)、cinder(卷)和 nova(计算)可能无法管理具有数千客户端的大型部署。在外部扩展 OpenStack 可解决此问题。

但是,在实际的环境中,仍然需要一个存储层的虚拟化解决方案(如 Red Hat Ceph Storage)来扩展 RHOSP 的存储层,使它可以支持 terabyte、petabyte 甚至 exabyte 数量级的存储要求。Red Hat Ceph Storage 提供了这样一个存储虚拟化层,在商用硬件上运行时具有高可用性和高性能。尽管虚拟化可能看似会影响性能,Ceph 会将块设备镜像以条带化的形式作为对象分布在集群中上的对象,这意味着大型 Ceph Block Device 镜像的性能实际上比独立磁盘性能更好。另外,Cept Block 设备还支持缓存、copy-on-write cloning 和 copy-on-read cloning 功能来提高性能。

有关 Red Hat Ceph Storage 的更多信息,请参阅 Red Hat Ceph Storage

1.6. 默认文件位置

在 RHOSP 17 中,您可以在单个目录中找到所有配置文件。目录的 name 是所用的 openstack 命令和堆栈名称的组合。目录具有默认位置,但您可以使用 --working-dir 选项更改默认位置。您可以将这个选项与任何 tripleoclient 命令一起使用,该命令可读取或创建与部署一起使用的文件。

默认位置命令

$HOME/tripleo-deploy/undercloud

undercloud 安装,它基于 tripleo deploy

$HOME/tripleo-deploy/<stack>

tripleo deploy, <stack&gt ; 默认为独立

$HOME/overcloud-deploy/<stack>

overcloud 部署,<stack> 默认为 overcloud

1.6.1. undercloud 目录的内容描述

您可以在 ~/tripleo-deploy/undercloud 目录中找到以下文件和目录:它们是 ~/overcloud-deploy 目录中可用内容的子集:

heat_launcher
install-undercloud.log
tripleo-ansible-inventory.yaml
tripleo-config-generated-env-files
tripleo-undercloud-outputs.yaml
tripleo-undercloud-passwords.yaml
undercloud-install-20220823210316.tar.bzip2

1.6.2. overcloud 目录的内容描述

您可以在 ~/overcloud-deploy/overcloud 目录中找到以下文件和目录,其中 overcloud 是堆栈的名称:

cli-config-download
cli-enable-ssh-admin
cli-grant-local-access
cli-undercloud-get-horizon-url
config-download
environment
heat-launcher
outputs
overcloud-deployment_status.yaml
overcloud-export.yaml
overcloud-install-20220823213643.tar.bzip2
overcloud-passwords.yaml
overcloudrc
tempest-deployer-input.conf
tripleo-ansible-inventory.yaml
tripleo-heat-templates
tripleo-overcloud-baremetal-deployment.yaml
tripleo-overcloud-network-data.yaml
tripleo-overcloud-roles-data.yaml
tripleo-overcloud-virtual-ips.yaml

下表描述了这些文件和目录的内容:

目录描述

cli-*

ansible-runner 用于基于 CLI ansible 的工作流使用的目录。

config-download

config-download 目录,之前称为 ~/config-download/var/lib/mistral/<stack>

环境

包含 openstack stack environment show <stack> 命令生成的已保存的堆栈 环境。

heat-launcher

包含临时 Heat 配置和数据库备份的临时 Heat 工作目录。

输出

包含通过 openstack stack 输出生成的保存的堆栈输出 show <stack> <output> 命令。

<stack>-deployment_status.yaml

包含保存的堆栈状态。

<stack>-export.yaml

包含堆栈导出信息,使用 openstack overcloud export <stack> 命令生成。

<stack>-install-*.tar.bzip2

工作目录的 tarball。

<stack>-passwords.yaml

包含堆栈密码。

<stack>rc

使用 overcloud API 所需的堆栈 rc 凭证文件。

temployer-deployer-input.conf

包含 Tempest 配置。

tripleo-ansible-inventory.yaml

用于 overcloud 的 Ansible 清单。

tripleo-heat-templates

包含呈现的 jinja2 模板的副本。您可以在 /usr/share/openstack-tripleo-heat-templates 中找到源模板,也可以使用 CLI 上的 --templates 选项指定模板。

tripleo-overcloud-baremetal-deployment.yaml

置备 overcloud 节点的裸机部署输入。

tripleo-overcloud-network-data.yaml

用于置备 overcloud 网络的网络部署输入。

tripleo-overcloud-roles-data.yaml

通过 CLI 上的 -r 选项指定的角色数据。

tripleo-overcloud-virtual-ips.yaml

用于置备 overcloud 网络 VIP 的 VIP 部署输入。

第 2 章 规划您的 undercloud

在 undercloud 上配置并安装 director 之前,您必须规划 undercloud 主机以确保它满足某些要求。

2.1. 容器化 undercloud

undercloud 是控制最终 Red Hat OpenStack Platform (RHOSP) 环境(称为 overcloud)的配置、安装和管理的节点。undercloud 本身以容器形式使用 OpenStack Platform 组件来创建称为 director 的工具组。这意味着,undercloud 从 registry 源拉取一组容器镜像,生成容器的配置,然后以容器的形式运行各项 OpenStack Platform 服务。因此,undercloud 提供一组容器化服务,您可以将这些服务用作创建和管理 overcloud 的工具组。

undercloud 和 overcloud 都使用容器,它们使用相同的架构来拉取、配置和运行容器。此架构基于用于置备节点的 OpenStack Orchestration 服务 (heat) 并使用 Ansible 配置服务和容器。熟悉 heat 和 Ansible 有助于诊断您可能遇到的问题。

2.2. 准备 undercloud 网络

undercloud 需要访问两个主要网络:

  • Provisioning 网络或 Control Plane 网络,这是 director 用于置备节点和在执行 Ansible 配置时通过 SSH 访问这些节点的网络。此网络还支持从 undercloud 到 overcloud 节点的 SSH 访问。undercloud 包含在此网络上内省和置备其他节点的 DHCP 服务,这意味着此网络上不应存在其他 DHCP 服务。director 为此网络配置接口。
  • External 网络,支持访问 OpenStack Platform 软件仓库、容器镜像源和 DNS 服务器或 NTP 服务器等的其他服务器。使用此网络从您的工作站对 undercloud 进行标准访问。您必须在 undercloud 上手动配置一个接口以访问外部网络。

undercloud 至少需要 2 个 1 Gbps 网络接口卡:一个用于 Provisioning 或 Control Plane 网络,一个用于 External 网络

规划网络时,请查看以下准则:

  • 红帽建议使用一个网络来置备,为数据平面使用 control plane 和另一个网络。
  • provisioning 和 control plane 网络可以在 Linux 绑定或独立接口上配置。如果您使用 Linux 绑定,请将其配置为 active-backup 绑定类型。

    • 在非控制器节点上,在置备和 control plane 网络中流量数量相对较低,它们不需要高带宽或负载均衡。
    • 在 Controller 上,provisioning 和 control plane 网络需要额外的带宽。增加带宽的原因是控制器为其它角色中的多个节点提供服务。当对环境进行频繁更改时,还需要更多的带宽。

      为获得最佳性能,当控制器有超过 50 个计算节点 - 或者同时置备了四个以上的裸机节点,则应该同时置备 4-10 倍,则其带宽应为非控制器节点上的接口的 4-10 倍。

  • 当置备超过 50 个 overcloud 节点时,undercloud 应该具有更高的带宽与 provisioning 网络的连接。
  • 不要使用与您从工作站访问 director 机器相同的 Provisioning 或 Control Plane NIC。director 安装会使用 Provisioning NIC 创建一个网桥,它会忽略所有远程连接。使用 External NIC 来远程连接 director 系统。
  • Provisioning 网络需要一个与您的环境大小相匹配的 IP 范围。使用以下原则来决定包括在这个范围内的 IP 地址总数量:

    • 至少包括一个临时 IP 地址,用于内省期间连接到 Provisioning 网络的每个节点。
    • 至少包括一个永久 IP 地址,用于部署期间连接到 Provisioning 网络的每个节点。
    • 包括一个额外的 IP 地址,用于 Provisioning 网络上 overcloud 高可用性集群的虚拟 IP。
    • 包括此范围内的额外 IP 地址,以用于扩展环境。
  • 为防止 Controller 节点网卡或网络交换机故障破坏 overcloud 服务可用性,请确保 keystone 管理端点位于使用绑定网卡或网络硬件冗余的网络中。如果将 Keystone 端点移到不同的网络,如 internal_api,请确保 undercloud 可以访问 VLAN 或子网。有关更多信息,请参阅红帽知识库解决方案如何将 Keystone 管理端点迁移到 internal_api 网络

2.3. 确定环境规模

在安装 undercloud 前,请确定环境的规模。规划环境时应考虑到以下因素:

想要在 overcloud 中部署多少个节点?
undercloud 管理 overcloud 中的每个节点。置备 overcloud 节点会消耗 undercloud 上的资源。您必须为 undercloud 提供足够的资源用来置备和控制所有 overcloud 节点。
您希望 undercloud 同步执行多少个操作?
undercloud 上的大部分 OpenStack 服务会使用一组 worker。每个 worker 执行特定于该服务的一个操作。多个 worker 提供同步操作。undercloud 上 worker 的默认数量是 undercloud 上 CPU 线程总数的一半在本实例中,线程数是指 CPU 内核数乘以超线程值。例如,如果 undercloud 的 CPU 具有 16 个线程,则 director 服务默认生成 8 个 worker。director 还默认使用一组最小值和最大值限制
服务最小值最大值

OpenStack Orchestration (heat)

4

24

所有其他服务

2

12

undercloud 具有以下最小 CPU 和内存要求:

  • 支持 Intel 64 或 AMD64 CPU 扩展的 8 线程 64 位 x86 处理器。这可为每个 undercloud 服务提供 4 个 worker。
  • 最少 24 GB RAM。

要使用更多 worker,使用以下建议增加 undercloud 的 vCPU 和内存:

  • 最小值:每个线程使用 1.5 GB 内存。例如,一台有 48 个线程的机器需要 72 GB RAM 来为 24 个 heat worker 和 12 个其他服务的 worker 提供最小的覆盖范围。
  • 建议值:每个线程使用 3 GB 内存。例如,一台有 48 个线程的机器需要 144 GB RAM 来为 24 个 heat worker 和 12 个其他服务的 worker 提供建议的覆盖范围。

2.4. undercloud 磁盘大小调整

建议的最小 undercloud 磁盘大小为在根磁盘上有 100 GB 可用磁盘空间:

  • 20 GB 用于容器镜像
  • 10 GB 在节点部署过程中用于 QCOW2 镜像转换和缓存
  • 70 GB 或更大空间供常规使用、保存日志和指标以及满足增长需要

2.5. 虚拟化支持

红帽仅支持以下平台上的虚拟化 undercloud:

平台备注

基于内核的虚拟机 (KVM)

由 Red Hat Enterprise Linux 托管,如 Red Hat OpenStack Platform、Red Hat Virtualization、OpenShift Virtualization 和 Red Hat Enterprise Linux 中的认证的客户机操作系统上列出

Red Hat Virtualization

由 Red Hat Virtualization 4.x 托管,如 认证的 Red Hat Hypervisors 上所列。

Microsoft Hyper-V

由各种版本的 Hyper-V 托管,如红帽客户门户认证目录上所列。

VMware ESX 和 ESXi

由各种版本的 ESX 和 ESXi 托管,如红帽客户门户认证目录上所列。

重要

确保您的管理程序支持 Red Hat Enterprise Linux 9.0 客户机。

虚拟机要求

虚拟 undercloud 的资源要求与裸机 undercloud 的资源要求类似。在置备时考虑各种调优选项,如网络模型、客户机 CPU 功能、存储后端、存储格式和缓存模式。

网络注意事项

电源管理
undercloud 虚拟机(VM)需要访问 overcloud 节点的电源管理设备。这是注册节点时为 pm_addr 参数设置的 IP 地址。
Provisioning 网络
用于 provisioning 网络的 NIC ctlplane 需要向 overcloud 裸机节点的 NIC 广播和提供 DHCP 请求。创建一个网桥,将虚拟机的 NIC 连接到与裸机 NIC 相同的网络。
允许来自未知地址的流量

您必须配置虚拟 undercloud 管理程序,以防止虚拟机监控程序阻止 undercloud 从未知地址传输流量。配置取决于您用于虚拟 undercloud 的平台:

  • Red Hat Enterprise Virtualization:禁用 anti-mac-spoofing 参数。
  • VMware ESX 或 ESXi:

    • 在 IPv4 ctlplane 网络中:允许伪传输。
    • 在 IPv6 ctlplane 网络中:允许伪传输、MAC 地址更改和适当的模式操作。

      有关如何配置 VMware ESX 或 ESXi 的更多信息,请参阅 VMware 文档网站上的 vSphere 标准交换机

应用这些设置后,必须关闭再打开 director 虚拟机。仅重启虚拟机不足。

2.6. 字符编码配置

Red Hat OpenStack Platform 有特殊的字符编码要求,作为本地设置的一部分:

  • 在所有节点上使用 UTF-8 编码。确保在所有节点上将 LANG 环境变量设置为 en_US.UTF-8
  • 如果您使用 Red Hat Ansible Tower 自动创建 Red Hat OpenStack Platform 资源,请避免使用非 ASCII 字符。

2.7. 使用代理运行 undercloud 时的注意事项

使用代理运行 undercloud 有某些限制,红帽建议您使用 Red Hat Satellite 进行 registry 和软件包管理。

但是,如果您的环境使用代理,请查看这些注意事项,以透彻理解将 Red Hat OpenStack Platform OpenStack 的组件与代理集成的不同配置方法,以及每种方法的限制。

系统范围的代理配置

使用此方法为 undercloud 上的所有网络流量配置代理通信。要配置代理设置,请编辑 /etc/environment 文件并设置以下环境变量:

http_proxy
用于标准 HTTP 请求的代理。
https_proxy
用于 HTTP 请求的代理。
no_proxy
从代理通信中排除的、以逗号分隔的域列表。

系统范围的代理方法有以下限制:

  • 由于 pam_env PAM 模块中的固定大小缓冲区,no_proxy 的最大长度为 1024 个字符。

dnf 代理配置

使用此方法将 dnf 配置为通过代理运行所有流量。要配置代理设置,请编辑 /etc/dnf/dnf.conf 文件并设置以下参数:

proxy
代理服务器的 URL。
proxy_username
用于连接到代理服务器的用户名。
proxy_password
用于连接到代理服务器的密码。
proxy_auth_method
代理服务器使用的身份验证方法。

有关这些选项的更多信息,请运行 man dnf.conf

dnf 代理方法有以下限制:

  • 此方法仅对 dnf 提供代理支持。
  • dnf 代理方法不包括用于从代理通信中排除某些主机的选项。

Red Hat Subscription Manager 代理

使用此方法将 Red Hat Subscription Manager 配置为通过代理运行所有流量。要配置代理设置,请编辑 /etc/rhsm/rhsm.conf 文件并设置以下参数:

proxy_hostname
用于代理的主机。
proxy_scheme
在将代理写入软件仓库定义时,代理的方案。
proxy_port
代理的端口。
proxy_username
用于连接到代理服务器的用户名。
proxy_password
用于连接到代理服务器的密码。
no_proxy
要从代理通信中排除的、以逗号分隔的特定主机的主机名后缀列表。

有关这些选项的更多信息,请运行 man rhsm.conf

Red Hat Subscription Manager 代理方法有以下限制:

  • 此方法仅对 Red Hat Subscription Manager 提供代理支持。
  • Red Hat Subscription Manager 代理配置的值覆盖为系统范围环境变量设置的任何值。

透明代理

如果您的网络使用透明代理来管理应用层流量,则不需要将 undercloud 本身配置为与代理交互,因为代理管理会自动发生。透明代理可帮助克服 Red Hat OpenStack Platform 中与基于客户端的代理配置相关的限制。

2.8. undercloud 软件仓库

您可以在 Red Hat Enterprise Linux 9.0 上运行 Red Hat OpenStack Platform 17.0。因此,您必须将这些软件仓库的内容锁定到相应的 Red Hat Enterprise Linux 版本。

警告

除这里指定的存储库外,都不支持任何软件仓库。除非建议,除非不要启用除下表中列出的其他产品或存储库,否则您可能遇到依赖软件包问题。请勿启用 Extra Packages for Enterprise Linux (EPEL)。

注意

Satellite 软件仓库不会被列出,因为 RHOSP 17.0 不支持 Satellite。计划在以后的版本中对 Satellite 的支持。只有 Red Hat CDN 作为软件包存储库和容器 registry 支持。

核心软件仓库

下表列出了用于安装 undercloud 的核心软件仓库。

名称软件仓库要求说明

Red Hat Enterprise Linux 9 for x86_64 - BaseOS (RPMs) Extended Update Support (EUS)

rhel-9-for-x86_64-baseos-eus-rpms

x86_64 系统的基本操作系统仓库。

Red Hat Enterprise Linux 9 for x86_64 - AppStream (RPMs)

rhel-9-for-x86_64-appstream-eus-rpms

包括 Red Hat OpenStack Platform 的依赖软件包。

Red Hat Enterprise Linux 9 for x86_64 - High Availability (RPMs) Extended Update Support (EUS)

rhel-9-for-x86_64-highavailability-eus-rpms

Red Hat Enterprise Linux 的高可用性工具。用于 Controller 节点的高可用性功能。

Red Hat OpenStack Platform 17.0 for RHEL 9 (RPMs)

openstack-17-for-rhel-9-x86_64-rpms

Red Hat OpenStack Platform 核心软件仓库,包含 Red Hat OpenStack Platform director 的软件包。

Red Hat Fast Datapath for RHEL 9 (RPMS)

fast-datapath-for-rhel-9-x86_64-rpms

为 OpenStack Platform 提供 Open vSwitch (OVS) 软件包。

第 3 章 了解 heat 模板

本指南中的自定义配置使用 heat 模板和环境文件来定义 overcloud 的某些方面。本章介绍了 heat 模板的基本介绍,以便您可以在 Red Hat OpenStack Platform director 的上下文中了解这些模板的结构和格式。

3.1. Heat 模板

director 使用 Heat 编配模板(过期)作为 overcloud 部署计划的模板格式。过程格式的模板通常以 YAML 格式表示。模板的目的是定义和创建堆栈,这是 OpenStack Orchestration (heat)创建的资源集合,以及资源的配置。资源是 Red Hat OpenStack Platform (RHOSP)中的对象,可以包含计算资源、网络配置、安全组、扩展规则和自定义资源。

heat 模板有三个主要部分:

parameters
这些设置为 heat,它提供了一种自定义堆栈的方法,以及参数的默认值,而无需传递值。这些设置在 模板的 parameter 部分中定义。
资源
使用 resources 部分定义使用此模板部署堆栈时创建的资源,如计算实例、网络和存储卷。Red Hat OpenStack Platform (RHOSP)包含所有组件中的一组核心资源。这些是作为堆栈的一部分创建和配置的特定对象。RHOSP 包含所有组件中的一组核心资源。它们在模板的 resources 部分中定义。
输出
使用 outputs 部分声明您的云用户在创建堆栈后可以访问的输出参数。您的云用户可以使用这些参数来请求堆栈的详细信息,如部署的实例的 IP 地址,或者作为堆栈的一部分部署的 Web 应用程序的 URL。

基本 heat 模板示例:

heat_template_version: 2013-05-23

description: > A very basic Heat template.

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

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

output:
  instance_name:
    description: Get the instance's name
    value: { get_attr: [ my_instance, name ] }

此模板使用资源类型 type: OS::Nova::Server 创建名为 my_instance 的实例,其具有云用户指定的特定类别、镜像和密钥。堆栈可以返回 instance_name 的值,它名为 My Cirros Instance

当 heat 处理模板时,它会从模板创建堆栈,并为资源模板创建一组子堆栈。这会创建一个堆栈层次结构,该层次结构从您使用模板定义的主堆栈中生成。您可以使用以下命令查看堆栈层次结构:

$ openstack stack list --nested

3.2. 环境文件

环境文件是一种特殊的模板,可用于自定义 heat 模板。除了核心 heat 模板外,您还可以在部署命令中包含环境文件。环境文件包含三个主要部分:

resource_registry
本节定义自定义资源名称,链接到其他 heat 模板。这提供了一种创建在核心资源集合中不存在的自定义资源的方法。
parameters
这些是您应用到顶级模板的参数的常见设置。例如,如果您有一个模板来部署嵌套堆栈,如资源 registry 映射,则参数仅适用于顶级模板,而不适用于嵌套资源的模板。
parameter_defaults
这些参数修改所有模板中的参数的默认值。例如,如果您有一个 heat 模板来部署嵌套堆栈,如资源 registry 映射,则参数默认为适用于所有模板。
重要

在为 overcloud 创建自定义环境文件时,使用 parameter_defaults 而不是 parameters,以便您的参数应用到 overcloud 的所有堆栈模板。

基本环境文件示例:

resource_registry:
  OS::Nova::Server::MyServer: myserver.yaml

parameter_defaults:
  NetworkName: my_network

parameters:
  MyIP: 192.168.0.1

从特定的 heat 模板(my_template.yaml)创建堆栈时,可能会包含此环境文件(my_env.yaml)。my_env.yaml 文件会创建一个名为 OS::Nova::Server::MyServer 的新资源类型。myserver.yaml 文件是一个 heat 模板文件,它为此资源类型提供了一个实现,可覆盖任何内置资源。您可以在 my_template.yaml 文件中包含 OS::Nova::Server::MyServer 资源。

MyIP 仅将参数应用到使用此环境文件部署的主 heat 模板。在本例中,MyIP 仅适用于 my_template.yaml 中的参数。

networkName 适用于主 heat 模板 my_template.yaml,以及与主模板中包含的资源关联的模板,如本例中的 OS::Nova::Server::MyServer 资源及其 myserver.yaml 模板。

注意

要使 RHOSP 将 heat 模板文件用作自定义模板资源,文件扩展名必须是 .yaml 或 .template。

3.3. 核心 overcloud heat 模板

director 包含 overcloud 的核心 heat 模板集合和环境文件集合。此集合存储在 /usr/share/openstack-tripleo-heat-templates 中。

此模板集合中的主要文件和目录是:

overcloud.j2.yaml
这是 director 用于创建 overcloud 环境的主要模板文件。此文件使用 Jinja2 语法迭代模板中的某些部分以创建自定义角色。在 overcloud 部署过程中将 Jinja2 格式呈现为 YAML。
overcloud-resource-registry-puppet.j2.yaml
这是 director 用于创建 overcloud 环境的主要环境文件。它为存储在 overcloud 镜像上的 Puppet 模块提供一组配置。在 director 将 overcloud 镜像写入每个节点后,heat 会使用此环境文件中注册的资源启动每个节点的 Puppet 配置。此文件使用 Jinja2 语法迭代模板中的某些部分以创建自定义角色。在 overcloud 部署过程中将 Jinja2 格式呈现为 YAML。
roles_data.yaml
此文件包含 overcloud 中角色的定义,并将服务映射到各个角色。
network_data.yaml
此文件包含 overcloud 中网络的定义,以及它们的属性,如子网、分配池和 VIP 状态。默认 network_data.yaml 文件包含默认网络: External、Internal Api、Storage、Storage Management、Tenant 和 Management。您可以创建自定义 network_data.yaml 文件,并使用 -n 选项将其添加到 openstack overcloud deploy 命令中。
plan-environment.yaml
此文件包含您的 overcloud 计划元数据的定义。这包括要使用的计划名称、主模板和要应用到 overcloud 的环境文件。
capabilities-map.yaml
此文件包含 overcloud 计划的环境文件映射。
部署
此目录包含 heat 模板。overcloud-resource-registry-puppet.j2.yaml 环境文件使用此目录中的文件驱动每个节点上的 Puppet 配置应用。
environments
此目录包含可用于创建 overcloud 的其他 heat 环境文件。这些环境文件为您的生成的 Red Hat OpenStack Platform (RHOSP)环境启用额外的功能。例如,该目录包含一个环境文件,以启用 Cinder NetApp 后端存储(cinder-netapp-config.yaml)。
network
此目录包含一组 heat 模板,可用于创建隔离的网络和端口。
puppet
此目录包含控制 Puppet 配置的模板。overcloud-resource-registry-puppet.j2.yaml 环境文件使用此目录中的文件驱动每个节点上的 Puppet 配置应用。
puppet/services
此目录包含所有服务配置的传统 heat 模板。部署 目录中的模板替换了 puppet/services 目录中的大多数模板。
extraconfig
此目录包含可用于启用额外功能的模板。

3.4. 规划环境元数据

您可以在计划环境元数据文件中为您的 overcloud 计划定义元数据。director 在 overcloud 创建过程中应用元数据,并在导入和导出 overcloud 计划时应用元数据。

计划环境元数据文件包括以下参数:

version
模板的版本。
name
用于存储计划文件的 OpenStack Object Storage (swift)中的 overcloud 计划名称和容器的名称。
模板
要用于 overcloud 部署的核心父模板。这通常是 overcloud.yaml,它是 overcloud.yaml.j2 模板的呈现版本。
environments
定义您要使用的环境文件列表。使用 路径 子参数指定每个环境文件的名称和相对位置。
parameter_defaults
要在 overcloud 中使用的一组参数。这个功能与标准环境文件中的 parameter_defaults 部分相同。
密码
要用于 overcloud 密码的一组参数。这个功能与标准环境文件中的 parameter_defaults 部分相同。通常,director 会自动使用随机生成的密码填充此部分。

以下片段是计划环境文件语法的示例:

version: 1.0
name: myovercloud
description: 'My Overcloud Plan'
template: overcloud.yaml
environments:
- path: overcloud-resource-registry-puppet.yaml
- path: environments/containers-default-parameters.yaml
- path: user-environment.yaml
parameter_defaults:
  ControllerCount: 1
  ComputeCount: 1
  OvercloudComputeFlavor: compute
  OvercloudControllerFlavor: control
workflow_parameters:
  tripleo.derive_params.v1.derive_parameters:
    num_phy_cores_per_numa_node_for_pmd: 2

您可以使用 -p 选项通过 openstack overcloud deploy 命令包括计划环境元数据文件:

(undercloud) $ openstack overcloud deploy --templates \
  -p /my-plan-environment.yaml \
  [OTHER OPTIONS]

您还可以使用以下命令查看现有 overcloud 计划的计划元数据:

(undercloud) $ openstack object save overcloud plan-environment.yaml --file -

3.5. 在 overcloud 创建中包含环境文件

在部署命令中使用 -e 选项包括环境文件。您可以根据需要纳入多个环境文件。但是,环境文件的顺序非常重要,因为后续环境文件中定义的参数和资源具有优先权。例如,您有两个环境文件,其中包含通用资源类型 OS::TripleO::NodeExtraConfigPost,以及一个通用参数 TimeZone

environment-file-1.yaml

resource_registry:
  OS::TripleO::NodeExtraConfigPost: /home/stack/templates/template-1.yaml

parameter_defaults:
  RabbitFDLimit: 65536
  TimeZone: 'Japan'

environment-file-2.yaml

resource_registry:
  OS::TripleO::NodeExtraConfigPost: /home/stack/templates/template-2.yaml

parameter_defaults:
  TimeZone: 'Hongkong'

在部署命令中包含这两个环境文件:

$ openstack overcloud deploy --templates -e environment-file-1.yaml -e environment-file-2.yaml

openstack overcloud deploy 命令通过以下过程运行:

  1. 从核心 heat 模板集合中加载默认配置。
  2. 应用 environment-file-1.yaml 中的配置,这将覆盖默认配置中的任何常见设置。
  3. 应用 environment-file-2.yaml 中的配置,该配置会覆盖默认配置和 environment-file-1.yaml 中的所有常用设置。

这会对 overcloud 的默认配置进行以下更改:

  • OS::TripleO::NodeExtraConfigPost 资源设置为 /home/stack/templates/template-2.yaml,如 environment-file-2.yaml 中定义的。
  • TimeZone 参数设置为在 environment-file-2.yaml 中定义,如 environment-file-2.yaml 中定义的。
  • RabbitFDLimit 参数设置为 65536,如 environment-file-1.yaml 中定义的。environment-file-2.yaml 不会更改此值。

您可以使用此机制为 overcloud 定义自定义配置,而无需与多个环境文件冲突。

3.6. 使用自定义核心 heat 模板

在创建 overcloud 时,director 会使用位于 /usr/share/openstack-tripleo-heat-templates 中的一组核心 heat 模板。如果要自定义此核心模板集合,请使用以下 Git 工作流来管理自定义模板集合:

流程

  • 创建包含 heat 模板集合的初始 Git 存储库:

    1. 将模板集合复制到 /home/stack/templates 目录中:

      $ cd ~/templates
      $ cp -r /usr/share/openstack-tripleo-heat-templates .
    2. 进入自定义模板目录并初始化 Git 存储库:

      $ cd ~/templates/openstack-tripleo-heat-templates
      $ git init .
    3. 配置 Git 用户名和电子邮件地址:

      $ git config --global user.name "<USER_NAME>"
      $ git config --global user.email "<EMAIL_ADDRESS>"
  • <USER_NAME > 替换为您要使用的用户名。
  • <EMAIL_ADDRESS > 替换为您的电子邮件地址。

    1. 为初始提交暂存所有模板:

      $ git add *
    2. 创建初始提交:

      $ git commit -m "Initial creation of custom core heat templates"

      这将创建一个初始 master 分支,其中包含最新的核心模板集合。使用此分支作为自定义分支的基础,并将新模板版本合并到此分支中。

  • 使用自定义分支将您的更改存储在核心模板集合中。使用以下步骤创建 my-customizations 分支并添加自定义:

    1. 创建 my-customizations 分支并切换到它:

      $ git checkout -b my-customizations
    2. 编辑自定义分支中的文件。
    3. 在 git 中暂存更改:

      $ git add [edited files]
    4. 将更改提交到自定义分支:

      $ git commit -m "[Commit message for custom changes]"

      这会将您的更改作为提交添加到 my-customizations 分支。当 master 分支更新时,您可以对 master 进行更新,这会导致 git 将这些提交添加到更新的模板集合中。这有助于跟踪您的自定义信息,并在将来的模板更新中重新显示它们。

  • 更新 undercloud 时,openstack-tripleo-heat-templates 软件包可能还会接收更新。当发生这种情况时,还必须更新自定义模板集合:

    1. openstack-tripleo-heat-templates 软件包版本保存为环境变量:

      $ export PACKAGE=$(rpm -qv openstack-tripleo-heat-templates)
    2. 进入模板集合目录,并为更新的模板创建新分支:

      $ cd ~/templates/openstack-tripleo-heat-templates
      $ git checkout -b $PACKAGE
    3. 删除分支中的所有文件,并将其替换为新版本:

      $ git rm -rf *
      $ cp -r /usr/share/openstack-tripleo-heat-templates/* .
    4. 为初始提交添加所有模板:

      $ git add *
    5. 为软件包更新创建提交:

      $ git commit -m "Updates for $PACKAGE"
    6. 将分支合并到 master 中。如果使用 Git 管理系统(如 GitLab),请使用管理工作流。如果您在本地使用 git,切换到 master 分支并运行 git merge 命令:

      $ git checkout master
      $ git merge $PACKAGE

master 分支现在包含核心模板集合的最新版本。现在,您可以从这个更新的集合中更新 my-customization 分支。

  • 更新 my-customization 分支:

    1. 进入 my-customizations 分支:

      $ git checkout my-customizations
    2. master 进行分支更新:

      $ git rebase master

      这会更新 my-customizations 分支,并重播为此分支进行的自定义提交。

  • 解决更新过程中发生的任何冲突:

    1. 检查哪些文件包含冲突:

      $ git status
    2. 解决标识的模板文件冲突。
    3. 添加解析的文件:

      $ git add [resolved files]
    4. 继续更新:

      $ git rebase --continue
  • 部署自定义模板集合:

    1. 确保您已切换到 my-customization 分支:

      git checkout my-customizations
    2. 使用 --templates 选项运行 openstack overcloud deploy 命令以指定您的本地模板目录:

      $ openstack overcloud deploy --templates /home/stack/templates/openstack-tripleo-heat-templates [OTHER OPTIONS]
注意

如果您指定了 --templates 选项,director 将使用默认模板目录(/usr/share/openstack-tripleo-heat-templates)。

重要

红帽建议使用 第 5 章 配置 hook 中的方法,而不是修改 heat 模板集合。

3.7. Jinja2 渲染

/usr/share/openstack-tripleo-heat-templates 中的核心 heat 模板包含多个具有 j2.yaml 文件扩展名的文件。这些文件包含 Jinja2 模板语法,director 会将这些文件呈现成具有 .yaml 扩展的静态 heat 模板。例如,主 overcloud.j2.yaml 文件呈现到 overcloud.yaml 中。director 使用生成的 overcloud.yaml 文件。

Jinja2-enabled heat 模板使用 Jinja2 语法为迭代值创建参数和资源。例如,overcloud.j2.yaml 文件包含以下片断:

parameters:
...
{% for role in roles %}
  ...
  {{role.name}}Count:
    description: Number of {{role.name}} nodes to deploy
    type: number
    default: {{role.CountDefault|default(0)}}
  ...
{% endfor %}

当 director 呈现 Jinja2 语法时,director 会迭代 roles_data.yaml 文件中定义的角色,并使用角色名称填充 {{role.name}}Count 参数。默认 roles_data.yaml 文件包含五个角色,并从示例中生成以下参数:

  • ControllerCount
  • ComputeCount
  • BlockStorageCount
  • ObjectStorageCount
  • CephStorageCount

参数的呈现版本示例如下:

parameters:
  ...
  ControllerCount:
    description: Number of Controller nodes to deploy
    type: number
    default: 1
  ...

director 仅从核心 heat 模板的目录中呈现 Jinja2-enabled 模板和环境文件。以下用例演示了呈现 Jinja2 模板的正确方法。

使用案例 1:默认核心模板

模板目录: /usr/share/openstack-tripleo-heat-templates/

环境文件: /usr/share/openstack-tripleo-heat-templates/environments/ssl/enable-internal-tls.j2.yaml

director 使用默认核心模板位置(--templates),并将 enable-internal-tls.j2.yaml 文件呈现到 enable-internal-tls.yaml 中。运行 openstack overcloud deploy 命令时,请使用 -e 选项包含呈现的 enable-internal-tls.yaml 文件的名称。

$ openstack overcloud deploy --templates \
    -e /usr/share/openstack-tripleo-heat-templates/environments/ssl/enable-internal-tls.yaml
    ...

使用案例 2:自定义核心模板

模板目录: /home/stack/tripleo-heat-installer-templates

环境文件: /home/stack/tripleo-heat-installer-templates/environments/ssl/enable-internal-tls.j2.yaml

director 使用自定义核心模板位置(--templates /home/stack/tripleo-heat-templates),director 会将自定义核心模板中的 enable-internal-tls.j2.yaml 文件呈现到 enable-internal-tls.yaml 中。运行 openstack overcloud deploy 命令时,请使用 -e 选项包含呈现的 enable-internal-tls.yaml 文件的名称。

$ openstack overcloud deploy --templates /home/stack/tripleo-heat-templates \
    -e /home/stack/tripleo-heat-templates/environments/ssl/enable-internal-tls.yaml
    ...

使用案例 3:不正确的用法

模板目录: /usr/share/openstack-tripleo-heat-templates/

环境文件: /home/stack/tripleo-heat-installer-templates/environments/ssl/enable-internal-tls.j2.yaml

director 使用自定义核心模板位置(--templates /home/stack/tripleo-heat-installer-templates)。但是,所选的 enable-internal-tls.j2.yaml 不在自定义核心模板中,因此它不会呈现到 enable-internal-tls.yaml 中。这会导致部署失败。

将 Jinja2 语法处理为静态模板

使用 process-templates.py 脚本将 openstack-tripleo-heat-templates 的 Jinja2 语法呈现到一组静态模板中。要使用 process-templates.py 脚本呈现 openstack-tripleo-heat-templates 集合的副本,请切换到 openstack-tripleo-heat-templates 目录:

$ cd /usr/share/openstack-tripleo-heat-templates

运行位于 tools 目录中的 process-templates.py 脚本,以及 -o 选项来定义自定义目录来保存静态副本:

$ ./tools/process-templates.py -o ~/openstack-tripleo-heat-templates-rendered

这会将所有 Jinja2 模板转换为其渲染的 YAML 版本,并将结果保存到 ~/openstack-tripleo-heat-templates-rendered

第 4 章 Heat 参数

director 模板集合中的每个 heat 模板都包含一个 parameters 部分。本节包含特定于特定 overcloud 服务的所有参数的定义。这包括以下内容:

  • overcloud.j2.yaml - 默认基本参数
  • roles_data.yaml - 可组合角色的默认参数
  • deployment114.yaml - 特定服务的默认参数

您可以使用以下方法修改这些参数的值:

  1. 为您的自定义参数创建环境文件。
  2. 在环境文件的 parameter_defaults 部分中包含您的自定义参数。
  3. 使用 openstack overcloud deploy 命令包括环境文件。

4.1. 示例 1:配置时区

用于设置时区(puppet/services/time/timezone.yaml)的 Heat 模板包含一个 TimeZone 参数。如果将 TimeZone 参数留空,则 overcloud 会将 time 设为 UTC 作为默认值。

要获取时区列表,请运行 timedatectl list-timezones 命令。以下示例命令检索 Asia 的时区:

$ sudo timedatectl list-timezones|grep "Asia"

找到时区后,在环境文件中设置 TimeZone 参数。以下示例环境文件将 TimeZone 的值设置为 Asia/Tokyo

parameter_defaults:
  TimeZone: 'Asia/Tokyo'

4.2. 示例 2:配置 RabbitMQ 文件描述符限制

对于某些配置,您可能需要提高 RabbitMQ 服务器的文件描述符限制。使用 deployment/rabbitmq/rabbitmq-container-puppet.yaml heat 模板在 RabbitFDLimit 参数中设置新限制。在环境文件中添加以下条目:

parameter_defaults:
  RabbitFDLimit: 65536

4.3. 示例 3:启用和禁用参数

您可能需要在部署期间初始设置参数,然后为将来的部署操作(如 updates 或 scaling 操作)禁用该参数。例如,要在 overcloud 创建过程中包含自定义 RPM,请在环境文件中包含以下条目:

parameter_defaults:
  DeployArtifactURLs: ["http://www.example.com/myfile.rpm"]

要从将来的部署中禁用此参数,无法删除该参数。相反,您必须将参数设置为空值:

parameter_defaults:
  DeployArtifactURLs: []

这可确保不再为后续部署操作设置该参数。

4.4. 示例 4:基于角色的参数

使用 [ROLE]Parameters 参数,将 [ROLE] 替换为可组合角色,以为特定角色设置参数。

例如,director 在 Controller 和 Compute 节点上配置 sshd。要为 Controller 和 Compute 节点设置不同的 sshd 参数,请创建一个环境文件,其中包含 ControllerParametersComputeParameters 参数,并为每个特定角色设置 sshd 参数:

parameter_defaults:
  ControllerParameters:
    BannerText: "This is a Controller node"
  ComputeParameters:
    BannerText: "This is a Compute node"

4.5. 识别您要修改的参数

Red Hat OpenStack Platform director 为配置提供了许多参数。在某些情况下,您可能会遇到识别要配置的特定选项以及对应的 director 参数的难度。如果要使用 director 配置某个选项,请使用以下工作流来识别选项并将其映射到特定的 overcloud 参数:

  1. 确定您要配置的选项。记录使用 选项的服务。
  2. 为此选项检查对应的 Puppet 模块。Red Hat OpenStack Platform 的 Puppet 模块位于 director 节点上的 /etc/puppet/modules 下。每个模块都对应于特定的服务。例如,keystone 模块对应于 OpenStack Identity (keystone)。

    • 如果 Puppet 模块包含控制所选选项的变量,请继续下一步。
    • 如果 Puppet 模块不包含控制所选选项的变量,则此选项不存在 hieradata。如果可能,您可以在 overcloud 完成部署后手动设置选项。
  3. 以 hieradata 的形式检查 Puppet 变量的核心 heat 模板集合。部署中的模板通常与 同一服务的 Puppet 模块对应。例如,deployment/keystone/keystone-container-puppet.yaml 模板为 keystone 模块提供 hieradata。

    • 如果 heat 模板为 Puppet 变量设置了 hieradata,则模板还应关闭您可以修改的基于 director 的参数。
    • 如果 heat 模板没有为 Puppet 变量设置 hieradata,请使用配置 hook 来使用环境文件传递 hieradata。有关自定义 hieradata 的更多信息,请参阅 第 5.4 节 “puppet:自定义角色的 hieradata”

流程

  1. 要更改 OpenStack Identity (keystone)的通知格式,请使用工作流并完成以下步骤:

    1. 识别您要配置的 OpenStack 参数(notification_format)。
    2. keystone Puppet 模块中搜索 notification_format 设置:

      $ grep notification_format /etc/puppet/modules/keystone/manifests/*

      在这种情况下,keystone 模块使用 keystone::notification_format 变量管理此选项。

    3. 为这个变量搜索 keystone 服务模板:

      $ grep "keystone::notification_format" /usr/share/openstack-tripleo-heat-templates/deployment/keystone/keystone-container-puppet.yaml

      输出显示 director 使用 KeystoneNotificationFormat 参数来设置 keystone::notification_format hieradata。

下表显示了最终映射:

director 参数puppet hieradataOpenStack Identity (keystone)选项

KeystoneNotificationFormat

keystone::notification_format

notification_format

您在 overcloud 环境文件中设置 KeystoneNotificationFormat,然后在 overcloud 配置期间在 keystone.conf 文件中设置 notification_format 选项。

第 5 章 配置 hook

使用配置 hook 将您自己的自定义配置功能注入 overcloud 部署过程中。您可以创建 hook 在主 overcloud 服务配置之前和之后注入自定义配置,以及用于修改和包含基于 Puppet 的配置的 hook。

5.1. 预配置:自定义特定的 overcloud 角色

overcloud 使用 Puppet 进行 OpenStack 组件的核心配置。director 提供了一组 hook,可用于在核心配置开始前为特定节点角色执行自定义配置。这些 hook 包括以下配置:

重要

本文档的早期版本使用 OS::TripleO::Tasks:: thePreConfig 资源来基于每个角色提供预配置 hook。heat 模板集合需要专用使用这些 hook,这意味着您不应该使用它们进行自定义。取而代之,请使用此处概述的 OS::TripleO::114ExtraConfigPre hook。

OS::TripleO::ControllerExtraConfigPre
在核心 Puppet 配置之前,应用到 Controller 节点的其他配置。
OS::TripleO::ComputeExtraConfigPre
在核心 Puppet 配置之前,应用到 Compute 节点的其他配置。
OS::TripleO::CephStorageExtraConfigPre
在核心 Puppet 配置之前,应用到 Ceph Storage 节点的其他配置。
OS::TripleO::ObjectStorageExtraConfigPre
在核心 Puppet 配置之前,应用到 Object Storage 节点的其他配置。
OS::TripleO::BlockStorageExtraConfigPre
在核心 Puppet 配置之前,应用到块存储节点的其他配置。
OS::TripleO::[ROLE]ExtraConfigPre
在核心 Puppet 配置之前,应用到自定义节点的其他配置。将 [ROLE] 替换为可组合角色名称。

在本例中,将 resolv.conf 文件附加到特定角色的所有节点上,并带有一个变量名称服务器:

流程

  1. 创建一个基本的 heat 模板 ~/templates/nameserver.yaml,该脚本将变量名称服务器写入节点的 resolv.conf 文件中:

    heat_template_version: 2014-10-16
    
    description: >
      Extra hostname configuration
    
    parameters:
      server:
        type: string
      nameserver_ip:
        type: string
      DeployIdentifier:
        type: string
    
    resources:
      CustomExtraConfigPre:
        type: OS::Heat::SoftwareConfig
        properties:
          group: script
          config:
            str_replace:
              template: |
                #!/bin/sh
                echo "nameserver _NAMESERVER_IP_" > /etc/resolv.conf
              params:
                _NAMESERVER_IP_: {get_param: nameserver_ip}
    
      CustomExtraDeploymentPre:
        type: OS::Heat::SoftwareDeployment
        properties:
          server: {get_param: server}
          config: {get_resource: CustomExtraConfigPre}
          actions: ['CREATE']
          input_values:
            deploy_identifier: {get_param: DeployIdentifier}
    
    outputs:
      deploy_stdout:
        description: Deployment reference, used to trigger pre-deploy on changes
        value: {get_attr: [CustomExtraDeploymentPre, deploy_stdout]}

    在本例中,resource 部分包含以下参数:

    CustomExtraConfigPre
    这定义了软件配置。在本例中,我们定义了 Bash 脚本,heat 将 _NAMESERVER_IP_ 替换为存储在 nameserver_ip 参数的值。
    CustomExtraDeploymentPre

    这将执行一个软件配置,这是来自 CustomExtraConfigPre 资源的软件配置。注意以下几点:

    • config 参数会引用 CustomExtraConfigPre 资源,以便 heat 知道要应用的配置。
    • server 参数检索 overcloud 节点的映射。此参数由父模板提供,这是此 hook 模板中强制的。
    • actions 参数定义何时应用配置。在本例中,您希望在创建 overcloud 时应用配置。可能的操作包括 CREATEUPDATEDELETESUSPENDRESUME
    • input_values 包含一个名为 deploy_identifier 的参数,它存储父模板的 DeployIdentifier。此参数为每个部署更新提供资源的时间戳,以确保后续 overcloud 更新的资源获取。
  2. 创建一个环境文件 ~/templates/pre_config.yaml,将 heat 模板注册到基于角色的资源类型。例如,若要仅将配置应用到 Controller 节点,请使用 ControllerExtraConfigPre hook:

    resource_registry:
      OS::TripleO::ControllerExtraConfigPre: /home/stack/templates/nameserver.yaml
    
    parameter_defaults:
      nameserver_ip: 192.168.1.1
  3. 将环境文件添加到堆栈中,以及其他环境文件:

    $ openstack overcloud deploy --templates \
        ...
        -e /home/stack/templates/pre_config.yaml \
        ...

    这会在核心配置开始创建或后续更新之前,将配置应用到所有 Controller 节点。

重要

您可以为每个 hook 将每个资源注册到一个 heat 模板。后续用法会覆盖要使用的 heat 模板。

5.2. 预配置:自定义所有 overcloud 角色

overcloud 使用 Puppet 进行 OpenStack 组件的核心配置。director 提供了一个 hook,可用于在核心配置开始前配置所有节点类型:

OS::TripleO::NodeExtraConfig
在核心 Puppet 配置之前,应用到所有节点角色的其他配置。

在这个示例中,使用变量名称服务器在每个节点上附加 resolv.conf 文件:

流程

  1. 创建一个基本的 heat 模板 ~/templates/nameserver.yaml,该脚本使用变量名称服务器附加每个节点的 resolv.conf 文件:

    heat_template_version: 2014-10-16
    
    description: >
      Extra hostname configuration
    
    parameters:
      server:
        type: string
      nameserver_ip:
        type: string
      DeployIdentifier:
        type: string
    
    resources:
      CustomExtraConfigPre:
        type: OS::Heat::SoftwareConfig
        properties:
          group: script
          config:
            str_replace:
              template: |
                #!/bin/sh
                echo "nameserver _NAMESERVER_IP_" >> /etc/resolv.conf
              params:
                _NAMESERVER_IP_: {get_param: nameserver_ip}
    
      CustomExtraDeploymentPre:
        type: OS::Heat::SoftwareDeployment
        properties:
          server: {get_param: server}
          config: {get_resource: CustomExtraConfigPre}
          actions: ['CREATE']
          input_values:
            deploy_identifier: {get_param: DeployIdentifier}
    
    outputs:
      deploy_stdout:
        description: Deployment reference, used to trigger pre-deploy on changes
        value: {get_attr: [CustomExtraDeploymentPre, deploy_stdout]}

    在本例中,resource 部分包含以下参数:

    CustomExtraConfigPre
    此参数定义软件配置。在本例中,您定义一个 Bash 脚本,heat 将 _NAMESERVER_IP_ 替换为存储在 nameserver_ip 参数的值。
    CustomExtraDeploymentPre

    此参数执行软件配置,这是来自 CustomExtraConfigPre 资源的软件配置。注意以下几点:

    • config 参数会引用 CustomExtraConfigPre 资源,以便 heat 知道要应用的配置。
    • server 参数检索 overcloud 节点的映射。此参数由父模板提供,这是此 hook 模板中强制的。
    • actions 参数定义何时应用配置。在这种情况下,您仅在创建 overcloud 时应用配置。可能的操作包括 CREATEUPDATEDELETESUSPENDRESUME
    • input_values 参数包含一个名为 deploy_identifier 的子参数,它存储父模板的 DeployIdentifier。此参数为每个部署更新提供资源的时间戳,以确保后续 overcloud 更新的资源获取。
  2. 创建一个环境文件 ~/templates/pre_config.yaml,它将 heat 模板注册为 OS::TripleO::NodeExtraConfig 资源类型。

    resource_registry:
      OS::TripleO::NodeExtraConfig: /home/stack/templates/nameserver.yaml
    
    parameter_defaults:
      nameserver_ip: 192.168.1.1
  3. 将环境文件添加到堆栈中,以及其他环境文件:

    $ openstack overcloud deploy --templates \
        ...
        -e /home/stack/templates/pre_config.yaml \
        ...

    这会在核心配置开始创建或后续更新之前,将配置应用到所有节点。

重要

您可以将 OS::TripleO::NodeExtraConfig 注册到一个 heat 模板。后续用法会覆盖要使用的 heat 模板。

5.3. 后配置:自定义所有 overcloud 角色

重要

本文档的早期版本使用 OS::TripleO::Tasks:: thePostConfig 资源来基于每个角色提供后配置 hook。heat 模板集合需要专用使用这些 hook,这意味着您不应该使用它们进行自定义。反之,请使用此处概述的 OS::TripleO::NodeExtraConfigPost hook。

当您完成 overcloud 的创建,但您想要在初始创建时或后续 overcloud 更新时,为所有角色添加额外的配置的情况。在这种情况下,使用以下后配置 hook:

OS::TripleO::NodeExtraConfigPost
在核心 Puppet 配置后,应用到所有节点角色的其他配置。

在这个示例中,使用变量名称服务器在每个节点上附加 resolv.conf 文件:

流程

  1. 创建一个基本的 heat 模板 ~/templates/nameserver.yaml,该脚本使用变量名称服务器附加每个节点的 resolv.conf 文件:

    heat_template_version: 2014-10-16
    
    description: >
      Extra hostname configuration
    
    parameters:
      servers:
        type: json
      nameserver_ip:
        type: string
      DeployIdentifier:
        type: string
      EndpointMap:
        default: {}
        type: json
    
    resources:
      CustomExtraConfig:
        type: OS::Heat::SoftwareConfig
        properties:
          group: script
          config:
            str_replace:
              template: |
                #!/bin/sh
                echo "nameserver _NAMESERVER_IP_" >> /etc/resolv.conf
              params:
                _NAMESERVER_IP_: {get_param: nameserver_ip}
    
      CustomExtraDeployments:
        type: OS::Heat::SoftwareDeploymentGroup
        properties:
          servers:  {get_param: servers}
          config: {get_resource: CustomExtraConfig}
          actions: ['CREATE']
          input_values:
            deploy_identifier: {get_param: DeployIdentifier}

    在本例中,resource 部分包含以下参数:

    CustomExtraConfig
    这定义了软件配置。在本例中,您定义一个 Bash 脚本,heat 将 _NAMESERVER_IP_ 替换为存储在 nameserver_ip 参数的值。
    CustomExtraDeployments

    这将执行一个软件配置,这是来自 CustomExtraConfig 资源的软件配置。注意以下几点:

    • config 参数会引用 CustomExtraConfig 资源,以便 heat 知道要应用的配置。
    • servers 参数检索 overcloud 节点的映射。此参数由父模板提供,这是此 hook 模板中强制的。
    • actions 参数定义何时应用配置。在本例中,您希望在创建 overcloud 时应用配置。可能的操作包括 CREATEUPDATEDELETESUSPENDRESUME
    • input_values 包含一个名为 deploy_identifier 的参数,它存储父模板的 DeployIdentifier。此参数为每个部署更新提供资源的时间戳,以确保后续 overcloud 更新的资源获取。
  2. 创建一个环境文件 ~/templates/post_config.yaml,它将 heat 模板注册为 OS::TripleO::NodeExtraConfigPost: 资源类型。

    resource_registry:
      OS::TripleO::NodeExtraConfigPost: /home/stack/templates/nameserver.yaml
    
    parameter_defaults:
      nameserver_ip: 192.168.1.1
  3. 将环境文件添加到堆栈中,以及其他环境文件:

    $ openstack overcloud deploy --templates \
        ...
        -e /home/stack/templates/post_config.yaml \
        ...

    这会在内核配置完成初始 overcloud 创建或后续更新后,将配置应用到所有节点。

重要

您可以将 OS::TripleO::NodeExtraConfigPost 注册到一个 heat 模板。后续用法会覆盖要使用的 heat 模板。

5.4. puppet:自定义角色的 hieradata

heat 模板集合包含一组参数,可用于将额外的配置传递给某些节点类型。这些参数将配置保存为节点上 Puppet 配置的 hieradata:

ControllerExtraConfig
添加至所有 Controller 节点的配置。
ComputeExtraConfig
配置为添加到所有 Compute 节点的配置。
BlockStorageExtraConfig
添加至所有块存储节点的配置。
ObjectStorageExtraConfig
添加至所有 Object Storage 节点的配置。
CephStorageExtraConfig
添加至所有 Ceph Storage 节点的配置。
[ROLE]ExtraConfig
要添加到可组合角色的配置。将 [ROLE] 替换为可组合角色名称。
ExtraConfig
要添加到所有节点的配置。

流程

  1. 要在部署后配置过程中添加额外的配置,请在 parameter_defaults 部分中创建一个包含这些参数的环境文件。例如,要将 Compute 主机的保留内存增加到 1024 MB,并将 VNC keymap 设置为日语,请使用 ComputeExtraConfig 参数中的以下条目:

    parameter_defaults:
      ComputeExtraConfig:
        nova::compute::reserved_host_memory: 1024
        nova::compute::vnc_keymap: ja
  2. 将此环境文件包含在 openstack overcloud deploy 命令中,以及与部署相关的任何其他环境文件。
重要

您只能定义每个参数一次。后续用法会覆盖前面的值。

5.5. puppet:为单个节点自定义 hieradata

您可以使用 heat 模板集合为单个节点设置 Puppet hieradata:

流程

  1. 从节点的内省数据中识别系统 UUID:

    $ openstack baremetal introspection data save 9dcc87ae-4c6d-4ede-81a5-9b20d7dc4a14 | jq .extra.system.product.uuid

    这个命令返回一个系统 UUID。例如:

    "f5055c6c-477f-47fb-afe5-95c6928c407f"
  2. 创建一个环境文件来定义特定于节点的 hieradata,并将 per_node.yaml 模板注册到预先配置 hook。在 NodeDataLookup 参数中包含您要配置的节点的系统 UUID:

    resource_registry:
      OS::TripleO::ComputeExtraConfigPre: /usr/share/openstack-tripleo-heat-templates/puppet/extraconfig/pre_deploy/per_node.yaml
    parameter_defaults:
      NodeDataLookup: '{"f5055c6c-477f-47fb-afe5-95c6928c407f": {"nova::compute::vcpu_pin_set": [ "2", "3" ]}}'
  3. 将此环境文件包含在 openstack overcloud deploy 命令中,以及与部署相关的任何其他环境文件。

per_node.yaml 模板在节点上生成一组与每个系统 UUID 对应的 hieradata 文件,并包含您定义的 hieradata。如果没有定义 UUID,则生成的 hieradata 文件为空。在本例中,per_node.yaml 模板在所有 Compute 节点上运行,由 OS::TripleO::ComputeExtraConfigPre hook 定义,但只有具有系统 UUID f5055c6c-477f-47fb-afe5-95c6928c407f 接收 hieradata 的 Compute 节点。

您可以使用此机制来根据特定要求对每个节点进行定制。

5.6. puppet:应用自定义清单

在某些情况下,您可能想要在 overcloud 节点上安装和配置一些额外的组件。您可以使用在主配置完成后应用到节点的自定义 Puppet 清单来达到此目的。例如,您可能需要在每个节点上安装 motd

流程

  1. 创建一个 heat 模板 ~/templates/custom_puppet_config.yaml,用于启动 Puppet 配置。

    heat_template_version: 2014-10-16
    
    description: >
      Run Puppet extra configuration to set new MOTD
    
    parameters:
      servers:
        type: json
      DeployIdentifier:
        type: string
      EndpointMap:
        default: {}
        type: json
    
    resources:
      ExtraPuppetConfig:
        type: OS::Heat::SoftwareConfig
        properties:
          config: {get_file: motd.pp}
          group: puppet
          options:
            enable_hiera: True
            enable_facter: False
    
      ExtraPuppetDeployments:
        type: OS::Heat::SoftwareDeploymentGroup
        properties:
          config: {get_resource: ExtraPuppetConfig}
          servers: {get_param: servers}

    本例在模板中包含 /home/stack/templates/motd.pp,并将其传递给配置的节点。motd.pp 文件包含安装和配置 motd 所需的 Puppet 类。

  2. 创建一个环境文件 ~templates/puppet_post_config.yaml,它将您的 heat 模板注册为 OS::TripleO::NodeExtraConfigPost: 资源类型。

    resource_registry:
      OS::TripleO::NodeExtraConfigPost: /home/stack/templates/custom_puppet_config.yaml
  3. 将此环境文件包含在 openstack overcloud deploy 命令中,以及与部署相关的任何其他环境文件。

    $ openstack overcloud deploy --templates \
        ...
        -e /home/stack/templates/puppet_post_config.yaml \
        ...

    这会将 motd.pp 的配置应用到 overcloud 中的所有节点。

第 6 章 director 安装准备

要安装和配置 director,您必须完成一些准备任务,以确保已将 undercloud 注册到红帽客户门户网站或 Red Hat Satellite 服务器中,已安装了 director 软件包,并且您配置了 director 的容器镜像源,以便在安装过程中拉取容器镜像。

6.1. 准备 undercloud

在安装 director 前,您必须在主机上完成一些基本配置。

步骤

  1. root 用户身份登录 undercloud。
  2. 创建 stack 用户:

    [root@director ~]# useradd stack
  3. 为该用户设置密码:

    [root@director ~]# passwd stack
  4. 进行以下操作,以使用户在使用 sudo 时无需输入密码:

    [root@director ~]# echo "stack ALL=(root) NOPASSWD:ALL" | tee -a /etc/sudoers.d/stack
    [root@director ~]# chmod 0440 /etc/sudoers.d/stack
  5. 切换到新的 stack 用户:

    [root@director ~]# su - stack
    [stack@director ~]$
  6. 为系统镜像和 heat 模板创建目录:

    [stack@director ~]$ mkdir ~/images
    [stack@director ~]$ mkdir ~/templates

    director 使用系统镜像和 heat 模板来创建 overcloud 环境。红帽建议创建这些目录来帮助您组织本地文件系统。

  7. 检查 undercloud 的基础和完整主机名:

    [stack@director ~]$ hostname
    [stack@director ~]$ hostname -f

    如果上述命令没有显示正确的完全限定主机名或报告错误,则使用 hostnamectl 设置主机名:

    [stack@director ~]$ sudo hostnamectl set-hostname undercloud.example.com
  8. 如果您所使用的 DNS 服务器无法解析 undercloud 主机完全限定域名 (FQDN),请编辑 /etc/hosts 并为系统主机名包含一个条目。/etc/hosts 中的 IP 地址必须与您计划用于 undercloud 公共 API 的地址匹配。例如,如果系统使用 undercloud.example.com 作为 FQDN,使用 10.0.0.1 作为 IP 地址,则将以下行添加到 /etc/hosts

    10.0.0.1  undercloud.example.com undercloud
  9. 如果您计划让 Red Hat OpenStack Platform director 位于 overcloud 或其身份提供程序之外的独立域,则必须将额外的域添加到 /etc/resolv.conf:

    search overcloud.com idp.overcloud.com

6.2. 注册 undercloud 并附加订阅

在安装 director 前,您必须运行 subscription-manager 来注册 undercloud 并附加有效的 Red Hat OpenStack Platform 订阅。

步骤

  1. stack 用户身份登录 undercloud。
  2. 在红帽 Content Delivery Network 或 Red Hat Satellite 注册您的系统。例如,运行以下命令在 Content Delivery Network 中注册系统。根据提示输入您的客户门户网站用户名和密码:

    [stack@director ~]$ sudo subscription-manager register
  3. 查找 Red Hat OpenStack Platform (RHOSP) director 的权利池 ID:

    [stack@director ~]$ sudo subscription-manager list --available --all --matches="Red Hat OpenStack"
    Subscription Name:   Name of SKU
    Provides:            Red Hat Single Sign-On
                         Red Hat Enterprise Linux Workstation
                         Red Hat CloudForms
                         Red Hat OpenStack
                         Red Hat Software Collections (for RHEL Workstation)
                         Red Hat Virtualization
    SKU:                 SKU-Number
    Contract:            Contract-Number
    Pool ID:             Valid-Pool-Number-123456
    Provides Management: Yes
    Available:           1
    Suggested:           1
    Service Level:       Support-level
    Service Type:        Service-Type
    Subscription Type:   Sub-type
    Ends:                End-date
    System Type:         Physical
  4. 找到 池 ID 值并附加 Red Hat OpenStack Platform 17.0 权利:

    [stack@director ~]$ sudo subscription-manager attach --pool=Valid-Pool-Number-123456
  5. 将 undercloud 锁定到 Red Hat Enterprise Linux 9.0:

    $ sudo subscription-manager release --set=9.0

6.3. 为 undercloud 启用软件仓库

启用 undercloud 所需的软件仓库,并将系统软件包更新至最新版本。

步骤

  1. stack 用户身份登录 undercloud。
  2. 禁用所有默认的软件仓库,然后启用所需的 Red Hat Enterprise Linux 软件仓库:

    [stack@director ~]$ sudo subscription-manager repos --disable=*
    [stack@director ~]$ sudo subscription-manager repos --enable=rhel-9-for-x86_64-baseos-eus-rpms --enable=rhel-9-for-x86_64-appstream-eus-rpms --enable=rhel-9-for-x86_64-highavailability-eus-rpms --enable=openstack-17-for-rhel-9-x86_64-rpms --enable=fast-datapath-for-rhel-9-x86_64-rpms

    这些仓库包括了安装 director 所需的软件包。

  3. 在系统上执行更新,确保您有最新的基本系统软件包:

    [stack@director ~]$ sudo dnf update -y
    [stack@director ~]$ sudo reboot

6.4. 安装 director 软件包

安装与 Red Hat OpenStack Platform director 相关的软件包。

步骤

  1. 安装用于安装和配置 director 的命令行工具:

    [stack@director ~]$ sudo dnf install -y python3-tripleoclient

6.5. 准备容器镜像

undercloud 安装需要一个环境文件来确定从何处获取容器镜像以及如何存储它们。生成并自定义此环境文件,您可以使用这个文件准备容器镜像。

注意

如果需要为您的 undercloud 配置特定的容器镜像版本,必须将镜像固定到特定的版本。有关更多信息,请参阅 undercloud 的固定容器镜像

步骤

  1. stack 用户身份登录 undercloud 主机。
  2. 生成默认的容器镜像准备文件:

    $ openstack tripleo container image prepare default \
      --local-push-destination \
      --output-env-file containers-prepare-parameter.yaml

    此命令包括以下附加选项:

    • --local-push-destination,在 undercloud 上设置 registry 作为存储容器镜像的位置。这意味着 director 从 Red Hat Container Catalog 拉取必要的镜像并将其推送到 undercloud 上的 registry 中。director 将该 registry 用作容器镜像源。如果直接从 Red Hat Container Catalog 拉取镜像,请忽略这个选项。
    • --output-env-file 是环境文件名称。此文件的内容包括用于准备您的容器镜像的参数。在本例中,文件的名称是 containers-prepare-parameter.yaml

      注意

      您可以使用相同的 containers-prepare-parameter.yaml 文件为 undercloud 和 overcloud 定义容器镜像源。

  3. 修改 containers-prepare-parameter.yaml 以符合您的需求。

6.6. 容器镜像准备参数

用于准备您的容器的默认文件 (containers-prepare-parameter.yaml) 包含 ContainerImagePrepare heat 参数。此参数定义一个用于准备一系列镜像的策略列表:

parameter_defaults:
  ContainerImagePrepare:
  - (strategy one)
  - (strategy two)
  - (strategy three)
  ...

每一策略接受一组子参数,它们定义要使用哪些镜像以及对这些镜像执行哪些操作。下表包含有关您可与每个 ContainerImagePrepare 策略配合使用的子参数的信息:

参数描述

excludes

用于从策略中排除镜像名称的正则表达式列表。

includes

用于在策略中包含的正则表达式列表。至少一个镜像名称必须与现有镜像匹配。如果指定了 includes,将忽略所有 excludes

modify_append_tag

要附加到目标镜像标签的字符串。例如,如果您使用标签 17.0.0-5.161 拉取镜像,并将 modify_append_tag 设置为 -hotfix,director 会将最终镜像标记为 17.0.0-5.161-hotfix。

modify_only_with_labels

过滤想要修改的镜像的镜像标签字典。如果镜像与定义的标签匹配,则 director 将该镜像包括在修改过程中。

modify_role

在上传期间但在将镜像推送到目标 registry 之前运行的 ansible 角色名称字符串。

modify_vars

要传递给 modify_role 的变量的字典。

push_destination

定义用于在上传过程中要将镜像推送到的 registry 的命名空间。

  • 如果设为 true,则使用主机名将 push_destination 设置为 undercloud registry 命名空间,这是建议的方法。
  • 如果设置为 false,则不会推送到本地 registry,节点直接从源拉取镜像。
  • 如果设置为自定义值,则 director 将镜像推送到外部本地 registry。

当直接从 Red Hat Container Catalog 拉取镜像时,如果在生产环境中将此参数设置为 false,则所有 overcloud 节点都将通过外部连接同时从 Red Hat Container Catalog 拉取镜像,这可能会导致出现带宽问题。仅使用 false 直接从托管容器镜像的 Red Hat Satellite Server 拉取。

如果 push_destination 参数设置为 false 或未定义,且远程 registry 需要身份验证,请将 ContainerImageRegistryLogin 参数设置为 true,并使用 ContainerImageRegistryCredentials 参数包含凭据。

pull_source

从中拉取原始容器镜像的源 registry 。

set

用于定义从何处获取初始镜像的 key: value 定义的字典。

tag_from_label

使用指定容器镜像元数据标签的值为每个镜像创建标签,并拉取该标记的镜像。例如,如果设置了 tag_from_label: {version}-{release},则 director 会使用 versionrelease 标签来构造新标签。对于一个容器,版本 可能会设置为 17.0.0,release 可能会设置为 5.161,这会产生标签 17.0.0-5.161。仅当未在 set 字典中定义 tag 时,director 才使用此参数。

重要

将镜像推送到 undercloud 时,请使用 push_destination: true 而不是 push_destination: UNDERCLOUD_IP:PORTpush_destination: true 方法在 IPv4 和 IPv6 地址之间提供了一定程度的一致性。

set 参数接受一组 key: value 定义:

描述

ceph_image

Ceph Storage 容器镜像的名称。

ceph_namespace

Ceph Storage 容器镜像的命名空间。

ceph_tag

Ceph Storage 容器镜像的标签。

ceph_alertmanager_image

ceph_alertmanager_namespace

ceph_alertmanager_tag

Ceph Storage Alert Manager 容器镜像的名称、命名空间和标签。

ceph_grafana_image

ceph_grafana_namespace

ceph_grafana_tag

Ceph Storage Grafana 容器镜像的名称、命名空间和标签。

ceph_node_exporter_image

ceph_node_exporter_namespace

ceph_node_exporter_tag

Ceph Storage Node Exporter 容器镜像的名称、命名空间和标签。

ceph_prometheus_image

ceph_prometheus_namespace

ceph_prometheus_tag

Ceph Storage Prometheus 容器镜像的名称、命名空间和标签。

name_prefix

各个 OpenStack 服务镜像的前缀。

name_suffix

各个 OpenStack 服务镜像的后缀。

namespace

各个 OpenStack 服务镜像的命名空间。

neutron_driver

用于确定要使用的 OpenStack Networking (neutron) 容器的驱动程序。null 值代表使用标准的 neutron-server 容器。设为 ovn 可使用基于 OVN 的容器。

tag

为来自源的所有镜像设置特定的标签。如果没有定义,director 将 Red Hat OpenStack Platform 版本号用作默认值。此参数优先于 tag_from_label 值。

注意

容器镜像使用基于 Red Hat OpenStack Platform 版本的多流标签。这意味着不再有 latest 标签。

6.7. 容器镜像标记准则

Red Hat Container Registry 使用特定的版本格式来标记所有 Red Hat OpenStack Platform 容器镜像。此格式遵循每个容器的标签元数据,即 version-release

version
对应于 Red Hat OpenStack Platform 的主要和次要版本。这些版本充当包含一个或多个发行版本的流。
release
对应于版本流中特定容器镜像版本的发行版本。

例如,如果最新版本的 Red Hat OpenStack Platform 是 17.0.0,容器镜像的版本为 5.161,则容器镜像生成的标签为 17.0.0-5.161。

Red Hat Container Registry 还使用一组主要和次要 version 标签,链接到该容器镜像版本的最新发行版本。例如,17.0 和 17.0.0 链接到 17.0.0 容器流中 最新版本的 链接。如果发生 17.0 的新次要版本,17.0 标签链接到 新次要发行版本 流的最新发行版本,而 17.0.0 标签则继续链接到 17.0.0 流中的最新版本。

ContainerImagePrepare 参数包含两个子参数,可用于确定要下载的容器镜像。这些子参数是 set 字典中的 tag 参数,以及 tag_from_label 参数。使用以下准则来确定要使用 tag 还是 tag_from_label

  • tag 的默认值是您的 OpenStack Platform 版本的主要版本。对于此版本,它是 17.0。这始终对应于最新的次要版本和发行版本。

    parameter_defaults:
      ContainerImagePrepare:
      - set:
          ...
          tag: 17.0
          ...
  • 要更改为 OpenStack Platform 容器镜像的特定次要版本,请将标签设置为次要版本。例如,若要更改为 17.0.2,可将 tag 设置为 17.0.2。

    parameter_defaults:
      ContainerImagePrepare:
      - set:
          ...
          tag: 17.0.2
          ...
  • 在设置 tag 时,director 始终会在安装和更新期间下载 tag 中设置的版本的最新容器镜像 release
  • 如果没有设置 tag,则 director 会结合使用 tag_from_label 的值和最新的主要版本。

    parameter_defaults:
      ContainerImagePrepare:
      - set:
          ...
          # tag: 17.0
          ...
        tag_from_label: '{version}-{release}'
  • tag_from_label 参数根据其从 Red Hat Container Registry 中检查到的最新容器镜像发行版本的标签元数据生成标签。例如,特定容器的标签可能会使用以下 versionrelease 元数据:

      "Labels": {
        "release": "5.161",
        "version": "17.0.0",
        ...
      }
  • tag_from_label 的默认值为 {version}-{release},对应于每个容器镜像的版本和发行版本元数据标签。例如,如果容器镜像为 version 设置 17.0.0,并且为 发行版本 设置了 5.161,则容器镜像生成的标签为 17.0.0-5.161。
  • tag 参数始终优先于 tag_from_label 参数。要使用 tag_from_label,在容器准备配置中省略 tag 参数。
  • tagtag_from_label 之间的一个关键区别是:director 仅基于主要或次要版本标签使用 tag 拉取镜像,Red Hat Container Registry 将这些标签链接到版本流中的最新镜像发行版本,而 director 使用 tag_from_label 对每个容器镜像执行元数据检查,以便 director 生成标签并拉取对应的镜像。

6.8. 从私有 registry 获取容器镜像

registry.redhat.io registry 需要身份验证才能访问和拉取镜像。要通过 registry.redhat.io 和其他私有 registry 进行身份验证,请在 containers-prepare-parameter.yaml 文件中包括 ContainerImageRegistryCredentialsContainerImageRegistryLogin 参数。

ContainerImageRegistryCredentials

有些容器镜像 registry 需要进行身份验证才能访问镜像。在这种情况下,请使用您的 containers-prepare-parameter.yaml 环境文件中的 ContainerImageRegistryCredentials 参数。ContainerImageRegistryCredentials 参数使用一组基于私有 registry URL 的键。每个私有 registry URL 使用其自己的键和值对定义用户名(键)和密码(值)。这提供了一种为多个私有 registry 指定凭据的方法。

parameter_defaults:
  ContainerImagePrepare:
  - push_destination: true
    set:
      namespace: registry.redhat.io/...
      ...
  ContainerImageRegistryCredentials:
    registry.redhat.io:
      my_username: my_password

在示例中,用身份验证凭据替换 my_usernamemy_password。红帽建议创建一个 registry 服务帐户并使用这些凭据访问 registry.redhat.io 内容,而不使用您的个人用户凭据。

要指定多个 registry 的身份验证详情,请在 ContainerImageRegistryCredentials 中为每个 registry 设置多个键对值:

parameter_defaults:
  ContainerImagePrepare:
  - push_destination: true
    set:
      namespace: registry.redhat.io/...
      ...
  - push_destination: true
    set:
      namespace: registry.internalsite.com/...
      ...
  ...
  ContainerImageRegistryCredentials:
    registry.redhat.io:
      myuser: 'p@55w0rd!'
    registry.internalsite.com:
      myuser2: '0th3rp@55w0rd!'
    '192.0.2.1:8787':
      myuser3: '@n0th3rp@55w0rd!'
重要

默认 ContainerImagePrepare 参数从需要进行身份验证的 registry.redhat.io 拉取容器镜像。

如需更多信息,请参阅 Red Hat Container Registry 身份验证

ContainerImageRegistryLogin

ContainerImageRegistryLogin 参数用于控制 overcloud 节点系统是否需要登录到远程 registry 来获取容器镜像。当您想让 overcloud 节点直接拉取镜像,而不是使用 undercloud 托管镜像时,会出现这种情况。

如果 push_destination 设置为 false 或未用于给定策略,则必须将 ContainerImageRegistryLogin 设置为 true

parameter_defaults:
  ContainerImagePrepare:
  - push_destination: false
    set:
      namespace: registry.redhat.io/...
      ...
  ...
  ContainerImageRegistryCredentials:
    registry.redhat.io:
      myuser: 'p@55w0rd!'
  ContainerImageRegistryLogin: true

但是,如果 overcloud 节点没有与 ContainerImageRegistryCredentials 中定义的 registry 主机的网络连接,并将此 ContainerImageRegistryLogin 设置为 true,则尝试进行登录时部署可能会失败。如果 overcloud 节点没有与 ContainerImageRegistryCredentials 中定义的 registry 主机的网络连接,请将 push_destination 设置为 true,将 ContainerImageRegistryLogin 设置为 false,以便 overcloud 节点从 undercloud 拉取镜像。

parameter_defaults:
  ContainerImagePrepare:
  - push_destination: true
    set:
      namespace: registry.redhat.io/...
      ...
  ...
  ContainerImageRegistryCredentials:
    registry.redhat.io:
      myuser: 'p@55w0rd!'
  ContainerImageRegistryLogin: false

6.9. 分层镜像准备条目

ContainerImagePrepare 参数的值是一个 YAML 列表。这意味着您可以指定多个条目。

以下示例演示了两个条目,director 使用所有镜像的最新版本,nova-api 镜像除外,该镜像使用标记为 17.0-hotfix 的版本:

parameter_defaults:
  ContainerImagePrepare:
  - tag_from_label: "{version}-{release}"
    push_destination: true
    excludes:
    - nova-api
    set:
      namespace: registry.redhat.io/rhosp-rhel9
      name_prefix: openstack-
      name_suffix: ''
      tag:17.0
  - push_destination: true
    includes:
    - nova-api
    set:
      namespace: registry.redhat.io/rhosp-rhel9
      tag: 17.0-hotfix

includesexcludes 参数使用正则表达式来控制每个条目的镜像筛选。匹配 includes 策略的镜像的优先级高于 excludes 匹配项。镜像名称必须与 includesexcludes 正则表达式值匹配才能被认为匹配。

6.10. 部署供应商插件

要将一些第三方硬件用作块存储后端,您必须部署供应商插件。以下示例演示了如何部署供应商插件,将 Dell EMC 硬件用作块存储后端。

流程

  1. 为您的 overcloud 创建新的容器镜像文件:

    $ sudo openstack tripleo container image prepare default \
        --local-push-destination \
        --output-env-file containers-prepare-parameter-dellemc.yaml
  2. 编辑 containers-prepare-parameter-dellemc.yaml 文件。
  3. 在主 Red Hat OpenStack Platform 容器镜像的策略中添加一个 exclude 参数。使用此参数排除厂商容器镜像将替换的容器镜像。在示例中,容器镜像是 cinder-volume 镜像:

    parameter_defaults:
      ContainerImagePrepare:
        - push_destination: true
          excludes:
      	   - cinder-volume
          set:
            namespace: registry.redhat.io/rhosp-rhel9
            name_prefix: openstack-
            name_suffix: ''
            tag: 16.2
            ...
          tag_from_label: "{version}-{release}"
  4. ContainerImagePrepare 参数中添加新策略,其中包含厂商插件的替代容器镜像:

    parameter_defaults:
      ContainerImagePrepare:
        ...
        - push_destination: true
          includes:
            - cinder-volume
          set:
            namespace: registry.connect.redhat.com/dellemc
            name_prefix: openstack-
            name_suffix: -dellemc-rhosp16
            tag: 16.2-2
            ...
  5. 将 registry.connect.redhat.com registry 的身份验证详情添加到 ContainerImageRegistryCredentials 参数中:

    parameter_defaults:
      ContainerImageRegistryCredentials:
        registry.redhat.io:
          [service account username]: [service account password]
        registry.connect.redhat.com:
          [service account username]: [service account password]
  6. 保存 containers-prepare-parameter-dellemc.yaml 文件。
  7. 使用任何部署命令包括 containers-prepare-parameter-dellemc.yaml 文件,如 openstack overcloud deploy:

    $ openstack overcloud deploy --templates
        ...
        -e containers-prepare-parameter-dellemc.yaml
        ...

    当 director 部署 overcloud 时,overcloud 将使用厂商容器镜像而不是标准容器镜像。

    重要
    containers-prepare-parameter-dellemc.yaml 文件替换了 overcloud 部署中的标准 containers-prepare-parameter.yaml 文件。不要在 overcloud 部署中包含标准 containers-prepare-parameter.yaml 文件。为 undercloud 安装和更新保留标准 containers-prepare-parameter.yaml 文件。

6.11. 排除 Ceph Storage 容器镜像

默认的 overcloud 角色配置使用默认的 Controller、Compute 和 Ceph Storage 角色。但是,如果使用默认角色配置来部署不含 Ceph Storage 节点的 overcloud,director 仍然会从 Red Hat Container Registry 拉取 Ceph Storage 容器镜像,因为这些镜像是作为默认配置的一部分包含在其中。

如果您的 overcloud 不需要 Ceph Storage 容器,则可以将 director 配置为不从 Red Hat Container Registry 拉取 Ceph Storage 容器镜像。

步骤

  1. 编辑 containers-prepare-parameter.yaml 文件以排除 Ceph Storage 容器:

    parameter_defaults:
      ContainerImagePrepare:
      - push_destination: true
        excludes:
          - ceph
          - prometheus
        set:
          …​

    excludes 参数使用正则表达式来排除包含 cephprometheus 字符串的任何容器镜像。

  2. 保存 containers-prepare-parameter.yaml 文件。

6.11.1. 准备期间修改镜像

可在准备镜像期间修改镜像,然后立即使用修改的镜像部署 overcloud。

注意

Red Hat OpenStack Platform (RHOSP) Director 支持在准备 RHOSP 容器(而非 Ceph 容器)期间修改镜像。

修改镜像的情况包括:

  • 作为连续集成管道的一个部分,在部署之前使用要测试的更改修改镜像。
  • 作为开发工作流的一个部分,必须部署本地更改以进行测试和开发。
  • 必须部署更改,但更改没有通过镜像构建管道提供。例如,添加专有附加组件或紧急修复。

要在准备期间修改镜像,可在您要修改的每个镜像上调用 Ansible 角色。该角色提取源镜像,进行请求的更改,并标记结果。准备命令可将镜像推送到目标 registry,并设置 heat 参数以引用修改的镜像。

Ansible 角色 tripleo-modify-image 与所需的角色接口相一致,并提供修改用例必需的行为。使用 ContainerImagePrepare 参数中与修改相关的键控制修改:

  • modify_role 指定要为每个镜像调用的 Ansible 角色进行修改。
  • modify_append_tag 将字符串附加到源镜像标签的末尾。这可以标明生成的镜像已被修改过。如果 push_destination registry 已包含修改的镜像,则使用此参数跳过修改。在每次修改镜像时都更改 modify_append_tag
  • modify_vars 是要传递给角色的 Ansible 变量的字典。

要选择 tripleo-modify-image 角色处理的用例,将 tasks_from 变量设置为该角色中所需的文件。

在开发和测试修改镜像的 ContainerImagePrepare 条目时,运行镜像准备命令(无需任何其他选项),以确认镜像已如期修改:

sudo openstack tripleo container image prepare \
  -e ~/containers-prepare-parameter.yaml
重要

要使用 openstack tripleo container image prepare 命令,您的 undercloud 必须包含一个正在运行的 image-serve registry。这样,在新的 undercloud 安装之前您将无法运行此命令,因为 image-serve registry 将不会被安装。您可以在成功安装 undercloud 后运行此命令。

6.11.2. 更新容器镜像的现有软件包

注意

Red Hat OpenStack Platform (RHOSP) director 支持更新 RHOSP 容器的容器镜像上的现有软件包,不适用于 Ceph 容器。

步骤

  • 以下示例 ContainerImagePrepare 条目使用 undercloud 主机的 dnf 软件仓库配置在容器镜像的所有软件包中更新:

    ContainerImagePrepare:
    - push_destination: true
      ...
      modify_role: tripleo-modify-image
      modify_append_tag: "-updated"
      modify_vars:
        tasks_from: yum_update.yml
        compare_host_packages: true
        yum_repos_dir_path: /etc/yum.repos.d
      ...

6.11.3. 将额外的 RPM 文件安装到容器镜像中

您可以在容器镜像中安装 RPM 文件的目录。这对安装修补程序、本地软件包内部版本或任何通过软件包仓库无法获取的软件包都非常有用。

注意

Red Hat OpenStack Platform (RHOSP) Director 支持将额外的 RPM 文件安装到 RHOSP 容器的容器镜像,而不是 Ceph 容器。

步骤

  • 以下示例 ContainerImagePrepare 条目仅在 nova-compute 镜像上安装一些热修复软件包:

    ContainerImagePrepare:
    - push_destination: true
      ...
      includes:
      - nova-compute
      modify_role: tripleo-modify-image
      modify_append_tag: "-hotfix"
      modify_vars:
        tasks_from: rpm_install.yml
        rpms_path: /home/stack/nova-hotfix-pkgs
      ...

6.11.4. 通过自定义 Dockerfile 修改容器镜像

您可以指定包含 Dockerfile 的目录,以进行必要的更改。调用 tripleo-modify-image 角色时,该角色生成 Dockerfile.modified 文件,而该文件更改 FROM 指令并添加额外的 LABEL 指令。

注意

Red Hat OpenStack Platform (RHOSP) Director 支持使用 RHOSP 容器(而非 Ceph 容器)的自定义 Dockerfile 修改容器镜像。

步骤

  1. 以下示例在 nova-compute 镜像上运行自定义 Dockerfile:

    ContainerImagePrepare:
    - push_destination: true
      ...
      includes:
      - nova-compute
      modify_role: tripleo-modify-image
      modify_append_tag: "-hotfix"
      modify_vars:
        tasks_from: modify_image.yml
        modify_dir_path: /home/stack/nova-custom
      ...
  2. 以下示例显示了 /home/stack/nova-custom/Dockerfile 文件。运行任何 USER 根指令后,必须切换回原始镜像默认用户:

    FROM registry.redhat.io/rhosp-rhel9/openstack-nova-compute:latest
    
    USER "root"
    
    COPY customize.sh /tmp/
    RUN /tmp/customize.sh
    
    USER "nova"

6.11.5. 为容器镜像准备 Satellite 服务器

Red Hat Satellite 6 提供了注册表同步功能。通过该功能可将多个镜像提取到 Satellite 服务器中,作为应用程序生命周期的一部分加以管理。Satellite 也可以作为 registry 供其他启用容器功能的系统使用。有关管理容器镜像的更多信息,请参阅 Red Hat Satellite 6 内容管理指南中的管理容器镜像

以下操作过程示例中使用了 Red Hat Satellite 6 的 hammer 命令行工具和一个名为 ACME 的示例组织。请将该组织替换为您自己 Satellite 6 中的组织。

注意

此过程需要身份验证凭据以从 registry.redhat.io 访问容器镜像。红帽建议创建一个 registry 服务帐户并使用这些凭据访问 registry.redhat.io 内容,而不使用您的个人用户凭据。有关更多信息,请参阅“红帽容器 registry 身份验证”

步骤

  1. 创建所有容器镜像的列表:

    $ sudo podman search --limit 1000 "registry.redhat.io/rhosp-rhel9" --format="{{ .Name }}" | sort > satellite_images
    $ sudo podman search --limit 1000 "registry.redhat.io/rhceph" | grep rhceph-5-dashboard-rhel8
    $ sudo podman search --limit 1000 "registry.redhat.io/rhceph" | grep rhceph-5-rhel8
    $ sudo podman search --limit 1000 "registry.redhat.io/openshift" | grep ose-prometheus
    • 如果您计划安装 Ceph 并启用 Ceph 仪表板,则需要以下 ose-prometheus 容器:

      registry.redhat.io/openshift4/ose-prometheus-node-exporter:v4.6
      registry.redhat.io/openshift4/ose-prometheus:v4.6
      registry.redhat.io/openshift4/ose-prometheus-alertmanager:v4.6
  2. satellite_images 文件复制到包含 Satellite 6 hammer 工具的系统中。或者,根据 Hammer CLI 指南中的说明将 hammer 工具安装到 undercloud 中。
  3. 运行以下 hammer 命令以在 Satellite 机构中创建新产品(OSP 容器):

    $ hammer product create \
      --organization "ACME" \
      --name "OSP Containers"

    该定制产品将会包含您的镜像。

  4. 添加 satellite_images 文件中的 overcloud 容器镜像:

    $ while read IMAGE; do \
      IMAGE_NAME=$(echo $IMAGE | cut -d"/" -f3 | sed "s/openstack-//g") ; \
      IMAGE_NOURL=$(echo $IMAGE | sed "s/registry.redhat.io\///g") ; \
      hammer repository create \
      --organization "ACME" \
      --product "OSP Containers" \
      --content-type docker \
      --url https://registry.redhat.io \
      --docker-upstream-name $IMAGE_NOURL \
      --upstream-username USERNAME \
      --upstream-password PASSWORD \
      --name $IMAGE_NAME ; done < satellite_images
  5. 添加 Ceph Storage 容器镜像:

    $ hammer repository create \
      --organization "ACME" \
      --product "OSP Containers" \
      --content-type docker \
      --url https://registry.redhat.io \
      --docker-upstream-name rhceph/rhceph-5-rhel8 \
      --upstream-username USERNAME \
      --upstream-password PASSWORD \
      --name rhceph-5-rhel8
    注意

    如果要安装 Ceph 仪表板,请在 hammer repository create 命令中包含 --name rhceph-5-dashboard-rhel8

    $ hammer repository create \
      --organization "ACME" \
      --product "OSP Containers" \
      --content-type docker \
      --url https://registry.redhat.io \
      --docker-upstream-name rhceph/rhceph-5-dashboard-rhel8 \
      --upstream-username USERNAME \
      --upstream-password PASSWORD \
      --name rhceph-5-dashboard-rhel8
  6. 同步容器镜像:

    $ hammer product synchronize \
      --organization "ACME" \
      --name "OSP Containers"

    等待 Satellite 服务器完成同步。

    注意

    根据具体配置情况,hammer 可能会询问您的 Satellite 服务器用户名和密码。您可以使用配置文件将 hammer 配置为自动登录。有关更多信息,请参阅 Hammer CLI 指南中的身份验证章节。

  7. 如果您的 Satellite 6 服务器使用内容视图,请创建一个用于纳入镜像的新内容视图版本,并在应用生命周期的不同环境之间推进这个视图。这在很大程度上取决于您如何构建应用程序的生命周期。例如,如果您的生命周期中有一个称为 production 的环境,并且希望容器镜像在该环境中可用,则创建一个包含容器镜像的内容视图,并将该内容视图推进到 production 环境中。有关更多信息,请参阅管理内容视图
  8. 检查 base 镜像的可用标签:

    $ hammer docker tag list --repository "base" \
      --organization "ACME" \
      --lifecycle-environment "production" \
      --product "OSP Containers"

    此命令显示内容视图中特定环境的 OpenStack Platform 容器镜像的标签。

  9. 返回到 undercloud,并生成默认的环境文件,它将您的 Satellite 服务器用作源来准备镜像。运行以下示例命令以生成环境文件:

    $ sudo openstack tripleo container image prepare default \
      --output-env-file containers-prepare-parameter.yaml
    • --output-env-file 是环境文件名称。此文件的内容包括用于为 undercloud 准备容器镜像的参数。在本例中,文件的名称是 containers-prepare-parameter.yaml
  10. 编辑 containers-prepare-parameter.yaml 文件并修改以下参数:

    • push_destination - 根据您选择的容器镜像管理策略,将此参数设置为 truefalse。如果将此参数设置为 false,则 overcloud 节点直接从 Satellite 拉取镜像。如果将此参数设置为 true,则 director 将镜像从 Satellite 拉取到 undercloud registry,overcloud 从 undercloud registry 拉取镜像。
    • namespace - Satellite 服务器上 registry 的 URL。
    • name_prefix - 该前缀基于 Satellite 6 规范。它的值根据您是否使用了内容视图而不同:

      • 如果您使用了内容视图,则前缀的结构为 [组织]-[环境]-[内容视图]-[产品]-。例如: acme-production-myosp16-osp_containers-
      • 如果不使用内容视图,则前缀的结构为 [组织]-[产品]-。例如: acme-osp_containers-
    • ceph_namespaceceph_imageceph_tag - 如果使用 Ceph Storage,请额外纳入这些参数以定义 Ceph Storage 容器镜像的位置。请注意,ceph_image 现包含特定于 Satellite 的前缀。这个前缀与 name_prefix 选项的值相同。

以下示例环境文件包含特定于 Satellite 的参数:

parameter_defaults:
  ContainerImagePrepare:
  - push_destination: false
    set:
      ceph_image: acme-production-myosp16_1-osp_containers-rhceph-5
      ceph_namespace: satellite.example.com:5000
      ceph_tag: latest
      name_prefix: acme-production-myosp16_1-osp_containers-
      name_suffix: ''
      namespace: satellite.example.com:5000
      neutron_driver: null
      tag: '17.0'
      ...
注意

要使用存储在 Red Hat Satellite Server 上的特定容器镜像版本,请将 标签 键值对设置为 set 字典中的特定版本。例如,要使用 17.0.2 镜像流,请在 set 字典中设置 tag: 17.0.2

您必须在 undercloud.conf 配置文件中定义 containers-prepare-parameter.yaml 环境文件,否则 undercloud 将使用默认值:

container_images_file = /home/stack/containers-prepare-parameter.yaml

第 7 章 在 undercloud 上安装 director

要配置并安装 director,请在 undercloud.conf 文件中设置适当的参数并运行 undercloud 安装命令。安装 director 后,导入 director 在节点置备期间用于写入裸机节点的 overcloud 镜像。

7.1. 配置 director

director 安装过程需要 undercloud.conf 配置文件中的某些设置,director 从 stack 用户的主目录中读取该文件。完成以下步骤,复制默认模板作为基础进行配置。

步骤

  1. 将默认模板复制到 stack 用户的主目录:

    [stack@director ~]$ cp \
      /usr/share/python-tripleoclient/undercloud.conf.sample \
      ~/undercloud.conf
  2. 编辑 undercloud.conf 文件。这个文件包含用于配置 undercloud 的设置。如果忽略或注释掉某个参数,undercloud 安装将使用默认值。

7.2. Director 配置参数

以下列表包含用于配置 undercloud.conf 文件的参数的相关信息。将所有参数保留在相关部分内以避免出错。

重要

您至少必须将 container_images_file 参数设置为包含容器镜像配置的环境文件。如果没有将此参数正确设置为适当的文件,则 director 无法从 ContainerImagePrepare 参数获取容器镜像规则集,也无法从 ContainerImageRegistryCredentials 参数获取容器 registry 身份验证详情。

默认值

以下参数会在 undercloud.conf 文件的 [DEFAULT] 部分中进行定义:

additional_architectures
overcloud 支持的附加(内核)架构的列表。overcloud 目前仅支持 x86_64 架构。
certificate_generation_ca
为所请求证书签名的 CA 的 certmonger 别名。仅在设置了 generate_service_certificate 参数的情况下使用此选项。如果您选择 local CA,certmonger 会将本地 CA 证书提取到 /etc/pki/ca-trust/source/anchors/cm-local-ca.pem 并将该证书添加到信任链中。
clean_nodes
确定是否在部署之间和内省之后擦除硬盘。
cleanup
清理临时文件。将此选项设置为 False,可在运行部署命令后保留部署期间使用的临时文件。这可用于调试生成的文件或者确定是否发生了错误。
container_cli
用于容器管理的 CLI 工具。将此参数设置为 podman。Red Hat Enterprise Linux 9.0 仅支持 podman
container_healthcheck_disabled
禁用容器化服务运行状况检查。红帽建议您启用运行状况检查,并将此选项设置为 false
container_images_file

含有容器镜像信息的 Heat 环境文件。此文件可能包含以下条目:

  • 所有需要的容器镜像的参数
  • ContainerImagePrepare 参数(用于推动必要的镜像准备)。通常,含有此参数的文件被命名为 containers-prepare-parameter.yaml
container_insecure_registries
podman 使用的不安全 registry 列表。如果您想从其他来源(如私有容器 registry)拉取镜像,则使用此参数。在大多数情况下,如果在 Satellite 中注册了 undercloud,podman 就有从 Red Hat Container Catalog 或 Satellite Server 拉取容器镜像的证书。
container_registry_mirror
配置的 podman 使用的可选 registry-mirror
custom_env_files
要添加到 undercloud 安装中的其他环境文件。
deployment_user
安装 undercloud 的用户。如果此参数保留为不设置,则使用当前的默认用户 stack
discovery_default_driver
为自动注册的节点设置默认驱动程序。需要启用 enable_node_discovery 参数,且必须在 enabled_drivers 列表中包含驱动程序。
enable_ironic; enable_ironic_inspector; enable_tempest; enable_validations
定义要为 director 启用的核心服务。保留这些参数设为 true
enable_node_discovery
自动注册通过 PXE 引导内省虚拟内存盘 (ramdisk) 的所有未知节点。新节点使用 fake 作为默认驱动程序,但您可以设置 discovery_default_driver 覆盖它。您也可以使用内省规则为新注册的节点指定驱动程序信息。
enable_routed_networks
定义是否支持路由的 control plane 网络。
enabled_hardware_types
要为 undercloud 启用的硬件类型的列表。
generate_service_certificate
定义 undercloud 安装期间是否生成 SSL/TLS 证书,此证书用于 undercloud_service_certificate 参数。undercloud 安装会保存生成的证书 /etc/pki/tls/certs/undercloud-[undercloud_public_vip].pemcertificate_generation_ca 参数中定义的 CA 将为此证书签名。
heat_container_image
要使用的 heat 容器镜像的 URL。请保留不设置。
heat_native
使用 heat-all 运行基于主机的 undercloud 配置。请保留为 true
hieradata_override
在 director 上配置 Puppet hieradata 的 hieradata 覆盖文件的路径,为 undercloud.conf 参数外的服务提供自定义配置。如果设置此参数,undercloud 安装会将此文件复制到 /etc/puppet/hieradata 目录并将其设为层次结构中的第一个文件。有关使用此功能的更多信息,请参阅在 undercloud 上配置 hieradata
inspection_extras
指定在内省的过程中是否启用额外的硬件集合。此参数在内省镜像上需要 python-hardwarepython-hardware-detect 软件包。
inspection_interface
该 director 用来进行节点内省的网桥。这是 director 配置创建的自定义网桥。LOCAL_INTERFACE 会附加到这个网桥。请保留使用默认的值(br-ctlplane)。
inspection_runbench
在节点内省过程中运行一组基准测试。将此参数设为 true 以启用基准测试。如果您需要在检查注册节点的硬件时执行基准数据分析操作,则需要使用这个参数。
ipv6_address_mode

undercloud 置备网络的 IPv6 地址配置模式。以下列表包含这个参数的可能值:

  • dhcpv6-stateless - 使用路由器公告 (RA) 的地址配置以及使用 DHCPv6 的可选信息。
  • DHCPv6-stateful - 地址配置和使用 DHCPv6 的可选信息。
ipxe_enabled
定义使用 iPXE 还是标准的 PXE。默认为 true,其启用 iPXE。将此参数设置为 false 以使用标准 PXE。对于 PowerPC 部署,或混合了 PowerPC 和 x86 的部署,请将此值设置为 false
local_interface

指定 director Provisioning NIC 的接口。这也是该 director 用于 DHCP 和 PXE 引导服务的设备。把这个项的值改为您选择的设备。使用 ip addr 命令可以查看连接了哪些设备。以下是一个 ip addr 命令的结果输出示例:

2: em0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
    link/ether 52:54:00:75:24:09 brd ff:ff:ff:ff:ff:ff
    inet 192.168.122.178/24 brd 192.168.122.255 scope global dynamic em0
       valid_lft 3462sec preferred_lft 3462sec
    inet6 fe80::5054:ff:fe75:2409/64 scope link
       valid_lft forever preferred_lft forever
3: em1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noop state DOWN
    link/ether 42:0b:c2:a5:c1:26 brd ff:ff:ff:ff:ff:ff

在这个例子中,External NIC 使用 em0,Provisioning NIC 使用 em1(当前没有被配置)。在这种情况下,将 local_interface 设置为 em1。配置脚本会把这个接口附加到一个自定义的网桥(由 inspection_interface 参数定义)上。

local_ip

为 director Provisioning NIC 定义的 IP 地址。这也是 director 用于 DHCP 和 PXE 引导服务的 IP 地址。除非 Provisioning 网络需要使用其他子网(如该 IP 地址与环境中的现有 IP 地址或子网冲突)保留默认值 192.168.24.1/24

对于 IPv6,本地 IP 地址前缀长度必须是 /64,以支持有状态和无状态连接。

local_mtu
要用于 local_interface 的最大传输单元 (MTU)。对于 undercloud 不要超过 1500。
local_subnet
要用于 PXE 引导和 DHCP 接口的本地子网。local_ip 地址应该属于这个子网。默认值为 ctlplane-subnet
net_config_override
网络配置覆盖模板的路径。如果设置此参数,undercloud 将使用 JSON 或 YAML 格式的模板以使用 os-net-config 配置网络,并忽略 undercloud.conf 中设置的网络参数。当您要配置绑定或向接口添加一个选项时,请使用此参数。有关自定义 undercloud 网络接口的更多信息,请参阅配置 undercloud 网络接口
networks_file
覆盖用于 heat 的网络文件。
output_dir
输出状态目录、处理的 heat 模板和 Ansible 部署文件。
overcloud_domain_name

要在部署 overcloud 时使用的 DNS 域名。

注意

配置 overcloud 时,必须将 CloudDomain 参数设置为匹配的值。配置 overcloud 时,在环境文件中设置此参数。

roles_file
要用来覆盖用于 undercloud 安装的默认角色文件的角色文件。强烈建议您将此参数保留为不设置,以便 director 安装使用默认的角色文件。
scheduler_max_attempts
调度程序尝试部署实例的次数上限。此值必须大于或等于您期望一次部署的裸机节点数,以避免调度时的潜在争用情形。
service_principal
使用该证书的服务的 Kerberos 主体。仅在您的 CA 需要 Kerberos 主体(如在 FreeIPA 中)时使用此参数。
subnets
用于置备和内省的路由网络子网的列表。默认值仅包括 ctlplane-subnet 子网。如需更多信息,请参阅 子网
templates
要覆盖的 heat 模板文件。
undercloud_admin_host

通过 SSL/TLS 为 director 管理 API 端点定义的 IP 地址或主机名。director 配置将 IP 地址作为路由的 IP 地址附加到 director 软件网桥,其使用 /32 子网掩码。

如果 undercloud_admin_host 不在与 local_ip 相同的 IP 网络中,您必须配置您希望 undercloud 上的 admin API 侦听的接口。默认情况下,admin API 侦听 br-ctlplane 接口。有关如何配置 undercloud 网络接口的详情,请参考 配置 undercloud 网络接口

undercloud_debug
把 undercloud 服务的日志级别设置为 DEBUG。将此值设置为 true 以启用 DEBUG 日志级别。
undercloud_enable_selinux
在部署期间启用或禁用 SELinux。除非调试问题,否则强烈建议保留此值设为 true
undercloud_hostname
定义 undercloud 的完全限定主机名。如果设置,undercloud 安装将配置所有系统主机名设置。如果保留未设置,undercloud 将使用当前的主机名,但您必须相应地配置所有主机名设置。
undercloud_log_file
用于存储 undercloud 安装和升级日志的日志文件的路径。默认情况下,日志文件是主目录中的 install-undercloud.log。例如,/home/stack/install-undercloud.log
undercloud_nameservers
用于 undercloud 主机名解析的 DNS 名称服务器列表。
undercloud_ntp_servers
帮助同步 undercloud 日期和时间的网络时间协议服务器列表。
undercloud_public_host

通过 SSL/TLS 为 director 公共 API 端点定义的 IP 地址或主机名。director 配置将 IP 地址作为路由的 IP 地址附加到 director 软件网桥,其使用 /32 子网掩码。

如果 undercloud_public_host 不在与 local_ip 相同的 IP 网络中,您必须将 PublicVirtualInterface 参数设置为您希望 undercloud 上公共 API 侦听的公共接口。默认情况下,公共 API 侦听 br-ctlplane 接口。在自定义环境文件中设置 PublicVirtualInterface 参数,并通过配置 custom_env_files 参数在 undercloud.conf 文件中包含自定义环境文件。

有关自定义 undercloud 网络接口的详情,请参考配置 undercloud 网络接口

undercloud_service_certificate
用于 OpenStack SSL/TLS 通信的证书的位置和文件名。理想的情况是从一个信任的证书认证机构获得这个证书。否则,生成自己的自签名证书。
undercloud_timezone
undercloud 的主机时区。如果未指定时区,director 将使用现有时区配置。
undercloud_update_packages
定义是否在安装 undercloud 期间更新软件包。

子网

每个置备子网在 undercloud.conf 文件中都有一个对应的同名部分。例如,要创建称为 ctlplane-subnet 的子网,在 undercloud.conf 文件中使用以下示例:

[ctlplane-subnet]
cidr = 192.168.24.0/24
dhcp_start = 192.168.24.5
dhcp_end = 192.168.24.24
inspection_iprange = 192.168.24.100,192.168.24.120
gateway = 192.168.24.1
masquerade = true

您可以根据自身环境所需来指定相应数量的置备网络。

重要

director 在创建子网后无法更改子网的 IP 地址。

cidr
director 用来管理 overcloud 实例的网络。这是 undercloud neutron 服务管理的 Provisioning 网络。保留其默认值 192.168.24.0/24,除非您需要 Provisioning 网络使用其他子网。
masquerade

定义是否伪装 cidr 中定义的用于外部访问的网络。这为 Provisioning 网络提供了一定程度的网络地址转换 (NAT),使 Provisioning 网络能够通过 director 进行外部访问。

注意

director 配置还使用相关 sysctl 内核参数自动启用 IP 转发。

dhcp_start; dhcp_end

overcloud 节点 DHCP 分配范围的开始值和终止值。确保此范围包含足够的 IP 地址,以分配给您的节点。如果没有为子网指定,director 通过删除为 local_ipgatewayundercloud_admin_host、undercloud_public_host、undercloud_public_host 以及 inspection_iprange 参数的值来确定分配池。

您可以通过指定启动和结束地址对列表,为 undercloud control plane 子网配置非持续分配池。另外,您可以使用 dhcp_exclude 选项排除 IP 地址范围中的 IP 地址。例如,以下配置同时创建分配池 172.20.0.100-172.20.0.150172.20.0.200-172.20.0.250

选项 1

dhcp_start = 172.20.0.100,172.20.0.200
dhcp_end = 172.20.0.150,172.20.0.250

选项 2

dhcp_start = 172.20.0.100
dhcp_end = 172.20.0.250
dhcp_exclude = 172.20.0.151-172.20.0.199

dhcp_exclude

DHCP 分配范围中排除的 IP 地址。例如,以下配置排除 IP 地址 172.20.0.105 和 IP 地址范围 172.20.0.210-172.20.0.219

dhcp_exclude = 172.20.0.105,172.20.0.210-172.20.0.219
dns_nameservers
特定于子网的 DNS 名称服务器。如果没有为子网定义名称服务器,子网将使用 undercloud_nameservers 参数中定义的名称服务器。
gateway
overcloud 实例的网关。它是 undercloud 主机,会把网络流量转发到外部网络。保留其默认值 192.168.24.1,除非您需要 director 使用其他 IP 地址,或想直接使用外部网关。
host_routes
此网络上 overcloud 实例的 Neutron 管理的子网的主机路由。这也为 undercloud 上的 local_subnet 配置主机路由。
inspection_iprange
在检查过程中,此网络上的节点要使用的临时 IP 范围。这个范围不得与 dhcp_startdhcp_ end 定义的范围重叠,但必须位于同一个 IP 子网中。

根据您的配置修改这些参数的值。完成后,请保存文件。

7.3. 使用环境文件配置 undercloud

您通过 undercloud.conf 文件配置 undercloud 的主要参数。您还可以使用包含 heat 参数的环境文件来执行额外的 undercloud 配置。

步骤

  1. 创建名为 /home/stack/templates/custom-undercloud-params.yaml 的环境文件。
  2. 编辑此文件并包括您的 heat 参数。例如,要为特定的 OpenStack Platform 服务启用调试功能,请在 custom-undercloud-params.yaml 文件中包括以下代码段:

    parameter_defaults:
      Debug: True

    完成后保存此文件。

  3. 编辑 undercloud.conf 文件,找到 custom_env_files 参数。编辑该参数以指向 custom-undercloud-params.yaml 环境文件:

    custom_env_files = /home/stack/templates/custom-undercloud-params.yaml
    注意

    您可以使用逗号分隔列表指定多个环境文件。

director 安装在下次安装或升级 undercloud 的操作过程中包括此环境文件。

7.4. 用于 undercloud 配置的常见 heat 参数

下表包含您可能在自定义环境文件中为 undercloud 设置的一些常见 heat 参数。

参数描述

AdminPassword

设置 undercloud admin 用户密码。

AdminEmail

设置 undercloud admin 用户电子邮件地址。

Debug

启用调试模式。

在自定义环境文件的 parameter_defaults 部分下设置这些参数:

parameter_defaults:
  Debug: True
  AdminPassword: "myp@ssw0rd!"
  AdminEmail: "admin@example.com"

7.5. 在 undercloud 上配置 hieradata

您可以通过在 director 上配置 Puppet hieradata,为可用 undercloud.conf 参数之外的服务提供自定义配置。

步骤

  1. 创建一个 hieradata 覆盖文件,例如 /home/stack/hieradata.yaml
  2. 将自定义的 hieradata 添加到该文件。例如,添加以下代码段,将 Compute (nova) 服务参数 force_raw_images 从默认值 True 改为 False

    nova::compute::force_raw_images: False

    如果没有为您要设置的参数实施 Puppet,则使用以下方法配置该参数:

    nova::config::nova_config:
      DEFAULT/<parameter_name>:
        value: <parameter_value>

    例如:

    nova::config::nova_config:
      DEFAULT/network_allocate_retries:
        value: 20
      ironic/serial_console_state_timeout:
        value: 15
  3. undercloud.conf 文件中的 hieradata_override 参数设置为新 /home/stack/hieradata.yaml 文件的路径:

    hieradata_override = /home/stack/hieradata.yaml

7.6. 为使用 IPv6 的裸机置备配置 undercloud

如果有使用 IPv6 的节点和基础架构,您可以将 undercloud 和置备网络配置为使用 IPv6 而不是 IPv4,以便 director 能够在 IPv6 节点上置备和部署 Red Hat OpenStack Platform。但是,有一些注意事项:

  • 双堆栈 IPv4/6 不可用。
  • Tempest 验证可能无法正确执行。
  • 在升级过程中,无法进行 IPv4 到 IPv6 的迁移。

修改 undercloud.conf 文件,以便在 Red Hat OpenStack Platform 中启用 IPv6 置备。

先决条件

流程

  1. 打开 undercloud.conf 文件。
  2. 将 IPv6 地址模式指定为无状态或有状态:

    [DEFAULT]
    ipv6_address_mode = <address_mode>
    ...
    • 根据 NIC 支持的模式,将 < address_mode > 替换为 dhcpv6-statelessdhcpv6-stateful
    注意

    当您使用有状态地址模式时,固件、链加载程序和操作系统可能会使用不同的算法来生成 DHCP 服务器跟踪的 ID。DHCPv6 不会按 MAC 跟踪地址,如果来自请求者的标识符值变化,则不会提供相同的地址,但 MAC 地址保持不变。因此,当使用有状态 DHCPv6 时,还必须完成下一步来配置网络接口。

  3. 如果您将 undercloud 配置为使用有状态 DHCPv6,请指定用于裸机节点的网络接口:

    [DEFAULT]
    ipv6_address_mode = dhcpv6-stateful
    ironic_enabled_network_interfaces = neutron,flat
    ...
  4. 为裸机节点设置默认网络接口:

    [DEFAULT]
    ...
    ironic_default_network_interface = neutron
    ...
  5. 指定 undercloud 是否应该在 provisioning 网络中创建路由器:

    [DEFAULT]
    ...
    enable_routed_networks: <true/false>
    ...
    • <true/false > 替换为 true 以启用路由网络,并防止 undercloud 在 provisioning 网络中创建路由器。为 true 时,数据中心路由器必须提供路由器公告。
    • <true/false> 替换为 false 来禁用路由网络,并在 provisioning 网络中创建一个路由器。
  6. 配置本地 IP 地址,以及 director Admin API 和公共 API 端点通过 SSL/TLS 的 IP 地址:

    [DEFAULT]
    ...
    local_ip = <ipv6_address>
    undercloud_admin_host = <ipv6_address>
    undercloud_public_host = <ipv6_address>
    ...
    • <ipv6_address > 替换为 undercloud 的 IPv6 地址。
  7. 可选:配置 director 用来管理实例的 provisioning 网络:

    [ctlplane-subnet]
    cidr = <ipv6_address>/<ipv6_prefix>
    ...
    • <ipv6_address > 替换为不使用默认 provisioning 网络时用于管理实例的网络的 IPv6 地址。
    • 将 < ipv6_prefix > 替换为不使用默认置备网络时用于管理实例的网络的 IP 地址前缀。
  8. 为置备节点配置 DHCP 分配范围:

    [ctlplane-subnet]
    cidr = <ipv6_address>/<ipv6_prefix>
    dhcp_start = <ipv6_address_dhcp_start>
    dhcp_end = <ipv6_address_dhcp_end>
    ...
    • <ipv6_address_dhcp_start > 替换为要用于 overcloud 节点的网络范围的 IPv6 地址。
    • <ipv6_address_dhcp_end > 替换为要用于 overcloud 节点的网络范围末尾的 IPv6 地址。
  9. 可选:配置将流量转发到外部网络的网关:

    [ctlplane-subnet]
    cidr = <ipv6_address>/<ipv6_prefix>
    dhcp_start = <ipv6_address_dhcp_start>
    dhcp_end = <ipv6_address_dhcp_end>
    gateway = <ipv6_gateway_address>
    ...
    • 在不使用默认网关时,将 <ipv6_gateway_address> 替换为网关的 IPv6 地址。
  10. 配置在检查过程中使用的 DHCP 范围:

    [ctlplane-subnet]
    cidr = <ipv6_address>/<ipv6_prefix>
    dhcp_start = <ipv6_address_dhcp_start>
    dhcp_end = <ipv6_address_dhcp_end>
    gateway = <ipv6_gateway_address>
    inspection_iprange = <ipv6_address_inspection_start>,<ipv6_address_inspection_end>
    ...
    • 将 < ipv6_address_inspection_ start> 替换为检查过程中要使用的网络范围内的 IPv6 地址。
    • <ipv6_address_inspection_end > 替换为检查过程中要使用的网络范围末尾的 IPv6 地址。
    注意

    这个范围不得与 dhcp_startdhcp_end 定义的范围重叠,但必须位于同一 IP 子网中。

  11. 为子网配置 IPv6 名称服务器:

    [ctlplane-subnet]
    cidr = <ipv6_address>/<ipv6_prefix>
    dhcp_start = <ipv6_address_dhcp_start>
    dhcp_end = <ipv6_address_dhcp_end>
    gateway = <ipv6_gateway_address>
    inspection_iprange = <ipv6_address_inspection_start>,<ipv6_address_inspection_end>
    dns_nameservers = <ipv6_dns>
    • <ipv6_dns> 替换为特定于子网的 DNS 名称服务器。

7.7. 配置 undercloud 网络接口

undercloud.conf 文件中包含自定义网络配置,以使用特定的网络功能安装 undercloud。例如,一些接口可能没有 DHCP。在这种情况下,您必须在 undercloud.conf 文件中禁用这些接口的 DHCP,以便 os-net-config 可在 undercloud 安装过程中应用配置。

步骤

  1. 登录 undercloud 主机。
  2. 创建新文件 undercloud-os-net-config.yaml,并包含所需的网络配置。

    如需更多信息,请参阅 网络接口参考

    下面是一个示例:

    network_config:
    - name: br-ctlplane
      type: ovs_bridge
      use_dhcp: false
      dns_servers:
      - 192.168.122.1
      domain: lab.example.com
      ovs_extra:
      - "br-set-external-id br-ctlplane bridge-id br-ctlplane"
      addresses:
      - ip_netmask: 172.20.0.1/26
      members:
      - type: interface
        name: nic2

    要为特定接口创建网络绑定,请使用以下示例:

    network_config:
    - name: br-ctlplane
      type: ovs_bridge
      use_dhcp: false
      dns_servers:
      - 192.168.122.1
      domain: lab.example.com
      ovs_extra:
      - "br-set-external-id br-ctlplane bridge-id br-ctlplane"
      addresses:
      - ip_netmask: 172.20.0.1/26
      members:
      - name: bond-ctlplane
        type: linux_bond
        use_dhcp: false
        bonding_options: "mode=active-backup"
        mtu: 1500
        members:
        - type: interface
          name: nic2
        - type: interface
          name: nic3
  3. undercloud-os-net-config.yaml 文件的路径包含在 undercloud.conf 文件的 net_config_override 参数中:

    [DEFAULT]
    ...
    net_config_override=undercloud-os-net-config.yaml
    ...
    注意

    director 使用您在 net_config_override 参数中包含的文件作为模板来生成 /etc/os-net-config/config.yaml 文件。os-net-config 管理您在模板中定义的接口,因此您必须在此文件中执行所有 undercloud 网络接口自定义。

  4. 安装 undercloud。

验证

  • 在 undercloud 安装成功完成后,验证 /etc/os-net-net-config/config.yaml 文件是否包含相关配置:

    network_config:
    - name: br-ctlplane
      type: ovs_bridge
      use_dhcp: false
      dns_servers:
      - 192.168.122.1
      domain: lab.example.com
      ovs_extra:
      - "br-set-external-id br-ctlplane bridge-id br-ctlplane"
      addresses:
      - ip_netmask: 172.20.0.1/26
      members:
      - type: interface
        name: nic2

7.8. 安装 director

完成以下步骤以安装 director 并执行一些基本安装后任务。

步骤

  1. 运行以下命令,以在 undercloud 上安装 director:

    [stack@director ~]$ openstack undercloud install

    此命令会启动 director 配置脚本。director 安装附加软件包并根据 undercloud.conf 中的配置来配置其服务。这个脚本会需要一些时间来完成。

    此脚本会生成两个文件:

    • /home/stack/tripleo-deploy/undercloud/tripleo-undercloud-passwords.yaml - director 服务的所有密码列表。
    • /home/stack/stackrc - 一组初始化变量,可帮助您访问 director 命令行工具。
  2. 此脚本还会自动启动所有的 OpenStack Platform 服务容器。您可以使用以下命令来检查已启用的容器:

    [stack@director ~]$ sudo podman ps
  3. 运行以下命令初始化 stack 用户来使用命令行工具:

    [stack@director ~]$ source ~/stackrc

    提示现在指示 OpenStack 命令对 undercloud 进行验证并执行;

    (undercloud) [stack@director ~]$

director 的安装已完成。您现在可以使用 director 命令行工具了。

7.9. 为 overcloud 节点获取镜像

director 需要几个磁盘镜像用于置备 overcloud 节点:

  • 一个内省内核和 ramdisk 用于通过 PXE 引导进行裸机系统内省。
  • 一个部署内核和 ramdisk 用于系统置备和部署。
  • overcloud 内核、ramdisk 和完整镜像形成 director 写入节点硬盘的基本 overcloud 系统。

您可以获取并安装您需要的镜像。在不想运行其他 Red Hat OpenStack Platform (RHOSP)服务或消耗您的一项订阅授权时,您还可以获取并安装基本镜像来置备裸机操作系统。

7.9.1. 安装 overcloud 镜像

您的 Red Hat OpenStack Platform (RHOSP)安装包括了为 director 提供 overcloud-hardened-uefi-full.qcow2 overcloud 镜像的软件包。此镜像是使用默认 CPU 架构 x86-64 部署 overcloud 所必需的。将此镜像导入到 director 也会在 director PXE 服务器上安装内省镜像。

流程

  1. stack 用户的身份登录 undercloud。
  2. Source stackrc 文件:

    [stack@director ~]$ source ~/stackrc
  3. 安装 rhosp-director-images-uefi-x86_64rhosp-director-images-ipa-x86_64 软件包:

    (undercloud) [stack@director ~]$ sudo dnf install rhosp-director-images-uefi-x86_64 rhosp-director-images-ipa-x86_64
  4. 在 stack 用户的主目录 /home/ stack / images 中创建 images 目录:

    (undercloud) [stack@director ~]$ mkdir /home/stack/images

    如果目录已存在,请跳过这一步。

  5. 将镜像存档提取到 images 目录中:

    (undercloud) [stack@director ~]$ cd ~/images
    (undercloud) [stack@director images]$ for i in /usr/share/rhosp-director-images/ironic-python-agent-latest.tar /usr/share/rhosp-director-images/overcloud-hardened-uefi-full-latest.tar; do tar -xvf $i; done
  6. 将镜像导入 director:

    (undercloud) [stack@director images]$ openstack overcloud image upload --image-path /home/stack/images/

    此命令将镜像格式从 QCOW 转换为 RAW,并提供镜像上传进度状态的详细更新。

  7. 验证 overcloud 镜像是否已复制到 /var/lib/ironic/images/ 中:

    (undercloud) [stack@director images]$ ls -l /var/lib/ironic/images/
    total 1955660
    -rw-r--r--. 1 root 42422 40442450944 Jan 29 11:59 overcloud-hardened-uefi-full.raw
  8. 验证 director 是否已将内省 PXE 镜像复制到 /var/lib/ironic/httpboot

    (undercloud) [stack@director images]$ ls -l /var/lib/ironic/httpboot
    total 417296
    -rwxr-xr-x. 1 root  root    6639920 Jan 29 14:48 agent.kernel
    -rw-r--r--. 1 root  root  420656424 Jan 29 14:48 agent.ramdisk
    -rw-r--r--. 1 42422 42422       758 Jan 29 14:29 boot.ipxe
    -rw-r--r--. 1 42422 42422       488 Jan 29 14:16 inspector.ipxe

7.9.2. 最小 overcloud 镜像

如果您不希望运行其他 Red Hat OpenStack Platform (RHOSP)服务或消耗您的一项订阅授权,您可以使用 overcloud-minimal 镜像来置备裸机操作系统。

您的 RHOSP 安装包括 overcloud-minimal 软件包,它为您提供了 director 的以下 overcloud 镜像:

  • overcloud-minimal
  • overcloud-minimal-initrd
  • overcloud-minimal-vmlinuz

流程

  1. stack 用户的身份登录 undercloud。
  2. Source stackrc 文件:

    [stack@director ~]$ source ~/stackrc
  3. 安装 overcloud-minimal 软件包:

    (undercloud) [stack@director ~]$ sudo dnf install rhosp-director-images-minimal
  4. 将镜像存档解包到 stack 用户主目录 (/home/stack/images) 中的 images 目录中:

    (undercloud) [stack@director ~]$ cd ~/images
    (undercloud) [stack@director images]$ tar xf /usr/share/rhosp-director-images/overcloud-minimal-latest-17.0.tar
  5. 将镜像导入 director:

    (undercloud) [stack@director images]$ openstack overcloud image upload --image-path /home/stack/images/ --image-type os --os-image-name overcloud-minimal.qcow2

    该命令提供镜像上传进度状态的更新:

    Image "file:///var/lib/ironic/images/overcloud-minimal.vmlinuz" was copied.
    +---------------------------------------------------------+-------------------+----------+
    |                           Path                          |        Name       |   Size   |
    +---------------------------------------------------------+-------------------+----------+
    | file:///var/lib/ironic/images/overcloud-minimal.vmlinuz | overcloud-minimal | 11172880 |
    +---------------------------------------------------------+-------------------+----------+
    Image "file:///var/lib/ironic/images/overcloud-minimal.initrd" was copied.
    +--------------------------------------------------------+-------------------+----------+
    |                          Path                          |        Name       |   Size   |
    +--------------------------------------------------------+-------------------+----------+
    | file:///var/lib/ironic/images/overcloud-minimal.initrd | overcloud-minimal | 63575845 |
    +--------------------------------------------------------+-------------------+----------+
    Image "file:///var/lib/ironic/images/overcloud-minimal.raw" was copied.
    +-----------------------------------------------------+-------------------+------------+
    |                         Path                        |        Name       |    Size    |
    +-----------------------------------------------------+-------------------+------------+
    | file:///var/lib/ironic/images/overcloud-minimal.raw | overcloud-minimal | 2912878592 |
    +-----------------------------------------------------+-------------------+------------+

7.10. 更新 undercloud 配置

如果需要更改 undercloud 配置以适应新要求,则可在安装后更改 undercloud 配置,请编辑相关配置文件并重新运行 openstack undercloud install 命令。

步骤

  1. 修改 undercloud 配置文件。例如,编辑 undercloud.conf 文件并将 idrac 硬件类型添加到已启用硬件类型列表中:

    enabled_hardware_types = ipmi,redfish,idrac
  2. 运行 openstack undercloud install 命令以使用新更改刷新 undercloud:

    [stack@director ~]$ openstack undercloud install

    等待命令运行完成。

  3. 初始化 stack 用户以使用命令行工具:

    [stack@director ~]$ source ~/stackrc

    提示现在指示 OpenStack 命令对 undercloud 进行验证并执行:

    (undercloud) [stack@director ~]$
  4. 确认 director 已应用新配置。在此示例中,检查已启用硬件类型列表:

    (undercloud) [stack@director ~]$ openstack baremetal driver list
    +---------------------+----------------------+
    | Supported driver(s) | Active host(s)       |
    +---------------------+----------------------+
    | idrac               | director.example.com |
    | ipmi                | director.example.com |
    | redfish             | director.example.com |
    +---------------------+----------------------+

undercloud 重新配置完成。

7.11. Undercloud 容器 registry

Red Hat Enterprise Linux 9.0 不再包含 docker-distribution 软件包,该软件包安装了 Docker Registry v2。为了保持兼容性和相同的功能级别,director 安装使用称为 image-serve 的 vhost 创建 Apache Web 服务器以提供 registry。该 registry 也使用禁用了 SSL 的端口 8787/TCP。基于 Apache 的 registry 未容器化,这意味着您必需运行以下命令以重启 registry:

$ sudo systemctl restart httpd

您可以在以下位置找到容器 registry 日志:

  • /var/log/httpd/image_serve_access.log
  • /var/log/httpd/image_serve_error.log。

镜像内容来自 /var/lib/image-serve。此位置使用特定目录布局和 apache 配置来实施 registry REST API 的拉取功能。

基于 Apache 的 registry 不支持 podman pushbuildah push 命令,这意味着您无法使用传统方法推送容器镜像。要在部署过程中修改镜像,请使用容器准备工作流,如 ContainerImagePrepare 参数。要管理容器镜像,请使用容器管理命令:

OpenStack tripleo 容器镜像列表
列出 registry 上存储的所有镜像。
OpenStack tripleo 容器镜像显示
显示 registry 上特定镜像的元数据。
OpenStack tripleo container image push
将镜像从远程 registry 推送到 undercloud registry。
OpenStack tripleo container image delete
从 registry 中删除镜像。

第 8 章 规划您的 overcloud

以下部分包含在规划 Red Hat OpenStack Platform(RHOSP)环境的各个方面的指导信息。这包括定义节点角色、规划您的网络拓扑结构和存储。

重要

部署 overcloud 节点后,请勿重命名这些节点。在部署后重命名节点会导致实例管理问题。

8.1. 节点角色

director 包含以下默认节点类型用于构建 overcloud:

Controller

提供用于控制环境的关键服务。它包括仪表板服务 (horizon)、认证服务 (keystone)、镜像存储服务 (glance)、联网服务 (neutron)、编配服务 (heat) 以及高可用性服务。Red Hat OpenStack Platform(RHOSP)环境需要三个 Controller 节点以实现高可用生产级环境。

注意

将只有一个 Controller 节点的环境用于测试目的,不应该用于生产环境。不支持由两个 Controller 节点或由三个以上 Controller 节点组成的环境。

计算
用作虚拟机监控程序并包含在环境中运行虚拟机所需的处理能力的物理服务器。基本 RHOSP 环境需要至少一个 Compute 节点。
Ceph Storage
提供 Red Hat Ceph Storage 的一个主机。额外的 Ceph Storage 主机可以在一个集群中扩展。这个部署角色是可选的。
Swift Storage
为 OpenStack Object Storage (swift) 服务提供外部对象存储的主机。这个部署角色是可选的。

下表包含一些不同 overcloud 的示例并为每个场景定义节点类型。

表 8.1. 场景的节点部署角色
 

Controller

计算

Ceph 存储

Swift Storage

总计

小型 overcloud

3

1

-

-

4

中型 overcloud

3

3

-

-

6

带有额外对象存储的中型 overcloud

3

3

-

3

9

带有 Ceph Storage 集群的中型 overcloud

3

3

3

-

9

此外,还需思考是否要将各个服务划分成不同的自定义角色。有关可组合角色架构的更多信息,请参阅 Director 安装和使用指南中的"可组合服务和自定义角色 "。

表 8.2. 用于概念验证部署的节点部署角色
 

undercloud

Controller

计算

Ceph Storage

总计

概念验证

1

1

1

1

4

警告

Red Hat OpenStack Platform 在第 2 天运维中维护一个可正常运行的 Ceph Storage 集群。因此,在少于三个 MON 或三个存储节点的部署中,无法进行某些第 2 天运维,如 Ceph Storage 集群的升级或次要更新。如果使用单个 Controller 节点或单个 Ceph Storage 节点,则第 2 天运维将失败。

8.2. Overcloud 网络

规划环境的网络拓扑和子网非常重要,它可以确保映射角色和服务,以使其可以正确地相互通信。Red Hat OpenStack Platform (RHOSP) 使用 Openstack Networking (neutron) 服务,此服务可自主运行,并可管理基于软件的网络、静态和浮动 IP 地址以及 DHCP。

默认情况下,director 配置节点以使用 Provisioning/Control Plane 获得连接。不过,可以将网络流量隔离到一系列的可组合网络,供您自定义和分配服务。

在典型的 RHOSP 安装中,网络类型的数量通常会超过物理网络链路的数量。为了可以把所有网络都连接到正确的主机,overcloud 使用 VLAN 标记(VLAN tagging)来为每个接口提供多个网络。大多数网络都是隔离的子网,但有些网络需要第 3 层网关来提供路由用于互联网访问或基础架构网络连接。如果使用 VLAN 来隔离网络流量类型,则必需使用支持 802.1Q 标准的交换机来提供 tagged VLAN。

注意

我们推荐,即使在部署时使用了禁用隧道功能的 neutron VLAN,您最好仍然部署一个项目网络(利用 GRE 或 VXLAN 进行隧道连接)。这只需要在部署时进行一些微小的改变,便可为以后使用网络隧道功能(如用于 utility 网络或 virtualization 网络)留下选择余地。您仍然需要使用 VLAN 创建租户网络,但同时也可为特殊用途网络创建 VXLAN 隧道,而不需要消耗租户 VLAN。VXLAN 功能可以添加到带有租户 VLAN 的部署中,而租户 VLAN 却无法在不对系统运行造成干扰的情况下添加到现有的 overcloud 中。

director 还包括一组模板,可用于使用隔离的可组合网络配置 NIC。以下配置为默认配置:

  • 单 NIC 配置 - 一个 NIC 在原生 VLAN 中用于 Provisioning 网络,并用于 tagged VLAN(使用子网处理不同的 overcloud 网络类型)。
  • 绑定 NIC 配置 - 一个 NIC 在原生 VLAN 中用于 Provisioning 网络,tagged VLAN 绑定中的两个 NIC 用于不同的 overcloud 网络类型。
  • 多 NIC 配置 - 每个 NIC 都使用一个子网来分别处理 overcloud 中不同的网络类型。

您也可以创建自己的模板来映射特定的 NIC 配置。

在考虑网络配置时,以下详细信息也很重要:

  • 在 overcloud 创建过程中,在所有 overcloud 机器间使用同一个名称来代表 NIC。理想情况下,您应该在每个 overcloud 节点上对每个相关的网络都使用相同的 NIC 来避免混淆。例如,Provisioning 网络使用主(primary)NIC,OpenStack 服务使用从(secondary)NIC。
  • 设置所有 overcloud 系统为从 Provisioning NIC 进行 PXE 引导,并禁用通过外部 NIC 和系统上的任何其他 NIC 进行 PXE 引导。另外,还需要确保 Provisioning NIC 在 PXE 引导设置中位于引导顺序的最上面(在硬盘和 CD/DVD 驱动器之前)。
  • 所有 overcloud 裸机系统都需要一个受支持的电源管理接口,如智能平台管理接口 (IPMI),以便 director 能够控制每个节点的电源管理。
  • 请记录下每个 overcloud 系统的以下信息:Provisioning NIC 的 MAC 地址、IPMI NIC 的 IP 地址、IPMI 用户名和 IPMI 密码。稍后配置 overcloud 节点时,这些信息很有用。
  • 如果一个实例必须可以被外部互联网访问,则需要从公共网络中分配一个浮动 IP 地址,并把浮动 IP 和这个实例相关联。这个实例仍然会保留它的私人 IP,但网络流量可以通过 NAT 到达浮动 IP 地址。请注意,一个浮动 IP 地址只能分配给一个接口,而不能分配给多个私人 IP 地址。但是,浮动 IP 地址只保留给一个租户使用,这意味着租户可以根据需要将浮动 IP 地址与特定实例相关联或取消关联。此配置会使您的基础架构暴露于外部互联网,您必须使用了适当的安全保护措施。
  • 为了减少 Open vSwitch 中出现网络环路的风险,只能有一个接口或一个绑定作为给定网桥的成员。如果需要多个绑定或接口,可以配置多个网桥。
  • 红帽建议使用 DNS 主机名解析,以便您的 overcloud 节点能够连接到外部服务,如 Red Hat Content Delivery Network 和网络时间服务器。
  • 红帽建议将置备接口、外部接口和任何浮动 IP 接口保留在 1500 的默认 MTU 。否则可能会发生连接问题。这是因为路由器通常无法跨第 3 层边界转发巨型帧。
注意

如果您使用 Red Hat Virtualization (RHV),则可以对 overcloud control plane 进行虚拟化。如需更多信息,请参阅创建虚拟化 control planes

8.3. Overcloud 存储

您可以使用 Red Hat Ceph Storage 节点作为 overcloud 环境的后端存储。您可以将 overcloud 配置为使用 Ceph 节点进行以下类型的存储:

镜像
Image 服务(glance)管理用于创建虚拟机实例的镜像。镜像是不可变二进制 Blob。您可以使用镜像服务将镜像存储在 Ceph 块设备中。有关支持的镜像格式的详情,请参考 创建和管理镜像 中的镜像服务(glance)
Block Storage 服务(cinder)管理实例的持久性存储卷。块存储服务卷是块设备。您可以使用卷来引导实例,您可以将卷附加到运行的实例中。您可以使用 Block Storage 服务通过镜像的 copy-on-write clone 来引导虚拟机。
对象(object)
当 overcloud 存储后端是 Red Hat Ceph Storage 时,Ceph 对象网关(RGW)在 Ceph 集群上提供默认的 overcloud 对象存储。如果您的 overcloud 没有 Red Hat Ceph Storage,则 overcloud 将使用对象存储服务(swift)提供对象存储。您可以将 overcloud 节点专用于对象存储服务。当您需要扩展或替换 overcloud 环境中的 Controller 节点,同时需要在一个高可用性集群外保留对象存储时,这将非常有用。
文件系统
共享文件系统服务(manila)管理共享文件系统。您可以使用共享文件系统服务管理由 CephFS 文件系统支持的共享,并使用 Ceph Storage 节点上的数据。
实例磁盘
当您启动实例时,实例磁盘作为文件存储在虚拟机监控程序的实例目录中。默认文件位置为 /var/lib/nova/instances

有关 Ceph Storage 的更多信息,请参阅 Red Hat Ceph Storage 架构指南

8.3.1. overcloud 存储节点的配置注意事项

实例安全性和性能
在使用后端块存储卷的实例上使用 LVM 会导致性能、卷可见性和可用性和数据崩溃问题。使用 LVM 筛选减少可见性、可用性和数据损坏问题。有关更多信息,请参阅存储指南中的 在 overcloud 节点上启用 LVM2 过滤,以及在 cinder 卷上使用 LVM 的红帽知识库解决方案将数据公开给计算主机
本地磁盘分区大小

考虑存储节点的存储和保留要求,以确定以下默认磁盘大小是否满足您的要求:

分区默认大小

/

8GB

/tmp

1GB

/var/log

10GB

/var/log/audit

2GB

/home

1GB

/var

分配所有其他分区后,分配磁盘的剩余大小。

要更改分区的分配磁盘大小,请更新 overcloud-baremetal-deploy.yaml 节点定义文件中的 Ansible_playbooks 定义中的 role_growvols_args 额外 Ansible 变量。有关更多信息,请参阅为 overcloud 置备裸机节点

如果在优化分区大小配置后分区继续填满,则执行以下任务之一:

  • 从受影响的分区手动删除文件。
  • 添加新物理磁盘并将其添加到 LVM 卷组中。如需更多信息,请参阅 配置和管理逻辑卷

    注意

    添加新磁盘需要支持例外。请联系 红帽客户体验与参与团队, 以讨论支持例外(如果适用)或其他选项。

8.4. Overcloud 安全性

OpenStack 平台环境的安全性在一定程度上取决于网络的安全性。遵循网络环境中的良好安全原则,确保正确控制网络访问:

  • 使用网络分段缓解网络移动并隔离敏感数据。扁平网络的安全性要低得多。
  • 限制对服务和端口的访问。
  • 强制执行正确的防火墙规则并使用密码。
  • 确保启用 SELinux。

有关保护系统安全的更多信息,请参阅以下红帽指南:

8.5. Overcloud 高可用性

要部署高度可用的 overcloud,director 将配置多个 Controller、Compute 和 Storage 节点,并以单一集群的形式协同工作。出现节点故障时,根据故障的节点类型来触发自动隔离和重新生成流程。有关 overcloud 高可用性架构和服务的更多信息,请参阅 高可用性部署和用法

注意

不支持在不使用 STONITH 的情况下部署高可用性 overcloud。您必须在高可用性 overcloud 中为作为 Pacemaker 集群一部分的每个节点配置 STONITH 设备。有关 STONITH 和 Pacemaker 的信息,请参阅红帽高可用性集群中的隔离RHEL 高可用性集群的支持策略

您也可以通过 director 为 Compute 实例配置高可用性 (Instance HA)。使用此高可用性机制,可在节点出现故障时在 Compute 节点上自动清空并重新生成实例。对 Instance HA 的要求与一般的 overcloud 要求相同,但必须执行一些附加步骤以准备好环境进行部署。有关 Instance HA 和安装说明的更多信息,请参阅 Compute 实例的高可用性 指南。

8.6. Controller 节点要求

Controller 节点在 Red Hat OpenStack Platform 环境中托管核心服务,如 Dashboard (horizon)、后端数据库服务器、Identity 服务 (keystone) 和高可用性服务。

处理器
支持 Intel 64 或 AMD64 CPU 扩展的 64 位 x86 处理器。
内存

最小内存为 32 GB。不过,建议根据 vCPU 数量(CPU 内核数乘以超线程值)来决定内存大小。使用以下计算确定 RAM 要求:

  • 控制器 RAM 最小值计算:

    • 每个 vCPU 使用 1.5 GB 内存。例如,拥有 48 个 vCPU 的计算机应当具有 72 GB RAM。
  • 控制器 RAM 建议值计算:

    • 每个 vCPU 使用 3 GB 内存。例如,拥有 48 个 vCPU 的计算机应当具有 144 GB RAM。

有关衡量内存要求的更多信息,请参阅红帽客户门户网站上的“高可用性控制器的 Red Hat OpenStack Platform 硬件要求”

磁盘存储和布局

如果 Object Storage 服务 (swift) 不在 Controller 节点上运行,则需要最小 50 GB 的存储。但是,Telemetry 和 Object Storage 服务都安装在 Controller 上,且二者均配置为使用根磁盘。这些默认值适合部署在商用硬件上构建的小型 overcloud。这些环境通常用于概念验证和测试环境。您可以使用这些默认布局,只需最少的规划即可部署 overcloud,但它们只能提供很低的工作负载容量和性能。

然而在企业环境中,默认布局可能造成很大的瓶颈。这是因为 Telemetry 会不断地访问存储资源,导致磁盘 I/O 使用率很高,从而严重影响所有其他 Controller 服务的性能。在这种环境中,必须规划 overcloud 并进行相应的配置。

网络接口卡
最少两个 1 Gbps 网络接口卡。对绑定的接口使用额外的网络接口卡,或代理标记的 VLAN 流量。
电源管理
每个 Controller 节点在服务器的主板上都要有一个受支持的电源管理接口,如智能平台管理接口 (IPMI) 功能。
虚拟化支持
红帽仅在 Red Hat Virtualization 平台上支持虚拟化 Controller 节点。如需更多信息,请参阅创建虚拟化 control planes

8.7. Compute 节点要求

Compute 节点负责在启动虚拟机实例后运行虚拟机实例。Compute 节点需要支持硬件虚拟化的裸机系统。Compute 节点还必须有足够的内存和磁盘空间来支持其托管的虚拟机实例的要求。

处理器
支持 Intel 64 或 AMD64 CPU 扩展并启用了 AMD-V 或 Intel VT 硬件虚拟扩展的 64 位 x86 处理器。我们推荐所使用的处理器最少有 4 个内核。
内存

主机操作系统最少需要 6 GB RAM,以及满足以下注意事项的额外内存:

  • 添加您要提供给虚拟机实例的额外内存。
  • 添加额外内存以在主机上运行特殊功能或其他资源,如附加内核模块、虚拟交换机、监控解决方案和其他额外的后台任务。
  • 如果要使用非统一内存访问 (NUMA),红帽建议每个 CPU 插槽节点使用 8GB,或如果您有 256 GB 的物理 RAM,则建议每插槽节点使用 16GB。
  • 至少配置 4 GB 交换空间。
磁盘空间
最少具有 50GB 可用磁盘空间。
网络接口卡
最少一个 1 Gbps 网络接口卡。对绑定的接口使用额外的网络接口卡,或代理标记的 VLAN 流量。
电源管理
每个 Compute 节点在服务器的主板上都要有一个受支持的电源管理接口,如智能平台管理接口 (IPMI) 功能。

8.8. Red Hat Ceph Storage 节点要求

使用 director 创建 Ceph Storage 集群还有额外的节点要求:

  • Red Hat Ceph Storage 硬件指南 中提供了硬件要求,包括处理器、内存和网络接口卡选择和磁盘布局。
  • 每个 Ceph Storage 节点都需要在服务器的主板上有一个受支持的电源管理接口,如智能平台管理接口(IPMI)功能。
  • 每个 Ceph Storage 节点必须至少有两个磁盘。RHOSP director 使用 cephadm 部署 Ceph Storage 集群。cephadm 功能不支持在节点的根磁盘上安装 Ceph OSD。

8.9. Ceph Storage 节点和 RHEL 兼容性

RHEL 9.0 支持 RHOSP 17.0。但是,映射到 Ceph Storage 角色的主机会更新到最新的主 RHEL 版本。在升级前,请参阅红帽知识库文章 Red Hat Ceph Storage: 支持的配置

8.10. Object Storage 节点要求

Object Storage 节点提供 overcloud 的对象存储层。Object Storage 代理安装在 Controller 节点上。存储层需要每个节点上有多个磁盘的裸机节点。

处理器
支持 Intel 64 或 AMD64 CPU 扩展的 64 位 x86 处理器。
内存
内存要求取决于存储空间大小。每 1TB 硬盘空间需要至少 1GB 内存。要获得最佳性能,建议每 1 TB 硬盘空间使用 2 GB,特别是用于文件小于 100GB 的工作负载。
磁盘空间

存储要求取决于工作负载需要的容量。建议使用 SSD 驱动器来存储帐户和容器数据。帐户和容器数据与对象的容量比约为 1%。例如,对于每 100TB 硬盘容量,请提供 1TB 容量来存储帐户和容器数据。

不过,这还取决于所存储数据的类型。如果主要是要存储小对象,则提供更多 SSD 空间。而对于大对象(视频和备份等),可提供较少的 SSD 空间。

磁盘配置

建议的节点配置需要类似以下示例的磁盘布局:

  • /dev/sda - 根磁盘。director 把主 overcloud 镜像复制到该磁盘。
  • /dev/sdb - 用于帐户数据。
  • /dev/sdc - 用于容器数据。
  • /dev/sdd 及后续 - 对象服务器磁盘。可以根据您的存储需要使用多个磁盘。
网络接口卡
最少两个 1 Gbps 网络接口卡。对绑定的接口使用额外的网络接口卡,或代理标记的 VLAN 流量。
电源管理
每个 Controller 节点在服务器的主板上都要有一个受支持的电源管理接口,如智能平台管理接口 (IPMI) 功能。

8.11. overcloud 软件仓库

您可以在 Red Hat Enterprise Linux 9.0 上运行 Red Hat OpenStack Platform 17.0。因此,您必须将这些软件仓库的内容锁定到相应的 Red Hat Enterprise Linux 版本。

警告

除这里指定的存储库外,都不支持任何软件仓库。除非建议,除非不要启用除下表中列出的其他产品或存储库,否则您可能遇到依赖软件包问题。请勿启用 Extra Packages for Enterprise Linux (EPEL)。

注意

Satellite 软件仓库不会被列出,因为 RHOSP 17.0 不支持 Satellite。计划在以后的版本中对 Satellite 的支持。只有 Red Hat CDN 作为软件包存储库和容器 registry 支持。NFV 存储库不会被列出,因为 RHOSP 17.0 不支持 NFV。

Controller 节点软件仓库

下表列出了用于 overcloud 中 Controller 节点的核心软件仓库。

名称软件仓库要求说明

Red Hat Enterprise Linux 9 for x86_64 - BaseOS (RPMs) Extended Update Support (EUS)

rhel-9-for-x86_64-baseos-eus-rpms

x86_64 系统的基本操作系统仓库。

Red Hat Enterprise Linux 9 for x86_64 - AppStream (RPMs)

rhel-9-for-x86_64-appstream-eus-rpms

包括 Red Hat OpenStack Platform 的依赖软件包。

Red Hat Enterprise Linux 9 for x86_64 - High Availability (RPMs) Extended Update Support (EUS)

rhel-9-for-x86_64-highavailability-eus-rpms

Red Hat Enterprise Linux 的高可用性工具。

Red Hat OpenStack Platform 17 for RHEL 9 x86_64 (RPMs)

openstack-17-for-rhel-9-x86_64-rpms

Red Hat OpenStack Platform 核心软件仓库。

Red Hat Fast Datapath for RHEL 9 (RPMS)

fast-datapath-for-rhel-9-x86_64-rpms

为 OpenStack Platform 提供 Open vSwitch (OVS) 软件包。

Red Hat Ceph Storage Tools 5 for RHEL 9 x86_64 (RPMs)

rhceph-5-tools-for-rhel-9-x86_64-rpms

Red Hat Ceph Storage 5 for Red Hat Enterprise Linux 9 的工具。

Compute 和 ComputeHCI 节点软件仓库

下表列出了 overcloud 中 Compute 和 ComputeHCI 节点的核心软件仓库。

名称软件仓库要求说明

Red Hat Enterprise Linux 9 for x86_64 - BaseOS (RPMs) Extended Update Support (EUS)

rhel-9-for-x86_64-baseos-eus-rpms

x86_64 系统的基本操作系统仓库。

Red Hat Enterprise Linux 9 for x86_64 - AppStream (RPMs)

rhel-9-for-x86_64-appstream-eus-rpms

包括 Red Hat OpenStack Platform 的依赖软件包。

Red Hat Enterprise Linux 9 for x86_64 - High Availability (RPMs) Extended Update Support (EUS)

rhel-9-for-x86_64-highavailability-eus-rpms

Red Hat Enterprise Linux 的高可用性工具。

Red Hat OpenStack Platform 17 for RHEL 9 x86_64 (RPMs)

openstack-17-for-rhel-9-x86_64-rpms

Red Hat OpenStack Platform 核心软件仓库。

Red Hat Fast Datapath for RHEL 9 (RPMS)

fast-datapath-for-rhel-9-x86_64-rpms

为 OpenStack Platform 提供 Open vSwitch (OVS) 软件包。

Red Hat Ceph Storage Tools 5 for RHEL 9 x86_64 (RPMs)

rhceph-5-tools-for-rhel-9-x86_64-rpms

Red Hat Ceph Storage 5 for Red Hat Enterprise Linux 9 的工具。

Real Time Compute 软件仓库

下表列出了 Real Time Compute (RTC) 功能的软件仓库。

名称软件仓库要求说明

Red Hat Enterprise Linux 9 for x86_64 - Real Time (RPMs)

rhel-9-for-x86_64-rt-rpms

Real Time KVM (RT-KVM) 的软件仓库。包含用于启用实时内核的软件包。对 RT-KVM 为目标的所有 Compute 节点启用此软件仓库。注意:您需要单独订阅 Red Hat OpenStack Platform for Real Time SKU,才能访问此软件仓库。

Ceph Storage 节点软件仓库

下表列出了用于 overcloud 的与 Ceph Storage 有关的软件仓库。

名称软件仓库要求说明

Red Hat Enterprise Linux 9 for x86_64 - BaseOS (RPMs)

rhel-9-for-x86_64-baseos-rpms

x86_64 系统的基本操作系统仓库。

Red Hat Enterprise Linux 9 for x86_64 - AppStream (RPMs)

rhel-9-for-x86_64-appstream-rpms

包括 Red Hat OpenStack Platform 的依赖软件包。

Red Hat OpenStack Platform 17 Director Deployment Tools for RHEL 9 x86_64 (RPMs)

openstack-17-deployment-tools-for-rhel-9-x86_64-rpms

帮助 director 配置 Ceph Storage 节点的软件包。此软件仓库包含在单机 Ceph Storage 订阅中。如果您使用组合的 OpenStack Platform 和 Ceph Storage 订阅,请使用 openstack-17-for-rhel-9-x86_64-rpms 存储库。

Red Hat OpenStack Platform 17 for RHEL 9 x86_64 (RPMs)

openstack-17-for-rhel-9-x86_64-rpms

帮助 director 配置 Ceph Storage 节点的软件包。此软件仓库包含在 OpenStack Platform 和 Ceph Storage 订阅中。如果使用单机 Ceph Storage 订阅,请使用 openstack-17-deployment-tools-for-rhel-9-x86_64-rpms 存储库。

Red Hat Ceph Storage Tools 5 for RHEL 9 x86_64 (RPMs)

rhceph-5-tools-for-rhel-9-x86_64-rpms

提供节点与 Ceph Storage 集群进行通信的工具。

Red Hat Fast Datapath for RHEL 9 (RPMS)

fast-datapath-for-rhel-9-x86_64-rpms

为 OpenStack Platform 提供 Open vSwitch (OVS) 软件包。如果您在 Ceph Storage 节点上使用 OVS,请将此存储库添加到网络接口配置(NIC)模板中。

8.12. 节点置备和配置

您可以使用 OpenStack Bare Metal (ironic)服务或外部工具为 Red Hat OpenStack Platform (RHOSP)环境置备 overcloud 节点。置备节点时,您可以使用 director 配置它们。

使用 OpenStack Bare Metal (ironic) 服务置备
使用 Bare Metal 服务置备 overcloud 节点是标准置备方法。有关更多信息,请参阅置备裸机 overcloud 节点
使用外部工具置备
您可以使用外部工具(如 Red Hat Satellite)来置备 overcloud 节点。如果您要在没有电源管理控制的情况下创建 overcloud,请使用具有 DHCP/PXE 引导限制的网络,或者使用具有不依赖 overcloud-hardened-uefi-full.qcow2 镜像的自定义分区布局的节点。此调配方法不使用 OpenStack Bare Metal 服务(ironic)来管理节点。如需更多信息,请参阅使用预置备节点配置基本 overcloud

第 9 章 可组合服务和自定义角色

overcloud 通常由预定义的角色(如 Controller 节点、计算节点和不同的存储节点类型)的节点组成。每个默认角色都包含 director 节点上的核心 heat 模板集合中定义的一组服务。但是,您也可以创建包含特定服务集合的自定义角色。

您可以使用此灵活性在不同的角色上创建不同服务组合。本章探索自定义角色、可组合服务和使用方法的架构。

9.1. 支持的角色架构

使用自定义角色和可组合服务时有以下架构:

默认构架
使用默认的 roles_data 文件。所有控制器服务都包含在一个 Controller 角色中。
支持的独立角色
使用 /usr/share/openstack-tripleo-heat-templates/roles 中的预定义文件来生成自定义 roles_data 文件。更多信息请参阅 第 9.4 节 “支持的自定义角色”
自定义可组合服务
创建自己的角色,并使用它们生成自定义 roles_data 文件。请注意,测试并验证了有限的可组合服务组合,红帽不支持所有可组合的服务组合。

9.2. 检查 roles_data 文件

roles_data 文件包含 director 部署到节点上的角色的 YAML 格式列表。每个角色都包含组成角色的所有服务的定义。使用以下示例代码片段了解 roles_data 语法:

- name: Controller
  description: |
    Controller role that has all the controller services loaded and handles
    Database, Messaging and Network functions.
  ServicesDefault:
    - OS::TripleO::Services::AuditD
    - OS::TripleO::Services::CACerts
    - OS::TripleO::Services::CephClient
    ...
- name: Compute
  description: |
    Basic Compute Node role
  ServicesDefault:
    - OS::TripleO::Services::AuditD
    - OS::TripleO::Services::CACerts
    - OS::TripleO::Services::CephClient
    ...

核心 heat 模板集合包括一个默认的 roles_data 文件,位于 /usr/share/openstack-tripleo-heat-templates/roles_data.yaml。默认文件包含以下角色类型的定义:

  • Controller
  • Compute
  • BlockStorage
  • ObjectStorage
  • CephStorage.

openstack overcloud deploy 命令在部署过程中包含默认的 roles_data.yaml 文件。但是,您可以使用 -r 参数使用自定义 roles_data 文件覆盖此文件:

$ openstack overcloud deploy --templates -r ~/templates/roles_data-custom.yaml

9.3. 创建 roles_data 文件

虽然您可以手动创建自定义 roles_data 文件,但您也可以使用单独的角色模板自动生成文件。director 提供 openstack overcloud role generate 命令来加入多个预定义角色,并自动生成自定义 roles_data 文件。

流程

  1. 列出默认角色模板:

    $ openstack overcloud role list
    BlockStorage
    CephStorage
    Compute
    ComputeHCI
    ComputeOvsDpdk
    Controller
    ...
  2. 查看角色定义:

    $ openstack overcloud role show Compute
  3. 生成包含 ControllerComputeNetworker 角色的自定义 roles_data.yaml 文件:

    $ openstack overcloud roles \
     generate -o <custom_role_file> \
     Controller Compute Networker
    • <custom_role_file > 替换为要生成的新角色文件的名称和位置,如 /home/stack/templates/roles_data.yaml

      注意

      ControllerNetworker 角色包含相同的网络代理。这意味着网络服务从 Controller 角色扩展到 Networker 角色,overcloud 会平衡 ControllerNetworker 节点之间网络服务的负载。

      要使此 Networker 角色独立,您可以创建自己的自定义角色角色,以及您需要的任何其他角色。这可让您从您自己的自定义角色生成 roles_data.yaml 文件。

  4. roles 目录从核心 heat 模板集合复制到 stack 用户的主目录:

    $ cp -r /usr/share/openstack-tripleo-heat-templates/roles/. /home/stack/templates/roles/
  5. 在此目录中添加或修改自定义角色文件。将 --roles-path 选项与任何 role 子命令一起使用,将这个目录用作自定义角色的源:

    $ openstack overcloud role \
     generate -o my_roles_data.yaml \
     --roles-path /home/stack/templates/roles \
     Controller Compute Networker

    此命令从 ~/roles 目录中的单独角色生成单个 my_roles_data.yaml 文件。

注意

默认角色集合还包含 ControllerOpenstack 角色,该角色不包括 Networker、Message、database 角色的服务。 您可以将 ControllerOpenstack 与独立 Networker、messaging 和数据库角色结合使用。

9.4. 支持的自定义角色

下表包含有关可用自定义角色的信息。您可以在 /usr/share/openstack-tripleo-heat-templates/roles 目录中找到自定义角色模板。

角色描述File

BlockStorage

OpenStack Block Storage (cinder)节点。

BlockStorage.yaml

CephAll

完整的单机 Ceph Storage 节点。包括 OSD、MON、对象网关(RGW)、对象操作(MDS)、管理器(MGR)和 RBD 镜像功能。

CephAll.yaml

CephFile

独立 scale-out Ceph Storage 文件角色。包括 OSD 和对象操作(MDS)。

CephFile.yaml

CephObject

独立 scale-out Ceph Storage 对象角色。包括 OSD 和对象网关(RGW)。

CephObject.yaml

CephStorage

Ceph Storage OSD 节点角色。

CephStorage.yaml

ComputeAlt

备用 Compute 节点角色。

ComputeAlt.yaml

ComputeDVR

DVR 启用的 Compute 节点角色。

ComputeDVR.yaml

ComputeHCI

具有超融合基础架构的计算节点。包括计算和 Ceph OSD 服务。

ComputeHCI.yaml

ComputeInstanceHA

Compute Instance HA 节点角色。与 environments/compute-instanceha.yaml 的环境文件 一起使用。

ComputeInstanceHA.yaml

ComputeLiquidio

具有 Cavium Liquidio 智能 NIC 的计算节点。

ComputeLiquidio.yaml

ComputeOvsDpdkRT

计算 OVS DPDK RealTime 角色。

ComputeOvsDpdkRT.yaml

ComputeOvsDpdk

计算 OVS DPDK 角色。

ComputeOvsDpdk.yaml

ComputeRealTime

为实时行为进行了优化的 compute 角色。使用此角色时,必须 overcloud-realtime-compute 镜像可用,并且角色特定的参数 IsolCpusListNovaComputeCpuDedicatedSetNovaComputeCpuSharedSet 根据实时计算节点的硬件设置。

ComputeRealTime.yaml

ComputeSriovRT

计算 SR-IOV RealTime 角色。

ComputeSriovRT.yaml

ComputeSriov

计算 SR-IOV 角色。

ComputeSriov.yaml

Compute

标准 Compute 节点角色。

Compute.yaml

ControllerAllNovaStandalone

不包含数据库、消息传递、网络和 OpenStack Compute (nova)控制组件的控制器角色。使用 Database, Messaging, Networker, 和Novacontrol 角色的组合。

ControllerAllNovaStandalone.yaml

ControllerNoCeph

载入核心 Controller 服务的控制器角色,但没有 Ceph Storage (MON) 组件。此角色处理数据库、消息传递和网络功能,但不处理任何 Ceph 存储功能。

ControllerNoCeph.yaml

ControllerNovaStandalone

不包含 OpenStack Compute (nova)控制组件的控制器角色。与 Novacontrol 角色结合使用。

ControllerNovaStandalone.yaml

ControllerOpenStack

不包含数据库、消息传递和网络组件的控制器角色。与 Database, Messaging, 和 Networker 角色结合使用。

ControllerOpenstack.yaml

ControllerStorageNfs

载入所有核心服务的控制器角色,并使用 Ceph NFS。此角色处理数据库、消息传递和网络功能。

ControllerStorageNfs.yaml

Controller

加载所有核心服务的控制器角色。此角色处理数据库、消息传递和网络功能。

Controller.yaml

ControllerSriov (ML2/OVN)

与普通的 Controller 角色相同,但部署了 OVN 元数据代理。

ControllerSriov.yaml

数据库

独立数据库角色。使用 Pacemaker 将数据库作为 Galera 集群进行管理。

Database.yaml

HciCephAll

具有超融合基础架构和所有 Ceph Storage 服务的计算节点。包括 OSD、MON、对象网关(RGW)、对象操作(MDS)、管理器(MGR)和 RBD 镜像功能。

HciCephAll.yaml

HciCephFile

具有超融合基础架构和 Ceph Storage 文件服务的计算节点。包括 OSD 和对象操作(MDS)。

HciCephFile.yaml

HciCephMon

具有超融合基础架构和 Ceph 存储块存储服务的计算节点。包括 OSD、MON 和管理器。

HciCephMon.yaml

HciCephObject

具有超融合基础架构和 Ceph Storage 对象服务的计算节点。包括 OSD 和对象网关(RGW)。

HciCephObject.yaml

IronicConductor

ironic Conductor 节点角色。

IronicConductor.yaml

消息传递

独立消息传递角色。使用 Pacemaker 管理的 RabbitMQ。

Messaging.yaml

Networker

独立网络角色。自行运行 OpenStack 网络(neutron)代理。如果您的部署使用 ML2/OVN 机制驱动程序,请参阅使用 ML2/OVN 部署自定义 角色中的其他步骤。

Networker.yaml

NetworkerSriov

与正常的 Networker 角色相同,但部署了 OVN 元数据代理。请参阅使用 ML2/OVN 部署自定义 角色中的其他步骤。

NetworkerSriov.yaml

Novacontrol

独立 nova-control 角色,以自行运行 OpenStack Compute (nova)控制代理。

Novacontrol.yaml

ObjectStorage

Swift Object Storage 节点角色。

ObjectStorage.yaml

Telemetry

包含所有指标和警报服务的 Telemetry 角色。

Telemetry.yaml

9.5. 检查角色参数

每个角色都包含以下参数:

name
(必需) 角色的名称,这是没有空格或特殊字符的纯文本名称。检查所选名称不会导致与其他资源冲突。例如,使用 Networker 作为名称而不是 Network
description
(可选) 角色的纯文本描述。
tags

(可选) 定义角色属性的标签的 YAML 列表。使用此参数定义主角色,带有 controllerprimary 标签:

- name: Controller
  ...
  tags:
    - primary
    - controller
  ...
重要

如果没有标记主角色,您定义的第一个角色将变为主角色。确保此角色是 Controller 角色。

网络

您要在角色上配置的网络的 YAML 列表或字典。如果使用 YAML 列表,请列出每个可组合网络:

  networks:
    - External
    - InternalApi
    - Storage
    - StorageMgmt
    - Tenant

如果您使用一个字典,请将每个网络映射到可组合网络中的一个特定的子网

  networks:
    External:
      subnet: external_subnet
    InternalApi:
      subnet: internal_api_subnet
    Storage:
      subnet: storage_subnet
    StorageMgmt:
      subnet: storage_mgmt_subnet
    Tenant:
      subnet: tenant_subnet

默认网络包括 External, InternalApi, Storage, StorageMgmt, Tenant, 和 Management

CountDefault
(可选) 定义要为此角色部署的默认节点数。
HostnameFormatDefault

(可选) 定义角色的默认主机名格式。默认命名约定使用以下格式:

[STACK NAME]-[ROLE NAME]-[NODE ID]

例如,默认 Controller 节点被命名为:

overcloud-controller-0
overcloud-controller-1
overcloud-controller-2
...
disable_constraints
(可选) 定义在使用 director 部署时是否禁用 OpenStack Compute (nova)和 OpenStack Image Storage (glance)约束。当您使用预置备节点部署 overcloud 时,请使用此参数。有关更多信息,请参阅 Director 安装和使用指南中的使用预置备节点配置基本 overcloud
update_serial

(可选) 定义 OpenStack 更新选项期间要同时更新的节点数量。在默认的 roles_data.yaml 文件中:

  • Controller、Object Storage 和 Ceph Storage 节点的默认值为 1
  • Compute 和 Block Storage 节点的默认值为 25

如果您从自定义角色中省略此参数,则默认为 1

ServicesDefault
(可选) 定义要包含在节点上的默认服务列表。更多信息请参阅 第 9.8 节 “检查可组合服务架构”

您可以使用这些参数创建新角色,并定义要包含在角色中的服务。

openstack overcloud deploy 命令将 roles_data 文件中的参数集成到一些基于 Jinja2 的模板中。例如,在某些时候,overcloud.j2.yaml heat 模板会迭代 roles_data.yaml 中的角色列表,并创建特定于每个相应角色的参数和资源。

例如,以下片段包含 overcloud.j2.yaml heat 模板中各个角色的资源定义:

  {{role.name}}:
    type: OS::Heat::ResourceGroup
    depends_on: Networks
    properties:
      count: {get_param: {{role.name}}Count}
      removal_policies: {get_param: {{role.name}}RemovalPolicies}
      resource_def:
        type: OS::TripleO::{{role.name}}
        properties:
          CloudDomain: {get_param: CloudDomain}
          ServiceNetMap: {get_attr: [ServiceNetMap, service_net_map]}
          EndpointMap: {get_attr: [EndpointMap, endpoint_map]}
...

此片段演示基于 Jinja2 的模板如何纳入 {{role.name}} 变量,以将每个角色的名称定义为 OS::114::ResourceGroup 资源。这依次使用 roles_data 文件中的每个 name 参数来命名每个对应的 OS::114::ResourceGroup 资源。

9.6. 创建新角色

您可以根据部署的要求,使用可组合服务架构将角色分配给裸机节点。例如,您可能希望仅创建一个新的 Horizon 角色来仅托管 OpenStack 控制面板(horizon)。

流程

  1. stack 用户的身份登录 undercloud。
  2. Source stackrc 文件:

    [stack@director ~]$ source ~/stackrc
  3. roles 目录从核心 heat 模板集合复制到 stack 用户的主目录:

    $ cp -r /usr/share/openstack-tripleo-heat-templates/roles/. /home/stack/templates/roles/
  4. home/stack/templates/roles 中创建一个名为 Horizon.yaml 的新文件。
  5. Horizon.yaml 中添加以下配置,以创建一个包含基本和核心 OpenStack Dashboard 服务的新 Horizon 角色:

    - name: Horizon 1
      CountDefault: 1 2
      HostnameFormatDefault: '%stackname%-horizon-%index%'
      ServicesDefault:
        - OS::TripleO::Services::CACerts
        - OS::TripleO::Services::Kernel
        - OS::TripleO::Services::Ntp
        - OS::TripleO::Services::Snmp
        - OS::TripleO::Services::Sshd
        - OS::TripleO::Services::Timezone
        - OS::TripleO::Services::TripleoPackages
        - OS::TripleO::Services::TripleoFirewall
        - OS::TripleO::Services::SensuClient
        - OS::TripleO::Services::FluentdClient
        - OS::TripleO::Services::AuditD
        - OS::TripleO::Services::Collectd
        - OS::TripleO::Services::MySQLClient
        - OS::TripleO::Services::Apache
        - OS::TripleO::Services::Horizon
    1
    name 参数设置为自定义角色的名称。自定义角色名称的最大长度为 47 个字符。
    2
    CountDefault 参数设置为 1,以便默认 overcloud 始终包含 Horizon 节点。
  6. 可选:如果要扩展现有 overcloud 中的服务,请在 Controller 角色中保留现有服务。如果要创建新 overcloud,并且希望 OpenStack 控制面板保留在独立角色上,请从 Controller 角色定义中删除 OpenStack Dashboard 组件:

    - name: Controller
      CountDefault: 1
      ServicesDefault:
        ...
        - OS::TripleO::Services::GnocchiMetricd
        - OS::TripleO::Services::GnocchiStatsd
        - OS::TripleO::Services::HAproxy
        - OS::TripleO::Services::HeatApi
        - OS::TripleO::Services::HeatApiCfn
        - OS::TripleO::Services::HeatApiCloudwatch
        - OS::TripleO::Services::HeatEngine
        # - OS::TripleO::Services::Horizon          # Remove this service
        - OS::TripleO::Services::IronicApi
        - OS::TripleO::Services::IronicConductor
        - OS::TripleO::Services::Iscsid
        - OS::TripleO::Services::Keepalived
        ...
  7. 生成一个名为 roles_data_horizon.yaml 的新角色数据文件,其中包含 ControllerComputeHorizon 角色:

    (undercloud)$ openstack overcloud roles \
     generate -o /home/stack/templates/roles_data_horizon.yaml \
     --roles-path /home/stack/templates/roles \
     Controller Compute Horizon
  8. 可选:编辑 overcloud-baremetal-deploy.yaml 节点定义文件以配置 Horizon 节点的放置:

    - name: Controller
      count: 3
      instances:
      - hostname: overcloud-controller-0
        name: node00
      ...
    - name: Compute
      count: 3
      instances:
      - hostname: overcloud-novacompute-0
        name: node04
      ...
    - name: Horizon
      count: 1
      instances:
      - hostname: overcloud-horizon-0
        name: node07

9.7. 指南和限制

请注意可组合角色架构的以下准则和限制:

对于不是由 Pacemaker 管理的服务:

  • 您可以为独立自定义角色分配服务。
  • 您可以在初始部署后创建额外的自定义角色,并进行部署以扩展现有服务。

对于由 Pacemaker 管理的服务:

  • 您可以为独立自定义角色分配 Pacemaker 管理的服务。
  • Pacemaker 具有 16 个节点限制。如果将 Pacemaker 服务(OS::TripleO::Services::Pacemaker)分配给 16 个节点,则后续节点必须使用 Pacemaker 远程服务(OS::TripleO::Services::PacemakerRemote)。您不能在同一角色上具有 Pacemaker 服务和 Pacemaker 远程服务。
  • 不要在不包含 Pacemaker 管理的服务的角色中包含 Pacemaker 服务(OS::TripleO::Services::Pacemaker)。
  • 您不能扩展或缩减包含 OS::TripleO::Services::PacemakerOS::TripleO::Services::PacemakerRemote 服务的自定义角色。

常规限制:

  • 您无法在主版本升级过程中更改自定义角色和可组合服务。
  • 在部署 overcloud 后,您无法修改任何角色的服务列表。在 Overcloud 部署后修改服务列表可能会导致部署错误,并将孤立的服务留在节点上。

9.8. 检查可组合服务架构

核心 heat 模板集合包含两组可组合服务模板:

  • deployment 包含关键 OpenStack 服务的模板。
  • puppet/services 包含用于配置可组合服务的传统模板。在某些情况下,可组合服务使用此目录中的模板来实现兼容性。在大多数情况下,可组合服务使用 部署 目录中的模板。

每个模板包含一个标识其目的的描述。例如,deployment/time/ntp-baremetal-puppet.yaml 服务模板包含以下描述:

description: >
  NTP service deployment using puppet, this YAML file
  creates the interface between the HOT template
  and the puppet manifest that actually installs
  and configure NTP.

这些服务模板注册为特定于 Red Hat OpenStack Platform 部署的资源。这意味着,您可以使用 overcloud-resource-registry-puppet.j2.yaml 文件中定义的唯一 heat 资源命名空间调用每个资源。所有服务将 OS::TripleO::Services 命名空间用于其资源类型。

有些资源直接使用基本可组合服务模板:

resource_registry:
  ...
  OS::TripleO::Services::Ntp: deployment/time/ntp-baremetal-puppet.yaml
  ...

但是,核心服务需要容器并使用容器化服务模板。例如,keystone 容器化服务使用以下资源:

resource_registry:
  ...
  OS::TripleO::Services::Keystone: deployment/keystone/keystone-container-puppet.yaml
  ...

这些容器化模板通常引用其他模板以包含依赖项。例如,deployment/keystone/keystone-container-puppet.yaml 模板将基本模板的输出存储在 ContainersCommon 资源中:

resources:
  ContainersCommon:
    type: ../containers-common.yaml

然后,容器化模板可以包含来自 containers-common.yaml 模板的功能和数据。

overcloud.j2.yaml heat 模板包含基于 Jinja2 的代码部分,用于在 roles_data.yaml 文件中定义每个自定义角色的服务列表:

{{role.name}}Services:
  description: A list of service resources (configured in the heat
               resource_registry) which represent nested stacks
               for each service that should get installed on the {{role.name}} role.
  type: comma_delimited_list
  default: {{role.ServicesDefault|default([])}}

对于默认角色,这会创建以下服务列表参数: ControllerServicesComputeServicesBlockStorageServicesObjectStorageServicesCephStorageServices

您可以在 roles_data.yaml 文件中定义每个自定义角色的默认服务。例如,默认 Controller 角色包含以下内容:

- name: Controller
  CountDefault: 1
  ServicesDefault:
    - OS::TripleO::Services::CACerts
    - OS::TripleO::Services::CephMon
    - OS::TripleO::Services::CephExternal
    - OS::TripleO::Services::CephRgw
    - OS::TripleO::Services::CinderApi
    - OS::TripleO::Services::CinderBackup
    - OS::TripleO::Services::CinderScheduler
    - OS::TripleO::Services::CinderVolume
    - OS::TripleO::Services::Core
    - OS::TripleO::Services::Kernel
    - OS::TripleO::Services::Keystone
    - OS::TripleO::Services::GlanceApi
    - OS::TripleO::Services::GlanceRegistry
...

然后,这些服务被定义为 ControllerServices 参数的默认列表。

注意

您还可以使用环境文件覆盖服务参数的默认列表。例如,您可以在环境文件中将 ControllerServices 定义为 parameter_default,以覆盖 roles_data.yaml 文件中的 services 列表。

9.9. 从角色中添加和删除服务

添加或删除服务的基本方法涉及为节点角色创建默认服务列表的副本,然后添加或删除服务。例如,您可能想要从 Controller 节点中删除 OpenStack Orchestration (heat)。

流程

  1. 创建默认 roles 目录的自定义副本:

    $ cp -r /usr/share/openstack-tripleo-heat-templates/roles ~/.
  2. 编辑 ~/roles/Controller.yaml 文件,并修改 ServicesDefault 参数的服务列表。滚动到 OpenStack 编排服务并删除它们:

        - OS::TripleO::Services::GlanceApi
        - OS::TripleO::Services::GlanceRegistry
        - OS::TripleO::Services::HeatApi            # Remove this service
        - OS::TripleO::Services::HeatApiCfn         # Remove this service
        - OS::TripleO::Services::HeatApiCloudwatch  # Remove this service
        - OS::TripleO::Services::HeatEngine         # Remove this service
        - OS::TripleO::Services::MySQL
        - OS::TripleO::Services::NeutronDhcpAgent
  3. 生成新的 roles_data 文件:

    $ openstack overcloud roles generate -o roles_data-no_heat.yaml \
      --roles-path ~/roles \
      Controller Compute Networker
  4. 在运行 openstack overcloud deploy 命令时包括此新的 roles_data 文件:

    $ openstack overcloud deploy --templates -r ~/templates/roles_data-no_heat.yaml

    此命令在没有 Controller 节点上安装的 OpenStack 编排服务的情况下部署 overcloud。

注意

您还可以使用自定义环境文件禁用 roles_data 文件中的服务。将服务重定向到 OS::114::None 资源。例如:

resource_registry:
  OS::TripleO::Services::HeatApi: OS::Heat::None
  OS::TripleO::Services::HeatApiCfn: OS::Heat::None
  OS::TripleO::Services::HeatApiCloudwatch: OS::Heat::None
  OS::TripleO::Services::HeatEngine: OS::Heat::None

9.10. 启用禁用的服务

一些服务会被默认禁用。这些服务在 overcloud-resource-registry-puppet.j2.yaml 文件中作为 null 操作注册。例如,块存储备份服务(cinder-backup)被禁用:

  OS::TripleO::Services::CinderBackup: OS::Heat::None

若要启用此服务,请包含一个环境文件,该文件将资源链接到 puppet/services 目录中对应的 heat 模板。有些服务在 environment 目录中有预定义的环境文件。例如,块存储备份服务使用 environments/cinder-backup.yaml 文件,该文件包含以下条目:

流程

  1. 在环境文件中添加一个条目,它将 CinderBackup 服务链接到包含 cinder-backup 配置的 heat 模板:

    resource_registry:
      OS::TripleO::Services::CinderBackup: ../podman/services/pacemaker/cinder-backup.yaml
    ...

    此条目覆盖默认的 null 操作资源并启用该服务。

  2. 在运行 openstack overcloud deploy 命令时包含此环境文件:

    $ openstack overcloud deploy --templates -e /usr/share/openstack-tripleo-heat-templates/environments/cinder-backup.yaml

9.11. 创建没有服务的通用节点

您可以创建通用 Red Hat Enterprise Linux 9.0 节点,而无需配置任何 OpenStack 服务。当您需要托管 Red Hat OpenStack Platform (RHOSP)环境外的软件时,这非常有用。例如,RHOSP 提供与 Kibana 和 Sensu 等监控工具集成。如需更多信息,请参阅 监控工具配置指南。虽然红帽不提供对监控工具本身的支持,但 director 可以创建通用 Red Hat Enterprise Linux 9.0 节点来托管这些工具。

注意

通用节点仍然使用基本 overcloud-hardened-uefi-full.qcow2 镜像,而不是基本 Red Hat Enterprise Linux 9 镜像。这意味着节点安装了一些 Red Hat OpenStack Platform 软件,但没有启用或配置。

流程

  1. 在自定义 roles_data.yaml 文件中创建一个没有包括 ServicesDefault 列表的通用角色:

    - name: Generic
    - name: Controller
      CountDefault: 1
      ServicesDefault:
        - OS::TripleO::Services::AuditD
        - OS::TripleO::Services::CACerts
        - OS::TripleO::Services::CephClient
        ...
    - name: Compute
      CountDefault: 1
      ServicesDefault:
        - OS::TripleO::Services::AuditD
        - OS::TripleO::Services::CACerts
        - OS::TripleO::Services::CephClient
        ...

    确保保留现有的 ControllerCompute 角色。

  2. 创建一个环境文件 generic-node-params.yaml,以指定在选择要置备的节点时所需的通用 Red Hat Enterprise Linux 9 节点数量以及类型:

    parameter_defaults:
      OvercloudGenericFlavor: baremetal
      GenericCount: 1
  3. 在运行 openstack overcloud deploy 命令时,同时包含角色文件和环境文件:

    $ openstack overcloud deploy --templates \
    -r ~/templates/roles_data_with_generic.yaml \
    -e ~/templates/generic-node-params.yaml

    此配置部署一个具有一个 Controller 节点、一个 Compute 节点和一个通用 Red Hat Enterprise Linux 9 节点的三节点环境。

第 10 章 配置 overcloud 网络

要为 overcloud 配置物理网络,请创建以下配置文件:

  • 网络配置文件 network_data.yaml,它遵循网络数据模式中定义的结构。
  • 网络接口控制器(NIC)配置文件,方法是使用 Jinja2 ansible 格式的 NIC 模板文件 j2

10.1. 网络配置文件示例

以下是 IPv4 和 IPv6 的网络数据模式示例。

10.1.1. IPv4 的网络数据模式示例

- name: Storage
  name_lower: storage                     #optional, default: name.lower
  admin_state_up: false                   #optional, default: false
  dns_domain: storage.localdomain.        #optional, default: undef
  mtu: 1442                               #optional, default: 1500
  shared: false                           #optional, default: false
  service_net_map_replace: storage        #optional, default: undef
  ipv6: false                             #optional, default: false
  vip: true                               #optional, default: false
  subnets:
    subnet01:
      ip_subnet: 172.18.1.0/24
      gateway_ip: 172.18.1.254            #optional, default: undef
      allocation_pools:                   #optional, default: []
        - start: 172.18.1.10
          end: 172.18.1.250
      enable_dhcp: false                  #optional, default: false
      routes:                             #optional, default: []
        - destination: 172.18.0.0/24
          nexthop: 172.18.1.254
      vlan: 21                            #optional, default: undef
      physical_network: storage_subnet01  #optional, default: {{name.lower}}_{{subnet name}}
      network_type: flat                  #optional, default: flat
      segmentation_id: 21                 #optional, default: undef
    subnet02:
      ip_subnet: 172.18.0.0/24
      gateway_ip: 172.18.0.254            #optional, default: undef
      allocation_pools:                   #optional, default: []
        - start: 172.18.0.10
          end: 172.18.0.250
      enable_dhcp: false                  #optional, default: false
      routes:                             #optional, default: []
        - destination: 172.18.1.0/24
          nexthop: 172.18.0.254
      vlan: 20                            #optional, default: undef
      physical_network: storage_subnet02  #optional, default: {{name.lower}}_{{subnet name}}
      network_type: flat                  #optional, default: flat
      segmentation_id: 20                 #optional, default: undef

10.1.2. IPv6 的网络数据模式示例

- name: Storage
  name_lower: storage
  admin_state_up: false
  dns_domain: storage.localdomain.
  mtu: 1442
  shared: false
  ipv6: true
  vip: true
  subnets:
    subnet01:
      ipv6_subnet: 2001:db8:a::/64
      gateway_ipv6: 2001:db8:a::1
      ipv6_allocation_pools:
        - start: 2001:db8:a::0010
          end: 2001:db8:a::fff9
      enable_dhcp: false
      routes_ipv6:
        - destination: 2001:db8:b::/64
          nexthop: 2001:db8:a::1
      ipv6_address_mode: null
      ipv6_ra_mode: null
      vlan: 21
      physical_network: storage_subnet01  #optional, default: {{name.lower}}_{{subnet name}}
      network_type: flat                  #optional, default: flat
      segmentation_id: 21                 #optional, default: undef
    subnet02:
      ipv6_subnet: 2001:db8:b::/64
      gateway_ipv6: 2001:db8:b::1
      ipv6_allocation_pools:
        - start: 2001:db8:b::0010
          end: 2001:db8:b::fff9
      enable_dhcp: false
      routes_ipv6:
        - destination: 2001:db8:a::/64
          nexthop: 2001:db8:b::1
      ipv6_address_mode: null
      ipv6_ra_mode: null
      vlan: 20
      physical_network: storage_subnet02  #optional, default: {{name.lower}}_{{subnet name}}
      network_type: flat                  #optional, default: flat
      segmentation_id: 20                 #optional, default: undef

10.2. 网络隔离

Red Hat OpenStack Platform (RHOSP)提供隔离的 overcloud 网络,以便可以隔离托管特定类型的网络流量。流量分配给特定的网络接口或绑定。使用绑定提供容错功能,如果使用正确的绑定协议,也可以提供负载共享。如果没有配置隔离的网络,RHOSP 会将 provisioning 网络用于所有服务。

网络配置由两个部分组成:应用于整个网络的参数,以及在部署的节点上配置网络接口的模板。

您可以为 RHOSP 部署创建以下隔离网络:

IPMI
用于节点电源管理的网络。此网络在安装 undercloud 前预定义。
置备
director 使用此网络进行部署和管理。provisioning 网络通常在专用接口上配置。初始部署使用带有 PXE 的 DHCP,然后网络将转换为静态 IP。默认情况下,必须在原生 VLAN 上进行 PXE 引导,但有些系统控制器允许从 VLAN 引导。默认情况下,计算和存储节点使用调配接口作为其 DNS、NTP 和系统维护的默认网关。
内部 API
内部 API 网络用于使用 API 通信、RPC 消息和数据库通信在 RHOSP 服务之间的通信。
tenant

Networking 服务(neutron)使用以下方法之一为每个租户(project)提供自己的网络:

  • VLAN 隔离,其中每个租户网络都是网络 VLAN。
  • 隧道(通过 VXLAN 或 GRE)。

网络流量在每个租户网络中隔离。每个租户网络都有一个与其关联的 IP 子网,网络命名空间意味着多个租户网络可以使用相同的地址范围,而不会导致冲突。

存储
用于块存储、NFS、iSCSI 等的网络。理想情况下,出于性能原因,这将隔离到完全独立的交换机光纤中。
存储管理
OpenStack Object Storage (swift)使用此网络在参与副本节点间同步数据对象。代理服务充当用户请求和底层存储层之间的中间接口。代理接收传入的请求,并找到所需的副本来检索请求的数据。使用 Ceph 后端的服务通过存储管理网络连接,因为它们不直接与 Ceph 交互,而是使用前端服务。请注意,RBD 驱动程序是一个例外,因为此流量直接连接到 Ceph。
外部
托管用于图形化系统管理的 OpenStack Dashboard (horizon)、OpenStack 服务的公共 API,并为目标用于实例的传入流量执行 SNAT。
浮动 IP
允许传入流量使用 1 到 1 个 IP 地址映射访问实例,以及实际分配给租户网络中实例的 IP 地址。如果在独立于外部的 VLAN 上托管浮动 IP,您可以将浮动 IP VLAN 中继到 Controller 节点,并在 overcloud 创建后通过网络服务(neutron)添加 VLAN。这提供了创建附加到多个网桥的多个浮动 IP 网络的方法。VLAN 被中继,但不会配置为接口。相反,网络服务(neutron)为每个浮动 IP 网络在所选网桥上创建一个具有 VLAN 分段 ID 的 OVS 端口。
注意

置备网络必须是原生 VLAN,其他网络可以被中继。

undercloud 可用作默认网关。但是,所有流量都位于 IP 伪装 NAT (网络地址转换)后面,无法从其余 RHOSP 网络访问。undercloud 也是 overcloud 默认路由的单一故障点。如果在 provisioning 网络上的路由器设备上配置了外部网关,undercloud neutron DHCP 服务器可以提供该服务。

10.2.1. 每个角色所需的网络

您可以使用 VLAN 创建租户网络,但您可以创建 VXLAN 隧道以用于特殊用途,而无需消耗租户 VLAN。VXLAN 功能可以在具有租户 VLAN 的部署中添加 VXLAN 功能,但无法在不严重中断的情况下将租户 VLAN 添加到部署的 overcloud 中。

下表详细介绍了附加到每个角色的隔离网络:

角色Network

Controller

provisioning, internal API, storage, storage management, tenant, external

Compute

provisioning, internal API, storage, tenant

Ceph Storage

置备、内部 API、存储、存储管理

Cinder 存储

置备、内部 API、存储、存储管理

Swift Storage

置备、内部 API、存储、存储管理

10.2.2. 网络定义文件配置选项

使用下表了解以 YAML 格式配置网络定义文件 network_data.yaml 的可用选项:

表 10.1. 网络数据 YAML 选项
Name选项类型默认值

name

网络的名称。

字符串

 

name_lower

可选:网络的小写名称。

字符串

name.lower()

dns_domain

可选:网络的 DNS 域名。

字符串

 

mtu

最大传输单元(MTU)。

number

1500

ipv6

可选:如果使用 IPv6,则设置为 true。

布尔值

false

vip

在网络上创建 VIP。

布尔值

false

subnets

包含网络的子网。

字典

 
表 10.2. 子网定义的网络数据 YAML 选项
Name选项类型 / Element示例

ip_subnet

IPv4 CIDR 块表示法。

字符串

192.0.5.0/24

ipv6_subnet

IPv6 CIDR 块表示法。

字符串

2001:db6:fd00:1000::/64

gateway_ip

可选:网关 IPv4 地址。

字符串

192.0.5.1

allocation_pools

为子网启动和结束地址。

列出/字典

start: 192.0.5.100

end: 192.0.5.150

ipv6_allocation_pools

为子网启动和结束地址。

列出/字典

start: 2001:db6:fd00:1000:100::1

end: 2001:db6:fd00:1000:150::1

Routes

需要通过网络网关路由的 IPv4 网络列表。

列出/字典

 

routes_ipv6

需要通过网络网关路由的 IPv6 网络列表。

列出/字典

 

vlan

可选:网络的 VLAN ID。

number

 
注意

routesroutes_ipv6 选项包含路由列表。每个路由都是一个带有 目的地下一步 键的字典条目。这两个选项都是字符串类型。

routes:
  - destination: 198.51.100.0/24
    nexthop: 192.0.5.1
  - destination: 203.0.113.0/24
    nexthost: 192.0.5.1
routes:
  - destination: 2001:db6:fd00:2000::/64
    nexthop: 2001:db6:fd00:1000:100::1
  - destination: 2001:db6:fd00:3000::/64
    nexthost: 2001:db6:fd00:1000:100::1
表 10.3. 网络虚拟 IP 的 YAML 数据选项
Name选项类型 / Element默认值

network

Neutron 网络名称。

字符串

 

ip_address

可选:预定义的固定 IP 地址。

字符串

 

子网

Neutron 子网名称。指定虚拟 IP neutron 端口的子网。使用路由网络进行部署需要。

字符串

 

dns_name

可选: FQDN (完全限定域名)。

列出/字典

overcloud

name

可选:虚拟 IP 名称。

字符串

$network_name_virtual_ip

10.2.3. 配置网络隔离

要启用和配置网络隔离,您必须将所需的元素添加到 network_data.yaml 配置文件中。

流程

  1. 创建网络 YAML 定义文件:

    $ cp /usr/share/openstack-tripleo-heat-templates/network-data-samples/default-network-isolation-ipv6.yaml /home/stack/templates/network_data.yaml
  2. 更新 network_data.yaml 文件中的选项,使其与 overcloud 网络环境的要求匹配:

    - name: Storage
      name_lower: storage
      vip: true
      ipv6: true
      mtu: 1500
      subnets:
        storage_subnet:
          ipv6_subnet: fd00:fd00:fd00:3000::/64
          ipv6_allocation_pools:
            - start: fd00:fd00:fd00:3000::10
              end: fd00:fd00:fd00:3000:ffff:ffff:ffff:fffe
          vlan: 30
    - name: StorageMgmt
      name_lower: storage_mgmt
      vip: true
      ipv6: true
      mtu: 1500
      subnets:
        storage_mgmt_subnet:
          ipv6_subnet: fd00:fd00:fd00:4000::/64
          ipv6_allocation_pools:
            - start: fd00:fd00:fd00:4000::10
              end: fd00:fd00:fd00:4000:ffff:ffff:ffff:fffe
          vlan: 40
    - name: InternalApi
      name_lower: internal_api
      vip: true
      ipv6: true
      mtu: 1500
      subnets:
        internal_api_subnet:
          ipv6_subnet: fd00:fd00:fd00:2000::/64
          ipv6_allocation_pools:
            - start: fd00:fd00:fd00:2000::10
              end: fd00:fd00:fd00:2000:ffff:ffff:ffff:fffe
          vlan: 20
    - name: Tenant
      name_lower: tenant
      vip: false # Tenant networks do not use VIPs
      ipv6: true
      mtu: 1500
      subnets:
        tenant_subnet:
          ipv6_subnet: fd00:fd00:fd00:5000::/64
          ipv6_allocation_pools:
            - start: fd00:fd00:fd00:5000::10
              end: fd00:fd00:fd00:5000:ffff:ffff:ffff:fffe
          vlan: 50
    - name: External
      name_lower: external
      vip: true
      ipv6: true
      mtu: 1500
      subnets:
        external_subnet:
          ipv6_subnet: 2001:db8:fd00:1000::/64
          ipv6_allocation_pools:
            - start: 2001:db8:fd00:1000::10
              end: 2001:db8:fd00:1000:ffff:ffff:ffff:fffe
          gateway_ipv6: 2001:db8:fd00:1000::1
          vlan: 10

10.3. 可组合网络

如果要在不同网络上托管特定的网络流量,可以创建自定义可组合网络。director 提供了一个默认的网络拓扑,启用了网络隔离。您可以在 /usr/share/openstack-tripleo-heat-templates/network-data-samples/default-network-isolation.yaml 中找到此配置。

overcloud 默认使用以下一组预定义的网络片段:

  • 内部 API
  • 存储
  • 存储管理
  • tenant
  • 外部

您可以使用可组合网络为各种服务添加网络。例如,如果您有一个专用于 NFS 流量的网络,您可以将其呈现到多个角色。

director 支持在部署和更新阶段创建自定义网络。您可以将这些额外网络用于裸机节点、系统管理或为不同的角色创建单独的网络。您还可以使用它们创建多个网络集合,以用于在网络间路由流量的分割部署。

10.3.1. 添加可组合网络

使用可组合网络为各种服务添加网络。例如,如果您有一个专用于存储备份流量的网络,您可以将网络呈现到多个角色。

您可以在 /usr/share/openstack-tripleo-heat-templates/network-data-samples 目录中找到一个示例文件。

流程

  1. 列出可用的示例配置文件:

    $ ll /usr/share/openstack-tripleo-heat-templates/network-data-samples/
    -rw-r--r--. 1 root root 1554 May 11 23:04 default-network-isolation-ipv6.yaml
    -rw-r--r--. 1 root root 1181 May 11 23:04 default-network-isolation.yaml
    -rw-r--r--. 1 root root 1126 May 11 23:04 ganesha-ipv6.yaml
    -rw-r--r--. 1 root root 1100 May 11 23:04 ganesha.yaml
    -rw-r--r--. 1 root root 3556 May 11 23:04 legacy-routed-networks-ipv6.yaml
    -rw-r--r--. 1 root root 2929 May 11 23:04 legacy-routed-networks.yaml
    -rw-r--r--. 1 root root  383 May 11 23:04 management-ipv6.yaml
    -rw-r--r--. 1 root root  290 May 11 23:04 management.yaml
    -rw-r--r--. 1 root root  136 May 11 23:04 no-networks.yaml
    -rw-r--r--. 1 root root 2725 May 11 23:04 routed-networks-ipv6.yaml
    -rw-r--r--. 1 root root 2033 May 11 23:04 routed-networks.yaml
    -rw-r--r--. 1 root root  943 May 11 23:04 vip-data-default-network-isolation.yaml
    -rw-r--r--. 1 root root  848 May 11 23:04 vip-data-fixed-ip.yaml
    -rw-r--r--. 1 root root 1050 May 11 23:04 vip-data-routed-networks.yaml
  2. 复制最适合您的需要的网络配置文件示例:

    $ cp /usr/share/openstack-tripleo-heat-templates/network-data-samples/default-network-isolation.yaml /home/stack/templates/network_data.yaml
  3. 编辑 network_data.yaml 配置文件并为新网络添加一个部分:

    - name: StorageBackup
      vip: false
      name_lower: storage_backup
      subnets:
        storage_backup_subnet:
          ip_subnet: 172.16.6.0/24
          allocation_pools:
            - start: 172.16.6.4
            - end: 172.16.6.250
          gateway_ip: 172.16.6.1

    您可以在 network_data.yaml 文件中使用以下参数:

    name
    设置网络的名称。
    vip
    启用在网络中创建虚拟 IP 地址。
    name_lower
    设置名称的小写版本,director 映射到分配给 roles_data.yaml 文件中角色的相应网络。
    subnets
    一个或多个子网防御。
    subnet_name
    设置子网的名称。
    ip_subnet
    以 CIDR 格式设置 IPv4 子网。
    allocation_pools
    为 IPv4 子网设置 IP 范围。
    gateway_ip
    设置网络的网关。
    vlan
    设置网络的 VLAN ID。
    ipv6
    将值设为 true 或 false。
    ipv6_subnet
    设置 IPv6 子网。
    gateway_ipv6
    设置 IPv6 网络的网关。
    ipv6_allocation_pools
    为 IPv6 子网设置 IP 范围。
    routes_ipv6
    设置 IPv6 网络的路由。
  4. 将所需的网络 VIP 定义模板示例从 /usr/share/openstack-tripleo-heat-templates/network-data-samples 复制到环境文件目录中。以下示例将 vip-data-default-network-isolation.yaml 复制到名为 vip_data.yaml 的本地环境文件:

    $ cp /usr/share/openstack-tripleo-heat-templates/network-data-samples/vip-data-default-network-isolation.yaml  /home/stack/templates/vip_data.yaml
  5. 编辑 vip_data.yaml 配置文件。虚拟 IP 数据是虚拟 IP 地址定义列表,各自包含分配 IP 地址的网络名称。

    - network: storage_mgmt
      dns_name: overcloud
    - network: internal_api
      dns_name: overcloud
    - network: storage
      dns_name: overcloud
    - network: external
      dns_name: overcloud
      ip_address: <vip_address>
    - network: ctlplane
      dns_name: overcloud
    • <vip_address > 替换为所需的虚拟 IP 地址。

    您可以在 vip_data.yaml 文件中使用以下参数:

    network
    设置 neutron 网络名称。这是唯一需要的参数。
    ip_address
    设置 VIP 的 IP 地址。
    子网
    设置 neutron 子网名称。在创建虚拟 IP neutron 端口时,用于指定子网。当部署使用路由网络时,需要此参数。
    dns_name
    设置 FQDN (完全限定域名)。
    name
    设置虚拟 IP 名称。
  6. 复制示例网络配置模板。Jinja2 模板用于定义 NIC 配置模板。浏览 /usr/share/ansible/roles/tripleo_network_config/templates/ 目录中提供的示例(如果其中一个示例与您的要求匹配),请使用它。如果示例与您的要求不匹配,请复制示例配置文件并根据您的需要进行修改:

    $ cp /usr/share/ansible/roles/tripleo_network_config/templates/single_nic_vlans/single_nic_vlans.j2 /home/stack/templates/
  7. 编辑 single_nic_vlans.j2 配置文件:

    ---
    {% set mtu_list = [ctlplane_mtu] %}
    {% for network in role_networks %}
    {{ mtu_list.append(lookup('vars', networks_lower[network] ~ '_mtu')) }}
    {%- endfor %}
    {% set min_viable_mtu = mtu_list | max %}
    network_config:
    - type: ovs_bridge
      name: {{ neutron_physical_bridge_name }}
      mtu: {{ min_viable_mtu }}
      use_dhcp: false
      dns_servers: {{ ctlplane_dns_nameservers }}
      domain: {{ dns_search_domains }}
      addresses:
      - ip_netmask: {{ ctlplane_ip }}/{{ ctlplane_subnet_cidr }}
      routes: {{ ctlplane_host_routes }}
      members:
      - type: interface
        name: nic1
        mtu: {{ min_viable_mtu }}
        # force the MAC address of the bridge to this interface
        primary: true
    {% for network in role_networks %}
      - type: vlan
        mtu: {{ lookup('vars', networks_lower[network] ~ '_mtu') }}
        vlan_id: {{ lookup('vars', networks_lower[network] ~ '_vlan_id') }}
        addresses:
        - ip_netmask:
            {{ lookup('vars', networks_lower[network] ~ '_ip') }}/{{ lookup('vars', networks_lower[network] ~ '_cidr') }}
        routes: {{ lookup('vars', networks_lower[network] ~ '_host_routes') }}
    {% endfor %}
  8. overcloud-baremetal-deploy.yaml 配置文件中设置 network_config 模板:

    - name: CephStorage
      count: 3
      defaults:
        networks:
        - network: storage
        - network: storage_mgmt
        - network: storage_backup
        network_config:
          template: /home/stack/templates/single_nic_vlans.j2
  9. 置备 overcloud 网络。此操作会生成一个输出文件,该文件将在部署 overcloud 时使用环境文件:

    (undercloud)$ openstack overcloud network provision --output <deployment_file> /home/stack/templates/<networks_definition_file>.yaml
    • <networks_definition_file > 替换为网络定义文件的名称,如 network_data.yaml
    • <deployment_file > 替换为用于部署命令生成的 heat 环境文件名称,如 /home/stack/templates/overcloud-networks-deployed.yaml
  10. 置备网络 VIP,并生成 vip-deployed-environment.yaml 文件。在部署 overcloud 时,您可以使用此文件:

    (overcloud)$ openstack overcloud network vip provision  --stack <stack> --output <deployment_file> /home/stack/templates/vip_data.yaml
    • 将 & lt;stack > 替换为置备网络 VIP 的堆栈的名称。如果未指定,则默认为 overcloud。
    • <deployment_file > 替换为用于部署命令生成的 heat 环境文件名称,如 /home/stack/templates/overcloud-vip-deployed.yaml

10.3.2. 在角色中包含可组合网络

您可以将可组合网络分配给您的环境中定义的 overcloud 角色。例如,您可以使用 Ceph Storage 节点包含自定义 StorageBackup 网络。

流程

  1. 如果您还没有自定义 roles_data.yaml 文件,请将默认值复制到您的主目录中:

    $ cp /usr/share/openstack-tripleo-heat-templates/roles_data.yaml /home/stack/templates/roles_data.yaml
  2. 编辑自定义 roles_data.yaml 文件。
  3. 将网络名称包含在您要添加 网络 的角色的网络列表中。例如,要将 StorageBackup 网络添加到 Ceph Storage 角色中,请使用以下示例片断:

    - name: CephStorage
      description: |
        Ceph OSD Storage node role
      networks:
        Storage
          subnet: storage_subnet
        StorageMgmt
          subnet: storage_mgmt_subnet
        StorageBackup
          subnet: storage_backup_subnet
  4. 将自定义网络添加到其各自角色后,保存文件。

运行 openstack overcloud deploy 命令时,请使用 -r 选项包含自定义 roles_data.yaml 文件。如果没有 -r 选项,部署命令使用默认角色集及其相应分配的网络。

10.3.3. 将 OpenStack 服务分配给可组合网络

每个 OpenStack 服务都分配给资源 registry 中的默认网络类型。这些服务绑定到网络类型分配的网络中的 IP 地址。虽然 OpenStack 服务被分为这些网络,但实际物理网络的数量可能与网络环境文件中定义的不同。您可以通过在环境文件中定义新网络映射来将 OpenStack 服务重新分配给不同的网络类型,例如 /home/stack/templates/service-reassignments.yamlServiceNetMap 参数决定您要用于各个服务的网络类型。

例如,您可以通过修改高亮的部分将 Storage Management 网络服务重新分配给 Storage Backup Network:

parameter_defaults:
  ServiceNetMap:
    SwiftStorageNetwork: storage_backup
    CephClusterNetwork: storage_backup

将这些参数改为 storage_backup 会将这些服务放在 Storage Backup 网络中,而不是 Storage Management 网络。这意味着,您必须仅为 Storage Backup 网络而不是 Storage Management 网络定义一组 parameter_defaults

director 将自定义 ServiceNetMap 参数定义合并到预定义的默认值列表中,它将从 ServiceNetMapDefaults 获取并覆盖默认值。director 将完整的列表(包括自定义)返回到 ServiceNetMap,用于为各种服务配置网络分配。

服务映射适用于使用 Pacemaker 的 network_data.yaml 文件中使用 vip: true 的网络。overcloud 负载均衡器将来自 VIP 的流量重定向到特定的服务端点。

注意

您可以在 /usr/share/openstack-tripleo-heat-templates/network/service_net_map.j2.yaml 文件的 ServiceNetMapDefaults 参数中找到默认服务的完整列表。

10.3.4. 启用自定义可组合网络

使用其中一个默认 NIC 模板启用自定义可组合网络。在本例中,将 Single NIC 与 VLAN 模板(custom_single_nic_vlans)一起使用。

流程

  1. 查找 stackrc undercloud 凭证文件:

    $ source ~/stackrc
  2. 置备 overcloud 网络:

    $ openstack overcloud network provision \
      --output overcloud-networks-deployed.yaml \
      custom_network_data.yaml
  3. 置备网络 VIP:

    $ openstack overcloud network vip provision \
        --stack overcloud \
        --output overcloud-networks-vips-deployed.yaml \
         custom_vip_data.yaml
  4. 置备 overcloud 节点:

    $ openstack overcloud node provision \
        --stack overcloud \
        --output overcloud-baremetal-deployed.yaml \
        overcloud-baremetal-deploy.yaml
  5. 构建 openstack overcloud deploy 命令,按所需顺序指定配置文件和模板,例如:

    $ openstack overcloud deploy --templates \
      --networks-file network_data_v2.yaml \
      -e overcloud-networks-deployed.yaml \
      -e overcloud-networks-vips-deployed.yaml \
      -e overcloud-baremetal-deployed.yaml
      -e custom-net-single-nic-with-vlans.yaml

本例命令在 overcloud 中的节点之间部署可组合网络,包括您的额外网络。

10.3.5. 重命名默认网络

您可以使用 network_data.yaml 文件来修改默认网络的用户可见名称:

  • InternalApi
  • 外部
  • 存储
  • StorageMgmt
  • tenant

要更改这些名称,请不要修改 name 字段。相反,将 name_lower 字段更改为网络的新名称,并使用新名称更新 ServiceNetMap。

流程

  1. network_data.yaml 文件中,为您要重命名的每个网络的 name_lower 参数输入新名称:

    - name: InternalApi
      name_lower: MyCustomInternalApi
  2. service_net_map_replace 参数中包含 name_lower 参数的默认值:

    - name: InternalApi
      name_lower: MyCustomInternalApi
      service_net_map_replace: internal_api

10.4. 自定义网络接口模板

配置 第 10.2 节 “网络隔离” 后,您可以创建一组自定义网络接口模板来适合环境中的节点。例如,您可以包含以下文件:

  • 用于配置网络默认值的环境文件(/usr/share/openstack-tripleo-heat-templates/environments/network/multiple-nics/network-environment.yaml)。
  • 为各个节点定义 NIC 布局的模板。overcloud 核心模板集合包含一组用于不同用例的默认值。要创建自定义 NIC 模板,请呈现默认 Jinja2 模板作为自定义模板的基础。
  • 启用 NIC 的自定义环境文件。本例使用自定义环境文件(/home/stack/templates/custom-network-configuration.yaml)来引用您的自定义模板。
  • 用于自定义网络参数的任何其他环境文件。
  • 如果您自定义网络,则自定义 network_data.yaml 文件。
  • 如果您创建额外的或自定义可组合网络,则自定义 network_data.yaml 文件和自定义 roles_data.yaml 文件。
注意

上一个列表中的一些文件是 Jinja2 格式文件,且具有 .j2.yaml 扩展名。director 在部署过程中将这些文件呈现到 .yaml 版本。

10.4.1. 自定义网络架构

示例 NIC 模板可能不适用于特定的网络配置。例如,您可能想要创建自己的自定义 NIC 模板来适合特定的网络布局。您可能想要将控制服务和数据服务隔离到单独的 NIC。在这种情况下,您可以使用以下方法将服务映射到 NIC 分配:

  • NIC1 (Provisioning)

    • Provisioning/Control Plane
  • NIC2 (控制组)

    • 内部 API
    • 存储管理
    • 外部(公共 API)
  • NIC3 (数据组)

    • 租户网络(VXLAN 隧道)
    • 租户 VLAN/提供程序 VLAN
    • 存储
    • 外部 VLAN (利用 IP/SNAT)
  • NIC4 (管理)

    • 管理

10.4.2. 网络接口参考

网络接口配置包含以下参数:

Interface

定义一个网络接口。配置使用实际接口名称("eth0", "eth1", "enp0s25")或一组数字接口 ("nic1", "nic2", "nic3") 定义各个接口:

  - type: interface
    name: nic2
表 10.4. 接口选项
选项默认描述

name

 

接口的名称。

use_dhcp

False

使用 DHCP 获取 IP 地址。

use_dhcpv6

False

使用 DHCP 获取 v6 IP 地址。

addresses

 

分配给接口的 IP 地址列表。

Routes

 

分配给接口的路由列表。更多信息请参阅 Routes

mtu

1500

连接的最大传输单元(MTU)。

primary

False

将接口定义为主接口。

persist_mapping

False

编写设备别名配置而不是系统名称。

dhclient_args

要传递给 DHCP 客户端的参数。

dns_servers

要用于接口的 DNS 服务器列表。

ethtool_opts

 

将这个选项设置为 "rx-flow-hash udp4 sdfn",以便在特定 NIC 上使用 VXLAN 时提高吞吐量。

vlan

定义 VLAN。使用从 parameters 部分传递的 VLAN ID 和子网。

例如:

  - type: vlan
    device: nic{{ loop.index + 1 }}
    mtu: {{ lookup('vars', networks_lower[network] ~ '_mtu') }}
    vlan_id: {{ lookup('vars', networks_lower[network] ~ '_vlan_id') }}
    addresses:
    - ip_netmask:
      {{ lookup('vars', networks_lower[network] ~ '_ip') }}/{{ lookup('vars', networks_lower[network] ~ '_cidr') }}
  routes: {{ lookup('vars', networks_lower[network] ~ '_host_routes') }}
表 10.5. VLAN 选项
选项默认描述

vlan_id

 

VLAN ID。

device

 

附加 VLAN 的父设备。当 VLAN 不是 OVS 网桥的成员时,请使用此参数。例如,使用此参数将 VLAN 附加到绑定接口设备。

use_dhcp

False

使用 DHCP 获取 IP 地址。

use_dhcpv6

False

使用 DHCP 获取 v6 IP 地址。

addresses

 

分配给 VLAN 的 IP 地址列表。

Routes

 

分配给 VLAN 的路由列表。更多信息请参阅 Routes

mtu

1500

连接的最大传输单元(MTU)。

primary

False

定义 VLAN 作为主接口。

persist_mapping

False

编写设备别名配置而不是系统名称。

dhclient_args

要传递给 DHCP 客户端的参数。

dns_servers

要用于 VLAN 的 DNS 服务器列表。

ovs_bond

在 Open vSwitch 中定义绑定,将两个或多个 接口 接合在一起。这有助于实现冗余性并增加带宽。

例如:

  members:
    - type: ovs_bond
      name: bond1
      mtu: {{ min_viable_mtu }}
      ovs_options: {{ bond_interface_ovs_options }}
      members:
      - type: interface
        name: nic2
        mtu: {{ min_viable_mtu }}
        primary: true
      - type: interface
        name: nic3
        mtu: {{ min_viable_mtu }}
表 10.6. ovs_bond options
选项默认描述

name

 

绑定的名称。

use_dhcp

False

使用 DHCP 获取 IP 地址。

use_dhcpv6

False

使用 DHCP 获取 v6 IP 地址。

addresses

 

分配给绑定的 IP 地址列表。

Routes

 

分配给绑定的路由列表。更多信息请参阅 Routes

mtu

1500

连接的最大传输单元(MTU)。

primary

False

将接口定义为主接口。

成员

 

要在绑定中使用的一系列接口对象。

ovs_options

 

创建绑定时传递给 OVS 的一组选项。

ovs_extra

 

在绑定的网络配置文件中设置为 OVS_EXTRA 参数的一组选项。

defroute

True

使用 DHCP 服务提供的默认路由。只有在启用 use_dhcpuse_dhcpv6 时才适用。

persist_mapping

False

编写设备别名配置而不是系统名称。

dhclient_args

要传递给 DHCP 客户端的参数。

dns_servers

要用于绑定的 DNS 服务器列表。

ovs_bridge

在 Open vSwitch 中定义一个网桥,将多个 interface, ovs_bond, 和 vlan 对象连接在一起。

网络接口类型 ovs_bridge 使用 参数名称

注意

如果您有多个网桥,则必须使用除接受 bridge_name 的默认名称以外的不同网桥名称。如果您不使用不同的名称,那么在聚合阶段,则会将两个网络绑定放在同一网桥上。

如果您要为外部 tripleo 网络定义 OVS 网桥,则分别保留 bridge_nameinterface_name 值,作为部署框架,则分别将这些值替换为外部网桥名称和外部接口名称。

例如:

  - type: ovs_bridge
    name: br-bond
    dns_servers: {{ ctlplane_dns_nameservers }}
    domain: {{ dns_search_domains }}
    members:
    - type: ovs_bond
      name: bond1
      mtu: {{ min_viable_mtu }}
      ovs_options: {{ bound_interface_ovs_options }}
      members:
      - type: interface
        name: nic2
        mtu: {{ min_viable_mtu }}
        primary: true
      - type: interface
        name: nic3
        mtu: {{ min_viable_mtu }}
注意

OVS 网桥连接到网络服务(neutron)服务器,以获取配置数据。如果 OpenStack 控制流量(通常是 Control Plane 和 Internal API 网络)放置在 OVS 网桥上,那么当您升级 OVS 时,与 neutron 服务器的连接都会丢失,或者 OVS 网桥由 admin 用户或进程重启。这会导致一些停机时间。如果在这些情况下无法接受停机时间,您必须将控制组网络放在单独的接口或绑定中,而不是在 OVS 网桥上:

  • 当您将内部 API 网络放在调配接口上的 VLAN 和 OVS 网桥到第二个接口上时,您可以达到最小的设置。
  • 要实现绑定,您需要至少有两个绑定(四个网络接口)。将控制组放在 Linux 绑定(Linux 网桥)上。如果交换机不支持 LACP 回退到单一接口进行 PXE 引导,那么这个解决方案至少需要 5 个 NIC。
表 10.7. ovs_bridge options
选项默认描述

name

 

网桥的名称。

use_dhcp

False

使用 DHCP 获取 IP 地址。

use_dhcpv6

False

使用 DHCP 获取 v6 IP 地址。

addresses

 

分配给网桥的 IP 地址列表。

Routes

 

分配给网桥的路由列表。更多信息请参阅 Routes

mtu

1500

连接的最大传输单元(MTU)。

成员

 

要在网桥中使用的一系列接口、VLAN 和绑定对象。

ovs_options

 

创建网桥时传递给 OVS 的一组选项。

ovs_extra

 

在网桥的网络配置文件中,设置为 OVS_EXTRA 参数的一组选项。

defroute

True

使用 DHCP 服务提供的默认路由。只有在启用 use_dhcpuse_dhcpv6 时才适用。

persist_mapping

False

编写设备别名配置而不是系统名称。

dhclient_args

要传递给 DHCP 客户端的参数。

dns_servers

用于网桥的 DNS 服务器列表。

linux_bond

定义将两个或者多个 接口 接合在一起的 Linux 绑定。这有助于实现冗余性并增加带宽。确保您在 bonding_options 参数中包含基于内核的绑定选项。

例如:

- type: linux_bridge
  name: {{ neutron_physical_bridge_name }}
  mtu: {{ min_viable_mtu }}
  use_dhcp: false
  dns_servers: {{ ctlplane_dns_nameservers }}
  domain: {{ dns_search_domains }}
  addresses:
  - ip_netmask: {{ ctlplane_ip }}/{{ ctlplane_subnet_cidr }}
  routes: {{ ctlplane_host_routes }}

请注意,nic2 使用 primary: true 来确保绑定使用 nic2 的 MAC 地址。

表 10.8. linux_bond options
选项默认描述

name

 

绑定的名称。

use_dhcp

False

使用 DHCP 获取 IP 地址。

use_dhcpv6

False

使用 DHCP 获取 v6 IP 地址。

addresses

 

分配给绑定的 IP 地址列表。

Routes

 

分配给绑定的路由列表。请参阅 Routes

mtu

1500

连接的最大传输单元(MTU)。

primary

False

将接口定义为主接口。

成员

 

要在绑定中使用的一系列接口对象。

bonding_options

 

创建绑定时的一组选项。

defroute

True

使用 DHCP 服务提供的默认路由。只有在启用 use_dhcpuse_dhcpv6 时才适用。

persist_mapping

False

编写设备别名配置而不是系统名称。

dhclient_args

要传递给 DHCP 客户端的参数。

dns_servers

要用于绑定的 DNS 服务器列表。

linux_bridge

定义一个 Linux 网桥,它将多个 interface, linux_bond, 和 vlan 对象连接在一起。外部网桥也对参数使用两个特殊值:

  • bridge_name,它替换为外部网桥名称。
  • interface_name,它替换为外部接口。

例如:

  - type: linux_bridge
      name: bridge_name
      mtu:
        get_attr: [MinViableMtu, value]
      use_dhcp: false
      dns_servers:
        get_param: DnsServers
      domain:
        get_param: DnsSearchDomains
      addresses:
      - ip_netmask:
          list_join:
          - /
          - - get_param: ControlPlaneIp
            - get_param: ControlPlaneSubnetCidr
      routes:
        list_concat_unique:
          - get_param: ControlPlaneStaticRoutes
表 10.9. linux_bridge options
选项默认描述

name

 

网桥的名称。

use_dhcp

False

使用 DHCP 获取 IP 地址。

use_dhcpv6

False

使用 DHCP 获取 v6 IP 地址。

addresses

 

分配给网桥的 IP 地址列表。

Routes

 

分配给网桥的路由列表。更多信息请参阅 Routes

mtu

1500

连接的最大传输单元(MTU)。

成员

 

要在网桥中使用的一系列接口、VLAN 和绑定对象。

defroute

True

使用 DHCP 服务提供的默认路由。只有在启用 use_dhcpuse_dhcpv6 时才适用。

persist_mapping

False

编写设备别名配置而不是系统名称。

dhclient_args

要传递给 DHCP 客户端的参数。

dns_servers

用于网桥的 DNS 服务器列表。

Routes

定义应用到网络接口、VLAN、网桥或绑定的路由列表。

例如:

  - type: linux_bridge
    name: bridge_name
    ...
    routes: {{ [ctlplane_host_routes] | flatten | unique }}
选项默认描述

ip_netmask

目标网络的 IP 和子网掩码。

default

False

将此路由设置为默认路由。等同于设置 ip_netmask: 0.0.0.0/0

next_hop

用于访问目的地网络的路由器的 IP 地址。

10.4.3. 网络接口布局示例

以下控制器节点 NIC 模板片断演示了如何配置自定义网络场景,使控制组与 OVS 网桥分开:

network_config:
- type: interface
  name: nic1
  mtu: {{ ctlplane_mtu }}
  use_dhcp: false
  addresses:
  - ip_netmask: {{ ctlplane_ip }}/{{ ctlplane_subnet_cidr }}
  routes: {{ ctlplane_host_routes }}
- type: linux_bond
  name: bond_api
  mtu: {{ min_viable_mtu_ctlplane }}
  use_dhcp: false
  bonding_options: {{ bond_interface_ovs_options }}
  dns_servers: {{ ctlplane_dns_nameservers }}
  domain: {{ dns_search_domains }}
  members:
  - type: interface
    name: nic2
    mtu: {{ min_viable_mtu_ctlplane }}
    primary: true
  - type: interface
    name: nic3
    mtu: {{ min_viable_mtu_ctlplane }}
{% for network in role_networks if not network.startswith('Tenant') %}
- type: vlan
  device: bond_api
  mtu: {{ lookup('vars', networks_lower[network] ~ '_mtu') }}
  vlan_id: {{ lookup('vars', networks_lower[network] ~ '_vlan_id') }}
  addresses:
  - ip_netmask: {{ lookup('vars', networks_lower[network] ~ '_ip') }}/{{ lookup('vars', networks_lower[network] ~ '_cidr') }}
  routes: {{ lookup('vars', networks_lower[network] ~ '_host_routes') }}
{% endfor %}
- type: ovs_bridge
  name: {{ neutron_physical_bridge_name }}
  dns_servers: {{ ctlplane_dns_nameservers }}
  members:
  - type: linux_bond
    name: bond-data
    mtu: {{ min_viable_mtu_dataplane }}
    bonding_options: {{ bond_interface_ovs_options }}
    members:
    - type: interface
      name: nic4
      mtu: {{ min_viable_mtu_dataplane }}
      primary: true
    - type: interface
      name: nic5
      mtu: {{ min_viable_mtu_dataplane }}
{% for network in role_networks if network.startswith('Tenant') %}
  - type: vlan
    device: bond-data
    mtu: {{ lookup('vars', networks_lower[network] ~ '_mtu') }}
    vlan_id: {{ lookup('vars', networks_lower[network] ~ '_vlan_id') }}
    addresses:
    - ip_netmask: {{ lookup('vars', networks_lower[network] ~ '_ip') }}/{{ lookup('vars', networks_lower[network] ~ '_cidr') }}
    routes: {{ lookup('vars', networks_lower[network] ~ '_host_routes') }}

此模板使用五个网络接口,并为编号的接口分配多个标记的 VLAN 设备。在 nic4nic5 上,此模板创建 OVS 网桥。

10.5. 其他 overcloud 网络配置

本章介绍了 第 10.4 节 “自定义网络接口模板” 中介绍的概念和程序,并提供一些额外的信息,以帮助配置 overcloud 网络的一部分。

10.5.1. 配置自定义接口

单个接口可能需要修改。以下示例显示了使用第二个 NIC 连接到具有 DHCP 地址的基础架构网络所需的修改,并将另一个 NIC 用于绑定:

network_config:
  # Add a DHCP infrastructure network to nic2
  - type: interface
    name: nic2
    mtu: {{ tenant_mtu }}
    use_dhcp: true
    primary: true
  - type: vlan
    mtu: {{ tenant_mtu }}
    vlan_id: {{ tenant_vlan_id }}
    addresses:
    - ip_netmask: {{ tenant_ip }}/{{ tenant_cidr }}
    routes: {{ [tenant_host_routes] | flatten | unique }}
  - type: ovs_bridge
    name: br-bond
    mtu: {{ external_mtu }}
    dns_servers: {{ ctlplane_dns_nameservers }}
    use_dhcp: false
    members:
      - type: interface
        name: nic10
        mtu: {{ external_mtu }}
        use_dhcp: false
        primary: true
      - type: vlan
        mtu: {{ external_mtu }}
        vlan_id: {{ external_vlan_id }}
        addresses:
        - ip_netmask: {{ external_ip }}/{{ external_cidr }}
        routes: {{ [external_host_routes, [{'default': True, 'next_hop': external_gateway_ip}]] | flatten | unique }}

网络接口模板使用实际接口名称(eth0, eth1, enp0s25)或一组编号的接口(nic1, nic2, nic3)。当使用编号接口(nic1, nic2 等)而不是命名接口(eth0, eno2 等)时,角色中的主机的网络接口不必完全相同。例如,一个主机可能具有接口 em1em2,而另一个主机有 eno1eno2,但您可以将两个主机的 NIC 称为 nic1nic2

编号的接口的顺序对应于命名网络接口类型的顺序:

  • ethX 接口,如 eth 0、eth1 等。这些通常是载入接口。
  • enoX 接口,如 eno 0、eno1 等。这些通常是载入接口。
  • enX 接口,数字排序,如 enp3s 0、enp3s1、 ens3 等等。这些通常是附加组件接口。

编号的 NIC 方案仅包含实时接口,例如,如果接口附加到交换机上,则接口有电缆。如果您的主机有四个接口,而有些主机有六个接口,请使用 nic1nic4,并为每个主机上仅附加四个电缆。

为预置备节点自定义 NIC 映射

如果使用预置备节点,您可以通过在环境文件中配置 NetConfigDataLookup heat 参数,为特定节点指定 os-net-config 映射。

注意

NetConfigDataLookup heat 参数的配置等同于节点定义文件 overcloud-baremetal-deploy.yaml 中的 net_config_data_lookup 属性。如果没有使用预置备节点,则必须在节点定义文件中配置 NIC 映射。有关配置 net_config_data_lookup 属性的更多信息,请参阅 裸机节点置备属性

您可以为每个节点上的物理接口分配别名,以预先确定哪些物理 NIC 映射到特定别名,如 nic1nic2,您可以将 MAC 地址映射到指定的别名。您可以使用 MAC 地址或 DMI 关键字映射特定节点,也可以使用 DMI 关键字映射一组节点。以下示例将三个节点和两个带有别名的节点组配置为物理接口。生成的配置由 os-net-config 应用。在每个节点上,您可以在 /etc/os-net-config/mapping.yaml 文件的 interface_mapping 部分中看到应用的配置。

os-net-config-mappings.yaml示例

NetConfigDataLookup:
  node1: 1
    nic1: "00:c8:7c:e6:f0:2e"
  node2:
    nic1: "00:18:7d:99:0c:b6"
  node3: 2
    dmiString: "system-uuid" 3
    id: 'A8C85861-1B16-4803-8689-AFC62984F8F6'
    nic1: em3
  # Dell PowerEdge
  nodegroup1: 4
    dmiString: "system-product-name"
    id: "PowerEdge R630"
    nic1: em3
    nic2: em1
    nic3: em2
  # Cisco UCS B200-M4"
  nodegroup2:
    dmiString: "system-product-name"
    id: "UCSB-B200-M4"
    nic1: enp7s0
    nic2: enp6s0

1
node1 映射到指定的 MAC 地址,并分配 nic1 作为此节点上 MAC 地址的别名。
2
使用系统 UUID "A8C85861-1B16-4803-8689-AFC62984F8F6" 将 node3 映射到节点,并将 nic1 指定为此节点上的 em3 接口的别名。
3
dmiString 参数必须设置为一个有效的字符串关键字。有关有效字符串关键字的列表,请查看 DMIDECODE (8)手册页。
4
nodegroup1 中的所有节点映射到产品名称 "PowerEdge R630" 的节点,并分配 nic 1、nic2nic3 作为这些节点上命名接口的别名。
注意

通常,OS-net-config 仅注册已经以 UP 状态连接的接口。但是,如果您使用自定义映射文件的硬编码接口,接口也会注册,即使它处于 DOWN 状态。

10.5.2. 配置路由和默认路由

您可以通过以下两种方式之一设置主机的默认路由。如果接口使用 DHCP,DHCP 服务器提供网关地址,系统将使用该网关的默认路由。否则,您可以在带有静态 IP 的接口上设置默认路由。

虽然 Linux 内核支持多个默认网关,但它只使用具有最低指标的网关。如果有多个 DHCP 接口,这可能会导致无法预计的默认网关。在这种情况下,建议为使用默认路由的接口以外的接口设置 defroute: false

例如,您可能希望 DHCP 接口(nic3)是默认路由。使用以下 YAML 代码片段禁用另一个 DHCP 接口上的默认路由(nic2):

# No default route on this DHCP interface
- type: interface
  name: nic2
  use_dhcp: true
  defroute: false
# Instead use this DHCP interface as the default route
- type: interface
  name: nic3
  use_dhcp: true
注意

defroute 参数仅适用于通过 DHCP 获取的路由。

要在带有静态 IP 的接口上设置静态路由,请指定到子网的路由。例如,您可以通过内部 API 网络上的 172.17.0.1 的网关设置到 10.1.2.0/24 子网的路由:

    - type: vlan
      device: bond1
      vlan_id: 9
      addresses:
      - ip_netmask: 172.17.0.100/16
      routes:
      - ip_netmask: 10.1.2.0/24
        next_hop: 172.17.0.1

10.5.3. 配置基于策略的路由

要在 Controller 节点上配置不同网络的无限访问,请配置基于策略的路由。基于策略的路由使用路由表,在具有多个接口的主机上,您可以根据源地址通过特定接口发送流量。您可以将来自不同源的数据包路由到不同的网络,即使目的地相同。

例如,您可以将路由配置为根据数据包的源地址将流量发送到内部 API 网络,即使默认路由用于外部网络。您还可以为每个接口定义特定的路由规则。

Red Hat OpenStack Platform 使用 os-net-config 工具为您的 overcloud 节点配置网络属性。os-net-config 工具管理 Controller 节点上的以下网络路由:

  • /etc/iproute2/rt_tables 文件中的路由表
  • /etc/sysconfig/network-scripts/rule-{ifname} 文件中的 IPv4 规则
  • /etc/sysconfig/network-scripts/rule6-{ifname} 文件中的 IPv6 规则
  • /etc/sysconfig/network-scripts/route-{ifname}中的路由表特定路由

先决条件

流程

  1. /home/stack/templates/custom-nics 目录在自定义 NIC 模板中创建 接口 条目,为接口定义路由,并定义与您的部署相关的规则:

      network_config:
      - type: interface
        name: em1
        use_dhcp: false
        addresses:
          - ip_netmask: {{ external_ip }}/{{ external_cidr}}
        routes:
          - default: true
            next_hop: {{ external_gateway_ip }}
          - ip_netmask: {{ external_ip }}/{{ external_cidr}}
            next_hop: {{ external_gateway_ip }}
            route_table: 2
            route_options: metric 100
        rules:
          - rule: "iif em1 table 200"
            comment: "Route incoming traffic to em1 with table 200"
          - rule: "from 192.0.2.0/24 table 200"
            comment: "Route all traffic from 192.0.2.0/24 with table 200"
          - rule: "add blackhole from 172.19.40.0/24 table 200"
          - rule: "add unreachable iif em1 from 192.168.1.0/24"
  2. 在部署命令中包含自定义 NIC 配置和网络环境文件,以及与部署相关的任何其他环境文件:

    $ openstack overcloud deploy --templates \
    -e /home/stack/templates/<custom-nic-template>
    -e <OTHER_ENVIRONMENT_FILES>

验证

  • 在 Controller 节点上输入以下命令验证路由配置是否正常工作:

    $ cat /etc/iproute2/rt_tables
    $ ip route
    $ ip rule

10.5.4. 配置巨型帧

最大传输单元(MTU)设置决定了通过单一以太网帧传输的最大数据量。使用较大的值会导致开销较少,因为每个帧以标头的形式添加数据。默认值为 1500,使用更高的值需要配置交换机端口来支持巨型帧。大多数交换机支持至少 9000 的 MTU,但很多交换机默认配置为 1500。

VLAN 的 MTU 不能超过物理接口的 MTU。确保您在绑定或接口中包含 MTU 值。

存储、存储管理、内部 API 和租户网络都可从巨型帧中受益。

您可以在 jinja2 模板或 network_data.yaml 文件中更改 mtu 的值。如果您在部署过程中呈现的 network_data.yaml 文件中的值。

警告

路由器通常无法跨第 3 层边界转发巨型帧。为避免连接问题,请不要更改 Provisioning 接口、外部接口和任何浮动 IP 接口的默认 MTU。

---
{% set mtu_list = [ctlplane_mtu] %}
{% for network in role_networks %}
{{ mtu_list.append(lookup('vars', networks_lower[network] ~ '_mtu')) }}
{%- endfor %}
{% set min_viable_mtu = mtu_list | max %}
network_config:
- type: ovs_bridge
  name: bridge_name
  mtu: {{ min_viable_mtu }}
  use_dhcp: false
  dns_servers: {{ ctlplane_dns_nameservers }}
  domain: {{ dns_search_domains }}
  addresses:
  - ip_netmask: {{ ctlplane_ip }}/{{ ctlplane_subnet_cidr }}
  routes: {{ [ctlplane_host_routes] | flatten | unique }}
  members:
  - type: interface
    name: nic1
    mtu: {{ min_viable_mtu }}
    primary: true
  - type: vlan
    mtu: 9000  1
    vlan_id: {{ storage_vlan_id }}
    addresses:
    - ip_netmask: {{ storage_ip }}/{{ storage_cidr }}
    routes: {{ [storage_host_routes] | flatten | unique }}
  - type: vlan
    mtu: {{ storage_mgmt_mtu }} 2
    vlan_id: {{ storage_mgmt_vlan_id }}
    addresses:
    - ip_netmask: {{ storage_mgmt_ip }}/{{ storage_mgmt_cidr }}
    routes: {{ [storage_mgmt_host_routes] | flatten | unique }}
  - type: vlan
    mtu: {{ internal_api_mtu }}
    vlan_id: {{ internal_api_vlan_id }}
    addresses:
    - ip_netmask: {{ internal_api_ip }}/{{ internal_api_cidr }}
    routes: {{ [internal_api_host_routes] | flatten | unique }}
  - type: vlan
    mtu: {{ tenant_mtu }}
    vlan_id: {{ tenant_vlan_id }}
    addresses:
    - ip_netmask: {{ tenant_ip }}/{{ tenant_cidr }}
    routes: {{ [tenant_host_routes] | flatten | unique }}
  - type: vlan
    mtu: {{ external_mtu }}
    vlan_id: {{ external_vlan_id }}
    addresses:
    - ip_netmask: {{ external_ip }}/{{ external_cidr }}
    routes: {{ [external_host_routes, [{'default': True, 'next_hop': external_gateway_ip}]] | flatten | unique }}
1
直接在 jinja2 模板中更新的 MTU 值。
2
部署期间,从 network_data.yaml 文件中获取 MTU 值。

10.5.5. 配置 ML2/OVN 北向路径 MTU 发现,以实现巨型帧碎片

如果内部网络中的虚拟机将巨型帧发送到外部网络,并且内部网络的最大传输单元(MTU)超过外部网络的 MTU,则北向帧可以轻松地超过外部网络的容量。

ML2/OVS 会自动处理这种过度化数据包问题,ML2/OVN 会自动处理 TCP 数据包。

但是,为了确保正确处理使用 ML2/OVN 机制驱动程序的部署中的无线 UDP 数据包,您需要执行额外的配置步骤。

这些步骤将 ML2/OVN 路由器配置为将 ICMP"fragment required"数据包返回到发送虚拟机,其中发送的应用程序会将有效负载分成较小的数据包。

注意

在 east/west 流量中,RHOSP ML2/OVN 部署不支持碎片超过 east/west 路径上最小 MTU 的数据包。例如:

  • VM1 位于 Network1 上,其 MTU 为 1300。
  • VM2 位于 Network2 上,其 MTU 为 1200。
  • 在 VM1 和 VM2 之间以方向形式进行 ping,大小为 1171 或更少成功。大于 1171 的 ping 会导致数据包丢失百分比。

    由于没有客户的具体要求,红帽还没有计划提供对它的支持。

流程

  1. 在 ml2_conf.ini 的 [ovn] 部分中设置以下值:

    ovn_emit_need_to_frag = True

10.5.6. 在中继接口上配置原生 VLAN

如果中继的接口或绑定在原生 VLAN 上有网络,则 IP 地址会直接分配给网桥,且没有 VLAN 接口。

以下示例配置了一个绑定接口,其中外部网络位于原生 VLAN 上:

network_config:
- type: ovs_bridge
  name: br-ex
  addresses:
  - ip_netmask: {{ external_ip }}/{{ external_cidr }}
  routes: {{ external_host_routes }}
  members:
  - type: ovs_bond
    name: bond1
    ovs_options: {{ bond_interface_ovs_options }}
    members:
    - type: interface
      name: nic3
      primary: true
    - type: interface
      name: nic4
注意

当您将地址或路由语句移到网桥时,从网桥中删除对应的 VLAN 接口。对所有适用的角色进行更改。外部网络仅存在于控制器上,因此只有控制器模板需要更改。存储网络附加到所有角色,因此如果存储网络位于默认 VLAN 上,则所有角色都需要修改。

10.5.7. 增加 netfilter 跟踪的最大连接数

Red Hat OpenStack Platform (RHOSP)网络服务(neutron)使用 netfilter 连接跟踪来构建有状态的防火墙,并在虚拟网络上提供网络地址转换(NAT)。在某些情况下,可能会导致内核空间达到最大连接限制,并导致错误,如 nf_conntrack: 表 full,丢弃数据包。您可以提高连接跟踪(conntrack)的限制,并避免这些类型的错误。您可以在 RHOSP 部署中增加一个或多个角色的 conntrack 限制。

先决条件

  • 成功安装 RHOSP undercloud。

流程

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

    $ source ~/stackrc
  3. 创建自定义 YAML 环境文件。

    示例

    $ vi /home/stack/templates/custom-environment.yaml

  4. 您的环境文件必须包含 keywords parameter_defaultsExtraSysctlSettings。为 netfilter 可在变量 net.nf_conntrack_max 中跟踪的最大连接数输入一个新值。

    示例

    在本例中,您可以在 RHOSP 部署中的所有主机上设置 conntrack 限制:

    parameter_defaults:
      ExtraSysctlSettings:
        net.nf_conntrack_max:
          value: 500000

    使用 & lt;role>Parameter 参数为特定角色设置 conntrack 限制:

    parameter_defaults:
      <role>Parameters:
        ExtraSysctlSettings:
          net.nf_conntrack_max:
            value: <simultaneous_connections>
    • <role > 替换为角色的名称。

      例如,使用 ControllerParameters 为 Controller 角色设置 conntrack 限制,或 ComputeParameters 为 Compute 角色设置 conntrack 限制。

    • 将 < simultaneous_connections > 替换为您要同时允许的连接数量。

      示例

      在本例中,您只能为 RHOSP 部署中的 Controller 角色设置 conntrack 限制:

      parameter_defaults:
        ControllerParameters:
          ExtraSysctlSettings:
            net.nf_conntrack_max:
              value: 500000
      注意

      net.nf_conntrack_max 的默认值为 500000 连接。最大值为:429 496739)

  5. 运行部署命令,包括核心 heat 模板、环境文件和新的自定义环境文件。

    重要

    环境文件的顺序非常重要,因为后续环境文件中定义的参数和资源具有优先权。

    示例

    $ openstack overcloud deploy --templates \
    -e /home/stack/templates/custom-environment.yaml

其他资源

10.6. 网络接口绑定

您可以在自定义网络配置中使用各种绑定选项。

10.6.1. overcloud 节点的网络接口绑定

您可以将多个物理 NIC 捆绑在一起,以组成一个名为 bond 的单一逻辑频道。您可以配置绑定来为高可用性系统提供冗余功能,或提高吞吐量。

Red Hat OpenStack Platform 支持 Open vSwitch (OVS)内核绑定、OVS-DPDK 绑定和 Linux 内核绑定。

表 10.10. 支持的接口绑定类型
绑定类型类型值允许的网桥类型允许的成员

OVS 内核绑定

ovs_bond

ovs_bridge

interface

OVS-DPDK 绑定

ovs_dpdk_bond

ovs_user_bridge

ovs_dpdk_port

Linux 内核绑定

linux_bond

ovs_bridgelinux_bridge

interface

重要

不要在同一节点上组合 ovs_bridgeovs_user_bridge

10.6.2. 创建 Open vSwitch (OVS)绑定

您可以在网络接口模板中创建 OVS 绑定。例如,您可以创建一个绑定作为 OVS 用户空间网桥的一部分:

- type: ovs_user_bridge
  name: br-dpdk0
  members:
  - type: ovs_dpdk_bond
    name: dpdkbond0
    rx_queue: {{ num_dpdk_interface_rx_queues }}
    members:
    - type: ovs_dpdk_port
      name: dpdk0
      members:
      - type: interface
        name: nic4
    - type: ovs_dpdk_port
      name: dpdk1
      members:
      - type: interface
        name: nic5

在本例中,您可以从两个 DPDK 端口创建绑定。

ovs_options 参数包含绑定选项。您可以使用 BondInterfaceOvsOptions 参数在网络环境文件中配置绑定选项:

environment_parameters:
  BondInterfaceOvsOptions: "bond_mode=active_backup"

10.6.3. Open vSwitch (OVS)绑定选项

您可以使用 NIC 模板文件中的 ovs_options heat 参数设置各种 Open vSwitch (OVS)绑定选项。

bond_mode=balance-slb
源负载平衡(slb)根据源 MAC 地址和输出 VLAN 平衡流,并在流量模式发生变化时定期重新平衡。当您使用 balance-slb 绑定选项配置绑定时,远程交换机不需要配置。网络服务(neutron)将每个源 MAC 和 VLAN 对分配到一个链接,并通过该链接从该 MAC 和 VLAN 传输所有数据包。使用基于源 MAC 地址和 VLAN 号的简单哈希算法,并在流量模式更改时定期重新平衡。balance-slb 模式与 Linux 绑定驱动程序使用的 2 绑定模式类似。您可以使用此模式来提供负载平衡,即使交换机没有配置为使用 LACP。
bond_mode=active-backup
当您使用 active-backup 绑定模式配置绑定时,网络服务会使一个 NIC 处于待机状态。当活跃连接失败时,待机 NIC 会恢复网络操作。物理交换机只显示一个 MAC 地址。这个模式不需要交换机配置,当链接连接到单独的交换机时可以正常工作。这个模式不提供负载平衡。
lacp=[active | passive | off]
控制链路聚合控制协议(LACP)行为。只有某些交换机支持 LACP。如果您的交换机不支持 LACP,请使用 bond_mode=balance-slbbond_mode=active-backup
other-config:lacp-fallback-ab=true
如果 LACP 失败,则将 active-backup 设置为绑定模式。
other_config:lacp-time=[fast | slow]
将 LACP heartbeat 设置为 1 秒 (fast) 或 30 秒 (slow)。默认设置会较慢。
other_config:bond-detect-mode=[miimon | carrier]
将链路检测设置为使用 miimon heartbeats (miimon)或监控载体(carrier)。默认为载体。
other_config:bond-miimon-interval=100
如果使用 miimon,请设置心跳间隔(毫秒)。
bond_updelay=1000
设置链接必须激活的时间间隔(毫秒),以防止出现问题。
other_config:bond-rebalance-interval=10000
设置在绑定成员之间重新平衡的时间间隔(毫秒)。将此值设置为 0,以禁用绑定成员之间的流重新平衡。

10.6.5. 创建 Linux 绑定

您可以在网络接口模板中创建 Linux 绑定。例如,您可以创建一个绑定两个接口的 Linux 绑定:

- type: linux_bond
  name: bond_api
  mtu: {{ min_viable_mtu_ctlplane }}
  use_dhcp: false
  bonding_options: {{ bond_interface_ovs_options }}
  dns_servers: {{ ctlplane_dns_nameservers }}
  domain: {{ dns_search_domains }}
  members:
  - type: interface
    name: nic2
    mtu: {{ min_viable_mtu_ctlplane }}
    primary: true
  - type: interface
    name: nic3
    mtu: {{ min_viable_mtu_ctlplane }}

bonding_options 参数为 Linux 绑定设置特定的绑定选项。

模式
设置绑定模式,示例中是 802.3ad 或 LACP 模式。有关 Linux 绑定模式的更多信息,请参阅 Red Hat Enterprise Linux 9 配置和管理网络指南中的 "根据绑定模式启用流交换配置 "。
lacp_rate
定义 LACP 数据包是否每 1 秒发送一次,或每 30 秒发送一次。
updelay
定义接口在用于流量之前必须激活的最短时间。这个最小配置有助于缓解端口冻结中断。
miimon
使用驱动程序的 MIIMON 功能监控端口状态的时间间隔(毫秒)。

使用以下额外示例配置您自己的 Linux 绑定指南:

  • 使用一个 VLAN 将 Linux 绑定设置为 active-backup 模式:

    ....
    
    - type: linux_bond
      name: bond_api
      mtu: {{ min_viable_mtu_ctlplane }}
      use_dhcp: false
      bonding_options: "mode=active-backup"
      dns_servers: {{ ctlplane_dns_nameservers }}
      domain: {{ dns_search_domains }}
      members:
      - type: interface
        name: nic2
        mtu: {{ min_viable_mtu_ctlplane }}
        primary: true
      - type: interface
        name: nic3
        mtu: {{ min_viable_mtu_ctlplane }}
      - type: vlan
        mtu: {{ internal_api_mtu }}
        vlan_id: {{ internal_api_vlan_id }}
        addresses:
        - ip_netmask:
            {{ internal_api_ip }}/{{ internal_api_cidr }}
          routes:
            {{ internal_api_host_routes }}
  • OVS 网桥上的 Linux 绑定。绑定设置为 802.3ad LACP 模式,它带有一个 VLAN:

    - type: linux_bond
      name: bond_tenant
      mtu: {{ min_viable_mtu_ctlplane }}
      bonding_options: "mode=802.3ad updelay=1000 miimon=100"
      use_dhcp: false
      dns_servers: {{ ctlplane_dns_nameserver }}
      domain: {{ dns_search_domains }}
      members:
        - type: interface
          name: p1p1
          mtu: {{ min_viable_mtu_ctlplane }}
        - type: interface
          name: p1p2
          mtu: {{ min_viable_mtu_ctlplane }}
        - type: vlan
          mtu: {{ tenant_mtu }}
          vlan_id: {{ tenant_vlan_id }}
          addresses:
            - ip_netmask:
               {{ tenant_ip }}/{{ tenant_cidr }}
          routes:
            {{ tenant_host_routes }}
    重要

    您必须设置 min_viable_mtu_ctlplane,然后才能使用它。将 /usr/share/ansible/roles/tripleo_network_config/templates/2_linux_bonds_vlans.j2 复制到您的 templates 目录中,并根据您的需要进行修改。如需更多信息,请参阅 添加可组合网络,并参阅与网络配置模板相关的步骤。

10.7. 更新网络配置文件的格式

Red Hat OpenStack Platform (RHOSP) 17.0 中更改了网络配置 yaml 文件的格式。网络配置文件 network_data.yaml 的结构已更改,NIC 模板文件格式已从 yaml 文件格式改为 Jinja2 ansible 格式 j2

您可以使用以下转换工具将当前部署中的现有网络配置文件转换为 RHOSP 17+ 格式:

  • convert_v1_net_data.py
  • convert_heat_nic_config_to_ansible_j2.py

您还可以手动转换现有 NIC 模板文件。

您需要转换的文件包括:

  • network_data.yaml
  • 控制器 NIC 模板
  • 计算 NIC 模板
  • 任何其他自定义网络文件

10.7.1. 更新网络配置文件的格式

Red Hat OpenStack Platform (RHOSP) 17.0 中更改了网络配置 yaml 文件格式。您可以使用 convert_v1_net_data.py 转换工具将当前部署中的现有网络配置文件转换为 RHOSP 17+ 格式。

流程

  1. 下载转换工具:

    • /usr/share/openstack-tripleo-heat-templates/tools/convert_v1_net_data.py
  2. 将 RHOSP 16+ 网络配置文件转换为 RHOSP 17+ 格式:

    $ python3 convert_v1_net_data.py <network_config>.yaml
    • 将 < network_config > 替换为您要转换的现有配置文件的名称,如 network_data.yaml

10.7.2. 自动将 NIC 模板转换为 Jinja2 Ansible 格式

在 Red Hat OpenStack Platform (RHOSP) 17.0 中,NIC 模板文件格式已从 yaml 文件格式改为 Jinja2 Ansible 格式 j2

您可以使用 convert_heat_nic_config_to_ansible_j2.py 转换工具将当前部署中的现有 NIC 模板文件转换为 Jinja2 格式。

您还可以手动转换现有 NIC 模板文件。如需更多信息,请参阅 手动将 NIC 模板转换为 Jinja2 Ansible 格式

您需要转换的文件包括:

  • 控制器 NIC 模板
  • 计算 NIC 模板
  • 任何其他自定义网络文件

流程

  1. 下载转换工具:

    • /usr/share/openstack-tripleo-heat-templates/tools/convert_heat_nic_config_to_ansible_j2.py
  2. 将 Compute 和 Controller NIC 临时文件和任何其他自定义网络文件转换为 Jinja2 Ansible 格式:

    $ python3 convert_heat_nic_config_to_ansible_j2.py \
     [--stack <overcloud> | --standalone] --networks_file <network_config.yaml> \
     <network_template>.yaml
    • <overcloud> 替换为 overcloud 堆栈的名称或 UUID。如果没有指定 --stack,则堆栈默认为 overcloud

      注意

      您只能在 RHOSP 16 部署中使用 --stack 选项,因为它需要在 undercloud 节点上运行编排服务(heat)。从 RHOSP 17 开始,RHOSP 部署使用临时 heat,它会在容器中运行编排服务。如果编排服务不可用,或者您没有堆栈,则使用 --standalone 选项而不是 --stack

    • <network_config.yaml > 替换为描述网络部署的配置文件名称,如 network_data.yaml
    • 将 < network_template > 替换为您要转换的网络配置文件的名称。

    重复此命令,直到您转换了所有自定义网络配置文件。convert_heat_nic_config_to_ansible_j2.py 脚本为您传递给它的每个 yaml 文件生成一个 .j2 文件以进行转换。

  3. 检查每个生成的 .j2 文件,以确保配置正确并针对您的环境完成,并手动解决工具生成的注释,以突出显示无法转换配置的位置。有关手动将 NIC 配置转换为 Jinja2 格式的更多信息,请参阅 Heat 参数到 Ansible 变量映射
  4. network-environment.yaml 文件中配置 192.168.1.0/24 NetworkConfigTemplate 参数,以指向生成的 .j2 文件:

    parameter_defaults:
      ControllerNetworkConfigTemplate: '/home/stack/templates/custom-nics/controller.j2'
      ComputeNetworkConfigTemplate: '/home/stack/templates/custom-nics/compute.j2'
  5. 从您的 network-environment.yaml 文件中删除旧网络配置文件,删除 resource_registry 映射:

    resource_registry:
      OS::TripleO::Compute::Net::SoftwareConfig: /home/stack/templates/nic-configs/compute.yaml
      OS::TripleO::Controller::Net::SoftwareConfig: /home/stack/templates/nic-configs/controller.yaml

10.7.3. 手动将 NIC 模板转换为 Jinja2 Ansible 格式

在 Red Hat OpenStack Platform (RHOSP) 17.0 中,NIC 模板文件格式已从 yaml 文件格式改为 Jinja2 Ansible 格式 j2

您可以手动转换现有 NIC 模板文件。

您还可以使用 convert_heat_nic_config_to_ansible_j2.py 转换工具将当前部署中的现有 NIC 模板文件转换为 Jinja2 格式。如需更多信息,请参阅自动将 NIC 模板转换为 Jinja2 ansible 格式

您需要转换的文件包括:

  • 控制器 NIC 模板
  • 计算 NIC 模板
  • 任何其他自定义网络文件

流程

  1. 创建 Jinja2 模板。您可以使用 os-net-config 模式创建新模板,或者从 undercloud 节点上的 /usr/share/ansible/roles/tripleo_network_config/templates/ 目录中复制并编辑示例模板。
  2. 将 heat 内部函数替换为 Jinja2 过滤器。例如,使用以下过滤器来计算 min_viable_mtu

    {% set mtu_list = [ctlplane_mtu] %}
    {% for network in role_networks %}
    {{ mtu_list.append(lookup('vars', networks_lower[network] ~ '_mtu')) }}
    {%- endfor %}
    {% set min_viable_mtu = mtu_list | max %}
  3. 使用 Ansible 变量为您的部署配置网络属性。您可以手动配置每个独立网络,或者通过迭代 role_networks 来为每个网络配置:

    • 要手动配置每个网络,请将每个 get_param 功能替换为等同的 Ansible 变量。例如,如果您的当前部署使用 get_param: InternalApiNetworkVlanID 配置 vlan_id,请在模板中添加以下配置:

      vlan_id: {{ internal_api_vlan_id }}
      表 10.12. 从 heat 参数映射到 Ansible 变量的网络属性映射示例
      yaml 文件格式Jinja2 ansible 格式,j2
      - type: vlan
        device: nic2
        vlan_id:
          get_param: InternalApiNetworkVlanID
        addresses:
        - ip_netmask:
            get_param: InternalApiIpSubnet
      - type: vlan
        device: nic2
        vlan_id: {{ internal_api_vlan_id }}
        addresses:
        - ip_netmask: {{ internal_api_ip }}/{{ internal_api_cidr }}
    • 要编程配置每个网络,请在模板中添加 Jinja2 for-loop 结构,该结构通过使用 role_networks 来检索可用网络。

      示例

      {% for network in role_networks %}
        - type: vlan
          mtu: {{ lookup('vars', networks_lower[network] ~ '_mtu') }}
          vlan_id: {{ lookup('vars', networks_lower[network] ~ '_vlan_id') }}
          addresses:
          - ip_netmask: {{ lookup('vars', networks_lower[network] ~ '_ip') }}/{{ lookup('vars', networks_lower[network] ~ '_cidr') }}
          routes: {{ lookup('vars', networks_lower[network] ~ '_host_routes') }}
      {%- endfor %}

    有关 heat 参数到 Ansible 变量等效的映射的完整列表,请参阅 Heat 参数到 Ansible 变量映射

  4. network-environment.yaml 文件中配置 192.168.1.0/24 NetworkConfigTemplate 参数,以指向生成的 .j2 文件:

    parameter_defaults:
      ControllerNetworkConfigTemplate: '/home/stack/templates/custom-nics/controller.j2'
      ComputeNetworkConfigTemplate: '/home/stack/templates/custom-nics/compute.j2'
  5. 从您的 network-environment.yaml 文件中删除旧网络配置文件,删除 resource_registry 映射:

    resource_registry:
      OS::TripleO::Compute::Net::SoftwareConfig: /home/stack/templates/nic-configs/compute.yaml
      OS::TripleO::Controller::Net::SoftwareConfig: /home/stack/templates/nic-configs/controller.yaml

10.7.4. Heat 参数到 Ansible 变量映射

NIC 模板文件格式已从 yaml 文件格式改为 Jinja2 ansible 格式 j2,在 Red Hat OpenStack Platform (RHOSP) 17.x 中。

要手动将现有 NIC 模板文件转换为 Jinja2 ansible 格式,您可以将 heat 参数映射到 Ansible 变量,以配置部署中预置备节点的网络属性。如果您运行 openstack overcloud node provision 而无需指定 --network-config 可选参数,您还可以将 heat 参数映射到 Ansible 变量。

例如,如果您的当前部署使用 get_param: InternalApiNetworkVlanID 配置 vlan_id,则将其替换为新 Jinja2 模板中的以下配置:

vlan_id: {{ internal_api_vlan_id }}
注意

如果您使用 --network-config 可选参数运行 openstack overcloud node provision 来置备节点,则必须使用 overcloud-baremetal-deploy.yaml 中的参数为您的部署配置网络属性。如需更多信息,请参阅 Heat 参数用于置备定义文件映射

下表列出了 heat 参数到等效 Ansible 变量的可用映射。

表 10.13. 从 heat 参数映射到 Ansible 变量
Heat 参数Ansible 变量

BondInterfaceOvsOptions

{{ bond_interface_ovs_options }}

ControlPlaneIp

{{ ctlplane_ip }}

ControlPlaneDefaultRoute

{{ ctlplane_gateway_ip }}

ControlPlaneMtu

{{ ctlplane_mtu }}

ControlPlaneStaticRoutes

{{ ctlplane_host_routes }}

ControlPlaneSubnetCidr

{{ ctlplane_subnet_cidr }}

DnsSearchDomains

{{ dns_search_domains }}

DnsServers

{{ ctlplane_dns_nameservers }}

注意

此 Ansible 变量填充在 undercloud.conf 中为 DEFAULT/undercloud_nameservers%SUBNET_SECTION%/dns_nameservers 配置的 IP 地址。%SUBNET_SECTION%/dns_nameservers 的配置会覆盖 DEFAULT/undercloud_nameservers 的配置,以便您可以将不同的 DNS 服务器用于 undercloud 和 overcloud,以及不同置备子网中的节点的不同 DNS 服务器。

NumDpdkInterfaceRxQueues

{{ num_dpdk_interface_rx_queues }}

配置没有在表中列出的 heat 参数

要配置没有在表中列出的 heat 参数,您必须将该参数配置为 {{role.name}}ExtraGroupVars。将参数配置为 {{role.name}}ExtraGroupVars 参数后,您可以在新模板中使用它。例如,要配置 StorageSupernet 参数,请在网络配置文件中添加以下配置:

parameter_defaults:
  ControllerExtraGroupVars:
    storage_supernet: 172.16.0.0/16

然后,您可以将 {{ storage_supernet }} 添加到 Jinja2 模板。

警告

如果在节点置备中使用 --network-config 选项,则此过程将无法正常工作。需要自定义变量的用户不应使用 --network-config 选项。相反,在创建 Heat 堆栈后,将节点网络配置应用到 config-download ansible 运行。

将 Ansible 变量语法转换为编程配置每个网络

当您使用 Jinja2 for-loop 结构通过迭代 role_networks 来检索可用的网络时,您需要检索每个网络角色的小写名称,以预先填充每个属性。使用以下结构将 Ansible 变量 从上述表转换为所需的语法:

{{ lookup(‘vars’, networks_lower[network] ~ ‘_<property>’) }}

  • &lt;property> 替换为您要设置的属性,如 ipvlan_idmtu

例如,要动态为每个 NetworkVlanID 填充值,请将 {{ <network_name>_vlan_id }} 替换为以下配置:

{{ lookup(‘vars’, networks_lower[network] ~ ‘_vlan_id’) }}`

10.7.5. 用于置备定义文件映射的 Heat 参数

如果您使用 --network-config 可选参数运行 openstack overcloud node provision 命令置备节点,则必须使用节点定义文件 overcloud-baremetal-deploy.yaml 中的参数为您的部署配置网络属性。

如果您的部署使用预置备节点,您可以将 heat 参数映射到 Ansible 变量,以配置网络属性。如果您运行 openstack overcloud node provision 而无需指定 --network-config 可选参数,您还可以将 heat 参数映射到 Ansible 变量。有关使用 Ansible 变量配置网络属性的更多信息,请参阅 Heat 参数到 Ansible 变量映射

下表列出了从 heat 参数到节点定义文件 overcloud-baremetal-deploy.yaml 中等同的 network_config 属性的可用映射。

表 10.14. 从 heat 参数映射到节点定义文件 overcloud-baremetal-deploy.yaml
Heat 参数network_config property

BondInterfaceOvsOptions

bond_interface_ovs_options

DnsSearchDomains

dns_search_domains

NetConfigDataLookup

net_config_data_lookup

NeutronPhysicalBridge

physical_bridge_name

NeutronPublicInterface

public_interface_name

NumDpdkInterfaceRxQueues

num_dpdk_interface_rx_queues

{{role.name}}NetworkConfigUpdate

network_config_update

下表列出了从 heat 参数到网络定义文件 network_data.yaml 中等效的属性的可用映射。

表 10.15. 从 heat 参数映射到网络定义文件 network_data.yaml
Heat 参数IPv4 network_data.yaml propertyIPv6 network_data.yaml property

<network_name>IpSubnet

- name: <network_name>
  subnets:
    subnet01:
      ip_subnet: 172.16.1.0/24
- name: <network_name>
  subnets:
    subnet01:
      ipv6_subnet: 2001:db8:a::/64

<network_name>NetworkVlanID

- name: <network_name>
  subnets:
    subnet01:
      ...
      vlan: <vlan_id>
- name: <network_name>
  subnets:
    subnet01:
      ...
      vlan: <vlan_id>

<network_name>Mtu

- name: <network_name>
  mtu:
- name: <network_name>
  mtu:

<network_name>InterfaceDefaultRoute

- name: <network_name>
  subnets:
    subnet01:
      ip_subnet: 172.16.16.0/24
      gateway_ip: 172.16.16.1
- name: <network_name>
  subnets:
    subnet01:
      ipv6_subnet: 2001:db8:a::/64
      gateway_ipv6: 2001:db8:a::1

<network_name>InterfaceRoutes

- name: <network_name>
  subnets:
    subnet01:
      ...
      routes:
        - destination: 172.18.0.0/24
          nexthop: 172.18.1.254
- name: <network_name>
  subnets:
    subnet01:
      ...
      routes_ipv6:
        - destination: 2001:db8:b::/64
          nexthop: 2001:db8:a::1

10.7.6. 对网络数据架构的更改

网络数据架构在 Red Hat OpenStack Platform (RHOSP) 17 中更新。RHOSP 16 及更早版本中使用的网络数据模式和 RHOSP 17 及之后的版本中使用的网络数据模式的主要区别如下:

  • 基础子网已移到 子网 映射中。这会对齐非路由和路由部署的配置,如 spine-leaf 网络。
  • enabled 选项不再用于忽略禁用的网络。相反,您必须从配置文件中删除禁用的网络。
  • compat_name 选项不再需要,因为已使用它的 heat 资源已被删除。
  • 以下参数不再在网络级别有效: ip_subnet,gateway_ip,allocation_pools,routes,ipv6_subnet,gateway_ipv6,ipv6_allocation_pools, 和 routes_ipv6。这些参数仍然在子网级别使用。
  • 引入了一个新的参数 physical_network,用于在裸机中创建 ironic 端口。
  • 新的参数 network_typesegmentation_id 替换 {{network.name}}NetValueSpecs,用于将网络类型设置为 vlan
  • RHOSP 17 中已弃用以下参数:

    • {{network.name}}NetCidr
    • {{network.name}}SubnetName
    • {{network.name}}Network
    • {{network.name}}AllocationPools
    • {{network.name}}Routes
    • {{network.name}}SubnetCidr_{{subnet}}
    • {{network.name}}AllocationPools_{{subnet}}
    • {{network.name}}Routes_{{subnet}}

第 11 章 置备和部署 overcloud

要创建 overcloud,您必须执行以下任务:

  1. 为您的物理网络置备网络资源:

    1. 如果要部署网络隔离或自定义可组合网络,请使用 YAML 格式创建网络定义文件。
    2. 运行网络调配命令,包括网络定义文件。
    3. 以 YAML 格式创建网络虚拟 IP (VIP)定义文件。
    4. 运行 network VIP 置备命令,包括网络 VIP 定义文件。
  2. 置备裸机节点:

    1. 以 YAML 格式创建节点定义文件。
    2. 运行裸机节点置备命令,包括节点定义文件。
  3. 部署 overcloud。

    1. 运行部署命令,包括调配命令生成的 heat 环境文件。

11.1. 置备 overcloud 网络

要为 Red Hat OpenStack Platform (RHOSP)物理网络环境配置网络资源,您必须执行以下任务:

  1. 为您的 overcloud 配置并调配网络资源。
  2. 为您的 overcloud 配置并置备网络虚拟 IP。

11.1.1. 配置并置备 overcloud 网络定义

您可以使用 YAML 格式的网络定义文件为您的 overcloud 配置物理网络。置备过程从网络定义文件创建一个 heat 环境文件,该文件包含您的网络规格。部署 overcloud 时,请将此 heat 环境文件包含在部署命令中。

先决条件

流程

  1. 查找 stackrc undercloud 凭据文件:

    $ source ~/stackrc
  2. 将所需的网络定义模板示例从 /usr/share/openstack-tripleo-heat-templates/network-data-samples 复制到环境文件目录中:

    (undercloud)$ cp /usr/share/openstack-tripleo-heat-templates/network-data-samples/default-network-isolation.yaml /home/stack/templates/network_data.yaml
  3. 为您的网络环境配置网络定义文件。例如,您可以更新外部网络定义:

    - name: External
      name_lower: external
      vip: true
      mtu: 1500
      subnets:
        external_subnet:
          ip_subnet: 10.0.0.0/24
          allocation_pools:
            - start: 10.0.0.4
              end: 10.0.0.250
          gateway_ip: 10.0.0.1
          vlan: 10
  4. 为您的环境配置任何其他网络和网络属性。有关您可以在网络定义文件中配置网络属性的属性的更多信息,请参阅配置 overcloud 网络
  5. 置备 overcloud 网络:

    (undercloud)$ openstack overcloud network provision \
     [--templates <templates_directory> \]
     --output  <deployment_file> \
     /home/stack/templates/<networks_definition_file>
    • 可选:包含 --templates 选项,以使用您自己的模板,而不是位于 /usr/share/openstack-tripleo-heat-templates 中的默认模板。将 <templates_directory > 替换为包含模板的目录的路径。
    • <deployment_file > 替换为用于部署命令生成的 heat 环境文件名称,如 /home/stack/templates/overcloud-networks-deployed.yaml
    • <networks_definition_file > 替换为网络定义文件的名称,如 network_data.yaml
  6. 在网络置备完成后,您可以使用以下命令检查创建的网络和子网:

    (undercloud)$ openstack network list
    (undercloud)$ openstack subnet list
    (undercloud)$ openstack network show <network>
    (undercloud)$ openstack subnet show <subnet>
    • <network > 替换为您要检查的网络的名称或 UUID。
    • <subnet > 替换为您要检查的子网的名称或 UUID。

11.1.2. 为 overcloud 配置并置备网络 VIP

您可以使用 YAML 格式在网络 VIP 定义文件中为您的 overcloud 配置网络虚拟 IP (VIP)。置备过程从 VIP 定义文件创建一个 heat 环境文件,其中包含您的 VIP 规格。部署 overcloud 时,请将此 heat 环境文件包含在部署命令中。

先决条件

流程

  1. 查找 stackrc undercloud 凭据文件:

    $ source ~/stackrc
  2. 将所需的网络 VIP 定义模板示例从 /usr/share/openstack-tripleo-heat-templates/network-data-samples 复制到环境文件目录中:

    (undercloud)$ cp /usr/share/openstack-tripleo-heat-templates/network-data-samples/vip-data-default-network-isolation.yaml /home/stack/templates/vip_data.yaml
  3. 可选:为环境配置 VIP 定义文件。例如,以下定义了外部网络和 control plane VIP:

    - network: external
      dns_name: overcloud
    - network: ctlplane
      dns_name: overcloud
  4. 为环境配置任何其他网络 VIP 属性。有关您可以在 VIP 定义文件中配置 VIP 属性的属性的更多信息,请参阅 添加可组合网络
  5. 置备网络 VIP:

    (undercloud)$ openstack overcloud network vip provision \
     [--templates <templates_directory> \]
     --stack <stack> \
     --output <deployment_file> \
     /home/stack/templates/<vip_definition_file>
    • 可选:包含 --templates 选项,以使用您自己的模板,而不是位于 /usr/share/openstack-tripleo-heat-templates 中的默认模板。将 <templates_directory > 替换为包含模板的目录的路径。
    • &lt;stack> 替换为置备网络 VIP 的堆栈的名称,如 overcloud
    • <deployment_file > 替换为用于部署命令生成的 heat 环境文件名称,如 /home/stack/templates/overcloud-vip-deployed.yaml
    • <vip_definition_file > 替换为 VIP 定义文件的名称,如 vip_data.yaml
  6. 当网络 VIP 置备完成后,您可以使用以下命令检查创建的 VIP:

    (undercloud)$ openstack port list
    (undercloud)$ openstack port show <port>
    • <port > 替换为您要检查的端口的名称或 UUID。

11.2. 置备裸机 overcloud 节点

要配置 Red Hat OpenStack Platform (RHOSP)环境,您必须执行以下任务:

  1. 为您的 overcloud 注册裸机节点。
  2. 为 director 提供裸机节点硬件清单。
  3. 在节点定义文件中配置裸机节点的数量、属性和网络布局。
  4. 为每个裸机节点分配一个资源类,将节点与指定的角色匹配。

您还可以执行其他可选任务,如将配置文件与指定 overcloud 节点匹配。

11.2.1. 为 overcloud 注册节点

director 需要一个节点定义模板,用于指定节点的硬件和电源管理详情。您可以使用 JSON 格式、node .json 或 YAML 格式创建此模板 nodes.yaml

流程

  1. 创建名为 nodes.jsonnodes.yaml 的模板,它将列出您的节点。使用以下 JSON 和 YAML 模板示例了解如何创建节点定义模板的结构:

    示例 JSON 模板

    {
      "nodes": [{
        "name": "node01",
        "ports": [{
          "address": "aa:aa:aa:aa:aa:aa",
          "physical_network": "ctlplane",
          "local_link_connection": {
            "switch_id": "52:54:00:00:00:00",
            "port_id": "p0"
          }
        }],
        "cpu": "4",
        "memory": "6144",
        "disk": "40",
        "arch": "x86_64",
        "pm_type": "ipmi",
        "pm_user": "admin",
        "pm_password": "p@55w0rd!",
        "pm_addr": "192.168.24.205"
      },
      {
        "name": "node02",
        "ports": [{
          "address": "bb:bb:bb:bb:bb:bb",
          "physical_network": "ctlplane",
          "local_link_connection": {
            "switch_id": "52:54:00:00:00:00",
            "port_id": "p0"
          }
        }],
        "cpu": "4",
        "memory": "6144",
        "disk": "40",
        "arch": "x86_64",
        "pm_type": "ipmi",
        "pm_user": "admin",
        "pm_password": "p@55w0rd!",
        "pm_addr": "192.168.24.206"
      }]
    }

    示例 YAML 模板

    nodes:
      - name: "node01"
        ports:
          - address: "aa:aa:aa:aa:aa:aa"
            physical_network: ctlplane
            local_link_connection:
              switch_id: 52:54:00:00:00:00
              port_id: p0
        cpu: 4
        memory: 6144
        disk: 40
        arch: "x86_64"
        pm_type: "ipmi"
        pm_user: "admin"
        pm_password: "p@55w0rd!"
        pm_addr: "192.168.24.205"
      - name: "node02"
        ports:
          - address: "bb:bb:bb:bb:bb:bb"
            physical_network: ctlplane
            local_link_connection:
              switch_id: 52:54:00:00:00:00
              port_id: p0
        cpu: 4
        memory: 6144
        disk: 40
        arch: "x86_64"
        pm_type: "ipmi"
        pm_user: "admin"
        pm_password: "p@55w0rd!"
        pm_addr: "192.168.24.206"

    此模板包含以下属性:

    name
    节点的逻辑名称。
    ports

    访问特定 IPMI 设备的端口。您可以定义以下可选端口属性:

    • 地址 :节点上网络接口的 MAC 地址。对于每个系统的 Provisioning NIC,只使用 MAC 地址。
    • physical_network :连接到 Provisioning NIC 的物理网络。
    • local_link_connection :如果您使用 IPv6 置备,且 LLDP 在内省过程中没有正确填充本地链路连接,您必须在 local_link_connection 参数中包含带有 switch_idport_id 字段的虚拟数据。有关如何包含虚拟数据的更多信息,请参阅使用 director 内省来收集裸机节点硬件信息
    cpu
    节点上的 CPU 数量。(可选)
    memory
    以 MB 为单位的内存大小。(可选)
    disk
    以 GB 为单位的硬盘的大小。(可选)
    arch
    系统架构。 (可选)
    pm_type

    要使用的电源管理驱动程序。此示例使用 IPMI 驱动程序 (ipmi)。

    注意

    IPMI 是首选的受支持电源管理驱动程序。有关支持的电源管理类型及其选项的更多信息,请参阅 电源管理驱动程序。如果这些电源管理驱动程序不能正常工作,请将 IPMI 用于电源管理。

    pm_user; pm_password
    IPMI 的用户名和密码。
    pm_addr
    IPMI 设备的 IP 地址。
  2. 验证模板格式和语法:

    $ source ~/stackrc
    (undercloud)$ openstack overcloud node import --validate-only ~/nodes.json
  3. 将模板文件保存到 stack 用户的主目录(/home/stack/nodes.json)。
  4. 将模板导入到 director,将每个节点从模板注册到 director:

    (undercloud)$ openstack overcloud node import ~/nodes.json
  5. 等待节点完成注册和配置。完成后,确认 director 已成功注册节点:

    (undercloud)$ openstack baremetal node list

11.2.2. 创建裸机节点硬件的清单

director 需要 Red Hat OpenStack Platform (RHOSP)部署中节点的硬件清单进行配置集标记、基准测试和手动根磁盘分配。

您可以使用以下方法之一向 director 提供硬件清单:

  • 自动:您可以使用 director 的内省过程,从每个节点收集硬件信息。这个过程在每个节点上启动内省代理。内省代理从节点收集硬件数据并将数据送回 director。director 将硬件数据存储在 OpenStack 内部数据库中。
  • 手动:您可以手动配置每个裸机的基本硬件清单。此清单存储在裸机置备服务(ironic)中,用于管理和部署裸机机器。

director 自动内省流程比设置裸机置备服务端口的手动方法提供以下优点:

  • 内省记录了硬件信息中的所有连接端口,包括在 nodes.yaml 中尚未配置 PXE 引导的端口。
  • 如果属性可以使用 LLDP 发现,内省会为每个端口设置 local_link_connection 属性。使用手动方法时,您必须在注册节点时为每个端口配置 local_link_connection
  • 在部署 spine-and-leaf 或 DCN 架构时,内省为裸机置备服务端口设置 physical_network 属性。
11.2.2.1. 使用 director 内省来收集裸机节点硬件信息

将物理机注册为裸机节点后,您可以使用 director 内省自动添加其硬件详情并为每个以太网 MAC 地址创建端口。

提示

作为自动内省的替代选择,您可以手动为 director 提供裸机节点的硬件信息。如需更多信息,请参阅 手动配置裸机节点硬件信息

先决条件

  • 您已为 overcloud 注册了裸机节点。

流程

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

    $ source ~/stackrc
  3. 运行 pre-introspection 验证组来检查内省要求:

    (undercloud)$ validation run --group pre-introspection \
     --inventory <inventory_file>
    • <inventory_file > 替换为 Ansible 清单文件的名称和位置,如 ~/tripleo-deploy/undercloud/tripleo-ansible-inventory.yaml

      注意

      当您运行验证时,输出中的 Reasons 列仅限于 79 个字符。要查看验证结果已满,请查看验证日志文件。

  4. 查看验证报告的结果。
  5. 可选:查看特定验证的详细输出:

    (undercloud)$ validation history get --full <UUID>
    • &lt;UUID> 替换为您要查看报告的特定验证 UUID。

      重要

      FAILED 验证不会阻止您部署或运行 Red Hat OpenStack Platform。但是,FAILED 验证可能会显示生产环境中潜在的问题。

  6. 检查每个节点的属性。您可以检查所有节点的硬件属性或特定节点:

    • 检查所有节点的硬件属性:

      (undercloud)$ openstack overcloud node introspect --all-manageable --provide
      • 使用 --all-manageable 选项仅内省处于受管理状态的节点。在此示例中,所有节点都处于受管理状态。
      • 使用 --provide 选项在内省后将所有节点重置为 available 状态。
    • 检查特定节点的硬件属性:

      (undercloud)$ openstack overcloud node introspect --provide <node1> [node2] [noden]
      • 使用 --provide 选项,在内省后将所有指定节点重置为 available 状态。
      • <node1>, [node2], 及所有节点(直到 [noden])替换为您要内省的每个节点的 UUID。
  7. 在一个单独的终端窗口中监控内省进度日志:

    (undercloud)$ sudo tail -f /var/log/containers/ironic-inspector/ironic-inspector.log
    重要

    确保内省进程运行完。内省通常需要 15 分钟时间用于裸机节点。但是,不正确的内省网络可能会导致它花费更长的时间,这可能会导致内省失败。

  8. 可选:如果您已将 undercloud 配置为通过 IPv6 进行裸机置备,那么您还需要检查 LLDP 是否已为裸机置备服务(ironic)端口设置了 local_link_connection

    $ openstack baremetal port list --long -c UUID -c "Node UUID" -c "Local Link Connection"
    • 如果裸机节点上的端口的 Local Link Connection 字段为空,则必须使用虚拟数据手动填充 local_link_connection 值。以下示例将虚拟交换机 ID 设置为 52:54:00:00:00:00,并将虚拟端口 ID 设置为 p0

      $ openstack baremetal port set <port_uuid> \
      --local-link-connection switch_id=52:54:00:00:00:00 \
      --local-link-connection port_id=p0
    • 验证 “Local Link Connection” 字段是否包含虚拟数据:

      $ openstack baremetal port list --long -c UUID -c "Node UUID" -c "Local Link Connection"

内省完成后,所有节点都会变为 available 状态。

11.2.2.2. 手动配置裸机节点硬件信息

将物理机注册为裸机节点后,您可以手动添加其硬件详情,并为每个以太网 MAC 地址创建裸机端口。在部署 overcloud 前,必须至少创建一个裸机端口。

提示

作为手动内省的替代选择,您可以使用自动 director 内省流程来收集裸机节点的硬件信息。如需更多信息,请参阅使用 director 内省来收集裸机节点硬件信息

先决条件

  • 您已为 overcloud 注册了裸机节点。
  • 您已为 node .json 中注册的节点上的每个端口配置了 local_link_connection。有关更多信息 ,请参阅为 overcloud 注册节点

流程

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

    $ source ~/stackrc
  3. 指定部署内核并为节点驱动程序部署 ramdisk:

    (undercloud)$ openstack baremetal node set <node> \
      --driver-info deploy_kernel=<kernel_file> \
      --driver-info deploy_ramdisk=<initramfs_file>
    • <node> 替换为裸机节点的 ID。
    • <kernel_file > 替换为 .kernel 镜像的路径,例如 file:///var/lib/ironic/httpboot/agent.kernel
    • <initramfs_file > 替换为 .initramfs 镜像的路径,例如 file:///var/lib/ironic/httpboot/agent.ramdisk
  4. 更新节点属性以匹配节点上的硬件规格:

    (undercloud)$ openstack baremetal node set <node> \
      --property cpus=<cpu> \
      --property memory_mb=<ram> \
      --property local_gb=<disk> \
      --property cpu_arch=<arch>
    • <node> 替换为裸机节点的 ID。
    • <cpu > 替换为 CPU 数量。
    • 将 & lt;ram& gt; 替换为 RAM (以 MB 为单位)。
    • <disk> 替换为磁盘大小(以 GB 为单位)。
    • 将 & lt;arch& gt; 替换为构架类型。
  5. 可选:为每个节点指定 IPMI 密码套件:

    (undercloud)$ openstack baremetal node set <node> \
     --driver-info ipmi_cipher_suite=<version>
    • <node> 替换为裸机节点的 ID。
    • <version > 替换为节点上要使用的密码套件版本。设置为以下有效值之一:

      • 3 - 节点使用带有 SHA1 密码套件的 AES-128。
      • 17 - 节点使用带有 SHA256 密码套件的 AES-128。
  6. 可选:如果您有多个磁盘,请设置 root 设备提示来告知部署 ramdisk 哪个磁盘用于部署:

    (undercloud)$ openstack baremetal node set <node> \
      --property root_device='{"<property>": "<value>"}'
    • <node> 替换为裸机节点的 ID。
    • <property > 和 <value > 替换为您要用于部署的磁盘的详情,如 root_device='{"size": "128"}'

      RHOSP 支持以下属性:

      • model(字符串):设备识别码。
      • vendor(字符串):设备厂商。
      • serial(字符串):磁盘序列号。
      • hctl(字符串):SCSI 的 Host:Channel:Target:Lun。
      • size(整数):设备的大小(以 GB 为单位)。
      • wwn(字符串):唯一的存储 ID。
      • wwn_with_extension(字符串):唯一存储 ID 附加厂商扩展名。
      • wwn_vendor_extension(字符串):唯一厂商存储标识符。
      • rotational(布尔值):旋转磁盘设备为 true (HDD),否则为 false (SSD)。
      • name (字符串):设备名称,例如:/dev/sdb1 仅将此属性用于具有持久名称的设备。

        注意

        如果您指定多个属性,该设备必须与所有这些属性匹配。

  7. 通过在 provisioning 网络中创建带有 NIC 的 MAC 地址的端口来通知节点网卡的裸机置备服务:

    (undercloud)$ openstack baremetal port create --node <node_uuid> <mac_address>
    • <node_uuid> 替换为裸机节点的唯一 ID。
    • <mac_address > 替换为用于 PXE 引导的 NIC 的 MAC 地址。
  8. 验证节点的配置:

    (undercloud)$ openstack baremetal node validate <node>
    -----------------------------------------------------------------
    | Interface  | Result | Reason                                    |
    -----------------------------------------------------------------
    | bios       | True   |                                           |
    | boot       | True   |                                           |
    | console    | True   |                                           |
    | deploy     | False  | Node 229f0c3d-354a-4dab-9a88-ebd318249ad6 |
    |            |        | failed to validate deploy image info.     |
    |            |        | Some parameters were missing. Missing are:|
    |            |        | [instance_info.image_source]              |
    | inspect    | True   |                                           |
    | management | True   |                                           |
    | network    | True   |                                           |
    | power      | True   |                                           |
    | raid       | True   |                                           |
    | rescue     | True   |                                           |
    | storage    | True   |                                           |
    -----------------------------------------------------------------

    验证输出 Result 表示以下内容:

    • false :接口失败验证。如果提供的原因缺少 instance_info.image_source 参数,这可能是因为置备期间填充,因此还没有设置它。如果您使用完整磁盘镜像,则可能需要设置 image_source 才能通过验证。
    • true :接口已通过验证。
    • None: 接口不支持您的驱动。

11.2.3. 为 overcloud 置备裸机节点

要置备裸机节点,您可以定义您要以 YAML 格式以节点定义文件部署的裸机节点的数量和属性,并为这些节点分配 overcloud 角色。您还定义节点的网络布局。

置备过程会从节点定义文件创建一个 heat 环境文件。此 heat 环境文件包含您在节点定义文件中配置的节点规格,包括节点数、预先节点放置、自定义镜像和自定义 NIC。当您部署 overcloud 时,请将此文件包括在部署命令中。置备过程还会为节点定义文件中每个节点或角色定义的所有网络置备端口资源。

先决条件

流程

  1. 查找 stackrc undercloud 凭据文件:

    $ source ~/stackrc
  2. 创建 overcloud-baremetal-deploy.yaml 节点定义文件,并为您要置备的每个角色定义节点数。例如,要置备三个 Controller 节点和三个 Compute 节点,请在 overcloud-baremetal-deploy.yaml 文件中添加以下配置:

    - name: Controller
      count: 3
    - name: Compute
      count: 3
  3. 可选:配置预先节点放置。例如,使用以下配置在节点 node00node01node02 上置备三个 Controller 节点,并在 node04node05node06 上三个 Compute 节点:

    - name: Controller
      count: 3
      instances:
      - hostname: overcloud-controller-0
        name: node00
      - hostname: overcloud-controller-1
        name: node01
      - hostname: overcloud-controller-2
        name: node02
    - name: Compute
      count: 3
      instances:
      - hostname: overcloud-novacompute-0
        name: node04
      - hostname: overcloud-novacompute-1
        name: node05
      - hostname: overcloud-novacompute-2
        name: node06
  4. 可选:默认情况下,置备过程使用 overcloud-hardened-uefi-full.qcow2 镜像。您可以通过指定镜像的本地或远程 URL 来更改特定节点使用的镜像,或更改用于角色所有节点的镜像。以下示例将镜像改为本地 QCOW2 镜像:

    特定节点

    - name: Controller
      count: 3
      instances:
      - hostname: overcloud-controller-0
        name: node00
        image:
          href: file:///var/lib/ironic/images/overcloud-custom.qcow2
      - hostname: overcloud-controller-1
        name: node01
        image:
          href: file:///var/lib/ironic/images/overcloud-full-custom.qcow2
      - hostname: overcloud-controller-2
        name: node02
        image:
          href: file:///var/lib/ironic/images/overcloud-full-custom.qcow2

    角色的所有节点

    - name: Controller
      count: 3
      defaults:
        image:
          href: file:///var/lib/ironic/images/overcloud-custom.qcow2
      instances:
      - hostname: overcloud-controller-0
        name: node00
      - hostname: overcloud-controller-1
        name: node01
      - hostname: overcloud-controller-2
        name: node02

  5. 为角色或特定节点定义网络布局:

    特定节点

    以下示例为特定 Controller 节点置备网络,并为内部 API 网络的节点分配可预测的 IP:

    - name: Controller
      count: 3
      defaults:
        network_config:
          template: /home/stack/templates/nic-config/myController.j2
          default_route_network:
          - external
        instances:
          - hostname: overcloud-controller-0
            name: node00
            networks:
              - network: ctlplane
                vif: true
              - network: external
                subnet: external_subnet
              - network: internal_api
                subnet: internal_api_subnet01
                fixed_ip: 172.21.11.100
              - network: storage
                subnet: storage_subnet01
              - network: storage_mgmt
                subnet: storage_mgmt_subnet01
              - network: tenant
                subnet: tenant_subnet01

    角色的所有节点

    以下示例为 Controller 和 Compute 角色置备网络:

    - name: Controller
      count: 3
      defaults:
        networks:
        - network: ctlplane
          vif: true
        - 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: /home/stack/templates/nic-config/myController.j2 1
          default_route_network:
          - external
    - name: Compute
      count: 3
      defaults:
        networks:
        - network: ctlplane
          vif: true
        - network: internal_api
          subnet: internal_api_subnet02
        - network: tenant
          subnet: tenant_subnet02
        - network: storage
          subnet: storage_subnet02
        network_config:
          template: /home/stack/templates/nic-config/myCompute.j2
    1
    您可以使用位于 /usr/share/ansible/roles/tripleo_network_config/templates 中的示例 NIC 模板在本地环境文件目录中创建自己的 NIC 模板。
  6. 可选:如果默认磁盘大小不满足您的要求,则配置磁盘分区大小分配。例如: /var/log 分区的默认分区大小为 10 GB。考虑您的日志存储和保留要求,以确定 10 GB 是否满足您的要求。如果您需要增加日志存储分配的磁盘大小,请在节点定义文件中添加以下配置来覆盖默认值:

    ansible_playbooks:
      - playbook: /usr/share/ansible/tripleo-playbooks/cli-overcloud-node-growvols.yaml
        extra_vars:
          role_growvols_args:
            default:
              /=8GB
              /tmp=1GB
              /var/log=<log_size>GB
              /var/log/audit=2GB
              /home=1GB
              /var=100%
    • <log_size > 替换为要分配给日志文件的磁盘大小。
  7. 如果您使用 Object Storage 服务(swift)和整个磁盘 overcloud 镜像 overcloud-hardened-uefi-full,则需要根据磁盘大小以及 /var/srv 的存储要求配置 /srv 分区的大小。如需更多信息,请参阅为对象存储服务配置整个磁盘分区
  8. 可选:使用自定义资源类或配置集功能为特定的角色指定 overcloud 节点。有关更多信息,请参阅通过匹配 资源类和通过 匹配配置集为角色 设计 overcloud 节点来为角色 指定 overcloud 节点。
  9. 定义您要分配给节点的任何其他属性。有关您可以在节点定义文件中配置节点属性的属性的更多信息,请参阅 裸机节点置备属性。有关节点定义文件示例,请参阅 节点定义文件示例
  10. 置备 overcloud 节点:

    (undercloud)$ openstack overcloud node provision \
     [--templates <templates_directory> \]
     --stack <stack> \
     --network-config \
     --output <deployment_file> \
     /home/stack/templates/<node_definition_file>
    • 可选:包含 --templates 选项,以使用您自己的模板,而不是位于 /usr/share/openstack-tripleo-heat-templates 中的默认模板。将 <templates_directory > 替换为包含模板的目录的路径。
    • & lt;stack> 替换为置备裸机节点的堆栈的名称。如果未指定,则默认为 overcloud
    • 包含 --network-config 可选参数,以将网络定义提供给 cli-overcloud-node-network-config.yaml Ansible playbook。
    • <deployment_file> 替换为用于部署命令生成的 heat 环境文件的名称,如 /home/stack/templates/overcloud-baremetal-deployed.yaml
    • <node_definition_file > 替换为节点定义文件的名称,如 overcloud-baremetal-deploy.yaml
  11. 在单独的终端中监控置备进度:

    (undercloud)$ watch openstack baremetal node list
  12. 使用 metalsmith 工具获取节点的统一视图,包括分配和端口:

    (undercloud)$ metalsmith list
  13. 验证节点与主机名的关联:

    (undercloud)$ openstack baremetal allocation list

11.2.4. 裸机节点置备属性

使用下表了解用于配置节点属性的可用属性,以及使用 openstack baremetal node provision 命令置备裸机节点时要使用的值。

  • 角色属性 :使用角色属性来定义每个角色。
  • 每个角色的默认和实例属性:使用默认或实例属性指定从可用节点池中分配节点的选择条件,以及设置裸机节点上的属性和网络配置属性。

有关创建 baremetal 定义文件的详情,请参阅为 overcloud 置备裸机节点

表 11.1. 角色属性
属性

name

(必需)角色名称。

数�

要为这个角色置备的节点数量。默认值为 1

默认值

instances条目属性的默认值字典。instances条目属性覆盖您在 defaults 参数中指定的任何默认值。

实例

用于为特定节点指定属性的值的字典。有关 instances 参数中支持的属性的更多信息,请参阅 默认值 和实例属性。定义的节点数量不能大于 count 参数的值。

hostname_format

覆盖这个角色的默认主机名格式。默认生成的主机名来自 overcloud 堆栈名称、角色和递增索引,它们都在小写下。例如,Controller 角色的默认格式为 %stackname%-controller-%index%。只有 Compute 角色不会遵循角色名称规则。Compute 默认格式为 %stackname%-novacompute-%index%

ansible_playbooks

Ansible playbook 和 Ansible 变量的值字典。在节点网络配置之前,playbook 在节点置备后针对角色实例运行。如需有关指定 Ansible playbook 的更多信息,请参阅 ansible_playbooks 属性

表 11.2. 默认值 和实例 属性
属性

hostname

(仅实例 )指定 实例 属性应用到的节点的主机名。主机名派生自 hostname_format 属性。您可以使用自定义主机名。

name

(仅实例 )您要置备的节点的名称。

image

要在节点上置备的镜像的详情。有关支持的 镜像 属性的详情,请参考 镜像 属性

功能

选择与节点功能匹配的条件。

config_drive

将数据和首次引导命令添加到传递给节点的 config-drive 中。如需更多信息,请参阅 config_drive 属性

注意

仅将 config_drive 用于必须在第一次引导时执行的配置。对于所有其他自定义配置,创建一个 Ansible playbook,并使用 ansible_playbooks 属性在节点置备后对角色实例执行 playbook。

Managed

设置为 true (默认)以使用 metalsmith 置备实例。设置为 false,以预置备处理实例。

networks

代表实例网络的字典列表。有关配置网络属性的更多信息,请参阅 网络属性

network_config

链接到角色或实例的网络配置文件。有关配置到网络配置文件的链接的更多信息,请参阅 network_config 属性

配置集

用于配置文件匹配的选择条件。有关更多信息,请参阅通过匹配配置文件为角色指定 overcloud 节点

已置备

设置为 true (默认)以置备节点。设置为 false 以取消置备节点。如需更多信息,请参阅 缩减裸机节点

resource_class

与节点的资源类匹配的选择条件。默认值为 baremetal。有关更多信息,请参阅通过匹配资源类为角色指定 overcloud 节点

root_size_gb

GiB 中根分区的大小。默认值为 49

swap_size_mb

MiB 中 swap 分区的大小。

遍历

作为与节点遍历匹配的选择条件的遍历列表。

表 11.3. 镜像 属性
属性

href

指定您要置备在节点上的根分区或完整磁盘镜像的 URL。支持的 URL 方案: file://http://https://

注意

如果您使用 file:// URL 方案为镜像指定本地 URL,则镜像路径必须明确指向 /var/lib/ironic/images/ 目录,因为 /var/lib/ironic/images 被从 undercloud 绑定到 ironic-conductor 容器中,以便服务镜像。

checksum

指定根分区或完整磁盘镜像的 MD5 checksum。当 href 是 URL 时是必需的。

kernel

指定内核镜像的镜像引用或 URL。仅在分区镜像中使用此属性。

ramdisk

指定 ramdisk 镜像的镜像引用或 URL。仅在分区镜像中使用此属性。

表 11.4. 网络 属性
属性

fixed_ip

要用于此网络的特定 IP 地址。

network

要创建网络端口的网络。

子网

要创建网络端口的子网。

端口

要使用的现有端口而不是创建新端口。

vif

在 provisioning 网络(ctlplane)上设置为 true,将网络附加为虚拟接口(VIF)。设置为 false,以创建没有 VIF 附加的网络服务 API 资源。

表 11.5. network_config 属性
属性

模板

指定应用节点网络配置时要使用的 Ansible J2 NIC 配置模板。有关配置 NIC 模板的详情,请参考配置 overcloud 网络

physical_bridge_name

用于创建用于访问外部网络的 OVS 网桥的名称。默认网桥名称为 br-ex

public_interface_name

指定要添加到公共网桥的接口名称。默认接口为 nic1

network_config_update

设置为 true,以在更新时应用网络配置更改。默认禁用此选项。

net_config_data_lookup

为每个节点或节点组指定 NIC 映射配置 os-net-config

default_route_network

用于默认路由的网络。默认路由网络为 ctlplane

networks_skip_config

配置节点网络时要跳过的网络列表。

dns_search_domains

要添加到 resolv.conf 的 DNS 搜索域列表,按优先级顺序排列。

bond_interface_ovs_options

用于绑定接口的 OVS 选项或绑定选项,如 OVS 绑定的 lacp=activebond_mode=balance-slb,而 mode=4 用于 Linux 绑定。

num_dpdk_interface_rx_queues

指定 DPDK 绑定或 DPDK 端口所需的 RX 队列数量。

表 11.6. config_drive 属性
属性

cloud_config

cloud-init 云配置数据的字典,用于在节点引导时运行任务。例如,要在第一次引导时将自定义名称服务器写入 resolve.conf 文件,请将以下 cloud_config 添加到 config_drive 属性中:

config_drive:
  cloud_config:
    manage_resolv_conf: true
    resolv_conf:
      nameservers:
        - 8.8.8.8
        - 8.8.4.4
      searchdomains:
        - abc.example.com
        - xyz.example.com
      domain: example.com
      sortlist:
        - 10.0.0.1/255
        - 10.0.0.2
      options:
        rotate: true
        timeout: 1

meta_data

config-drive cloud-init 元数据中包含的额外元数据。元数据添加到角色名称上设置的元数据中: public_keysuuidnamehostnameinstance-typecloud-init 使此元数据作为实例数据提供。

表 11.7. ansible_playbooks 属性
属性

playbook

与角色定义 YAML 文件相比,Ansible playbook 的路径。

extra_vars

运行 playbook 时要设置的额外 Ansible 变量。使用以下语法指定额外变量:

ansible_playbooks:
  - playbook: a_playbook.yaml
    extra_vars:
      param1: value1
      param2: value2

例如,要增大使用整个磁盘 overcloud 镜像 overcloud-hardened-uefi-full.qcow2 部署的任何节点的 LVM 卷,请在 playbook 属性中添加以下额外变量:

ansible_playbooks:
  - playbook: /usr/share/ansible/tripleo-playbooks/cli-overcloud-node-growvols.yaml
    extra_vars:
      role_growvols_args:
        default:
          /=8GB
          /tmp=1GB
          /var/log=10GB
          /var/log/audit=2GB
          /home=1GB
          /var=100%
        Controller:
          /=8GB
          /tmp=1GB
          /var/log=10GB
          /var/log/audit=2GB
          /home=1GB
          /srv=50GB
          /var=100%

11.2.5. 从节点定义文件中删除失败的裸机节点

如果节点置备因为节点硬件或网络配置失败而失败,您可以在再次运行置备步骤前删除失败的节点。要删除置备过程中失败的裸机节点,请标记您要从节点定义文件中的堆栈中删除的节点,并在置备正常工作的裸机节点前取消置备节点。

先决条件

  • 已安装 undercloud。如需更多信息,请参阅安装 director
  • 因为节点硬件故障,裸机节点置备会失败。

流程

  1. 查找 stackrc undercloud 凭据文件:

    $ source ~/stackrc
  2. 打开 overcloud-baremetal-deploy.yaml 节点定义文件。
  3. 减少分配给节点的角色的 count 参数。例如,以下配置更新了 ObjectStorage 角色的 count 参数,以反映专用于 ObjectStorage 的节点数量被减少到 3:

    - name: ObjectStorage
      count: 3
  4. 在角色的 instances 属性中没有定义您要从堆栈中删除的节点的主机名和名称。
  5. 将属性 provisioned: false 添加到您要删除的节点。例如,要从堆栈中删除节点 overcloud-objectstorage-1,请在 overcloud-baremetal-deploy.yaml 文件中包含以下代码片段:

    - name: ObjectStorage
      count: 3
      instances:
      - hostname: overcloud-objectstorage-0
        name: node00
      - hostname: overcloud-objectstorage-1
        name: node01
        # Removed from cluster due to disk failure
        provisioned: false
      - hostname: overcloud-objectstorage-2
        name: node02
      - hostname: overcloud-objectstorage-3
        name: node03
  6. 取消置备裸机节点:

    (undercloud)$ openstack overcloud node unprovision \
     --stack <stack> \
     --network-ports \
     /home/stack/templates/overcloud-baremetal-deploy.yaml
    • & lt;stack> 替换为置备裸机节点的堆栈的名称。如果未指定,则默认为 overcloud
  7. 置备 overcloud 节点来生成更新的 heat 环境文件,以包含在部署命令中:

    (undercloud)$ openstack overcloud node provision \
    --stack <stack> \
    --output <deployment_file> \
    /home/stack/templates/overcloud-baremetal-deploy.yaml
    • <deployment_file> 替换为用于部署命令生成的 heat 环境文件的名称,如 /home/stack/templates/overcloud-baremetal-deployed.yaml

11.2.6. 通过匹配资源类为角色设计 overcloud 节点

您可以使用自定义资源类为特定角色指定 overcloud 节点。资源类将您的节点与部署角色匹配。默认情况下,所有节点都被分配了 baremetal 的资源类。

注意

要在置备节点后更改分配给节点的资源类,您必须使用缩减流程来取消置备节点,然后使用扩展流程以使用新资源类分配重新置备节点。有关更多信息,请参阅 扩展 overcloud 节点

先决条件

  • 您为 overcloud 执行裸机节点的初始置备。

流程

  1. 分配您要为具有自定义资源类的角色指定的每个裸机节点:

    (undercloud)$ openstack baremetal node set \
     --resource-class <resource_class> <node>
    • <resource_class > 替换为资源类的名称,如 baremetal.CPU-PINNING
    • <node> 替换为裸机节点的 ID。
  2. 将角色添加到 overcloud-baremetal-deploy.yaml 文件中(如果尚未定义)。
  3. 指定您要分配给角色的节点的资源类:

    - name: <role>
      count: 1
      defaults:
        resource_class: <resource_class>
    • <role > 替换为角色的名称。
    • <resource_class > 替换为您在第 1 步中为资源类指定的名称。
  4. 返回到 Provisioning 裸机节点,使 overcloud 完成置备过程。

11.2.7. 通过匹配配置集为角色设计 overcloud 节点

您可以使用配置集功能为特定角色指定 overcloud 节点。配置集将节点功能与部署角色匹配。

提示

您还可以使用内省规则执行自动配置集分配。如需更多信息,请参阅配置自动配置集标记

注意

要在置备节点后更改分配给节点的配置集,您必须使用缩减流程来取消置备节点,然后使用扩展流程以使用新配置集分配重新置备节点。有关更多信息,请参阅 扩展 overcloud 节点

先决条件

  • 您为 overcloud 执行裸机节点的初始置备。

流程

  1. 每次添加新节点功能时,现有节点功能都会被覆盖。因此,您必须检索每个注册的节点的现有功能,以便再次设置它们:

    $ openstack baremetal node show <node> \
     -f json -c properties | jq -r .properties.capabilities
  2. 通过将 profile:<profile> 添加到节点的现有功能,为您要与角色 配置集匹配 的每个裸机节点分配配置集功能:

    (undercloud)$ openstack baremetal node set  <node> \
     --property capabilities="profile:<profile>,<capability_1>,...,<capability_n>"
    • <node > 替换为裸机节点的名称或 ID。
    • <profile > 替换为与角色配置集匹配的配置集名称。
    • <capability_1& gt; 以及所有功能(直到 <capability_n >)替换为您在第 1 步中获得的每个功能。
  3. 将角色添加到 overcloud-baremetal-deploy.yaml 文件中(如果尚未定义)。
  4. 定义您要分配给角色的节点的配置集:

    - name: <role>
      count: 1
      defaults:
        profile: <profile>
    • <role > 替换为角色的名称。
    • <profile > 替换为与节点功能匹配的配置集名称。
  5. 返回到 Provisioning 裸机节点,使 overcloud 完成置备过程。

11.2.8. 为对象存储服务配置整个磁盘分区

完整磁盘镜像 overcloud-hardened-uefi-full 已被分区为单独的卷。默认情况下,使用整个磁盘 overcloud 镜像部署的节点 /var 分区会自动增加,直到磁盘被完全分配为止。如果使用 Object Storage 服务(swift),请根据您的磁盘大小以及 /var/srv 的存储要求配置 /srv 分区的大小。

先决条件

  • 您为 overcloud 执行裸机节点的初始置备。

流程

  1. role_growvols_args 用作 overcloud-baremetal-deploy.yaml 节点定义文件中的 Ansible_playbooks 定义中的额外 Ansible 变量来配置 /srv/var 分区。将 /srv/var 设置为绝对大小(以 GB 为单位),并将其他设为 100% 以使用剩余的磁盘空间。

    • 以下示例将 /srv 设置为 Controller 节点上部署的 Object Storage 服务的绝对路径,将 /var 设置为 100% 以消耗剩余的磁盘空间:

      ansible_playbooks:
        - playbook: /usr/share/ansible/tripleo-playbooks/cli-overcloud-node-growvols.yaml
          extra_vars:
            role_growvols_args:
              default:
                /=8GB
                /tmp=1GB
                /var/log=10GB
                /var/log/audit=2GB
                /home=1GB
                /var=100%
              Controller:
                /=8GB
                /tmp=1GB
                /var/log=10GB
                /var/log/audit=2GB
                /home=1GB
                /srv=50GB
                /var=100%
    • 以下示例配置将 /var 设置为绝对大小,将 /srv 设置为 100%,以使用对象存储服务的 Object Storage 节点剩余的磁盘空间:

      ansible_playbooks:
        - playbook: /usr/share/ansible/tripleo-playbooks/cli-overcloud-node-growvols.yaml
          extra_vars:
            role_growvols_args:
              default:
                /=8GB
                /tmp=1GB
                /var/log=10GB
                /var/log/audit=2GB
                /home=1GB
                /var=100%
             ObjectStorage:
                /=8GB
                /tmp=1GB
                /var/log=10GB
                /var/log/audit=2GB
                /home=1GB
                /var=10GB
                /srv=100%
  2. 返回到 Provisioning 裸机节点,使 overcloud 完成置备过程。

11.2.9. 节点定义文件示例

以下示例节点定义文件为三个 Controller 节点和三个 Compute 节点定义预先节点放置,以及它们使用的默认网络。这个示例还演示了如何定义基于与资源类或节点功能配置集指定的节点的自定义角色。

- name: Controller
  count: 3
  defaults:
    image:
      href: file:///var/lib/ironic/images/overcloud-custom.qcow2
    networks:
    - network: ctlplane
      vif: true
    - network: external
      subnet: external_subnet
    - network: internal_api
      subnet: internal_api_subnet01
    - network: storage
      subnet: storage_subnet01
    - network: storagemgmt
      subnet: storage_mgmt_subnet01
    - network: tenant
      subnet: tenant_subnet01
    network_config:
        template: /home/stack/templates/nic-config/myController.j2
        default_route_network:
        - external
    profile: nodeCapability
  instances:
  - hostname: overcloud-controller-0
    name: node00
  - hostname: overcloud-controller-1
    name: node01
  - hostname: overcloud-controller-2
    name: node02
- name: Compute
  count: 3
  defaults:
    networks:
    - network: ctlplane
      vif: true
    - network: internal_api
      subnet: internal_api_subnet02
    - network: tenant
      subnet: tenant_subnet02
    - network: storage
      subnet: storage_subnet02
    network_config:
      template: /home/stack/templates/nic-config/myCompute.j2
    resource_class: baremetal.COMPUTE
  instances:
  - hostname: overcloud-novacompute-0
    name: node04
  - hostname: overcloud-novacompute-1
    name: node05
  - hostname: overcloud-novacompute-2
    name: node06

11.2.10. 启用虚拟介质引导

重要

该功能在此发行版本中作为技术预览提供,因此不享有红帽的全面支持。它只应用于测试,不应部署在生产环境中。有关技术预览功能的更多信息,请参阅覆盖范围详细信息

您可以使用 Redfish 虚拟介质引导,向节点的 Baseboard Management Controller (BMC) 提供引导镜像,以便 BMC 可将镜像插入到其中一个虚拟驱动器中。然后,节点可以从虚拟驱动器引导到镜像中存在的操作系统。

Redfish 硬件类型支持通过虚拟介质引导部署、救援和用户镜像。Bare Metal Provisioning 服务(ironic)使用与节点关联的内核和 ramdisk 镜像,以在节点部署时为 UEFI 或 BIOS 引导模式构建可引导的 ISO 镜像。虚拟介质引导的主要优点是可以消除 PXE 的 TFTP 镜像传输阶段,并使用 HTTP GET 或其他方法。

要通过虚拟介质使用 redfish 硬件类型引导节点,请将引导接口设置为 redfish-virtual-media,并定义 EFI 系统分区(ESP)镜像。然后将注册节点配置为使用 Redfish 虚拟介质引导。

前提条件

  • undercloud.conf 文件的 enabled_hardware_types 参数中启用 redfish 驱动程序。
  • 注册并注册的裸机节点。
  • Image Service (glance) 中的 IPA 和实例镜像。
  • 对于 UEFI 节点,还必须在 Image Service (glance) 中有一个 EFI 系统分区镜像 (ESP)。
  • 裸机类型。
  • 用于清理和置备的网络。

流程

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

    $ source ~/stackrc
  3. 将裸机置备服务引导接口设置为 redfish-virtual-media

    (undercloud)$ openstack baremetal node set --boot-interface redfish-virtual-media <node>
    • <node > 替换为节点的名称。
  4. 定义 ESP 镜像:

    (undercloud)$ openstack baremetal node set --driver-info bootloader=<esp> <node>
    • <esp > 替换为镜像服务(glance)镜像 UUID 或 ESP 镜像的 URL。
    • <node > 替换为节点的名称。
  5. 在裸机节点上创建一个端口,并将端口与裸机节点上 NIC 的 MAC 地址关联:

    (undercloud)$ openstack baremetal port create --pxe-enabled True \
     --node <node_uuid> <mac_address>
    • <node_uuid > 替换为裸机节点的 UUID。
    • <mac_address > 替换为裸机节点中 NIC 的 MAC 地址。

11.2.11. 为多磁盘 Ceph 集群定义根磁盘

Ceph Storage 节点通常使用多个磁盘。director 必须在多个磁盘配置中识别根磁盘。overcloud 镜像在置备过程中写入根磁盘。

硬件属性用于识别根磁盘。有关可以用来识别根磁盘的属性的更多信息,请参阅 第 11.2.12 节 “识别根磁盘的属性”

流程

  1. 验证每个节点的硬件内省的磁盘信息:

    (undercloud)$ openstack baremetal introspection data save <node_uuid> | --file <output_file_name>
    • <node_uuid > 替换为节点的 UUID。
    • 将 < output_file_name > 替换为包含节点内省输出的文件名称。

      例如,一个节点的数据可能会显示 3 个磁盘:

      [
        {
          "size": 299439751168,
          "rotational": true,
          "vendor": "DELL",
          "name": "/dev/sda",
          "wwn_vendor_extension": "0x1ea4dcc412a9632b",
          "wwn_with_extension": "0x61866da04f3807001ea4dcc412a9632b",
          "model": "PERC H330 Mini",
          "wwn": "0x61866da04f380700",
          "serial": "61866da04f3807001ea4dcc412a9632b"
        }
        {
          "size": 299439751168,
          "rotational": true,
          "vendor": "DELL",
          "name": "/dev/sdb",
          "wwn_vendor_extension": "0x1ea4e13c12e36ad6",
          "wwn_with_extension": "0x61866da04f380d001ea4e13c12e36ad6",
          "model": "PERC H330 Mini",
          "wwn": "0x61866da04f380d00",
          "serial": "61866da04f380d001ea4e13c12e36ad6"
        }
        {
          "size": 299439751168,
          "rotational": true,
          "vendor": "DELL",
          "name": "/dev/sdc",
          "wwn_vendor_extension": "0x1ea4e31e121cfb45",
          "wwn_with_extension": "0x61866da04f37fc001ea4e31e121cfb45",
          "model": "PERC H330 Mini",
          "wwn": "0x61866da04f37fc00",
          "serial": "61866da04f37fc001ea4e31e121cfb45"
        }
      ]
  2. 使用唯一的硬件属性为节点设置根磁盘:

    (undercloud)$ openstack baremetal node set --property root_device='{<property_value>}' <node-uuid>

    • 将 < property_value > 替换为用于设置根磁盘的内省数据的唯一硬件属性值。
    • <node_uuid > 替换为节点的 UUID。

      注意

      唯一的硬件属性是硬件内省步骤中唯一标识磁盘的任何属性。例如,以下命令使用磁盘序列号来设置根磁盘:

      (undercloud)$ openstack baremetal node set --property root_device='{"serial": "61866da04f380d001ea4e13c12e36ad6"}' 1a4e30da-b6dc-499d-ba87-0bd8a3819bc0

  3. 将每个节点的 BIOS 配置为首次从网络引导,然后启动根磁盘。

director 识别特定磁盘以用作根磁盘。运行 openstack overcloud node provision 命令时,director 置备 overcloud 镜像并将其写入根磁盘。

11.2.12. 识别根磁盘的属性

您可以定义多个属性以帮助 director 识别根磁盘:

  • model(字符串):设备识别码。
  • vendor(字符串):设备厂商。
  • serial(字符串):磁盘序列号。
  • hctl(字符串):SCSI 的 Host:Channel:Target:Lun。
  • size(整数):设备的大小(以 GB 为单位)。
  • wwn(字符串):唯一的存储 ID。
  • wwn_with_extension(字符串):唯一存储 ID 附加厂商扩展名。
  • wwn_vendor_extension(字符串):唯一厂商存储标识符。
  • rotational(布尔值):旋转磁盘设备为 true (HDD),否则为 false (SSD)。
  • name(字符串):设备名称,例如:/dev/sdb1。
重要

对具有持久名称的设备使用 name 属性。不要使用 name 属性为没有持久名称的设备设置根磁盘,因为节点引导时可能会改变。

11.2.13. 使用 overcloud-minimal 镜像来避免使用红帽订阅授权

Red Hat OpenStack Platform (RHOSP)部署的默认镜像是 overcloud-hardened-uefi-full.qcow2overcloud-hardened-uefi-full.qcow2 镜像使用有效的 Red Hat OpenStack Platform (RHOSP)订阅。在您不想使用您的订阅权利时,您可以使用 overcloud-minimal 镜像以避免达到您购买的红帽订阅的限值。例如,当您希望只使用 Ceph 守护进程置备节点时,或者想要置备裸机操作系统(OS)时,这非常有用,您不想运行任何其他 OpenStack 服务。有关如何获取 overcloud-minimal 镜像的信息,请参阅 获取 overcloud 节点的镜像

注意

overcloud-minimal 镜像仅支持标准 Linux 网桥。overcloud-minimal 镜像不支持 Open vSwitch (OVS),因为 OVS 是需要 Red Hat OpenStack Platform 订阅权利的 OpenStack 服务。部署 Ceph Storage 节点不需要 OVS。使用 linux_bond 定义绑定,而不使用 ovs_bond。有关 linux_bond 的更多信息,请参阅创建 Linux 绑定

流程

  1. 打开 overcloud-baremetal-deploy.yaml 文件。
  2. 为您要使用 overcloud-minimal 镜像的节点添加或更新 image 属性。您可以将镜像设置为特定节点上的 overcloud-minimal 或角色的所有节点:

    特定节点

    - name: Ceph
      count: 3
      instances:
      - hostname: overcloud-ceph-0
        name: node00
        image:
          href: file:///var/lib/ironic/images/overcloud-minimal.qcow2
      - hostname: overcloud-ceph-1
        name: node01
        image:
          href: file:///var/lib/ironic/images/overcloud-full-custom.qcow2
      - hostname: overcloud-ceph-2
        name: node02
        image:
          href: file:///var/lib/ironic/images/overcloud-full-custom.qcow2

    角色的所有节点

    - name: Ceph
      count: 3
      defaults:
        image:
          href: file:///var/lib/ironic/images/overcloud-minimal.qcow2
      instances:
      - hostname: overcloud-ceph-0
        name: node00
      - hostname: overcloud-ceph-1
        name: node01
      - hostname: overcloud-ceph-2
        name: node02

  3. roles_data.yaml 角色定义文件中,将 rhsm_enforce 参数设置为 False

    rhsm_enforce: False
  4. 运行置备命令:

    (undercloud)$ openstack overcloud node provision \
    --stack stack \
    --output /home/stack/templates/overcloud-baremetal-deployed.yaml \
    /home/stack/templates/overcloud-baremetal-deploy.yaml
  5. overcloud-baremetal-deployed.yaml 环境文件传递给 openstack overcloud deploy 命令。

11.3. 配置和部署 overcloud

为 overcloud 置备网络资源和裸机节点后,您可以使用 director 安装提供的未编辑 heat 模板文件以及您创建的任何自定义环境文件来配置 overcloud。完成 overcloud 的配置后,您可以部署 overcloud 环境。

重要

一个基本的 overcloud 会使用本地 LVM 存储作为块存储,这种配置不受支持。红帽建议您为块存储使用外部存储解决方案,如 Red Hat Ceph Storage。

11.3.1. 先决条件

  • 您已置备了 overcloud 所需的网络资源和裸机节点。

11.3.2. 使用环境文件配置 overcloud

undercloud 包括一组构成您的 overcloud 创建计划的 heat 模板。您可以使用环境文件来自定义 overcloud 的各个方面,这些文件是 YAML 格式的文件,其内容可覆盖核心 heat 模板集合中的参数和资源。您可以根据需要纳入多个环境文件。环境文件扩展名必须是 .yaml.template

红帽建议将自定义环境文件组织在一个单独目录中,比如 templates 目录。

您可以使用 -e 选项在 overcloud 部署中包括环境文件。使用 -e 选项添加到 overcloud 的所有环境文件都会成为 overcloud 堆栈定义的一部分。环境文件的顺序非常重要,因为后续环境文件中定义的参数和资源更为优先。

要在初始部署后修改 overcloud 配置,请执行以下操作:

  1. 修改定制环境文件和 heat 模板中的参数。
  2. 使用相同的环境文件再次运行 openstack overcloud deploy 命令

不要直接编辑 overcloud 配置,因为 director 在更新 overcloud 栈时会覆盖任何手动配置。

注意

Open Virtual Networking (OVN)是 Red Hat OpenStack Platform 17.0 中的默认网络机制驱动程序。如果要将 OVN 与分布式虚拟路由 (DVR) 搭配使用,则必须在 openstack overcloud deploy 命令中包含 environments/services/neutron-ovn-dvr-ha.yaml 文件。如果要在没有 DVR 的情况下使用 OVN,则必须在 openstack overcloud deploy 命令中包含 environment/services/neutron-ovn-ha.yaml 文件。

11.3.3. 创建 undercloud CA 信任的环境文件

如果您的 undercloud 使用 TLS,而证书颁发机构 (CA) 未获得公开信任,可将此 CA 用于 undercloud 操作的 SSL 端点加密。为确保其余部署可以访问 undercloud 端点,请将您的 overcloud 节点配置成信任 undercloud CA。

注意

要使这种方法奏效,overcloud 节点必须有一个指向 undercloud 公共端点的网络路由。依赖于脊叶型网络的部署可能必须应用这种配置。

有两种自定义证书可用于 undercloud:

  • 用户提供的证书 - 当您自行提供证书时,会应用此定义。证书可能来自于您自己的 CA,也可能是自签名的。这通过使用 undercloud_service_certificate 选项来传递。在这种情况下,您必须信任自签名证书,或 CA(具体取决于您的部署)。
  • 自动生成的证书 - 当您通过 certmonger 生成使用自己的本地 CA 的证书时,会应用此定义。使用 undercloud.conf 文件中的 generate_service_certificate 选项启用自动生成的证书。在这种情况下,director 在 /etc/pki/ca-trust/source/anchors/cm-local-ca.pem 生成 CA 证书,并配置 undercloud 的 HAProxy 实例以使用服务器证书。将 CA 证书添加到 inject-trust-anchor-hiera.yaml 文件中以将其呈现给 OpenStack Platform。

本例中使用了位于 /home/stack/ca.crt.pem 的一个自签名证书。如果您使用自动生成的证书,请改为使用 /etc/pki/ca-trust/source/anchors/cm-local-ca.pem

步骤

  1. 打开证书文件,仅复制证书部分。不要包括其密钥:

    $ vi /home/stack/ca.crt.pem

    您需要的证书部分与下方简写的示例类似:

    -----BEGIN CERTIFICATE-----
    MIIDlTCCAn2gAwIBAgIJAOnPtx2hHEhrMA0GCSqGSIb3DQEBCwUAMGExCzAJBgNV
    BAYTAlVTMQswCQYDVQQIDAJOQzEQMA4GA1UEBwwHUmFsZWlnaDEQMA4GA1UECgwH
    UmVkIEhhdDELMAkGA1UECwwCUUUxFDASBgNVBAMMCzE5Mi4xNjguMC4yMB4XDTE3
    -----END CERTIFICATE-----
  2. 创建一个名为 /home/stack/inject-trust-anchor-hiera.yaml 的 YAML 文件,其包含下列内容以及您从 PEM 文件复制而来的证书:

    parameter_defaults:
      CAMap:
        undercloud-ca:
          content: |
            -----BEGIN CERTIFICATE-----
            MIIDlTCCAn2gAwIBAgIJAOnPtx2hHEhrMA0GCSqGSIb3DQEBCwUAMGExCzAJBgNV
            BAYTAlVTMQswCQYDVQQIDAJOQzEQMA4GA1UEBwwHUmFsZWlnaDEQMA4GA1UECgwH
            UmVkIEhhdDELMAkGA1UECwwCUUUxFDASBgNVBAMMCzE5Mi4xNjguMC4yMB4XDTE3
            -----END CERTIFICATE-----
    注意
    • 证书字符串必须采用 PEM 格式。
    • CAMap 参数可能包含其他与 SSL/TLS 配置相关的证书。
  3. /home/stack/inject-trust-anchor-hiera.yaml 文件添加到部署命令中。在部署 overcloud 的过程中,director 将 CA 证书复制到每个 overcloud 节点。因此,每个节点都会信任 undercloud 的 SSL 端点提供的加密。

11.3.4. 在新部署中禁用 TSX

从 Red Hat Enterprise Linux 8.3 开始,内核默认禁用对 Intel 事务同步扩展 (TSX)功能的支持。

您必须为新的 overcloud 显式禁用 TSX,除非您特别需要将其用于工作负载或第三方供应商。

在环境文件中设置 KernelArgs heat 参数。

parameter_defaults:
    ComputeParameters:
       KernelArgs: "tsx=off"

在运行 openstack overcloud deploy 命令时包含该环境文件:

11.3.5. 验证 overcloud 配置

在部署 overcloud 之前,请验证您的 heat 模板和环境文件。

重要
  • 由于对 17.0 中的 API 的更改,以下验证目前不稳定:

    • switch-vlans
    • network-environment
    • dhcp-provisioning
  • FAILED 验证不会阻止您部署或运行 Red Hat OpenStack Platform。但是,FAILED 验证可能会显示生产环境中潜在的问题。

流程

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

    $ source ~/stackrc
  3. 使用部署所需的所有环境文件更新 overcloud 堆栈:

    $ openstack overcloud deploy --templates \
      -e environment-file1.yaml \
      -e environment-file2.yaml \
      ...
      --stack-only
  4. 验证您的 overcloud 堆栈:

    $ validation run \
      --group pre-deployment \
      --inventory <inventory_file>
    • <inventory_file > 替换为 Ansible 清单文件的名称和位置,如 ~/tripleo-deploy/undercloud/tripleo-ansible-inventory.yaml
    注意

    当您运行验证时,输出中的 Reasons 列仅限于 79 个字符。要查看验证结果已满,请查看验证日志文件。

  5. 查看验证报告的结果:

    $ validation history get [--full] [--validation-log-dir <log_dir>] <uuid>
    • 可选: 使用 --full 选项查看验证运行中的详细输出。
    • 可选: 使用 --validation-log-dir 选项将验证运行的输出写入验证日志。
    • <uuid > 替换为验证运行的 UUID。

11.3.6. 创建 overcloud

创建 Red Hat OpenStack Platform (RHOSP) overcloud 环境的最后一个阶段是运行 openstack overcloud deploy 命令以创建 overcloud。有关可用于 openstack overcloud deploy 命令的选项的信息,请参阅 部署命令选项

流程

  1. 收集 overcloud 环境所需的环境文件和配置文件,以及 director 安装提供的未编辑 heat 模板文件,以及您创建的自定义环境文件。这应该包括以下文件:

    • overcloud-baremetal-deployed.yaml 节点定义文件。
    • overcloud-networks-deployed.yaml 网络定义文件。
    • overcloud-vip-deployed.yaml 网络 VIP 定义文件。
    • 容器化 OpenStack 服务的容器镜像位置。
    • 任何用于红帽 CDN 或 Satellite 注册的环境文件。
    • 任何其它自定义环境文件。
  2. 按照优先级顺序组织环境文件,首先列出未编辑的 heat 模板文件,后跟包含自定义配置的环境文件,如覆盖默认属性。
  3. 构建 openstack overcloud deploy 命令,按所需顺序指定配置文件和模板,例如:

    (undercloud) $ openstack overcloud deploy --templates \
     [-n /home/stack/templates/network_data.yaml \ ]
      -e /home/stack/templates/overcloud-baremetal-deployed.yaml\
      -e /home/stack/templates/overcloud-networks-deployed.yaml\
      -e /home/stack/templates/overcloud-vip-deployed.yaml \
      -e /home/stack/containers-prepare-parameter.yaml \
      -e /home/stack/inject-trust-anchor-hiera.yaml \
     [-r /home/stack/templates/roles_data.yaml ]
    -n /home/stack/templates/network_data.yaml
    指定自定义网络配置。如果您使用网络隔离或自定义可组合网络,则需要此项。有关配置 overcloud 网络的详情,请参考配置 overcloud 网络
    -e /home/stack/containers-prepare-parameter.yaml
    添加容器镜像准备环境文件。您在安装 undercloud 的过程中生成了此文件,可使用此文件创建 overcloud。
    -e /home/stack/inject-trust-anchor-hiera.yaml
    添加用于在 undercloud 中安装自定义证书的环境文件。
    -r /home/stack/templates/roles_data.yaml
    如果使用自定义角色或想要启用多架构云,则生成的角色数据。
  4. overcloud 创建完毕后,director 会提供为配置 overcloud 而执行的 Ansible play 的总结:

    PLAY RECAP *************************************************************
    overcloud-compute-0     : ok=160  changed=67   unreachable=0    failed=0
    overcloud-controller-0  : ok=210  changed=93   unreachable=0    failed=0
    undercloud              : ok=10   changed=7    unreachable=0    failed=0
    
    Tuesday 15 October 2018  18:30:57 +1000 (0:00:00.107) 1:06:37.514 ******
    ========================================================================
  5. overcloud 创建完成后,director 提供了访问 overcloud 的详细信息:

    Ansible passed.
    Overcloud configuration completed.
    Overcloud Endpoint: http://192.168.24.113:5000
    Overcloud Horizon Dashboard URL: http://192.168.24.113:80/dashboard
    Overcloud rc file: /home/stack/overcloudrc
    Overcloud Deployed
提示

您可以将部署命令保留在每次使用新的 env 文件更新配置时添加到的文件中。

11.3.7. 部署命令选项

下表列出 openstack overcloud deploy 命令的其他参数。

重要

一些选项在此发行版本中作为技术预览提供,因此不享有红帽的全面支持。它们只应用于测试,不应在生产环境中使用。有关技术预览功能的更多信息,请参阅覆盖范围详细信息

表 11.8. 部署命令选项
参数描述

--templates [TEMPLATES]

包含您要部署的 heat 模板的目录。如果为空,部署命令会使用位于 /usr/share/openstack-tripleo-heat-templates/ 的默认模板。

--stack STACK

要创建或更新的堆栈的名称

-t [TIMEOUT]--timeout [TIMEOUT]

以分钟为单位的部署超时持续时间

--libvirt-type [LIBVIRT_TYPE]

要用于虚拟机监控程序的虚拟化类型

--ntp-server [NTP_SERVER]

要用于同步时间的网络时间协议 (NTP) 服务器。您也可以在以逗号分隔的列表中指定多个 NTP 服务器,例如:--ntp-server 0.centos.pool.org,1.centos.pool.org。对于高可用性集群部署,重要的是各个 Controller 节点始终引用同一时间源。但请注意,通常的环境可能已经指定了符合公认规范的 NTP 时间源。

--no-proxy [NO_PROXY]

为环境变量 no_proxy 指定自定义值。 这个环境变量被用来在代理通信中排除特定的主机名。

--overcloud-ssh-user OVERCLOUD_SSH_USER

定义访问 overcloud 节点的 SSH 用户。SSH 访问通常通过 tripleo-admin 用户进行。

--overcloud-ssh-key OVERCLOUD_SSH_KEY

定义用于 SSH 访问 overcloud 节点的密钥路径。

--overcloud-ssh-network OVERCLOUD_SSH_NETWORK

定义要用于 SSH 访问 overcloud 节点的网络名称。

-e [EXTRA HEAT TEMPLATE], --environment-file [ENVIRONMENT FILE]

要传递给 overcloud 部署的额外环境文件。您可以多次指定此选项。请注意,传递到 openstack overcloud deploy 命令的环境文件顺序是非常重要的。例如,如果一个参数在多个环境文件中出现,则后续环境文件中的参数将覆盖前面文件中的同一参数。

--environment-directory

包含要在部署中包括的环境文件的目录。部署命令以数字顺序,然后以字母顺序处理这些环境文件。

-r ROLES_FILE

定义角色文件并覆盖 --templates 目录里的默认 roles_data.yaml 。文件位置可以是绝对路径或者相对于 --templates 的路径。

-n NETWORKS_FILE

定义网络文件并覆盖 --templates 目录里的默认 network_data.yaml。文件位置可以是绝对路径或者相对于 --templates 的路径。

-p PLAN_ENVIRONMENT_FILE

定义计划环境文件,并覆盖 --templates 目录里的默认 plan-environment.yaml 。文件位置可以是绝对路径或者相对于 --templates 的路径。

--no-cleanup

如果您不希望在部署后删除临时文件,并记录其位置,则使用此选项。

--update-plan-only

如果您要在不执行实际部署的情况下更新计划,则使用此选项。

--validation-errors-nonfatal

overcloud 在创建过程中会执行一组部署前检查。如果部署前检查出现任何非严重错误,则此选项会退出创建。我们推荐使用此选项,因为任何错误都有可能造成部署失败。

--validation-warnings-fatal

overcloud 在创建过程中会执行一组部署前检查。如果部署前检查出现任何非关键警告,则此选项会退出创建。openstack-tripleo-validations

--dry-run

如果您要在不创建 overcloud 的情况下对 overcloud 执行验证检查,则使用此选项。

--run-validations

使用此选项从 openstack-tripleo-validations 软件包运行外部验证。

--skip-postconfig

使用此选项跳过 overcloud 部署后配置。

--force-postconfig

使用此选项强制进行 overcloud 部署后配置。

--skip-deploy-identifier

如果您不希望部署命令为 DeployIdentifier 参数生成唯一标识符,则使用此选项。软件配置部署步骤仅当配置发生实际更改时才会触发。使用此选项要非常谨慎,仅当您确信不需要运行软件配置(如扩展某些角色)时方可使用。

--answers-file ANSWERS_FILE

带有选项和参数的 YAML 文件的路径。

--disable-password-generation

如果要禁用 overcloud 服务的密码生成,则使用此选项。

--deployed-server

如果要部署预置备 overcloud 节点,则使用此选项。与 --disable-validations 结合使用。

--no-config-download, --stack-only

如果您要禁用 config-download 工作流,仅创建堆栈和相关 OpenStack 资源,则使用此选项。此命令不会对 overcloud 应用软件配置。

--config-download-only

如果您要禁用 overcloud 栈创建,并仅运行 config-download 工作流以应用软件配置,则使用此选项。

--output-dir OUTPUT_DIR

要用于保存 config-download 输出的目录。该目录必须可由 mistral 用户写入。如果没有指定,director 将使用默认值,即 /var/lib/mistral/overcloud

--override-ansible-cfg OVERRIDE_ANSIBLE_CFG

Ansible 配置文件的路径。该文件的配置会覆盖 config-download 默认生成的所有配置。

--config-download-timeout CONFIG_DOWNLOAD_TIMEOUT

您要用于 config-download 步骤的超时持续时间(以分钟为单位)。如果未设置,director 会在堆栈部署操作后将默认值设置为从 --timeout 参数中保留的时间。

--limit NODE1,NODE2

(技术预览)将此选项与以逗号分隔的节点列表一起使用,将 config-download playbook 的执行限制在特定节点或一组节点。例如,当想要仅在新节点上运行 config-download 时,--limit 选项对扩展操作很有用。此参数可能会导致在主机间实时迁移实例失败,请参阅使用 ansible-playbook-command.sh 脚本运行 config-download

--tags TAG1,TAG2

(技术预览)将此选项与 config-download playbook 中的以逗号分隔的标签列表一起使用,通过一组特定 config-download 任务来运行部署。

--skip-tags TAG1,TAG2

(技术预览)将此选项与您要从 config-download playbook 中跳过的以逗号分隔的标签列表一起使用。

运行以下命令查看完整选项列表:

(undercloud) $ openstack help overcloud deploy

某些命令行参数已过时或已弃用,它们的功能可以通过环境文件的 parameter_defaults 部分中所包含的 heat 模板参数实现。下表将已弃用的参数与 heat 模板中的等效参数对应了起来。

表 11.9. 将被弃用的 CLI 参数映射到 heat 模板参数
参数描述Heat 模板参数

--control-scale

扩展的 Controller 节点数量

ControllerCount

--compute-scale

扩展的 Compute 节点数量

ComputeCount

--ceph-storage-scale

扩展的 Ceph 节点数量

CephStorageCount

--block-storage-scale

扩展的 Block Storage (cinder) 节点数量

BlockStorageCount

--swift-storage-scale

扩展的 Object Storage (swift) 节点数量

ObjectStorageCount

--control-flavor

要用于 Controller 节点的 flavor

OvercloudControllerFlavor

--compute-flavor

要用于 Compute 节点的 flavor

OvercloudComputeFlavor

--ceph-storage-flavor

要用于 Ceph Storage 节点的 flavor

OvercloudCephStorageFlavor

--block-storage-flavor

要用于 Block Storage (cinder) 节点的 flavor

OvercloudBlockStorageFlavor

--swift-storage-flavor

要用于 Object Storage (swift) 节点的 flavor

OvercloudSwiftStorageFlavor

--validation-errors-fatal

overcloud 在创建过程中会执行一组部署前检查。在使用这个选项时,如果部署前检查出现任何严重错误,则会退出创建。我们推荐使用此选项,因为任何错误都有可能造成部署失败。

未进行参数映射

--disable-validations

完全禁用部署前验证。这些验证是内置部署前验证,已由 openstack-tripleo-validations 软件包中的外部验证替代。

未进行参数映射

--config-download

使用 config-download 机制运行部署。现在这是默认选项,以后可以删除该 CLI 选项。

未进行参数映射

--rhel-reg

使用此选项把 overcloud 节点注册到客户门户或 Satellite 6。

RhsmVars

--reg-method

使用此选项定义您要用于 overcloud 节点的注册方法。satellite 代表 Red Hat Satellite 6 或 Red Hat Satellite 5,portal 代表客户门户(Customer Portal)。

RhsmVars

--reg-org [REG_ORG]

要用于注册的组织。

RhsmVars

--reg-force

使用此选项注册系统(即使已经注册过)。

RhsmVars

--reg-sat-url [REG_SAT_URL]

注册 overcloud 节点的 Satellite 服务器的基本 URL。此参数需要使用 Satellite 的 HTTP URL 而不是 HTTPS URL。例如,使用 http://satellite.example.com 而不是 https://satellite.example.com。overcloud 的创建过程会使用此 URL 来确定服务器是 Red Hat Satellite 5 还是 Red Hat Satellite 6 服务器。如果服务器是 Red Hat Satellite 6 服务器,则 overcloud 获取 katello-ca-consumer-latest.noarch.rpm 文件,使用 subscription-manager 注册,并安装 katello-agent。如果服务器是 Red Hat Satellite 5 服务器,则 overcloud 获取 RHN-ORG-TRUSTED-SSL-CERT 文件并使用 rhnreg_ks 注册。

RhsmVars

--reg-activation-key [REG_ACTIVATION_KEY]

使用此选项定义您要用于注册的激活码。

RhsmVars

这些参数计划从未来的 Red Hat OpenStack Platform 版本中移除。

11.3.8. 验证 overcloud 部署

验证部署的 overcloud。

先决条件

  • 您已部署了 overcloud。

流程

  1. 查找 stackrc 凭证文件:

    $ source ~/stackrc
  2. 验证 overcloud 部署:

    $ validation run \
      --group post-deployment \
      [--inventory <inventory_file>]
    • <inventory_file > 替换为 ansible 清单文件的名称。默认情况下,动态清单名为 tripleo-ansible-inventory

      注意

      当您运行验证时,输出中的 Reasons 列仅限于 79 个字符。要查看验证结果已满,请查看验证日志文件。

  3. 查看验证报告的结果:

    $ validation show run [--full] <UUID>
    • <UUID > 替换为验证运行的 UUID。
    • 可选: 使用 --full 选项查看验证运行中的详细输出。
重要

FAILED 验证不会阻止您部署或运行 Red Hat OpenStack Platform。但是,FAILED 验证可能会显示生产环境中潜在的问题。

额外的资源

11.3.9. 访问 overcloud

director 生成凭据文件,其中包含从 undercloud 操作 overcloud 所需的凭据。director 将此文件保存为 stack 用户主目录的 overcloudrc 文件。

流程

  1. 获取 overcloudrc 文件:

    (undercloud)$ source ~/overcloudrc

    命令提示符更改以表示您正在访问 overcloud:

    (overcloud)$
  2. 要返回与 undercloud 交互,请提供 stackrc 文件:

    (overcloud)$ source ~/stackrc
    (undercloud)$

    命令提示符更改以表示您正在访问 undercloud:

    (undercloud)$

11.4. 使用预置备节点配置基本 overcloud

本章包含基本配置流程,可用于使用预置备节点配置 Red Hat OpenStack Platform (RHOSP) 环境。这种情境与标准 overcloud 创建情境有所不同,具体体现在以下几个方面:

  • 您可以使用外部工具置备节点,让 director 仅控制 overcloud 的配置。
  • 您无需依赖 director 的置备方法,可直接使用节点。如果您想创建没有电源管理控制的 overcloud 或使用具有 DHCP/PXE 引导限制的网络,该方法很有用。
  • director 不使用 OpenStack Compute (nova)、OpenStack Bare Metal (ironic) 或者 OpenStack Image (glance) 来管理节点。
  • 预置备的节点可以使用不依赖于 QCOW2 overcloud-full 镜像的自定义分区布局。

这种情境仅包括没有自定义功能的基本配置。

重要

您无法将预置备节点与 director 置备的节点合并。

11.4.1. 预置备节点要求

在开始使用预置备节点部署 overcloud 前,请确保环境中存在以下配置:

  • 您在 第 7 章 在 undercloud 上安装 director 中创建的 director 节点。
  • 节点的一组裸机。所需的节点数量由您需要创建的 overcloud 类型所决定。这些机器必须符合为每个节点类型设定的要求。这些节点需要 Red Hat Enterprise Linux 9.0 作为主机操作系统安装。红帽建议使用最新的可用版本。
  • 用于管理预置备节点的一个网络连接。本情境需要具备对节点的不间断 SSH 访问权限以进行编配代理配置。
  • Control Plane 网络的一个网络连接。这种网络具备两种主要情境:

    • 将 Provisioning 网络用作 Control Plane,这种是默认情境。这个网络通常是从预置备节点到 director 的第 3 层 (L3) 可路由网络连接。本情境示例使用以下 IP 地址分配:

      表 11.10. Provisioning 网络 IP 分配信息
      节点名IP 地址

      Director

      192.168.24.1

      控制器 0

      192.168.24.2

      计算 0

      192.168.24.3

    • 使用单独的网络。如果 director 的 Provisioning 网络是私有非路由网络,则可从任何子网定义节点的 IP 地址,通过公共 API 端点与 director 通信。有关这种情况要求的详情请参考 第 11.4.6 节 “为预置备节点使用单独网络”
  • 本示例中的所有其他网络类型使用 Control Plane 网络来提供 OpenStack 服务。不过,您可以为其他网络流量类型创建额外的网络。
  • 如果有任何节点使用 Pacemaker 资源,服务用户 hacluster 和服务组 haclient 必须具有 189 的 UID/GID。这是因为 CVE-2018-16877。如果与操作系统一起安装了 Pacemaker,则安装会自动创建这些 ID。如果错误设置 ID 值,请按照文章 OpenStack 小幅更新/快进升级可能在 controller 节点上在 pacemaker 步骤失败,显示消息“Could not evaluate: backup_cib” 中的步骤来更改 ID 值。
  • 要防止某些服务绑定到不正确的 IP 地址并导致部署失败,请确保 /etc/hosts 文件不包含 node-name=127.0.0.1 映射。

11.4.2. 在预置备节点上创建用户

使用预置备节点配置 overcloud 时,director 需要对 overcloud 节点进行 SSH 访问。在预置备的节点上,您必须创建一个使用 SSH 密钥身份验证的用户,并为该用户配置免密码 sudo 访问。在预置备的节点上创建用户后,可以结合使用 --overcloud-ssh-user--overcloud-ssh-key 选项及 openstack overcloud deploy 命令,创建具有预置备节点的 overcloud。

默认情况下,overcloud SSH 用户和 overcloud SSH 密钥的值是 stack 用户和 ~/.ssh/id_rsa。要创建 stack 用户,请完成以下步骤。

步骤

  1. 在每个 overcloud 节点上,创建 stack 用户并设定密码。例如,在 Controller 节点上运行以下命令:

    [root@controller-0 ~]# useradd stack
    [root@controller-0 ~]# passwd stack  # specify a password
  2. 进行以下操作以使这个用户使用 sudo 时不需要输入密码:

    [root@controller-0 ~]# echo "stack ALL=(root) NOPASSWD:ALL" | tee -a /etc/sudoers.d/stack
    [root@controller-0 ~]# chmod 0440 /etc/sudoers.d/stack
  3. 在所有预置备节点上创建并配置 stack 用户后,将 stack 用户的公共 SSH 密钥从 director 节点复制到每个 overcloud 节点。例如,要将 director 的公共 SSH 密钥复制到 Controller 节点,请运行以下命令:

    [stack@director ~]$ ssh-copy-id stack@192.168.24.2
重要

要复制 SSH 密钥,您可能必须在每个 overcloud 节点的 SSH 配置中临时设置 PasswordAuthentication Yes。复制 SSH 密钥后,设置 PasswordAuthentication No,并在以后使用 SSH 密钥进行身份验证。

11.4.3. 为预置备节点注册操作系统

每个节点需要具备访问红帽订阅的权限。在每个节点上完成以下步骤,将节点注册到 Red Hat Content Delivery Network 中。以 root 用户身份或具有 sudo 特权的用户身份执行命令。

重要

仅启用列出的软件仓库。其他软件仓库可能导致软件包和软件冲突。请勿启用任何其他软件仓库。

步骤

  1. 运行注册命令,按照提示输入您的客户门户用户名和密码:

    [root@controller-0 ~]# sudo subscription-manager register
  2. 查找 Red Hat OpenStack Platform 17.0 的权利池:

    [root@controller-0 ~]# sudo subscription-manager list --available --all --matches="Red Hat OpenStack"
  3. 使用上一步中的池 ID 以附加 Red Hat OpenStack Platform 16 权利:

    [root@controller-0 ~]# sudo subscription-manager attach --pool=pool_id
  4. 禁用所有默认软件仓库:

    [root@controller-0 ~]# sudo subscription-manager repos --disable=*
  5. 启用所需的 Red Hat Enterprise Linux 软件仓库:

    [root@controller-0 ~]# sudo subscription-manager repos \
     --enable=rhel-9-for-x86_64-baseos-eus-rpms \
     --enable=rhel-9-for-x86_64-appstream-eus-rpms \
     --enable=rhel-9-for-x86_64-highavailability-eus-rpms \
     --enable=openstack-beta-for-rhel-9-x86_64-rpms \
     --enable=fast-datapath-for-rhel-9-x86_64-rpms
  6. 如果 overcloud 使用 Ceph Storage 节点,请启用相关的 Ceph Storage 软件仓库:

    [root@cephstorage-0 ~]# sudo subscription-manager repos \
     --enable=rhel-9-for-x86_64-baseos-rpms \
     --enable=rhel-9-for-x86_64-appstream-rpms \
     --enable=openstack-beta-deployment-tools-for-rhel-9-x86_64-rpms
  7. 锁定除 Red Hat Ceph Storage 节点外的所有 overcloud 节点上的 RHEL 版本:

    [root@controller-0 ~]# sudo subscription-manager release --set=9.0
  8. 更新您的系统,确保您具备最新的基础系统软件包:

    [root@controller-0 ~]# sudo dnf update -y
    [root@controller-0 ~]# sudo reboot

节点现在可供您的 overcloud 使用。

11.4.4. 配置对 director 的 SSL/TLS 访问权限

如果 director 使用 SSL/TLS,那么预置备节点需要用于签署 director 的 SSL/TLS 证书的证书授权机构文件。如果使用自己的证书颁发机构(CA),请在每个 overcloud 节点上执行以下操作。

步骤

  1. 将证书授权机构文件复制到各预置备节点上的 /etc/pki/ca-trust/source/anchors/ 目录中。
  2. 在每个 overcloud 节点上运行以下命令:

    [root@controller-0 ~]#  sudo update-ca-trust extract

这些步骤将确保 overcloud 节点可以通过 SSL/TLS 访问 director 的公共 API。

11.4.5. 配置 control plane 网络

预置备 overcloud 节点使用标准 HTTP 请求从 director 获取元数据。这表示所有 overcloud 节点都需要 L3 权限来访问以下之一:

  • director 的 Control Plane 网络,这是在 undercloud.conf 文件中使用 network_cidr 参数定义的子网。overcloud 节点需要对该子网的直接访问权限或对该子网的可路由访问权限。
  • director 的公共 API 端点,使用 undercloud.conf 文件中的 undercloud_public_host 参数指定。如果没有指向 Control Plane 的 L3 路由或希望使用 SSL/TLS 通信,则此选项可用。有关配置 overcloud 节点以使用公共 API 端点的更多信息,请参阅 第 11.4.6 节 “为预置备节点使用单独网络”

director 使用 Control Plane 网络管理和配置标准 overcloud。对于具有预置备节点的 overcloud,可能需要对您的网络配置进行修改以适应 director 和预置备节点之间的通信。

使用网络隔离

您可以使用网络隔离分组服务以使用特定网络,包括 Control Plane。您可以为 Control Plane 上的节点定义特定 IP 地址。有关隔离网络和创建可预测的节点放置策略的更多信息,请参阅 网络隔离

注意

如果使用网络隔离,请确保您的 NIC 模板不包括用于 undercloud 访问的 NIC。这些模板可能会重新配置 NIC,这会导致在部署过程中出现连接和配置问题。

分配 IP 地址

如果不使用网络隔离,则可使用一个 Control Plane 网络管理所有服务。这需要手动配置每个节点的 Control Plane NIC,以便使用 Control Plane 网络范围内的 IP 地址。如果将 director 的 Provisioning 网络用作 Control Plane,请确保所选的 overcloud IP 地址不在置备(dhcp_startdhcp_end)和内省 (inspection_iprange) DHCP 范围之内。

在创建标准 overcloud 期间,director 将创建 OpenStack Networking (neutron) 端口并为 Provisioning/Control Plane 网络上的 overcloud 节点自动分配 IP 地址。但是,这可能导致 director 分配的地址与您为每个节点手动配置的 IP 地址不同。在这种情况下,使用可预测的 IP 地址策略来强制 director 使用 Control Plane 上的预置备 IP 分配。

如果您使用网络隔离,请创建一个自定义环境文件 deployed-ports.yaml 来实现可预测的 IP 策略。以下示例自定义环境文件 deployed-ports.yaml,将一组资源 registry 映射和参数传递给 director,并且定义预置备节点的 IP 分配。NodePortMapControlPlaneVipDataVipPortMap 参数定义与每个 overcloud 节点对应的 IP 地址和子网 CIDR。

resource_registry:
  # Deployed Virtual IP port resources
  OS::TripleO::Network::Ports::ExternalVipPort: /usr/share/openstack-tripleo-heat-templates/network/ports/deployed_vip_external.yaml
  OS::TripleO::Network::Ports::InternalApiVipPort: /usr/share/openstack-tripleo-heat-templates/network/ports/deployed_vip_internal_api.yaml
  OS::TripleO::Network::Ports::StorageVipPort: /usr/share/openstack-tripleo-heat-templates/network/ports/deployed_vip_storage.yaml
  OS::TripleO::Network::Ports::StorageMgmtVipPort: /usr/share/openstack-tripleo-heat-templates/network/ports/deployed_vip_storage_mgmt.yaml

  # Deployed ControlPlane port resource
  OS::TripleO::DeployedServer::ControlPlanePort: /usr/share/openstack-tripleo-heat-templates/deployed-server/deployed-neutron-port.yaml

  # Controller role port resources
  OS::TripleO::Controller::Ports::ExternalPort: /usr/share/openstack-tripleo-heat-templates/network/ports/deployed_external.yaml
  OS::TripleO::Controller::Ports::InternalApiPort: /usr/share/openstack-tripleo-heat-templates/network/ports/deployed_internal_api.yaml
  OS::TripleO::Controller::Ports::StorageMgmtPort: /usr/share/openstack-tripleo-heat-templates/network/ports/deployed_storage_mgmt.yaml
  OS::TripleO::Controller::Ports::StoragePort: /usr/share/openstack-tripleo-heat-templates/network/ports/deployed_storage.yaml
  OS::TripleO::Controller::Ports::TenantPort: /usr/share/openstack-tripleo-heat-templates/network/ports/deployed_tenant.yaml

  # Compute role port resources
  OS::TripleO::Compute::Ports::InternalApiPort: /usr/share/openstack-tripleo-heat-templates/network/ports/deployed_internal_api.yaml
  OS::TripleO::Compute::Ports::StoragePort: /usr/share/openstack-tripleo-heat-templates/network/ports/deployed_storage.yaml
  OS::TripleO::Compute::Ports::TenantPort: /usr/share/openstack-tripleo-heat-templates/network/ports/deployed_tenant.yaml

  # CephStorage role port resources
  OS::TripleO::CephStorage::Ports::StorageMgmtPort: /usr/share/openstack-tripleo-heat-templates/network/ports/deployed_storage_mgmt.yaml
  OS::TripleO::CephStorage::Ports::StoragePort: /usr/share/openstack-tripleo-heat-templates/network/ports/deployed_storage.yaml

parameter_defaults:
  NodePortMap: 1
    # Controller node parameters
    controller-00-rack01: 2
      ctlplane: 3
        ip_address: 192.168.24.201
        ip_address_uri: 192.168.24.201
        ip_subnet: 192.168.24.0/24
      external:
        ip_address: 10.0.0.201
        ip_address_uri: 10.0.0.201
        ip_subnet: 10.0.0.10/24
      internal_api:
        ip_address: 172.16.2.201
        ip_address_uri: 172.16.2.201
        ip_subnet: 172.16.2.10/24
      management:
        ip_address: 192.168.1.201
        ip_address_uri: 192.168.1.201
        ip_subnet: 192.168.1.10/24
      storage:
        ip_address: 172.16.1.201
        ip_address_uri: 172.16.1.201
        ip_subnet: 172.16.1.10/24
      storage_mgmt:
        ip_address: 172.16.3.201
        ip_address_uri: 172.16.3.201
        ip_subnet: 172.16.3.10/24
      tenant:
        ip_address: 172.16.0.201
        ip_address_uri: 172.16.0.201
        ip_subnet: 172.16.0.10/24
    ...

    # Compute node parameters
    compute-00-rack01:
      ctlplane:
        ip_address: 192.168.24.11
        ip_address_uri: 192.168.24.11
        ip_subnet: 192.168.24.0/24
      internal_api:
        ip_address: 172.16.2.11
        ip_address_uri: 172.16.2.11
        ip_subnet: 172.16.2.10/24
      storage:
        ip_address: 172.16.1.11
        ip_address_uri: 172.16.1.11
        ip_subnet: 172.16.1.10/24
      tenant:
        ip_address: 172.16.0.11
        ip_address_uri: 172.16.0.11
        ip_subnet: 172.16.0.10/24
    ...

    # Ceph node parameters
    ceph-00-rack01:
      ctlplane:
        ip_address: 192.168.24.101
        ip_address_uri: 192.168.24.101
        ip_subnet: 192.168.24.0/24
      storage:
        ip_address: 172.16.1.101
        ip_address_uri: 172.16.1.101
        ip_subnet: 172.16.1.10/24
      storage_mgmt:
        ip_address: 172.16.3.101
        ip_address_uri: 172.16.3.101
        ip_subnet: 172.16.3.10/24
    ...

  # Virtual IP address parameters
  ControlPlaneVipData:
    fixed_ips:
    - ip_address: 192.168.24.5
    name: control_virtual_ip
    network:
      tags: [192.168.24.0/24]
      subnets:
      - ip_version: 4
  VipPortMap
    external:
      ip_address: 10.0.0.100
      ip_address_uri: 10.0.0.100
      ip_subnet: 10.0.0.100/24
    internal_api:
      ip_address: 172.16.2.100
      ip_address_uri: 172.16.2.100
      ip_subnet: 172.16.2.100/24
    storage:
      ip_address: 172.16.1.100
      ip_address_uri: 172.16.1.100
      ip_subnet: 172.16.1.100/24
    storage_mgmt:
      ip_address: 172.16.3.100
      ip_address_uri: 172.16.3.100
      ip_subnet: 172.16.3.100/24

  RedisVirtualFixedIPs:
    - ip_address: 192.168.24.6
        use_neutron: false
1
NodePortMap 映射定义节点分配的名称。
2
节点的短主机名,格式为 < node_hostname>
3
节点的网络定义和 IP 分配。网络包括 ctlplaneexternalinternal_apimanagementstoragestorage_mgmt租户。IP 分配包括 ip_addressip_address_uriip_subnet
  • IPv4: ip_addressip_address_uri 应设置为相同的值。
  • IPv6:

    • ip_address :设置为没有括号的 IPv6 地址。
    • ip_address_uri :设置为方括号中的 IPv6 地址,例如 [2001:0db8:85a3:0000:0000:8a2e:0370:7334]

11.4.6. 为预置备节点使用单独网络

默认情况下,director 使用 Provisioning 网络作为 overcloud Control Plane。但是,如果此网络被隔离且不可路由,则节点在配置期间不能与 director 的内部 API 通信。在这种情况下,您可能需要为节点指定一个单独的网络,并进行配置,以便通过公共 API 与 director 通信。

对于此情境,有几个需要满足的要求:

本节中的示例使用了与主要情境不同的 IP 地址分配:

表 11.11. Provisioning 网络 IP 分配信息
节点名IP 地址或 FQDN

Director(内部 API)

192.168.24.1 (Provisioning 网络和 Control Plane)

Director(公共 API)

10.1.1.1 / director.example.com

overcloud 虚拟 IP

192.168.100.1

控制器 0

192.168.100.2

计算 0

192.168.100.3

以下章节为需要单独的 overcloud 节点网络的情境提供额外配置。

IP 地址分配

IP 分配方法类似于 第 11.4.5 节 “配置 control plane 网络”。但是,由于 Control Plane 可能无法从部署的服务器路由,因此您可以使用 NodePortMapControlPlaneVipDataVipPortMap 参数从您选择的 overcloud 节点子网中分配 IP 地址,包括访问 Control Plane 的虚拟 IP 地址。以下示例是来自 第 11.4.5 节 “配置 control plane 网络”deployed-ports.yaml 自定义环境文件的修改版本,它适用于此网络架构:

parameter_defaults:
  NodePortMap:
    controller-00-rack01
      ctlplane
        ip_address: 192.168.100.2
        ip_address_uri: 192.168.100.2
        ip_subnet: 192.168.100.0/24
...
    compute-00-rack01:
      ctlplane
        ip_address: 192.168.100.3
        ip_address_uri: 192.168.100.3
        ip_subnet: 192.168.100.0/24
...
  ControlPlaneVipData:
    fixed_ips:
    - ip_address: 192.168.100.1
    name: control_virtual_ip
    network:
      tags: [192.168.100.0/24]
    subnets:
    - ip_version: 4
  VipPortMap:
    external:
      ip_address: 10.0.0.100
      ip_address_uri: 10.0.0.100
      ip_subnet: 10.0.0.100/24
....
  RedisVirtualFixedIPs:1
    - ip_address: 192.168.100.10
      use_neutron: false
1
RedisVipPort 资源被映射至 network/ports/noop.yaml。由于默认 Redis VIP 地址来自 Control Plane,因此该映射是必要的。在这种情况下,使用 noop 来禁用这种 Control Plane 映射。

11.4.7. 映射预置备的节点主机名

配置预置备节点时,必须将基于 heat 的主机名映射到实际主机名,以便 ansible-playbook 能够到达可解析主机。请使用 HostnameMap 来映射这些值。

步骤

  1. 创建环境文件,例如 hostname-map.yaml,并包括 HostnameMap 参数和主机名映射。请遵循以下语法:

    parameter_defaults:
      HostnameMap:
        [HEAT HOSTNAME]: [ACTUAL HOSTNAME]
        [HEAT HOSTNAME]: [ACTUAL HOSTNAME]

    [HEAT HOSTNAME] 通常符合以下惯例:[STACK NAME]-[ROLE]-[INDEX]

    parameter_defaults:
      HostnameMap:
        overcloud-controller-0: controller-00-rack01
        overcloud-controller-1: controller-01-rack02
        overcloud-controller-2: controller-02-rack03
        overcloud-novacompute-0: compute-00-rack01
        overcloud-novacompute-1: compute-01-rack01
        overcloud-novacompute-2: compute-02-rack01
  2. 保存 hostname-map.yaml 文件。

11.4.8. 为预置备节点配置 Ceph Storage

在 undercloud 主机上完成以下步骤,为已部署的节点配置 Ceph。

流程