升级框架 (13 到 16.1)


Red Hat OpenStack Platform 16.1

从 Red Hat OpenStack Platform 13 原位升级到 16.1

OpenStack Documentation Team

摘要

本指南包含有关在长生命版本间进行原位升级的框架信息。此框架包含将 OpenStack Platform 环境从一个长生命版本升级到下一个长生命版本的工具。在这种情况下,本指南侧重于从 Red Hat OpenStack Platform 13 (Queens)升级到 16.1 (Train)。

使开源包含更多

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

对红帽文档提供反馈

我们感谢您对文档提供反馈信息。与我们分享您的成功秘诀。

使用直接文档反馈(DDF)功能

使用 添加反馈 DDF 功能,用于特定句子、段落或代码块上的直接注释。

  1. Multi-page HTML 格式查看文档。
  2. 请确定您看到文档右上角的 反馈 按钮。
  3. 用鼠标指针高亮显示您想评论的文本部分。
  4. 添加反馈
  5. 添加反馈项中输入您的意见。
  6. 可选:添加您的电子邮件地址,以便文档团队可以联系您以讨论您的问题。
  7. Submit

第 1 章 关于用于升级的 Red Hat OpenStack Platform 框架

用于升级的 Red Hat OpenStack Platform 框架是将 Red Hat OpenStack Platform 环境从一个长生命版本升级到下一个长生命版本的工作流。此工作流是一个原位解决方案,升级会在现有环境中进行。

1.1. 长生命版本的升级框架

您可以使用 Red Hat OpenStack Platform 升级框架 通过多个 overcloud 版本执行原位升级路径。目标是为您提供一个机会来保持使用一个被认为是长生命版本的 OpenStack 版本,并在下一个长生命周期版本发布时进行升级。

重要

您可以将 Red Hat OpenStack Platform 13 升级到 Red Hat OpenStack Platform 16.1。但是,为了获得完整的产品支持,只支持 Red Hat OpenStack Platform 13 到 Red Hat OpenStack Platform 16.2 升级路径。如果要从 13 升级到 16.1,则必须获得支持例外。

有关升级到 Red Hat OpenStack Platform 16.2 的更多信息,请参阅将 13 升级到 16.2 的框架

本指南通过以下版本提供升级框架:

当前版本目标版本

Red Hat OpenStack Platform 13

Red Hat OpenStack Platform 16.1

1.2. 对长生命周期版本的生命周期支持

有关 Red Hat OpenStack Platform 生命周期支持的详细信息,请参阅 Red Hat OpenStack Platform 生命周期

1.3. 长生命版本的升级路径

红帽提供了两个选项,可将您的环境升级到下一个长生命版本:

原位升级
执行现有环境中的服务升级。本指南主要侧重于这个选项。
并行迁移
创建新的 Red Hat OpenStack Platform 16.1 环境,并将工作负载从当前环境迁移到新环境。有关 Red Hat OpenStack Platform 并行迁移的更多信息,请联系红帽全局专业服务。
重要

此表中的持续时间根据内部测试的最小估算,可能不适用于所有生产环境。例如,如果您的硬件具有低规格或扩展引导周期,则允许更多时间在这些持续时间内。要准确测量每个任务的升级持续时间,请在测试环境中与您的生产环境类似的硬件执行这些步骤。

表 1.1. 升级路径的影响和持续时间
 原位升级并行迁移

undercloud 的升级持续时间

每个主要操作的预计持续时间包括:

  • Leapp 升级命令需要 30 分钟
  • Leapp 重启需要 30 分钟
  • 升级 director 需要 40 分钟

无。除了现有的 undercloud 外,您还将创建新的 undercloud。

overcloud control plane 的升级持续时间

每个 Controller 节点的估算:

  • Leapp 升级并重启 60 分钟
  • 服务升级 60 分钟

无。除了现有的 control plane 外,您还要创建新的 control plane。

control plane 的中断持续时间

bootstrap Controller 节点的服务升级的持续时间,大约为 60 分钟。

无。在工作负载迁移期间,两个 overcloud 都正常运行。

control plane 中断后的结果

您无法在中断期间执行 OpenStack 操作。

无中断。

overcloud 数据平面的升级持续时间

每个 Compute 节点和 Ceph Storage 节点的估算:

  • Leapp 升级并重启 60 分钟
  • 30 分钟用于服务升级

无。除了现有的数据平面外,您还会创建新的数据平面。

data plane 的中断持续时间

由于工作负载从节点迁移到节点,因此中断是最小的。

由于工作负载从 overcloud 迁移到 overcloud,因此中断是最小的。

其他硬件要求

不需要额外的硬件。

创建新 undercloud 和 overcloud 需要其他硬件。

第 2 章 规划和准备原位升级

在对 OpenStack Platform 环境进行原位升级前,为升级创建一个计划,并满足可能阻止成功升级的潜在障碍。

2.1. 熟悉 Red Hat OpenStack Platform 16.1

在执行升级前,熟悉 Red Hat OpenStack Platform 16.1,以帮助您了解生成的环境以及可能会影响升级的任何潜在的版本更改。要熟悉 Red Hat OpenStack Platform 16.1,请遵循以下建议:

2.2. Red Hat OpenStack Platform 16.1 中的高级别更改

升级到 Red Hat OpenStack Platform 16.1 过程中会进行以下高级别更改:

  • OpenStack Platform director 16.1 使用名为 config-download 的 Ansible 驱动的方法配置 overcloud。这会替换基于 heat 的标准配置方法。director 仍然使用 heat 来编配置备操作。
  • director 安装使用与 overcloud 部署相同的方法。因此,undercloud 还使用 openstack-tripleo-heat-templates 作为安装和配置各个服务的蓝图。
  • undercloud 在容器中运行 OpenStack 服务。
  • undercloud 通过新方法拉取和存储容器镜像。undercloud 在部署过程中拉取所有相关容器镜像,而不是在部署 overcloud 前拉取容器镜像。
  • overcloud 部署过程包括用于注册节点的高级订阅管理方法。此方法包含 Ansible 角色来注册 OpenStack Platform 节点。如果需要,新方法还会将不同的订阅应用到不同的节点角色。
  • overcloud 现在使用 Open Virtual Network (OVN)作为默认的 ML2 机制驱动程序。可以将 Open vSwitch (OVS)服务迁移到 OVN,您可以在成功完成后执行。
  • undercloud 和 overcloud 在 Red Hat Enterprise Linux 8 上运行。
  • openstack-tripleo-heat-templates 在部署 目录中包含一个统一的可组合服务模板集合。此目录现在包含来自容器化服务和基于 Puppet 的可组合服务模板的合并内容的模板。
  • OpenStack 数据处理服务(sahara)不再被支持。

    重要

    如果您在 Red Hat OpenStack Platform 13 环境中启用了 sahara,请不要继续进行这个升级,并联系红帽全球支持服务。

  • OpenStack Telemetry 组件已弃用,而是使用 Service Telemetry Framework (STF)。

2.3. Red Hat Enterprise Linux 8 的变化

undercloud 和 overcloud 在 Red Hat Enterprise Linux 8 上运行。这包括与 undercloud 和 overcloud 相关的新工具和功能:

  • undercloud 和 overcloud 使用 Red Hat Container Toolkit。Red Hat Enterprise Linux 8 包括 buildah 来构建新容器镜像以及用于容器管理的 podman,而不是构建和控制容器生命周期的 docker
  • Red Hat Enterprise Linux 8 不包括 docker-distribution 软件包。undercloud 现在包含一个私有 HTTP registry,用于向 overcloud 节点提供容器镜像。
  • 从 Red Hat Enterprise Linux 7 到 8 的升级过程使用 leapp 工具。
  • Red Hat Enterprise Linux 8 不使用 ntp 服务。相反,Red Hat Enterprise Linux 8 使用 chronyd
  • Red Hat Enterprise Linux 8 包括新版本的高可用性工具。

Red Hat OpenStack Platform 16.1 使用 Red Hat Enterprise Linux 8.2 作为基本操作系统。作为升级过程的一部分,您要将节点的基础操作系统升级到 Red Hat Enterprise Linux 8.2。

有关 Red Hat Enterprise Linux 7 和 8 之间的主要区别的更多信息,请参阅使用 RHEL 8 的注意事项。有关 Red Hat Enterprise Linux 8 的常规信息,请查看 Red Hat Enterprise Linux 8 产品文档

2.4. Leapp 升级使用 Red Hat OpenStack Platform

Red Hat OpenStack Platform 的长生命版本需要基础操作系统从 Red Hat Enterprise Linux 7 升级到 Red Hat Enterprise Linux 8。Red Hat Enterprise Linux 7 使用 Leapp 程序执行到 Red Hat Enterprise Linux 8 的升级。要确保 Leapp 及其依赖项可用,请验证是否启用了以下 Red Hat Enterprise Linux 7 软件仓库:

  • Red Hat Enterprise Linux 7 Server RPMs x86_64 7Server 或 Red Hat Enterprise Linux 7 Server RPMs x86_64 7.9

    rhel-7-server-rpms
    x86_64 7Server
    or:
    rhel-7-server-rpms
    x86_64 7.9
  • Red Hat Enterprise Linux 7 Server - Extras RPMs x86_64

    rhel-7-server-extras-rpms
    x86_64

如需更多信息,请参阅 为升级准备 RHEL 7 系统

undercloud 和 overcloud 使用单独的进程来执行操作系统升级。

undercloud 进程

在运行 openstack undercloud upgrade 命令前,手动运行 leapp upgrade。undercloud 升级包括执行 leapp 升级的说明。

Overcloud 进程

overcloud 升级框架自动运行 leapp 升级。

限制

有关可能会影响升级的潜在限制的详情,请参考从 RHEL 7 升级到 RHEL 8 指南中的以下部分:

特别是,您不能在使用整个磁盘加密或分区(如 LUKS 加密或文件系统加密)的节点上执行 Leapp 升级。这个限制会影响您配置了 dmcrypt: true 参数的 Ceph OSD 节点。

如果任何已知的限制影响您的环境,请联系红帽技术支持团队 的建议。

故障排除

有关故障排除潜在 Leapp 问题的详情,请参考从 RHEL 7 升级到 RHEL 8 中的 故障排除

2.5. 支持的升级场景

在进行升级前,请检查您的 overcloud 是否被支持。

注意

如果您不确定这些列表中未提及的特定场景是否被支持,请参阅红帽 技术支持团队 的建议。

支持的场景

以下原位升级场景经过测试并被支持。

  • 具有默认角色类型的标准环境:控制器、计算和 Ceph Storage OSD
  • Split-Controller 可组合角色
  • Ceph Storage 可组合角色,包括 Ceph Storage 自定义配置,如 CephConfigOverridesCephAnsibleExtraConfig
  • Hyper-Converged Infrastructure:同一节点上的计算和 Ceph Storage OSD 服务
  • 具有网络功能虚拟化(NFV)技术的环境:单根输入/输出虚拟化(SR-IOV)和数据平面开发套件(DPDK)
  • 启用实例 HA 的环境

    注意

    在升级过程中,支持 nova 实时迁移。但是,由 Instance HA 启动的撤离不被支持。当您升级 Compute 节点时,节点会被完全关闭,且该节点上运行的任何工作负载都不会自动被 Instance HA 撤离。相反,您必须手动执行实时迁移。

技术预览场景

当您与这些功能结合使用时,升级的框架被视为技术预览,因此不受红帽完全支持。您应该只在概念验证环境中测试此场景,而不在生产环境中进行升级。有关技术预览功能的更多信息,请参阅覆盖范围详细信息

  • 边缘和分布式 Compute 节点(DCN)场景

2.6. 使用外部 Ceph 部署升级的注意事项

如果您单独部署了 Red Hat Ceph Storage 系统,然后使用 director 部署和配置 OpenStack,您可以使用 Red Hat OpenStack Platform 框架进行升级,以使用外部 Ceph 部署进行原位升级。这种场景与升级使用 director 部署的 Ceph 集群不同。

在规划和准备使用外部 Ceph 部署的原位升级时,您必须考虑的不同:

  1. 在将 Red Hat OpenStack Platform 部署从版本 13 升级到 16.1 之前,您必须将 Red Hat Ceph Storage 集群从版本 3 升级到 4。有关更多信息,请参阅 Red Hat Ceph Storage 4 安装指南中的升级 Red Hat Ceph Storage 集群
  2. 在将 Red Hat Ceph Storage 集群从版本 3 升级到 4 后,Red Hat OpenStack Platform 13 可能仍然运行 RHCSv3 客户端组件,但它们与 RHCSv4 集群兼容。
  3. 您可以按照 Framework for Upgrades (13 to 16.1)文档中的升级路径,并在适用的情况下完成支持此特定场景的条件步骤。条件步骤以以下语句开头:"如果您正在使用外部 Ceph 部署升级"。
  4. 使用外部 Ceph 部署升级时,作为 overcloud 升级过程的一部分安装 RHCSv4 ceph-ansible。当您升级使用 director 部署的 Ceph 集群时,您可以在 overcloud 升级过程完成后安装 RHCSv4 ceph-ansible
重要

当您将 Red Hat Ceph Storage 集群从以前支持的版本升级到 4.2z2 时,升级会在 HEALTH_WARN 状态下完成存储集群,并显示错误消息,显示 monitor 允许不安全的 global_id 重新声明。这是因为补丁的 CVE (CVE-2021-20288),请参阅 带有 'mons 的 Ceph HEALTH_WARN 在安装/升级到 RHCS 4.2z2 (或更新版本)后允许不安全的 global_id reclaim'

由于 CVE 因 CVE 而显示 HEALTH_WARN 状态,因此可以临时静默健康警告。但是,如果您更改了警告,您没有了解连接到集群的潜在旧和未修补的客户端,则存在风险。有关沟通健康警告的更多信息,请参阅 Red Hat Ceph Storage 文档中的升级 Red Hat Ceph Storage 集群

重要

在所有客户端都已升级前,不要手动禁用 global_id_reclaim,否则它们无法连接。您可以以 root 用户身份运行以下命令查看连接到集群的未修补客户端列表:

# ceph health detail

2.7. 可能会阻止升级的已知问题

查看以下可能影响成功升级的已知问题。

BZ#1997351 - (13→16.1) Instance are inaccessible after bootstrap controller upgrade
当您升级使用 ML2-OVN 部署的 Red Hat OpenStack Platform (RHOSP) 13 环境时,控制器节点上的升级过程可能会失败。在 Leapp 重启后,ovn-dbs 容器可能会因为 SELinux 权限拒绝而无法启动。有关如何避免 bug BZ#1997351 的更多信息,请参阅红帽知识库解决方案 OVN 在 OSP-13 → OSP-16.1 FFU 期间无法配置
BZ#1902849 - osp13-osp16.1 ffu 在之前从 osp8, osp10 升级的集群中失败
以前从 RHOSP 10 升级的 Red Hat OpenStack Platform (RHOSP)环境需要 python-docker 软件包以避免 BZ#1902849。如需更多信息,请参阅红帽知识库解决方案 osp13-osp16.1 ffu 在旧的环境中缺少 python-docker 软件包失败
BZ#1925078 - RHOSP13-16.1 FFU: Overcloud 在尝试引用错误的 ceph 镜像失败后在控制器中挂起

在 OSP13 中使用 UEFI 引导和 UEFI 引导装载程序的系统可能会遇到导致的 UEFI 问题:

  • /etc/fstab 没有被更新
  • 在 EFI 系统中错误地使用 GRUB-install

如需更多信息,请参阅红帽知识库解决方案 FFU 13 到 16.1: Leapp 无法更新基于 UEFI 的系统上的内核,/etc/fstab 不包含 EFI 分区

如果您的系统使用 UEFI,请联系红帽技术支持。

BZ#1895887 - ovs+dpdk fail to attach device OvsDpdkHCI

使用 Leapp 实用程序升级后,具有 OVS-DPDK 工作负载的 Compute 节点无法正常工作。要解决这个问题,请执行以下步骤之一:

在升级 Compute 节点前,删除 /etc/modules-load.d/vfio-pci.conf 文件。

或者

在升级 Compute 节点后,重启 Compute 节点上的 ovs-vswitchd 服务。

此问题会影响 RHOSP 16.1.3。如需更多信息,请参阅 HCI 计算节点上 Framework 从 OSP 13 升级到 16.1 后的红帽知识库解决方案 OVS-DPDK 错误

BZ#1936419 - FFU 13-16.1 Upgrade: Leapp upgrade on ceph nodes failed as leap parameters try to enable Fast datapath repo

如果您使用 Ceph 订阅并已将 director 配置为使用 Ceph 存储节点的 overcloud-minimal 镜像,则 Ceph 存储节点的操作系统升级可能会因为 Leapp 限制而失败。要避免这个问题,在 system_upgrade run 步骤后,您必须登录到 Ceph 节点来取消设置 RHEL 次版本,更新至最新的 RHEL 次版本,并重新引导节点。

如果使用 Red Hat Satellite 服务器为 Leapp 升级托管 RPM 内容,您必须将以下 8.2 软件仓库添加到您使用的内容视图中:

  • Red Hat Enterprise Linux 8 for x86_64 - AppStream (RPMs)

    rhel-8-for-x86_64-appstream-rpms
    x86_64 8.2
  • Red Hat Enterprise Linux 8 for x86_64 - BaseOS (RPMs)

    rhel-8-for-x86_64-baseos-rpms
    x86_64 8.2

    本指南包括避免此问题的一个临时解决方案。

BZ#2016144 - FFU 13-16.1: During Leapp upgrade reboot, openvswitch failed to start with error Starting ovsdb-server ovsdb-server: /var/run/openvswitch/ovsdb-server.pid.tmp: create failed (Permission denied)
从之前版本升级的 Red Hat OpenStack Platform (RHOSP)环境可能会包含 /etc/systemd/system/ovs* 中的不必要的文件。在开始 overcloud 升级过程从 RHOSP 13 升级到 RHOSP 16.1 之前,您必须删除这些文件。
BZ#2008976 - Python2 packages cleaning up after Leapp upgrade failing in Leapp dependencies

使用 Leapp 版本 5.0.8-100.202109241452Z.1332835 时,因为保留 Leapp 软件包的 DNF exclude 选项,自动删除 python2 Leapp 软件包会失败。

在环境文件中包含 UpgradeInitCommand 参数并删除 DNF 排除语句:

parameter defaults:
  UpgradeInitCommand: "sudo dnf config-manager --save --setopt exclude=''"

如需更多信息,请参阅创建升级环境文件

BZ#1978228 - OSP13→16.2 Leapp upgrade failed with TLSEverywhere
如果您在环境中使用 TLS-Everywhere 并希望从 authconfig 迁移到 authselect,请将 authselect_check.confirm 参数设置为 True。否则,将此值设置为 False。如需更多信息,请参阅创建升级环境文件
BZ#2021525 - openstack overcloud upgrade run times out / HAProxy container fails to start
由于 SELinux 标签无效,从 Red Hat OpenStack Platform (RHOSP) 13 升级到 RHOSP 16.1 可能会在部署步骤中失败。有关解决方案及更多信息,请参阅红帽知识库解决方案 Pacemaker 托管服务在 OSP13 - OSP16.x FFU 中可能无法重启
BZ#2015325 - FFU: 在 "Upgrade Mysql 数据库从临时容器" 步骤中进行升级失败
Red Hat Enterprise Linux 包括了一个 mariadb-server 的可升级 RPM,它会影响 Red Hat OpenStack Platform (RHOSP)中容器化 mariadb 的升级。在执行 RHOSP 升级前,从 Controller 主机中删除 mariadb-server 软件包。如需更多信息,请参阅创建升级环境文件
BZ#2024447 - Identity service (keystone) password for the placement user was overridden by NovaPassword during FFU RHOSP 13 to 16

在从 Red Hat OpenStack Platform 13 升级到 16.1 的过程中,如果您为 NovaPassword 参数定义了值,而不是 PlacementPassword 参数,则 NovaPassword 参数会覆盖放置用户的 OpenStack Identity 服务(keystone)密码。要保留 Identity 服务密码,请不要在 parameter_defaults 部分中设置 NovaPasswordPlacementPassword

如果您在 parameter_defaults 部分中设置了这两个密码,则 Compute 节点可能无法与 control plane 通信,直到它们被升级为止。有关升级 Compute 节点的更多信息,请参阅升级 Compute 节点

另外,如果您使用 NovaPasswordPlacementPassword 或两者在 RHOSP 13 上部署 overcloud,则必须在模板中删除这些密码,并在升级到 RHOSP 16.1 前在 RHOSP 13 上运行 openstack overcloud deploy 命令。

BZ#2164396 - FFU: Redhat satellite tools repository to be enabled for FFU (13 to 16.2)
如果您使用 Satellite 版本 6.7,当您启用 Red Hat Satellite Tools for RHEL 8 Server RPMs x86_64 存储库时,升级会失败。发生故障的原因是无法安装适当的软件包。红帽工程团队正在调查此问题的解决方案。
BZ#2245602 - Upgrade (OSP16.2 →OSP17.1) controller-0 不会执行 leapp 升级,因为软件包缺少 ovn2.15 openvswitch2.15

如果您从 Red Hat OpenStack Platform (RHOSP) 13 升级到 16.1 或 16.2,或者从 RHOSP 16.2 升级到 17.1,请不要在 --answers-file answer-upgrade.yaml 文件中包含 system_upgrade.yaml 文件。如果该文件中包含 system_upgrade.yaml 文件,则 environments/lifecycle/upgrade-prepare.yaml 文件会覆盖 system_upgrade.yaml 文件中的参数。要避免这个问题,请将 system_upgrade.yaml 文件附加到 openstack overcloud upgrade prepare 命令中。例如:

$ openstack overcloud upgrade prepare --answers-file answer-upgrade.yaml /
-r roles-data.yaml /
-n networking-data.yaml /
-e system_upgrade.yaml /
-e upgrade_environment.yaml /

在这个版本中,system_upgrade.yaml 文件中配置的参数会覆盖 environment /lifecycle/upgrade-prepare.yaml 文件中的默认参数

Red Hat Ceph Storage Issues

BZ#1855813 - Ceph tools repository should be switched from RHCS3 to RHCS4 only after converge, before running external-upgrade
undercloud 上的 ceph-ansible playbook 集合在 overcloud 上部署 Red Hat Ceph Storage 容器。要升级您的环境,您必须有 Red Hat Ceph Storage 3 版本的 ceph-ansible,才能通过升级维护 Ceph Storage 3 容器。本指南包含如何在升级过程中保留 ceph-ansible 版本 3 的说明,直到您准备好升级到 Ceph Storage 4。在执行 13 到 16.1 升级前,您必须对 Red Hat OpenStack Platform 13 环境执行次要版本更新,并确保您有 ceph-ansible 版本 3.2.46 或更高版本。

2.8. 备份和恢复

在升级 Red Hat OpenStack Platform 13 环境前,备份 undercloud 和 overcloud control plane。有关使用 Relax-and-recover (ReaR)实用程序备份节点的更多信息,请参阅 Undercloud 和 Control Plane Back Up 和 Restore 指南。

2.9. 次版本更新

在升级 Red Hat OpenStack Platform 环境前,请将环境更新至当前版本的最新次版本。例如,在运行升级到 Red Hat OpenStack Platform 16.1 前,将 Red Hat OpenStack Platform 13 环境更新到最新的 13。

有关为 Red Hat OpenStack Platform 13 执行次要版本更新的说明,请参阅 保持 Red Hat OpenStack Platform Updated

2.10. 代理配置

如果您将代理与 Red Hat OpenStack Platform 13 环境搭配使用,则 /etc/environment 文件中的代理配置会保留操作系统升级和 Red Hat OpenStack Platform 16.1 升级。

2.11. 在升级前验证 Red Hat OpenStack Platform 13

在升级到 Red Hat OpenStack Platform 16.1 之前,请使用 tripleo-validations playbook 验证 undercloud 和 overcloud。在 Red Hat OpenStack Platform 13 中,您可以通过 OpenStack Workflow Service (mistral)运行这些 playbook。

注意

如果您使用 CDN 或 Satellite 作为存储库源,验证会失败。要解决这个问题,请查看红帽知识库解决方案,因为 SSL 证书错误,仓库验证会失败

流程

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

    $ source ~/stackrc
  3. 创建名为 pre-upgrade-validations.sh 的 bash 脚本,并在脚本中包含以下内容:

    #!/bin/bash
    for VALIDATION in $(openstack action execution run tripleo.validations.list_validations '{"groups": ["pre-upgrade"]}' | jq ".result[] | .id")
    do
      echo "=== Running validation: $VALIDATION ==="
      STACK_NAME=$(openstack stack list -f value -c 'Stack Name')
      ID=$(openstack workflow execution create -f value -c ID tripleo.validations.v1.run_validation "{\"validation_name\": $VALIDATION, \"plan\": \"$STACK_NAME\"}")
      while [ $(openstack workflow execution show $ID -f value -c State) == "RUNNING" ]
      do
        sleep 1
      done
      echo ""
      openstack workflow execution output show $ID | jq -r ".stdout"
      echo ""
    done
  4. 添加运行脚本的权限:

    $ chmod +x pre-upgrade-validations.sh
  5. 运行脚本:

    $ ./pre-upgrade-validations.sh

    查看脚本输出,以确定哪些验证成功并失败:

    === Running validation: "check-ftype" ===
    
    Success! The validation passed for all hosts:
    * undercloud

第 3 章 软件仓库

本节包含 undercloud 和 overcloud 的软件仓库。在某些情况下需要启用软件仓库时,请参阅本节:

  • 在注册到红帽客户门户网站时启用软件仓库。
  • 启用存储库并将其同步到您的 Red Hat Satellite 服务器。
  • 在注册到您的 Red Hat Satellite 服务器时启用存储库。

3.1. undercloud 软件仓库

Red Hat OpenStack Platform (RHOSP) 16.1 在 Red Hat Enterprise Linux 8.2 上运行。因此,您必须将这些软件仓库的内容锁定到相应的 Red Hat Enterprise Linux 版本。

注意

如果您使用 Red Hat Satellite 同步软件仓库,您可以启用 Red Hat Enterprise Linux 软件仓库的特定版本。但是,无论您选择的版本,仓库标签仍保持不变。例如,如果您启用 BaseOS 存储库的 8.2 版本,存储库名称包含您启用的特定版本,但 repository 标签仍然是 rhel-8-for-x86_64-baseos-tus-rpms

警告

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

核心软件仓库

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

名称软件仓库要求说明

Red Hat Enterprise Linux 8.2 for x86_64 - BaseOS (RPMs) Telecommunications Update Service (TUS)

rhel-8-for-x86_64-baseos-tus-rpms

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

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

rhel-8-for-x86_64-appstream-tus-rpms

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

Red Hat Enterprise Linux 8.2 for x86_64 - High Availability (RPMs) Telecommunications Update Service (TUS)

rhel-8-for-x86_64-highavailability-tus-rpms

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

Red Hat Ansible Engine 2.9 for RHEL 8 x86_64 (RPMs)

ansible-2.9-for-rhel-8-x86_64-rpms

适用于 Red Hat Enterprise Linux 的 Ansible Engine。用于提供最新版本的 Ansible。

Advanced Virtualization for RHEL 8 x86_64 (RPMs)

advanced-virt-for-rhel-8-x86_64-eus-rpms

为 OpenStack Platform 提供虚拟化软件包。

Red Hat Satellite Tools for RHEL 8 Server RPMs x86_64

satellite-tools-6.5-for-rhel-8-x86_64-rpms

管理使用 Red Hat Satellite 6 的主机的工具。

Red Hat OpenStack Platform 16.1 for RHEL 8 (RPMs)

openstack-16.1-for-rhel-8-x86_64-rpms

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

Red Hat Fast datapath for RHEL 8 (RPMS)

fast-datapath-for-rhel-8-x86_64-rpms

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

Ceph 软件仓库

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

名称软件仓库要求说明

Red Hat Ceph Storage Tools 4 for RHEL 8 x86_64 (RPMs)

rhceph-4-tools-for-rhel-8-x86_64-rpms

提供节点与 Ceph Storage 集群进行通信的工具。如果您计划在 overcloud 中使用 Ceph Storage,或者要与现有 Ceph Storage 集群集成,undercloud 需要此软件仓库的 ceph-ansible 软件包。

IBM POWER 软件仓库

下表包含 POWER PC 构架中 RHOSP 的软件仓库列表。使用这些软件仓库来替代核心软件仓库中的同等库。

名称软件仓库要求说明

Red Hat Enterprise Linux for IBM Power,little endian - BaseOS (RPMs)

rhel-8-for-ppc64le-baseos-rpms

ppc64le 系统的基本操作系统软件仓库。

Red Hat Enterprise Linux 8 for IBM Power, little endian - AppStream (RPMs)

rhel-8-for-ppc64le-appstream-rpms

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

Red Hat Enterprise Linux 8 for IBM Power, little endian - High Availability (RPMs)

rhel-8-for-ppc64le-highavailability-rpms

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

Red Hat Fast Datapath for RHEL 8 IBM Power, little endian (RPMS)

fast-datapath-for-rhel-8-ppc64le-rpms

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

Red Hat Ansible Engine 2.8 for RHEL 8 IBM Power, little endian (RPMs)

ansible-2.8-for-rhel-8-ppc64le-rpms

适用于 Red Hat Enterprise Linux 的 Ansible Engine。提供最新版本的 Ansible。

Red Hat OpenStack Platform 16.1 for RHEL 8 (RPMs)

openstack-16.1-for-rhel-8-ppc64le-rpms

用于 ppc64le 系统的 Red Hat OpenStack Platform 核心软件仓库。

3.2. overcloud 软件仓库

Red Hat OpenStack Platform (RHOSP) 16.1 在 Red Hat Enterprise Linux 8.2 上运行。因此,您必须将这些软件仓库的内容锁定到相应的 Red Hat Enterprise Linux 版本。

注意

如果您使用 Red Hat Satellite 同步软件仓库,您可以启用 Red Hat Enterprise Linux 软件仓库的特定版本。但是,无论您选择的版本,仓库标签仍保持不变。例如,如果您启用 BaseOS 存储库的 8.2 版本,存储库名称包含您启用的特定版本,但 repository 标签仍然是 rhel-8-for-x86_64-baseos-tus-rpms

警告

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

Controller 节点软件仓库

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

名称软件仓库要求说明

Red Hat Enterprise Linux 8.2 for x86_64 - BaseOS (RPMs) Telecommunications Update Service (TUS)

rhel-8-for-x86_64-baseos-tus-rpms

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

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

rhel-8-for-x86_64-appstream-tus-rpms

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

Red Hat Enterprise Linux 8.2 for x86_64 - High Availability (RPMs) Telecommunications Update Service (TUS)

rhel-8-for-x86_64-highavailability-tus-rpms

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

Red Hat Ansible Engine 2.9 for RHEL 8 x86_64 (RPMs)

ansible-2.9-for-rhel-8-x86_64-rpms

适用于 Red Hat Enterprise Linux 的 Ansible Engine。用于提供最新版本的 Ansible。

Advanced Virtualization for RHEL 8 x86_64 (RPMs)

advanced-virt-for-rhel-8-x86_64-eus-rpms

为 OpenStack Platform 提供虚拟化软件包。

Red Hat OpenStack Platform 16.1 for RHEL 8 (RPMs)

openstack-16.1-for-rhel-8-x86_64-rpms

Red Hat OpenStack Platform 核心软件仓库。

Red Hat Fast datapath for RHEL 8 (RPMS)

fast-datapath-for-rhel-8-x86_64-rpms

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

Red Hat Ceph Storage Tools 4 for RHEL 8 x86_64 (RPMs)

rhceph-4-tools-for-rhel-8-x86_64-rpms

Red Hat Ceph Storage 4 for Red Hat Enterprise Linux 8 的工具。

Red Hat Satellite Tools for RHEL 8 Server RPMs x86_64

satellite-tools-6.5-for-rhel-8-x86_64-rpms

管理使用 Red Hat Satellite 6 的主机的工具。

Compute 和 ComputeHCI 节点软件仓库

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

名称软件仓库要求说明

Red Hat Enterprise Linux 8.2 for x86_64 - BaseOS (RPMs) Telecommunications Update Service (TUS)

rhel-8-for-x86_64-baseos-tus-rpms

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

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

rhel-8-for-x86_64-appstream-tus-rpms

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

Red Hat Enterprise Linux 8.2 for x86_64 - High Availability (RPMs) Telecommunications Update Service (TUS)

rhel-8-for-x86_64-highavailability-tus-rpms

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

Red Hat Ansible Engine 2.9 for RHEL 8 x86_64 (RPMs)

ansible-2.9-for-rhel-8-x86_64-rpms

适用于 Red Hat Enterprise Linux 的 Ansible Engine。用于提供最新版本的 Ansible。

Advanced Virtualization for RHEL 8 x86_64 (RPMs)

advanced-virt-for-rhel-8-x86_64-eus-rpms

为 OpenStack Platform 提供虚拟化软件包。

Red Hat OpenStack Platform 16.1 for RHEL 8 (RPMs)

openstack-16.1-for-rhel-8-x86_64-rpms

Red Hat OpenStack Platform 核心软件仓库。

Red Hat Fast datapath for RHEL 8 (RPMS)

fast-datapath-for-rhel-8-x86_64-rpms

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

Red Hat Ceph Storage Tools 4 for RHEL 8 x86_64 (RPMs)

rhceph-4-tools-for-rhel-8-x86_64-rpms

Red Hat Ceph Storage 4 for Red Hat Enterprise Linux 8 的工具。

Red Hat Satellite Tools for RHEL 8 Server RPMs x86_64

satellite-tools-6.5-for-rhel-8-x86_64-rpms

管理使用 Red Hat Satellite 6 的主机的工具。

Real Time Compute 软件仓库

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

名称软件仓库要求说明

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

rhel-8-for-x86_64-rt-rpms

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

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

rhel-8-for-x86_64-nfv-rpms

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

Ceph Storage 节点软件仓库

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

名称软件仓库要求说明

Red Hat Enterprise Linux 8.2 for x86_64 - BaseOS (RPMs) Telecommunications Update Service (TUS)

rhel-8-for-x86_64-baseos-tus-rpms

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

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

rhel-8-for-x86_64-appstream-tus-rpms

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

Red Hat Enterprise Linux 8.2 for x86_64 - High Availability (RPMs) Telecommunications Update Service (TUS)

rhel-8-for-x86_64-highavailability-tus-rpms

Red Hat Enterprise Linux 的高可用性工具。注: 如果您将 overcloud-full 镜像用于 Ceph Storage 角色,您必须启用此存储库。Ceph Storage 角色应使用 overcloud-minimal 镜像,该镜像不需要此存储库。

Red Hat Ansible Engine 2.9 for RHEL 8 x86_64 (RPMs)

ansible-2.9-for-rhel-8-x86_64-rpms

适用于 Red Hat Enterprise Linux 的 Ansible Engine。用于提供最新版本的 Ansible。

Red Hat OpenStack Platform 16.1 Director Deployment Tools for RHEL 8 x86_64 (RPMs)

openstack-16.1-deployment-tools-for-rhel-8-x86_64-rpms

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

Red Hat OpenStack Platform 16.1 for RHEL 8 (RPMs)

openstack-16.1-for-rhel-8-x86_64-rpms

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

Red Hat Ceph Storage Tools 4 for RHEL 8 x86_64 (RPMs)

rhceph-4-tools-for-rhel-8-x86_64-rpms

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

Red Hat Fast datapath for RHEL 8 (RPMS)

fast-datapath-for-rhel-8-x86_64-rpms

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

IBM POWER 软件仓库

下表列出了用于 POWER PC 架构上的 RHOSP 的软件仓库。使用这些软件仓库来替代核心软件仓库中的同等库。

名称软件仓库要求说明

Red Hat Enterprise Linux for IBM Power,little endian - BaseOS (RPMs)

rhel-8-for-ppc64le-baseos-rpms

ppc64le 系统的基本操作系统软件仓库。

Red Hat Enterprise Linux 8 for IBM Power, little endian - AppStream (RPMs)

rhel-8-for-ppc64le-appstream-rpms

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

Red Hat Enterprise Linux 8 for IBM Power, little endian - High Availability (RPMs)

rhel-8-for-ppc64le-highavailability-rpms

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

Red Hat Fast Datapath for RHEL 8 IBM Power, little endian (RPMS)

fast-datapath-for-rhel-8-ppc64le-rpms

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

Red Hat Ansible Engine 2.8 for RHEL 8 IBM Power, little endian (RPMs)

ansible-2.8-for-rhel-8-ppc64le-rpms

适用于 Red Hat Enterprise Linux 的 Ansible Engine。用于提供最新版本的 Ansible。

Red Hat OpenStack Platform 16.1 for RHEL 8 (RPMs)

openstack-16.1-for-rhel-8-ppc64le-rpms

用于 ppc64le 系统的 Red Hat OpenStack Platform 核心软件仓库。

3.3. Red Hat Satellite Server 6 的注意事项

如果您使用 Red Hat Satellite Server 6 为 Red Hat OpenStack Platform 环境托管 RPM 和容器镜像,则您必须在 Red Hat OpenStack Platform 16.1 升级过程中使用 Satellite Server 6 提供内容时需要考虑某些注意事项。

对您当前环境的假设

  • 您的 Satellite 服务器已经托管 Red Hat OpenStack Platform 13 RPM 和容器镜像。
  • 您已将 Red Hat OpenStack Platform 13 环境中的所有节点注册到 Satellite 服务器。例如,您之前使用了链接到 Red Hat OpenStack Platform 13 内容视图的激活码,将节点注册到 OpenStack Platform 13 内容。

Red Hat OpenStack Platform 升级建议

  • 为 Red Hat OpenStack Platform 13 和 overcloud 启用和同步所需的 RPM 存储库。这包括必要的 Red Hat Enterprise Linux 8.2 软件仓库。
  • 在 Satellite 服务器上为以下 Red Hat OpenStack Platform 版本创建自定义产品,以托管容器镜像:

    • Red Hat OpenStack Platform 16.1
    • Red Hat OpenStack Platform 15
  • 为 Red Hat OpenStack Platform 16.1 升级创建并提升内容视图,并在内容视图中包含以下内容:

    • 以下 Red Hat Enterprise Linux 7 软件仓库:

      • Red Hat Enterprise Linux 7 Server RPMs x86_64 7Server 或 Red Hat Enterprise Linux 7 Server RPMs x86_64 7.9

        rhel-7-server-rpms
        x86_64 7Server
        or:
        rhel-7-server-rpms
        x86_64 7.9
      • Red Hat Enterprise Linux 7 Server - Extras RPMs x86_64

        rhel-7-server-extras-rpms
        x86_64
    • 所有 undercloud 和 overcloud RPM 存储库,包括 Red Hat Enterprise Linux 8.2 软件仓库。确保包含 Red Hat Enterprise Linux 软件仓库的正确版本,即 8.2。如果您没有包括正确的版本,则可能会遇到启用 RHEL 8 软件仓库的问题。如需更多信息,请参阅使用 Red Hat Satellite 时红帽知识库解决方案 RHEL 7 到 RHEL 8 LEAPP Upgrade Failing
    • Red Hat OpenStack Platform 16.1 容器镜像。
    • Red Hat OpenStack Platform 15 容器镜像。
  • 将激活码与您为 Red Hat OpenStack Platform 16.1 升级创建的 Red Hat OpenStack Platform 16.1 内容视图相关联。
  • 检查没有节点安装了 katello-host-tools-fact-plugin 软件包。Leapp 升级不会升级这个软件包,并在 Red Hat Enterprise Linux 8.2 系统中保留这个软件包会导致 subscription-manager 报告错误。
  • 您可以将 Satellite 服务器配置为托管 Red Hat OpenStack Platform 16.1 容器镜像。如需更多信息,请参阅 Director 安装和使用 中的 为容器镜像准备 Satellite 服务器
  • 如果您使用 Ceph 订阅并已将 director 配置为将 overcloud-minimal 镜像用于 Ceph 存储节点,则必须在 Satellite 服务器上创建一个内容视图,并将以下 Red Hat Enterprise Linux (RHEL) 8.2 存储库添加到其中:

    • Red Hat Enterprise Linux 8 for x86_64 - AppStream (RPMs)

      rhel-8-for-x86_64-appstream-rpms
      x86_64 8.2
    • Red Hat Enterprise Linux 8 for x86_64 - BaseOS (RPMs)

      rhel-8-for-x86_64-baseos-rpms
      x86_64 8.2

      如需更多信息,请参阅 Red Hat Satellite Content Management 指南中的 Importing Red Hat ContentManaging Content Views

第 4 章 准备 undercloud 升级

在执行 undercloud 升级前,您必须完成一些准备步骤,以便 undercloud 升级成功运行。

4.1. 使用外部 Ceph 升级先决条件

如果您要使用外部 Ceph 部署升级,在升级 Red Hat OpenStack Platform 部署前,您必须将 Red Hat Ceph Storage 集群从版本 3 升级到 4。有关更多信息,请参阅 Red Hat Ceph Storage 4 安装指南中的升级 Red Hat Ceph Storage 集群

4.2. 新内存要求

在 Red Hat OpenStack Platform 16.1 中,undercloud 具有新的内存要求:

Red Hat OpenStack Platform 13Red Hat OpenStack Platform 16.1

16 GB RAM

24 GB RAM

在进行升级前,请确保您的 undercloud 满足这些新要求。

4.3. 为 undercloud 节点使用可预测的 NIC 名称

在 undercloud 节点上运行 Leapp 升级前,您必须检查基于内核的 NIC 名称,这通常包含 eth 前缀。在 NIC 分配方面,这些 NIC 名称通常无法预计。

您可以运行 playbook-nics.yaml playbook 来重命名 NIC 名称,以使用 em NIC 前缀。您还可以在运行 playbook 时修改前缀变量来设置不同的 NIC 前缀。但是,NIC 更改仅在 Leapp 升级过程完成后应用,并重新引导节点。

流程

  1. stack 用户的身份登录 undercloud。
  2. 创建名为 playbook-nics.yaml 的 Ansible playbook,并将以下内容复制到 playbook 中:

    ---
    - name: Rename eth devices
      hosts: all
      become: yes
      vars:
        prefix: "em"
        undercloud_conf: "/home/stack/undercloud.conf"
        osnet_conf: "/etc/os-net-config/config.json"
      tasks:
        - set_fact:
            eth_interfaces: "{{ ansible_interfaces | select('match','eth.*') | list }}"
        - debug:
            msg: "{{ eth_interfaces }}"
        - name: Update udev rules
          lineinfile:
            line: "SUBSYSTEM==\"net\", ACTION==\"add\", DRIVERS==\"?*\", ATTR{address}==\"{{ ansible_facts[item]['perm_macaddress'] | default(ansible_facts[item]['macaddress']) }}\", NAME=\"{{ item|replace('eth',prefix) }}\""
            path: /etc/udev/rules.d/70-rhosp-persistent-net.rules
            create: True
          with_items: "{{ eth_interfaces }}"
        - name: Rename eth files
          block:
            - name: Check that eth files exists
              stat:
                path: /etc/sysconfig/network-scripts/ifcfg-{{ item }}
              register: nic_result
              with_items: "{{ eth_interfaces }}"
            - name: Copy nic files using the new prefix
              copy:
                remote_src: True
                src: "{{ item.stat.path }}"
                dest: "{{ item.stat.path|replace('eth',prefix) }}"
              with_items: "{{ nic_result.results }}"
              when: item.stat.exists
            - name: Edit NAME in new network-script files
              lineinfile:
                regexp: "^NAME=.*"
                line: "NAME={{ item.item|replace('eth',prefix) }}"
                path: "{{ item.stat.path|replace('eth',prefix) }}"
              with_items: "{{ nic_result.results }}"
              when: item.stat.exists
            - name: Edit DEVICE in new network-script files
              lineinfile:
                regexp: "^DEVICE=.*"
                line: "DEVICE={{ item.item|replace('eth',prefix) }}"
                path: "{{ item.stat.path|replace('eth',prefix) }}"
              with_items: "{{ nic_result.results }}"
              when: item.stat.exists
            - name: Backup old eth network-script files
              copy:
                remote_src: True
                src: "{{ item.stat.path }}"
                dest: "{{ item.stat.path }}.bak"
              with_items: "{{ nic_result.results }}"
              when: item.stat.exists
            - name: Remove old eth network-script files
              file:
                path: "{{ item.stat.path }}"
                state: absent
              with_items: "{{ nic_result.results }}"
              when: item.stat.exists
        - name: Rename route files
          block:
            - name: Check that route files exists
              stat:
                path: /etc/sysconfig/network-scripts/route-{{ item }}
              register: route_result
              with_items: "{{ eth_interfaces }}"
            - name: Copy route files using the new prefix
              copy:
                remote_src: True
                src: "{{ item.stat.path }}"
                dest: "{{ item.stat.path|replace('eth',prefix) }}"
              with_items: "{{ route_result.results }}"
              when: item.stat.exists
            - name: Update prefix in route files that use IP command arguments format
              replace:
                regexp: "eth"
                replace: "{{ prefix }}"
                path: "{{ item.stat.path|replace('eth',prefix) }}"
              with_items: "{{ route_result.results }}"
              when: item.stat.exists
            - name: Backup old route files
              copy:
                remote_src: True
                src: "{{ item.stat.path }}"
                dest: "{{ item.stat.path }}.bak"
              with_items: "{{ route_result.results }}"
              when: item.stat.exists
            - name: Remove old route files
              file:
                path: "{{ item.stat.path }}"
                state: absent
              with_items: "{{ route_result.results }}"
              when: item.stat.exists
        - name: Perform a final regex for any remaining eth prefixes in ifcfg files
          block:
            - name: Get a list of all ifcfg files
              find:
                paths: /etc/sysconfig/network-scripts/
                patterns: 'ifcfg-*'
                excludes: '*.bak'
              register: ifcfg_files
            - name: Perform final regex on ifcfg files
              replace:
                path: "{{ item[0].path }}"
                regexp: "{{ item[1] }}"
                replace: "{{ item[1]|replace('eth',prefix) }}"
              with_nested:
                - "{{ ifcfg_files.files }}"
                - "{{ eth_interfaces }}"
        - name: Replace interface name in files referencing old eth interface
          block:
            - name: Check if undercloud.conf exists
              stat:
                path: "{{ undercloud_conf }}"
              register: undercloud_conf_stat
            - name: Replace interface name in undercloud.conf
              replace:
                path: "{{ undercloud_conf }}"
                regexp: 'eth(\d+)'
                replace: "{{ prefix }}\\1"
              when: undercloud_conf_stat.stat.exists
            - name: Check if os-net-config's config.json exists
              stat:
                path: "{{ osnet_conf }}"
              register: osnet_conf_stat
            - name: Replace interface name in config.json
              replace:
                path: "{{ osnet_conf }}"
                regexp: 'eth(\d+)'
                replace: "{{ prefix }}\\1"
              when: osnet_conf_stat.stat.exists
        - name: Patch vlan devices
          block:
            - name: Check that vlan files exists
              stat:
                path: /etc/sysconfig/network-scripts/ifcfg-{{ item }}
              register: nic_result
              when: item.startswith("vlan")
              with_items: "{{ ansible_interfaces }}"
            - name: Backup old vlan network-script files
              copy:
                remote_src: True
                src: "{{ item.stat.path }}"
                dest: "{{ item.stat.path }}.bak"
              when: item.item.startswith("vlan") and item.stat.exists
              with_items: "{{ nic_result.results }}"
            - name: Edit PHYSDEV in new network-script files
              replace:
                path: "{{ item.stat.path }}"
                regexp: "^PHYSDEV=eth"
                replace: "PHYSDEV={{ prefix }}"
              when: item.item.startswith("vlan") and item.stat.exists
              with_items: "{{ nic_result.results }}"
    注意

    您将在升级过程中使用此 playbook 在稍后阶段重命名 overcloud NIC。

  3. 在 undercloud 上运行 playbook-nics.yaml playbook:

    $ ansible-playbook -c local -i localhost, playbook-nics.yaml

    playbook 将新的 NIC 前缀设置为 em。要设置不同的 NIC 前缀,请在运行 playbook 时设置 前缀 变量:

    $ ansible-playbook -c local -i localhost, -e prefix="mynic" ~/playbook-nics.yaml

    NIC 更改仅在 Leapp 升级过程完成且重新引导节点后应用。

4.4. 在 undercloud 上设置 SSH root 权限参数

Leapp 升级会检查 /etc/ssh/sshd_config 文件中是否存在 PermitRootLogin 参数。您必须将此参数明确设置为 yesno

为安全起见,将此参数设置为 no,以禁用对 undercloud 上 root 用户的 SSH 访问。

流程

  1. stack 用户的身份登录 undercloud。
  2. 检查 PermitRootLogin 参数的 /etc/ssh/sshd_config 文件:

    $ sudo grep PermitRootLogin /etc/ssh/sshd_config
  3. 如果参数不在 /etc/ssh/sshd_config 文件中,编辑该文件并设置 PermitRootLogin 参数:

    PermitRootLogin no
  4. 保存该文件。

4.5. 转换为下一代电源管理驱动程序

Red Hat OpenStack Platform 现在使用下一代驱动程序(也称为 硬件类型 )替换旧的驱动程序。

下表显示了与下一代硬件类型等效的旧驱动程序之间的比较:

旧驱动程序新硬件类型

pxe_ipmitool

ipmi

pxe_drac

idrac

pxe_ilo

ilo

pxe_irmc

irmc

VBMC (pxe_ipmitool)

ipmi

fake_pxe

fake-hardware

在 OpenStack Platform 15 中,这些较旧的驱动程序已被删除,不再可访问。在升级到 OpenStack Platform 16.1 之前,您必须更改为硬件类型。

流程

  1. 检查当前启用的硬件类型列表:

    $ source ~/stackrc
    $ openstack baremetal driver list --type dynamic
  2. 如果您使用未启用的硬件类型驱动程序,请使用 undercloud.conf 文件中的 enabled_hardware_types 参数启用驱动程序:

    enabled_hardware_types = ipmi,redfish,idrac
  3. 保存文件并刷新 undercloud:

    $ openstack undercloud install
  4. 运行以下命令,为您的电源管理类型替换 OLDDRIVERNEWDRIVER 变量:

    $ source ~/stackrc
    $ OLDDRIVER="pxe_ipmitool"
    $ NEWDRIVER="ipmi"
    $ for NODE in $(openstack baremetal node list --driver $OLDDRIVER -c UUID -f value) ; do openstack baremetal node set $NODE --driver $NEWDRIVER; done

第 5 章 升级 undercloud 操作系统

在升级 director 前,您必须将 undercloud 操作系统从 Red Hat Enterprise Linux 7 升级到 Red Hat Enterprise Linux 8。作为这个操作系统升级的一部分,您必须删除 Red Hat OpenStack Platform 13 软件包,然后运行 Leapp 工具来升级系统软件包。此软件包删除和操作系统升级不会影响 undercloud 数据库。完成操作系统升级后,重新安装 director 软件包的 Red Hat OpenStack Platform 16.1 版本。

5.1. 删除 Red Hat OpenStack Platform director 软件包

在运行 Leapp 工具前,请删除与 Red Hat Enterprise Linux 7 相关的 Red Hat OpenStack Platform 13 软件包。这些软件包名称使用 el7ost 的发行版本后缀。有些 el7ost 会保留在系统中,作为 subscription-manager 和 Leapp 工具的依赖项。

流程

  1. stack 用户的身份登录 undercloud。
  2. 禁用 undercloud 上的主要 OpenStack 服务:

    $ sudo systemctl stop 'openstack-*' httpd haproxy mariadb 'rabbitmq*' docker xinetd
  3. 从 undercloud 中删除主要的 OpenStack 服务,但 OpenvSwitch 和升级所需的某些 Python 2 软件包除外:

    $ sudo yum -y remove '*el7ost*' 'galera*' 'haproxy*' \
        httpd 'mysql*' 'pacemaker*' xinetd python-jsonpointer \
        qemu-kvm-common-rhev qemu-img-rhev 'rabbit*' \
        'redis*' \
        -- \
        -'*openvswitch*' -python-docker -python-PyMySQL \
        -python-pysocks -python2-asn1crypto -python2-babel \
        -python2-cffi -python2-cryptography -python2-dateutil \
        -python2-idna -python2-ipaddress -python2-jinja2 \
        -python2-jsonpatch -python2-markupsafe -python2-pyOpenSSL \
        -python2-requests -python2-six -python2-urllib3 \
        -python-httplib2 -python-passlib -python2-netaddr -ceph-ansible
  4. /etc/httpd 和 / var/lib/docker 目录中删除 内容:

    $ sudo rm -rf /etc/httpd /var/lib/docker

5.2. 在 undercloud 上执行 Leapp 升级

安装并运行 Leapp 程序将操作系统升级到 Red Hat Enterprise Linux (RHEL) 8。

先决条件

流程

  1. stack 用户的身份登录 undercloud。
  2. 安装 Leapp 工具和 jq:

    $ sudo yum install leapp
    $ sudo yum install jq
  3. 下载额外所需的数据文件(RPM 软件包更改和 RPM 存储库映射)附加到 知识库文章 Data required by the Leapp utility for an in-place upgrade from RHEL 7 to RHEL 8,并将这些文件放在 /etc/leapp/files/ 目录中。
  4. 更新您的红帽订阅:

    • 如果您的 undercloud 使用红帽客户门户网站进行注册,请刷新当前订阅以获取对 Red Hat Enterprise Linux 8.2 内容的访问权限:

      $ sudo subscription-manager refresh
    • 如果您的 undercloud 使用 Red Hat Satellite 服务器进行注册,请将 undercloud 重新注册到与您的 Red Hat OpenStack Platform (RHOSP) 16.1 激活码关联的内容视图。

      $ sudo subscription-manager register --force --org ORG --activationkey ACTIVATION_KEY
      注意

      为 Red Hat OpenStack Platform 16.1 创建的内容视图必须包含 Red Hat Enterprise Linux 8.2 的内容。

  5. Red Hat OpenStack Platform 16.1 使用 Open vSwitch 的较新版本。通过 to_removeto_install 事务文件替换 Open vSwitch 版本:

    $ echo 'openvswitch2.11' | sudo tee -a /etc/leapp/transaction/to_remove
    $ echo 'openvswitch2.13' | sudo tee -a /etc/leapp/transaction/to_install
  6. 使用 to_keep 事务文件升级保留 ceph-ansible 的 Red Hat Ceph Storage 3 版本:

    $ echo 'ceph-ansible' | sudo tee -a /etc/leapp/transaction/to_keep
  7. 调整 RHEL 8 中不再支持的内核模块:

    $ if [ -f /usr/share/leapp-repository/repositories/system_upgrade/el7toel8/actors/kernel/checkkerneldrivers/files/removed_drivers.txt ]; then
        for module in pata_acpi floppy; do
            sudo sed -i "/^${module}$/d" /usr/share/leapp-repository/repositories/system_upgrade/el7toel8/actors/kernel/checkkerneldrivers/files/removed_drivers.txt
        done
    else
        for module in pata_acpi floppy; do
            jq ". | del(.data[] | select(.driver_name == \"${module}\"))" /etc/leapp/files/device_driver_deprecation_data.json | sudo tee /etc/leapp/files/device_driver_deprecation_data.json_modified
            mv /etc/leapp/files/device_driver_deprecation_data.json_modified /etc/leapp/files/device_driver_deprecation_data.json
        done
    fi
  8. 运行 leapp answer 命令并指定 Leapp 回答来删除 pam_pkcs11 模块:

    $ sudo leapp answer --add --section remove_pam_pkcs11_module_check.confirm=True
  9. 可选:如果您的环境使用 TLS-Everywhere 架构部署,并使用已弃用的 authconfig 工具在您的系统中配置身份验证,请使用 authselect 工具配置 RHEL 8 系统:

    $ sudo leapp answer --add --section authselect_check.confirm=True

    有关 Leapp 升级过程中身份验证配置的更多信息,请参阅 从 RHEL 7 升级到 RHEL 8 中的已知问题

  10. 设置 LEAPP_DEVEL_TARGET_RELEASELEAPP_UNSUPPORTED 环境变量,以指定您要升级到的 RHEL 8 次版本。对于 RHOSP 16.1,您必须将 RHEL 8 次版本设置为 8.2

    $ export LEAPP_UNSUPPORTED=1
    $ export LEAPP_DEVEL_TARGET_RELEASE=8.2

    每次使用带有 LEAPP_DEVEL 前缀的环境变量时,都必须使用 LEAPP_UNSUPPORTED 环境变量。

  11. 从 Leapp 进程中删除持久性网络名称 actor :

    注意

    如果您在执行 Leapp 升级过程前没有重命名网络接口名称,则接口名称可能会在升级到 RHEL 8.2 后有所变化。有关重命名网络接口名称的详情请参考 第 4.3 节 “为 undercloud 节点使用可预测的 NIC 名称”

    $ sudo rm -f /usr/share/leapp-repository/repositories/system_upgrade/el7toel8/actors/persistentnetnamesdisable/actor.py
  12. 启动 Leapp 升级过程:

    $ sudo -E leapp upgrade --debug --enablerepo rhel-8-for-x86_64-baseos-tus-rpms --enablerepo rhel-8-for-x86_64-appstream-tus-rpms --enablerepo fast-datapath-for-rhel-8-x86_64-rpms --enablerepo ansible-2.9-for-rhel-8-x86_64-rpms

    使用 --enablerepo 选项设置您要在 Leapp 升级过程中启用的软件仓库。您必须包含这些软件仓库才能促进 Red Hat OpenStack Platform 16.1 转换,特别是 Open vSwitch 的较新版本。

  13. 等待 leapp upgrade 命令成功完成。
  14. 在您的根目录中创建空的 .autorelabel 文件:

    $ sudo touch /.autorelabel

    重启后,SELinux 会检测此文件并自动重新标记文件系统。

  15. 重新引导 undercloud:

    $ sudo reboot
  16. 从 DNF 配置中定义的事务排除中删除 Leapp 软件包:

    $ sudo dnf config-manager --save --setopt exclude=''

第 6 章 升级 director

完成 undercloud 操作系统升级后,升级 director。在操作系统升级后,以前的 Red Hat OpenStack Platform 13 undercloud 的数据库会保留在主机上。在运行 openstack undercloud upgrade 命令前,安装新的 Red Hat OpenStack Platform 16.1 软件包并为 Red Hat OpenStack Platform 16.1 容器镜像配置新源。

6.1. 将环境锁定到 Red Hat Enterprise Linux 发行版本

Red Hat OpenStack Platform 16.1 支持 Red Hat Enterprise Linux 8.2。在执行更新前,您必须将 undercloud 存储库锁定到 Red Hat Enterprise Linux 8.2 发行版本,以避免将操作系统升级到较新的次版本。

流程

  1. stack 用户的身份登录 undercloud。
  2. 使用 subscription-manager release 命令将 undercloud 锁定为特定版本:

    $ sudo subscription-manager release --set=8.2

6.2. 为 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-8-for-x86_64-baseos-tus-rpms --enable=rhel-8-for-x86_64-appstream-tus-rpms --enable=rhel-8-for-x86_64-highavailability-tus-rpms --enable=ansible-2.9-for-rhel-8-x86_64-rpms --enable=openstack-16.1-for-rhel-8-x86_64-rpms --enable=fast-datapath-for-rhel-8-x86_64-rpms --enable=advanced-virt-for-rhel-8-x86_64-eus-rpms

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

  3. container-tools 存储库模块设置为版本 2.0:

    [stack@director ~]$ sudo dnf module reset container-tools
    [stack@director ~]$ sudo dnf module enable -y container-tools:2.0
  4. 同步操作系统以确保您的系统软件包与操作系统版本匹配:

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

6.3. 安装 director 软件包

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

步骤

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

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

6.4. 准备容器镜像

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

注意

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

步骤

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

    $ sudo 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.5. 容器镜像准备参数

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

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

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

参数描述

excludes

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

includes

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

modify_append_tag

要附加到目标镜像标签的字符串。例如,如果您使用标签 16.1.3-5.161 拉取镜像并将 modify_append_tag 设置为 -hotfix,director 会将最终镜像标记为 16.1.3-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 标签来构造新标签。对于一个容器,版本 可能会设置为 16.1.3,release 可能会设置为 5.161,这会导致标签 16.1.3-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.6. 容器镜像标记准则

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

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

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

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

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

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

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

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

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

      "Labels": {
        "release": "5.161",
        "version": "16.1.3",
        ...
      }
  • tag_from_label 的默认值为 {version}-{release},对应于每个容器镜像的版本和发行版本元数据标签。例如,如果容器镜像为 版本 设置了 16.1.3,并且为 发行版本 设置了 5.161,则生成的容器镜像标签为 16.1.3-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.7. 从私有 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.8. 获取用于升级的过渡容器

升级需要来自之前版本的 Red Hat OpenStack Platform 和 Red Hat Ceph Storage 的容器。这些容器有助于过渡到 Red Hat OpenStack Platform 16.1。

流程

  1. stack 用户身份登录 undercloud 主机。
  2. 编辑 containers-prepare-parameter.yaml 文件。
  3. ContainerImagePrepare 参数的 set 中添加 transitional 容器参数。根据您的部署类型,以以下方法之一设置参数。

    • 如果您的部署使用了使用 director 部署的 Red Hat Ceph Storage 集群,请添加以下参数:

      parameter_defaults:
        ContainerImagePrepare:
        - push_destination: true
          set:
            ...
            name_prefix_stein: openstack-
            name_suffix_stein: ''
            namespace_stein: registry.redhat.io/rhosp15-rhel8
            tag_stein: 15.0
            ceph3_namespace: registry.redhat.io/rhceph
            ceph3_tag: latest
            ceph3_image: rhceph-3-rhel7
            ...
      • *_stein 参数定义 Red Hat OpenStack Platform 15 的容器镜像,升级过程用于数据库迁移。
      • ceph3 authenticate 参数定义 overcloud 使用的当前 Red Hat Ceph Storage 容器镜像。对于从 Red Hat Ceph Storage 3 转换到 4,overcloud 需要 ceph 3uildDefaults 和 cephuildDefaults 参数。
      • 如果您使用 Red Hat Satellite Server 进行容器镜像存储,请将命名空间设置为 Red Hat Satellite Server 上的镜像位置。
    • 如果您的部署使用外部 Ceph Storage 集群,请添加以下参数:

      parameter_defaults:
        ContainerImagePrepare:
        - push_destination: true
          set:
            ...
            name_prefix_stein: openstack-
            name_suffix_stein: ''
            namespace_stein: registry.redhat.io/rhosp15-rhel8
            tag_stein: 15.0
            ceph_namespace: registry.redhat.io/rhceph
            ceph_tag: latest
            ceph_image: rhceph-4-rhel8
            ...
      • *_stein 参数定义 Red Hat OpenStack Platform 15 的容器镜像,升级过程用于数据库迁移。
      • cephui ldDefaults 参数定义 overcloud 使用的当前 Red Hat Ceph Storage 4 容器镜像。
      • 如果您使用 Red Hat Satellite Server 进行容器镜像存储,请将命名空间设置为 Red Hat Satellite Server 上的镜像位置。
  4. neutron_driver 参数更改为 openvswitch

    parameter_defaults:
      ContainerImagePrepare:
      - push_destination: true
        set:
          ...
          neutron_driver: openvswitch
          ...

    升级在整个流程中保留 Open vSwitch 兼容性。完成升级到 Red Hat OpenStack Platform 16.1 后,您要将 overcloud 从 Open vSwitch 迁移到 Open Virtual Network (OVN)。

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

6.9. 更新 undercloud.conf 文件

您可以继续使用 Red Hat OpenStack Platform 13 环境的原始 undercloud.conf 文件,但必须修改该文件以保持与 Red Hat OpenStack Platform 16.1 的兼容性。

流程

  1. stack 用户身份登录 undercloud 主机。
  2. 编辑 undercloud.conf 文件。
  3. 在文件中的 DEFAULT 部分添加以下参数:

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

    此参数定义 containers-prepare-parameter.yaml 环境文件的位置,以便 director 从正确的位置拉取 undercloud 的容器镜像。

  4. 检查 generate_service_certificate 参数。此参数的默认值从 false 改为 true,它在升级过程中在 undercloud 上启用 SSL/TLS。
  5. 如果您迁移到可预测的 NIC 命名规则,请检查 local_interface 参数。
  6. 如果您在 Red Hat OpenStack Platform 13 中设置 masquerade_network 参数,请删除此参数,并为每个子网设置 masquerade = true
  7. 检查 文件中的所有其他参数是否有任何更改。
  8. 保存该文件。

6.10. Director 配置参数

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

重要

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

默认值

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

additional_architectures
overcloud 支持的附加(内核)架构的列表。目前,除了默认的 x86_64 架构外,overcloud 还支持 ppc64le 架构。
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 8.2 仅支持 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_mistral; enable_nova; enable_tempest; enable_validations; enable_zaqar
定义要为 director 启用的核心服务。保留这些参数设为 true
enable_node_discovery
自动注册通过 PXE 引导内省虚拟内存盘 (ramdisk) 的所有未知节点。新节点使用 fake 作为默认驱动程序,但您可以设置 discovery_default_driver 覆盖它。您也可以使用内省规则为新注册的节点指定驱动程序信息。
enable_novajoin
定义是否在 undercloud 中安装 novajoin 元数据服务。
enable_routed_networks
定义是否支持路由的 control plane 网络。
enable_swift_encryption
定义是否启用 Swift 加密。
enable_telemetry
定义是否在 undercloud 中安装 OpenStack Telemetry 服务(gnocchi、aodh、panko)。如果您想自动安装和配置 telemetry 服务,则将 enable_telemetry 参数设为 true。默认值为 false,即在 undercloud 中禁用 telemetry。如果使用要利用指标数据的其他产品,如 Red Hat CloudForms,则需要这个参数。
警告

每个组件都不支持 RBAC。Alarming 服务(aodh)和 Gnocchi 不考虑安全的 RBAC 规则。

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 以启用基准测试。如果您需要在检查注册节点的硬件时执行基准数据分析操作,则需要使用这个参数。
ipa_otp
定义在 IPA 服务器注册 undercloud 节点使用的一次性密码。启用 enable_novajoin 之后需要提供此密码。
ipv6_address_mode

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

  • dhcpv6-stateless - 使用路由器公告 (RA) 的地址配置以及使用 DHCPv6 的可选信息。
  • DHCPv6-stateful - 地址配置和使用 DHCPv6 的可选信息。
ipxe_enabled
定义使用 iPXE 还是标准的 PXE。默认为 true,其启用 iPXE。将此参数设置为 false 以使用标准 PXE。
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 Admin API 端点定义的 IP 地址或主机名。director 配置将 IP 地址作为路由的 IP 地址附加到 director 软件网桥,其使用 /32 子网掩码。

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

有关自定义 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 Public 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 地址。
dhcp_exclude
DHCP 分配范围中排除的 IP 地址。
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 子网中。

6.11. 运行 director 升级

完成以下步骤以升级 director。

流程

  1. 运行以下命令升级 undercloud 上的 director:

    $ openstack undercloud upgrade

    此命令会启动 director 配置脚本。director 升级其软件包并配置其服务,以符合 undercloud.conf 中的设置。这个脚本会需要一些时间来完成。

    注意

    在继续操作前,director 配置脚本会提示确认。使用 -y 选项绕过此确认:

    $ openstack undercloud upgrade -y
  2. 该脚本还会自动启动 undercloud 上所有的 OpenStack Platform 服务容器。您可以通过 systemd 资源管理每个服务。检查 systemd 资源:

    $ sudo systemctl list-units "tripleo_*"

    每个 systemd 服务控制一个容器。使用以下命令来检查已启用的容器:

    $ sudo podman ps
  3. 该脚本将 stack 用户添加到 docker 组,以确保 stack 用户能够访问容器管理命令。使用以下命令刷新 stack 用户权限:

    $ exec su -l stack

    命令会提示您再次登录。输入 stack 用户密码。

  4. 运行以下命令初始化 stack 用户来使用命令行工具:

    $ source ~/stackrc

    提示信息现在指示,OpenStack 命令在对 undercloud 验证身份并执行命令;

    (undercloud) $

director 升级已完成。

第 7 章 overcloud 准备的初始步骤

您必须完成一些初始步骤来准备 overcloud 升级。

7.1. 准备 overcloud 服务停机时间

overcloud 升级过程在关键点上禁用主 control plane 服务。在达到这些关键点时,您无法使用任何 overcloud 服务创建新资源。overcloud 中运行的工作负载在升级过程中保持活动状态,这意味着实例在 control plane 升级过程中继续运行。在升级 Compute 节点期间,这些工作负载可以实时迁移到已升级的 Compute 节点。

规划维护窗口,以确保在升级过程中没有用户可以访问 overcloud 服务。

受 overcloud 升级影响

  • OpenStack Platform 服务

不受 overcloud 升级的影响

  • 升级过程中运行的实例
  • Ceph Storage OSD (实例的后端存储)
  • Linux 网络
  • Open vSwitch 网络
  • undercloud

7.2. 为升级测试选择 Compute 节点

通过 overcloud 升级过程,您可以:

  • 升级角色中的所有节点
  • 单独单独节点

为确保 overcloud 平稳升级过程,在升级所有 Compute 节点前,在环境中测试几个单独 Compute 节点上的升级会很有用。这样可确保升级过程中不会发生重大问题,同时为工作负载保持最小的停机时间。

使用以下建议来帮助为升级选择测试节点:

  • 选择两个或三个 Compute 节点用于升级测试
  • 选择没有运行任何关键实例的节点
  • 如有必要,将关键实例从所选测试 Compute 节点迁移到其他 Compute 节点

7.3. 创建 overcloud 清单文件

使用 tripleo-ansible-inventory 命令,生成环境中所有节点的 Ansible 清单文件。

流程

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

    $ source ~/stackrc
  3. 为所有节点创建一个静态清单文件:

    $ tripleo-ansible-inventory --static-yaml-inventory ~/inventory.yaml --stack STACK_NAME

    如果您不使用默认的 overcloud 堆栈名称,请使用 --stack STACK NAME选项设置堆栈名称,将 STACK NAME 替换为堆栈的名称。

  4. 要在您的环境中执行 Ansible playbook,请运行 ansible-playbook 命令,并使用 -i 选项包含动态清单工具的完整路径。例如:

    (undercloud) $ ansible-playbook -i ~/inventory.yaml PLAYBOOK

7.4. 验证预升级要求

运行 预升级 验证组来检查预升级要求。

有关 Red Hat OpenStack Platform (RHOSP) 验证框架 的更多信息,请参阅 Director 安装和使用指南中的使用验证框架

流程

  1. source stackrc 文件:

    $ source ~/stackrc
  2. 使用 --group pre-upgrade 选项运行 openstack tripleo validator run 命令,并包含 /usr/libexec/platform-python python 运行时环境:

    $ openstack tripleo validator run --group pre-upgrade --python-interpreter /usr/libexec/platform-python -i inventory.yaml
  3. 查看验证报告的结果。要查看特定验证的详细输出,请根据报告中具体验证的 UUID 运行 openstack tripleo validator show run --full 命令:

    $ openstack tripleo validator show run  --full <UUID>
重要

FAILED 验证不会阻止您部署或运行 RHOSP。但是,FAILED 验证可能会显示生产环境中潜在的问题。

7.5. 在 overcloud 中禁用隔离

在升级 overcloud 之前,请确保禁用隔离。

升级 overcloud 时,您可以单独升级每个 Controller 节点来保留高可用性功能。如果在您的环境中部署了隔离,overcloud 可能会检测某些节点被禁用并尝试隔离操作,这可能会导致意外的结果。

如果您在 overcloud 中启用了隔离功能,则必须在升级期间临时禁用隔离,以避免出现意外的结果。

流程

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

    $ source ~/stackrc
  3. 登录到 Controller 节点并运行 Pacemaker 命令禁用隔离:

    $ ssh heat-admin@CONTROLLER_IP "sudo pcs property set stonith-enabled=false"
  4. fencing.yaml 环境文件中,将 EnableFencing 参数设置为 false,以确保隔离在升级过程中保持禁用。

7.6. 检查自定义 Puppet 参数

如果您使用 ExtraConfig 接口来自定义 Puppet 参数,则 Puppet 可能会在升级过程中报告重复声明错误。这是因为 puppet 模块本身提供的接口有变化。

此流程演示了如何检查环境文件中的任何自定义 ExtraConfig hieradata 参数。

流程

  1. 选择一个环境文件,检查它是否有 ExtraConfig 参数:

    $ grep ExtraConfig ~/templates/custom-config.yaml
  2. 如果结果在所选文件中显示 ExtraConfig 参数(如 ControllerExtraConfig),请检查该文件中的完整参数结构。
  3. 如果参数包含 SECTION/parameter 语法 和值 的任何 puppet Hierdata,则它可能已被替换为实际 Puppet 类的参数。例如:

    parameter_defaults:
      ExtraConfig:
        neutron::config::dhcp_agent_config:
          'DEFAULT/dnsmasq_local_resolv':
            value: 'true'
  4. 检查 director 的 Puppet 模块,以查看参数现在存在于 Puppet 类中。例如:

    $ grep dnsmasq_local_resolv

    如果是,请更改为新接口。

  5. 以下是演示语法更改的示例:

    • 示例 1:

      parameter_defaults:
        ExtraConfig:
          neutron::config::dhcp_agent_config:
            'DEFAULT/dnsmasq_local_resolv':
              value: 'true'

      更改:

      parameter_defaults:
        ExtraConfig:
          neutron::agents::dhcp::dnsmasq_local_resolv: true
    • 示例 2:

      parameter_defaults:
        ExtraConfig:
          ceilometer::config::ceilometer_config:
            'oslo_messaging_rabbit/rabbit_qos_prefetch_count':
              value: '32'

      更改:

      parameter_defaults:
        ExtraConfig:
          oslo::messaging::rabbit::rabbit_qos_prefetch_count: '32'

7.7. undercloud 节点数据库备份

您可以使用 backup-and-restore Ansible 角色创建在 undercloud 节点上运行的数据库备份,并使用该备份在数据库被损坏时恢复数据库状态。有关备份 undercloud 数据库的更多信息,请参阅 Red Hat OpenStack Platform 16.1 备份和恢复 undercloud 和 control plane 节点指南中的创建 undercloud 节点数据库备份

第 8 章 为 Leapp 升级配置 overcloud

长生命 Red Hat OpenStack Platform (RHOSP)升级需要一个从 Red Hat Enterprise Linux 7 升级到 Red Hat Enterprise Linux 8 的基本操作系统。Red Hat Enterprise Linux 7 使用 Leapp 程序执行到 Red Hat Enterprise Linux 8 的升级。有关 Leapp 及其依赖项的更多信息,请参阅 为升级准备 RHEL 7 系统

overcloud 升级框架自动运行 leapp 升级。为确保 RHOSP 升级成功,建议您手动运行预升级报告来识别并解决任何潜在问题。对每个 Compute、Controller 和 Ceph Storage 角色至少有一个主机运行预升级报告。有关 Leapp 预升级报告的更多信息,请参阅 检查预升级报告

8.1. 创建升级环境文件

升级过程使用环境文件来启用升级过程并配置特定的升级参数。

流程

  1. stack 用户的身份登录 undercloud。
  2. templates 目录中 创建一个名为 upgrade-environment.yaml 的环境文件:

    $ touch templates/upgrades-environment.yaml
  3. 编辑该文件并添加以下强制内容:

    parameter_defaults:
      UpgradeLeappDevelSkip: "LEAPP_UNSUPPORTED=1 LEAPP_DEVEL_TARGET_RELEASE=8.2"
      LeappInitCommand: |
        for module in pata_acpi floppy; do sudo sed -i "/^${module}$/d" /usr/share/leapp-repository/repositories/system_upgrade/el7toel8/actors/kernel/checkkerneldrivers/files/removed_drivers.txt; done
        sudo rm -f /usr/share/leapp-repository/repositories/system_upgrade/el7toel8/actors/persistentnetnamesdisable/actor.py
        sudo yum -y remove mariadb-server* || true
      UpgradeInitCommand: "sudo dnf config-manager --save --setopt exclude=''"
    • UpgradeLeappDevelSkip 会跳过 Leapp 检查,并在 Leapp 运行时设置环境变量。
    • LeappInitCommand 会传递在每个 overcloud 节点上运行的命令或脚本片断,并为 Leapp 升级准备节点。
    • UpgradeInitCommand 传递在每个 overcloud 节点上运行的命令或脚本片断。dnf config-manager --save --setopt exclude='' 命令从 DNF exclude 中删除 Leapp 软件包,以便成功删除 python2 软件包。
  4. 可选: 如果您在环境中使用 TLS-Everywhere 并希望从 authconfig 迁移到 authselect,请将 authselect_check.confirm 参数设置为 True 以避免 bug BZ#1978228 - OSP13→16.2 Leapp upgrade failed with TLSEverywhere:

    parameter_defaults:
      LeappInitCommand: |
        sudo leapp answer --section authselect_check.confirm=True --add

    否则,将值设为 False

    注意

    使用 | 语法将多个命令传递给 LeappInitCommand 参数:

    parameter-defaults:
      LeappInitCommand: |
        <command_1>
        <command_2>
  5. 保存 upgrade -environment.yaml 文件。

8.2. 升级参数

参数描述

UpgradeInitCommand

在所有 overcloud 节点上运行的命令或脚本片段以初始化升级过程。例如,仓库开关。

UpgradeInitCommonCommand

升级过程所需的常用命令。这通常不应该由 Operator 修改,并在 major-upgrade-composable-steps.yaml 和 major-upgrade-converge.yaml 环境文件中设置和取消设置。

UpgradeLeappCommandOptions

附加到 Leapp 命令的其他命令行选项。

UpgradeLeappDebug

运行 Leapp 时打印调试输出。默认值为 True

UpgradeLeappDevelSkip

在 development/testing 中运行 Leapp 时,通过设置 env 变量跳过 Leapp 检查。例如: LEAPP_DEVEL_SKIP_RHSM=1。

UpgradeLeappEnabled

使用 Leapp 进行操作系统升级。默认值为 False

UpgradeLeappPostRebootDelay

等待机器重启并响应 test 命令的最大(秒)。默认值为 120

UpgradeLeappRebootTimeout

通过 Leapp 进行 OS 升级阶段的超时(秒)。默认值为 3600

UpgradeLeappToInstall

Leapp 升级后要安装的软件包列表。

UpgradeLeappToRemove

Leapp 升级过程中要删除的软件包列表。

8.3. 在 overcloud 节点上复制 Leapp 数据

每个 overcloud 节点都需要 Leapp 数据文件。将 undercloud 上的 /etc/leapp/files 目录中的数据文件复制到每个 overcloud 节点上的相同位置。

流程

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

    $ source ~/stackrc
  3. 为环境中所有节点创建一个静态清单文件:

    $ tripleo-ansible-inventory --static-yaml-inventory ~/inventory.yaml --stack STACK_NAME

    如果您不使用默认的 overcloud 堆栈名称,请使用 --stack STACK NAME选项设置堆栈名称,将 STACK NAME 替换为堆栈的名称。

  4. 要将 leapp 数据复制到 overcloud 节点 请运行以下命令:

    $ ansible -i ~/inventory.yaml --become -m synchronize -a "src=/etc/leapp/files dest=/etc/leapp/" overcloud

8.4. 为 overcloud 节点使用可预测的 NIC 名称

在 overcloud 节点上运行 Leapp 升级前,您必须检查基于内核的 NIC 名称,这通常包含 eth 前缀。在 NIC 分配方面,这些 NIC 名称通常无法预计。

您可以运行 playbook-nics.yaml playbook 来重命名 NIC 名称,以使用 em NIC 前缀。您还可以在运行 playbook 时修改前缀变量来设置不同的 NIC 前缀。但是,NIC 更改仅在 Leapp 升级过程完成后应用,并重新引导节点。

先决条件

  • 在 undercloud 准备过程中创建的 playbook-nics.yaml playbook。playbook-nics.yaml playbook 适合大多数使用以太网设备、网桥和 Linux 绑定的 overcloud 网络场景。如果您的环境需要在这些设备类型之外进行额外的配置,请在继续操作前遵循这些建议:

    • 在与 overcloud 节点类似的网络配置的独立系统上测试 playbook
    • 修改 playbook,使其在其他设备类型配置中重命名 eth 前缀
    • 完成此步骤后,检查 overcloud 节点的网络配置

流程

  1. stack 用户的身份登录 undercloud。
  2. 在所有 overcloud 节点上运行 playbook-nics.yaml playbook:

    $ ansible-playbook -i ~/inventory.yaml playbook-nics.yaml

    playbook 将新的 NIC 前缀设置为 em。要设置不同的 NIC 前缀,请在运行 playbook 时设置 前缀 变量:

    $ ansible-playbook -i ~/inventory.yaml -e prefix="mynic" playbook-nics.yaml

    NIC 更改仅在 Leapp 升级过程完成且重新引导节点后应用。

第 9 章 更新可组合服务和参数

您必须完成一些可组合服务配置才能准备 overcloud 升级。

9.1. 在自定义 roles_data 文件中更新可组合服务

本节包含有关新和已弃用的可组合服务的信息。

  • 如果您使用默认的 roles_data 文件,则这些服务会自动包含。
  • 如果您使用 自定义角色_data 文件,请添加新服务并删除每个相关角色的已弃用服务。
重要

如果部署中的任何 overcloud 节点都是专用的 Object Storage (swift)节点,您必须复制默认的 roles_data.yaml 文件,并编辑 ObjectStorage 以删除以下行: deprecated_server_resource_name: 'SwiftStorage'

Controller 节点

对于 Controller 节点,以下服务已弃用。从 Controller 角色中删除它们。

服务原因

OS::TripleO::Services::AodhApi

OS::TripleO::Services::AodhEvaluator

OS::TripleO::Services::AodhListener

OS::TripleO::Services::AodhNotifier

OpenStack Telemetry 服务在 Service Telemetry Framework (STF)中被弃用,用于指标和监控。旧的 Telemetry 服务只在 RHOSP 16.1 中提供,以帮助过渡到 STF,并将在以后的 RHOSP 版本中删除。

注意

如果使用自动扩展,请不要从 Controller 节点中删除这些服务。

OS::TripleO::Services::PankoApi

OpenStack Telemetry 服务在 Service Telemetry Framework (STF)中被弃用,用于指标和监控。旧的 Telemetry 服务只在 RHOSP 16.1 中提供,以帮助过渡到 STF,并将在以后的 RHOSP 版本中删除。

注意

如果使用 CloudForms,请不要从 Controller 节点中删除这些服务。

OS::TripleO::Services::CeilometerApi

OS::TripleO::Services::CeilometerCollector

OS::TripleO::Services::CeilometerExpirer

OS::TripleO::Services::MongoDb

这些服务不再被支持。从 Controller 节点中删除这些服务。

OS::TripleO::Services::Congress

Congress 不再被支持。

OS::TripleO::Services::GlanceRegistry

由于 OpenStack Platform Image Service (glance) API v2,不再支持此服务。

OS::TripleO::Services::NeutronCorePluginPlumgrid

OS::TripleO::Services::NeutronCorePluginMidonet

OpenStack Networking (neutron)已弃用插件。

OS::TripleO::Services::NeutronLbaasv2Agent

OS::TripleO::Services::NeutronLbaasv2Api

OpenStack Networking (neutron)负载均衡作为服务在 Octavia 中被弃用。

OS::TripleO::Services::NovaConsoleauth

此服务已被删除。

OS::TripleO::Services::NovaPlacement

弃用了 OS::TripleO::Services::PlacementApi

OS::TripleO::Services::OpenDaylightApi

OS::TripleO::Services::OpenDaylightOvs

Daylight 不再被支持。

OS::TripleO::Services::RabbitMQ

此服务已被两个新服务替换:

OS::TripleO::Services::OsloMessagingRpc

OS::TripleO::Services::OsloMessagingNotify

OS::TripleO::Services::SkydiveAgent

OS::TripleO::Services::SkydiveAnalyzer

Skydive 不再被支持。

OS::TripleO::Services::Tacker

Tacker 不再被支持。

以下服务是 Controller 节点的新服务。将它们添加到 Controller 角色中。

服务原因

OS::TripleO::Services::CephGrafana

启用 Ceph 仪表板服务的任务。

OS::TripleO::Services::CinderBackendDellEMCPowermax

OS::TripleO::Services::CinderBackendDellEMCSc

OS::TripleO::Services::CinderBackendNVMeOF

Block Storage (cinder) 的新后端。

OS::TripleO::Services::ContainerImagePrepare

运行 命令,以拉取和准备与 overcloud 中服务相关的容器镜像。

OS::TripleO::Services::DesignateApi

OS::TripleO::Services::DesignateCentral

OS::TripleO::Services::DesignateProducer

OS::TripleO::Services::DesignateWorker

OS::TripleO::Services::DesignateMDNS

OS::TripleO::Services::DesignateSink

DNS 即服务(designate)的服务。

OS::TripleO::Services::IronicInspector

用于 overcloud 的裸机内省的服务。

OS::TripleO::Services::IronicNeutronAgent

OpenStack Bare Metal (ironic)的网络代理。

OS::TripleO::Services::NeutronAgentsIBConfig

用于 Mellanox InfiniBand 的 OpenStack Networking (neutron)代理的服务。

OS::TripleO::Services::OpenStackClients

用于安装 Red Hat OpenStack Platform 命令行工具的服务。

OS::TripleO::Services::OsloMessagingRpc

OS::TripleO::Services::OsloMessagingNotify

OS::TripleO::Services::RabbitMQ 服务的替换服务。

OS::TripleO::Services::PlacementApi

放置 API 的服务。

Compute 节点

Compute 节点弃用了以下服务。从 Compute 角色中删除它们。

服务原因

OS::TripleO::Services::OpenDaylightOvs

Daylight 不再被支持。

OS::TripleO::Services::SkydiveAgent

Skydive 不再被支持。

以下服务是 Compute 节点的新服务。将它们添加到您的 Compute 角色中。

服务原因

OS::TripleO::Services::NovaAZConfig

服务,用于在 OpenStack Compute (nova)中配置主机聚合和可用性区域。

所有节点

所有节点已弃用了以下服务。从所有角色中删除它们。

服务原因

OS::TripleO::Services::Docker

使用 Podman 替代。

OS::TripleO::Services::Fluentd

OS::TripleO::Services::Rsyslog 的 favour 中被弃用。

OS::TripleO::Services::Ntp

弃用了 OS::TripleO::Services::Timesync 的 favour。

OS::TripleO::Services::SensuClient

弃用的服务。

OS::TripleO::Services::Ptp

弃用了 OS::TripleO::Services::Timesync 的 favour。

以下服务是所有节点的新增服务。将它们添加到所有角色。

服务原因

OS::TripleO::Services::BootParams

服务设置内核参数、Tuned 配置集和 CPU 隔离。

OS::TripleO::Services::Collectd

配置 Collectd 的服务。

OS::TripleO::Services::Multipathd

提供多路径服务,它默认是禁用的

OS::TripleO::Services::Podman

用于安装并启用 Podman 的服务。

OS::TripleO::Services::Rear

用于安装并启用 Relax-and-Recover (ReaR)备份和恢复工具的服务。

OS::TripleO::Services::Rsyslog

配置集中式日志收集的服务。

OS::TripleO::Services::Timesync

服务启用时间同步方法,默认为 Chronyd。

9.2. 在自定义环境文件中更新可组合服务

如果您有任何带有 resource_registry 部分的自定义环境文件,请检查 resource_registry 部分中的可组合服务模板映射的更改。Red Hat OpenStack Platform 16.1 的可组合服务文件位于 /usr/share/openstack-tripleo-heat-templates/ 中的新位置:

Red Hat OpenStack Platform 13Red Hat OpenStack Platform 16.1

docker/services/

部署

部署 目录包含一组用于分组可组合服务的子目录。例如,keystone 子目录包含 OpenStack Identity (keystone)的可组合服务模板。

要在自定义环境文件中重新映射可组合服务,请检查当前服务映射的模板位置,并编辑到新位置的映射。此流程使用 ceph-mgr.yaml 作为示例。

重要

这个过程仅作为重新映射可组合服务的指导。如果您不确定任何映射,请联系红帽并请求 有关正确映射的建议。

流程

  1. 搜索使用可组合服务的自定义环境文件。您通常将自定义环境文件存储在 /home/stack/templates 目录中:

    $ cd ~/templates/
    $ grep "OS::TripleO::Services" *

    在这种情况下,其中一个文件显示过时的映射:

      OS::TripleO::Services::CephMgr: /usr/share/openstack-tripleo-heat-templates/docker/services/ceph-ansible/ceph-mgr.yaml
  2. 识别 /usr/share/openstack-tripleo-heat-templates/ 中的新的 ceph-mgr.yaml 位置。此文件现在位于 'deployment/ceph-ansible' 目录中:

    $ find /usr/share/openstack-tripleo-heat-templates/ -name ceph-mgr.yaml
    /usr/share/openstack-tripleo-heat-templates/deployment/ceph-ansible/ceph-mgr.yaml
  3. 在自定义环境文件中编辑服务:

    resource_registry:
      OS::TripleO::Services::CephMgr: /usr/share/openstack-tripleo-heat-templates/deployment/ceph-ansible/ceph-mgr.yaml

    保存该文件。

9.3. 配置对 undercloud registry 的访问

要配置对 undercloud registry 的访问,请将置备网络上的 undercloud 的 control plane 主机名和 undercloud 的 IP 地址添加到 DockerInsecureRegistryAddress 参数。将此参数放在 containers-prepare-parameter.yaml 文件中,以确保参数包含在未来的 overcloud 部署中。

流程

  1. stack 用户的身份登录 undercloud。
  2. 获取 undercloud 上的 control plane 主机名:

    $ sudo hiera container_image_prepare_node_names
    ["undercloud.ctlplane.localdomain"]
  3. 编辑 containers-prepare-parameter.yaml 文件,并添加 DockerInsecureRegistryAddress 参数,其中包含 undercloud 的 control plane 主机名和 provisioning 网络上的 undercloud 的 IP 地址:

    parameter_defaults:
      DockerInsecureRegistryAddress:
      - undercloud.ctlplane.localdomain:8787
      - 192.168.24.1:8787
      ...

    您还必须将 overcloud registry 的端口号附加到主机名和 IP 地址值。端口号为 8787

9.4. NovaSchedulerDefaultFilters 参数已弃用和删除的过滤器

如果您的环境使用自定义 NovaSchedulerDefaultFilters 参数,请编辑参数以删除以下已弃用和删除的过滤器:

Filter状态

AggregateCoreFilter

已弃用

AggregateRamFilter

已弃用

AggregateDiskFilter

已弃用

ExactCoreFilter

删除

ExactRamFilter

删除

ExactDiskFilter

删除

CoreFilter

删除

RamFilter

删除

DiskFilter

删除

RetryFilter

已弃用

重要

避免使用标记为已弃用 的过滤器。Red Hat OpenStack Platform 16.1 仍然包含已弃用的过滤器,但将来的 Red Hat OpenStack Platform 版本将不包括这些过滤器。

9.5. 设置 Compute 名称格式

Red Hat OpenStack Platform 13 使用 %stackname%-compute-%index% 作为 Compute 节点的默认命名格式。Red Hat OpenStack Platform 16.1 使用 %stackname%-novacompute-%index% 作为 Compute 节点的默认命名格式。更改默认命名格式,以保留原始 Red Hat OpenStack Platform 13 命名格式。如果不使用原始命名格式,director 会使用新的命名格式配置新的 OpenStack Compute (nova)代理,并将现有的 OpenStack Compute (nova)代理保留为孤立的服务。

流程

  1. stack 用户的身份登录 undercloud。
  2. 设置 Compute 命名格式:

    • 如果使用自定义 roles_data 文件,请编辑自定义 roles_data 文件并为 Compute 角色设置 HostnameFormatDefault 参数:

      - name: Compute
        …​
        HostnameFormatDefault: '%stackname%-compute-%index%'
        …​

      保存自定义 roles_data 文件。

    • 如果您在 openstack-tripleo-heat-templates 中使用默认的 roles_data 文件,请在环境文件中设置命名格式。使用节点数目和类型编辑环境文件,它们通常命名为 node-info.yaml。将 ComputeHostnameFormat 参数添加到 parameter_defaults 部分:

      parameter_defaults:
        …​
        ComputeHostnameFormat: '%stackname%-compute-%index%'
        …​

      保存 node-info.yaml 文件。

9.6. 配置实例序列号

在 Red Hat OpenStack Platform 13 中,存储在主机虚拟机的虚拟 BIOS 中的实例的序列号取决于主机的序列号。

在 Red Hat OpenStack Platform 16.1 中,主机虚拟机虚拟 BIOS 中存储的实例的序列号默认基于实例的 UUID。

如果您要在升级到 Red Hat OpenStack Platform 16.1 时保留 Red Hat OpenStack Platform 13 部署的行为,您必须配置 [libvirt]sysinfo_serial

流程

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

    [stack@director ~]$ source ~/stackrc
  3. 打开环境文件。
  4. 在您的环境文件中添加以下配置,以指定实例序列号基于主机的序列号:

    parameter_defaults:
      <Role>ExtraConfig:
        nova::config::nova_config:
          libvirt/sysinfo_serial:
            value: auto
  5. 保存对环境文件的更新,并将该文件添加到 overcloud 升级和部署命令中。

9.7. 更新 SSL/TLS 配置

resource_registry 中删除 NodeTLSData 资源,以更新 SSL/TLS 配置。

流程

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

    $ source ~/stackrc
  3. 编辑自定义 overcloud SSL/TLS 公共端点文件,该文件通常命名为 ~/templates/enable-tls.yaml
  4. 从 'resource_registry 中删除 NodeTLSData 资源:

    resource_registry:
      OS::TripleO::NodeTLSData: /usr/share/openstack-tripleo-heat-templates/puppet/extraconfig/tls/tls-cert-inject.yaml
      …​

    overcloud 部署使用 HAProxy 中的新服务来确定是否启用了 SSL/TLS。

    注意

    如果这是 enable-tls.yaml 文件的 resource_registry 部分中的唯一资源,请删除完整的 resource_registry 部分。

  5. 保存 SSL/TLS 公共端点文件。

9.8. 更新后配置模板

如果您使用 OS::TripleO::NodeExtraConfigPost 资源注册并运行 post-configuration 模板,您必须将 EndpointMap 参数添加到模板中。

流程

  1. 编辑后配置模板。
  2. parameters 部分下,添加 EndpointMap 参数及其子参数:

    parameters:
      servers:
        type: json
      nameserver_ip:
        type: string
      DeployIdentifier:
        type: string
      EndpointMap:
        default: {}
        type: json
  3. 保存模板。

9.9. 保留旧遥测服务时的注意事项

在 Red Hat OpenStack Platform (RHOSP) 16.1 中,OpenStack Telemetry 组件已弃用,而是使用 Service Telemetry Framework (STF),因此在升级后不会启用旧的遥测组件。

如果使用自动扩展或 CloudForms 服务,您必须保留旧的遥测服务。

要保留旧的 RHOSP 13 遥测服务,请在运行 openstack overcloud upgrade prepareopenstack overcloud upgrade converge 命令时包括 /usr/share/openstack-tripleo-heat-templates/environments/enable-legacy-telemetry.yaml 环境文件。

每次升级后更新 overcloud 时,还必须包含 enable-legacy-telemetry.yaml 环境文件。

传统的 Telemetry 服务仅用于帮助过渡到 STF,并将在以后的 RHOSP 版本中删除。

第 10 章 将 overcloud 注册更新至红帽客户门户网站

Red Hat OpenStack Platform 16.1 使用基于 Ansible 的方法在红帽客户门户网站中注册 overcloud 节点。

10.1. Red Hat Subscription Manager (RHSM)可组合服务

您可以使用 rhsm 可组合服务通过 Ansible 注册 overcloud 节点。默认 roles_data 文件中的每个角色都包含一个 OS::TripleO::Services::Rhsm 资源,默认情况下是禁用的。要启用该服务,将资源注册到 rhsm 可组合服务文件中:

resource_registry:
  OS::TripleO::Services::Rhsm: /usr/share/openstack-tripleo-heat-templates/deployment/rhsm/rhsm-baremetal-ansible.yaml

rhsm able 服务接受 RhsmVars 参数,您可以使用它来定义与注册相关的多个子参数:

parameter_defaults:
  RhsmVars:
    rhsm_repos:
      - rhel-8-for-x86_64-baseos-tus-rpms
      - rhel-8-for-x86_64-appstream-tus-rpms
      - rhel-8-for-x86_64-highavailability-tus-rpms
      …​
    rhsm_username: "myusername"
    rhsm_password: "p@55w0rd!"
    rhsm_org_id: "1234567"
    rhsm_release: 8.2

您还可以将 RhsmVars 参数与特定于角色的参数结合使用,如 ControllerParameters,在为不同的节点类型启用特定的存储库时提供灵活性。

10.2. RhsmVars sub-parameters

在配置 rhsm 可组合服务时,使用以下子参数作为 RhsmVars 参数的一部分。有关可用的 Ansible 参数的更多信息,请参阅 角色文档

rhsm描述

rhsm_method

选择注册方法。门户satellite禁用

rhsm_org_id

要用于注册的组织。要找到此 ID,请从 undercloud 节点运行 sudo subscription-manager 组织。在提示符处输入您的红帽凭证,并使用生成的 Key 值。有关您的机构 ID 的更多信息,请参阅了解红帽订阅管理机构 ID

rhsm_pool_ids

要使用的订阅池 ID。如果您不想自动附加订阅,请使用此参数。要找到此 ID,请运行 sudo subscription-manager list --available --all --matches="Red Hat OpenStack" from the undercloud node,并使用生成的 Pool ID 值。

rhsm_activation_key

要用于注册的激活码。

rhsm_autosubscribe

使用此参数自动将兼容订阅附加到这个系统中。将值设为 true 以启用此功能。

rhsm_baseurl

获取内容的基本 URL。默认 URL 是 Red Hat Content Delivery Network。如果使用 Satellite 服务器,请将此值更改为 Satellite 服务器内容存储库的基本 URL。

rhsm_server_hostname

用于注册的订阅管理服务的主机名。默认为 Red Hat Subscription Management 主机名。如果使用 Satellite 服务器,请将此值改为您的 Satellite 服务器主机名。

rhsm_repos

要启用的存储库列表。

rhsm_username

注册的用户名。如果可能,使用激活码进行注册。

rhsm_password

注册密码。如果可能,使用激活码进行注册。

rhsm_release

用于固定存储库的 Red Hat Enterprise Linux 版本。对于 Red Hat OpenStack Platform,它被设置为 8.2

rhsm_rhsm_proxy_hostname

HTTP 代理的主机名。例如: proxy.example.com

rhsm_rhsm_proxy_port

HTTP 代理通信的端口。例如:8080

rhsm_rhsm_proxy_user

用于访问 HTTP 代理的用户名。

rhsm_rhsm_proxy_password

用于访问 HTTP 代理的密码。

重要

只有在 rhsm_method 设置为 portal 时,才能一起使用 rhsm_activation_keyrhsm_repos。如果 rhsm_method 设为 'satellite',则只能使用 rhsm_activation_keyrhsm_repos

10.3. 切换到 rhsm 可组合服务

前面的 rhel-registration 方法运行 bash 脚本来处理 overcloud 注册。此方法的脚本和环境文件位于位于 /usr/share/openstack-tripleo-heat-templates/extraconfig/pre_deploy/rhel-registration/ 的核心 heat 模板集合中。

完成以下步骤,从 rhel-registration 方法切换到 rhsm 可组合服务。

流程

  1. 从将来的部署操作中排除 rhel-registration 环境文件。在大多数情况下,排除以下文件:

    • rhel-registration/environment-rhel-registration.yaml
    • rhel-registration/rhel-registration-resource-registry.yaml
  2. 如果您使用自定义 roles_data 文件,请确保 roles_data 文件中的每个角色都包含 OS::TripleO::Services::Rhsm 可组合服务。例如:

    - name: Controller
      description: |
        Controller role that has all the controller services loaded and handles
        Database, Messaging and Network functions.
      CountDefault: 1
      ...
      ServicesDefault:
        ...
        - OS::TripleO::Services::Rhsm
        ...
  3. rhsm 可组合服务参数添加环境文件,以备将来部署操作。

此方法将 rhel-registration 参数替换为 rhsm 服务参数,并更改启用该服务的 heat 资源:

resource_registry:
  OS::TripleO::NodeExtraConfig: rhel-registration.yaml

至:

resource_registry:
  OS::TripleO::Services::Rhsm: /usr/share/openstack-tripleo-heat-templates/deployment/rhsm/rhsm-baremetal-ansible.yaml

您还可以在部署中包含 /usr/share/openstack-tripleo-heat-templates/environments/rhsm.yaml 环境文件以启用该服务。

10.4. rhel-registration 到 rhsm 映射

要帮助将您的详情从 rhel-registration 方法转换为 rhsm 方法,请使用下表来映射您的参数和值。

rhel-registrationrhsm / RhsmVars

rhel_reg_method

rhsm_method

rhel_reg_org

rhsm_org_id

rhel_reg_pool_id

rhsm_pool_ids

rhel_reg_activation_key

rhsm_activation_key

rhel_reg_auto_attach

rhsm_autosubscribe

rhel_reg_sat_url

rhsm_satellite_url

rhel_reg_repos

rhsm_repos

rhel_reg_user

rhsm_username

rhel_reg_password

rhsm_password

rhel_reg_release

rhsm_release

rhel_reg_http_proxy_host

rhsm_rhsm_proxy_hostname

rhel_reg_http_proxy_port

rhsm_rhsm_proxy_port

rhel_reg_http_proxy_username

rhsm_rhsm_proxy_user

rhel_reg_http_proxy_password

rhsm_rhsm_proxy_password

10.5. 使用 rhsm 可组合服务注册 overcloud

创建一个启用和配置 rhsm 可组合服务的环境文件。director 使用这个环境文件来注册和订阅您的节点。

流程

  1. 创建名为 templates/rhsm.yml 的环境文件,以存储配置。
  2. 在环境文件中包含您的配置。例如:

    resource_registry:
      OS::TripleO::Services::Rhsm: /usr/share/openstack-tripleo-heat-templates/deployment/rhsm/rhsm-baremetal-ansible.yaml
    parameter_defaults:
      RhsmVars:
        rhsm_repos:
          - rhel-8-for-x86_64-baseos-tus-rpms
          - rhel-8-for-x86_64-appstream-tus-rpms
          - rhel-8-for-x86_64-highavailability-tus-rpms
          …​
        rhsm_username: "myusername"
        rhsm_password: "p@55w0rd!"
        rhsm_org_id: "1234567"
        rhsm_pool_ids: "1a85f9223e3d5e43013e3d6e8ff506fd"
        rhsm_method: "portal"
        rhsm_release: 8.2
    • resource_registry 部分将 rhsm 可组合服务与 OS::TripleO::Services::Rhsm 资源相关联,该资源可在每个角色上可用。
    • RhsmVars 变量向 Ansible 传递参数来配置红帽注册。
  3. 保存环境文件。

10.6. 将 rhsm 可组合服务应用到不同的角色

您可以基于每个角色应用 rhsm 可组合服务。例如,您可以将不同的配置应用到 Controller 节点、Compute 节点和 Ceph Storage 节点。

流程

  1. 创建名为 templates/rhsm.yml 的环境文件,以存储配置。
  2. 在环境文件中包含您的配置。例如:

    resource_registry:
      OS::TripleO::Services::Rhsm: /usr/share/openstack-tripleo-heat-templates/deployment/rhsm/rhsm-baremetal-ansible.yaml
    parameter_defaults:
      ControllerParameters:
        RhsmVars:
          rhsm_repos:
            - rhel-8-for-x86_64-baseos-tus-rpms
            - rhel-8-for-x86_64-appstream-tus-rpms
            - rhel-8-for-x86_64-highavailability-tus-rpms
            - ansible-2.9-for-rhel-8-x86_64-rpms
            - advanced-virt-for-rhel-8-x86_64-eus-rpms
            - openstack-16.1-for-rhel-8-x86_64-rpms
            - fast-datapath-for-rhel-8-x86_64-rpms
          rhsm_username: "myusername"
          rhsm_password: "p@55w0rd!"
          rhsm_org_id: "1234567"
          rhsm_pool_ids: "55d251f1490556f3e75aa37e89e10ce5"
          rhsm_method: "portal"
          rhsm_release: 8.2
      ComputeParameters:
        RhsmVars:
          rhsm_repos:
            - rhel-8-for-x86_64-baseos-tus-rpms
            - rhel-8-for-x86_64-appstream-tus-rpms
            - rhel-8-for-x86_64-highavailability-tus-rpms
            - ansible-2.9-for-rhel-8-x86_64-rpms
            - advanced-virt-for-rhel-8-x86_64-eus-rpms
            - openstack-16.1-for-rhel-8-x86_64-rpms
            - fast-datapath-for-rhel-8-x86_64-rpms
          rhsm_username: "myusername"
          rhsm_password: "p@55w0rd!"
          rhsm_org_id: "1234567"
          rhsm_pool_ids: "55d251f1490556f3e75aa37e89e10ce5"
          rhsm_method: "portal"
          rhsm_release: 8.2
      CephStorageParameters:
        RhsmVars:
          rhsm_repos:
            - rhel-8-for-x86_64-baseos-tus-rpms
            - rhel-8-for-x86_64-appstream-tus-rpms
            - rhel-8-for-x86_64-highavailability-tus-rpms
            - ansible-2.9-for-rhel-8-x86_64-rpms
            - openstack-16.1-deployment-tools-for-rhel-8-x86_64-rpms
          rhsm_username: "myusername"
          rhsm_password: "p@55w0rd!"
          rhsm_org_id: "1234567"
          rhsm_pool_ids: "68790a7aa2dc9dc50a9bc39fabc55e0d"
          rhsm_method: "portal"
          rhsm_release: 8.2

    resource_registryrhsm 可组合服务与 OS::TripleO::Services::Rhsm 资源相关联,该资源可在每个角色上可用。

    ControllerParametersComputeParametersCephStorageParameters 参数各自使用单独的 RhsmVars 参数,将订阅详情传递给对应的角色。

    注意

    CephStorageParameters 参数中设置 RhsmVars 参数,以使用特定于 Ceph Storage 的 Red Hat Ceph Storage 订阅和存储库。确保 rhsm_repos 参数包含标准 Red Hat Enterprise Linux 软件仓库,而不是 Controller 和 Compute 节点所需的延长更新支持(EUS)存储库。

  3. 保存环境文件。

第 11 章 将 overcloud 注册更新至 Red Hat Satellite Server

Red Hat OpenStack Platform 16.1 使用基于 Ansible 的方法将 overcloud 节点注册到 Red Hat Satellite Server 6。

11.1. Red Hat Subscription Manager (RHSM)可组合服务

您可以使用 rhsm 可组合服务通过 Ansible 注册 overcloud 节点。默认 roles_data 文件中的每个角色都包含一个 OS::TripleO::Services::Rhsm 资源,默认情况下是禁用的。要启用该服务,将资源注册到 rhsm 可组合服务文件中:

resource_registry:
  OS::TripleO::Services::Rhsm: /usr/share/openstack-tripleo-heat-templates/deployment/rhsm/rhsm-baremetal-ansible.yaml

rhsm able 服务接受 RhsmVars 参数,您可以使用它来定义与注册相关的多个子参数:

parameter_defaults:
  RhsmVars:
    rhsm_repos:
      - rhel-8-for-x86_64-baseos-tus-rpms
      - rhel-8-for-x86_64-appstream-tus-rpms
      - rhel-8-for-x86_64-highavailability-tus-rpms
      …​
    rhsm_username: "myusername"
    rhsm_password: "p@55w0rd!"
    rhsm_org_id: "1234567"
    rhsm_release: 8.2

您还可以将 RhsmVars 参数与特定于角色的参数结合使用,如 ControllerParameters,在为不同的节点类型启用特定的存储库时提供灵活性。

11.2. RhsmVars sub-parameters

在配置 rhsm 可组合服务时,使用以下子参数作为 RhsmVars 参数的一部分。有关可用的 Ansible 参数的更多信息,请参阅 角色文档

rhsm描述

rhsm_method

选择注册方法。门户satellite禁用

rhsm_org_id

要用于注册的组织。要找到此 ID,请从 undercloud 节点运行 sudo subscription-manager 组织。在提示符处输入您的红帽凭证,并使用生成的 Key 值。有关您的机构 ID 的更多信息,请参阅了解红帽订阅管理机构 ID

rhsm_pool_ids

要使用的订阅池 ID。如果您不想自动附加订阅,请使用此参数。要找到此 ID,请运行 sudo subscription-manager list --available --all --matches="Red Hat OpenStack" from the undercloud node,并使用生成的 Pool ID 值。

rhsm_activation_key

要用于注册的激活码。

rhsm_autosubscribe

使用此参数自动将兼容订阅附加到这个系统中。将值设为 true 以启用此功能。

rhsm_baseurl

获取内容的基本 URL。默认 URL 是 Red Hat Content Delivery Network。如果使用 Satellite 服务器,请将此值更改为 Satellite 服务器内容存储库的基本 URL。

rhsm_server_hostname

用于注册的订阅管理服务的主机名。默认为 Red Hat Subscription Management 主机名。如果使用 Satellite 服务器,请将此值改为您的 Satellite 服务器主机名。

rhsm_repos

要启用的存储库列表。

rhsm_username

注册的用户名。如果可能,使用激活码进行注册。

rhsm_password

注册密码。如果可能,使用激活码进行注册。

rhsm_release

用于固定存储库的 Red Hat Enterprise Linux 版本。对于 Red Hat OpenStack Platform,它被设置为 8.2

rhsm_rhsm_proxy_hostname

HTTP 代理的主机名。例如: proxy.example.com

rhsm_rhsm_proxy_port

HTTP 代理通信的端口。例如:8080

rhsm_rhsm_proxy_user

用于访问 HTTP 代理的用户名。

rhsm_rhsm_proxy_password

用于访问 HTTP 代理的密码。

重要

只有在 rhsm_method 设置为 portal 时,才能一起使用 rhsm_activation_keyrhsm_repos。如果 rhsm_method 设为 'satellite',则只能使用 rhsm_activation_keyrhsm_repos

11.3. 切换到 rhsm 可组合服务

前面的 rhel-registration 方法运行 bash 脚本来处理 overcloud 注册。此方法的脚本和环境文件位于位于 /usr/share/openstack-tripleo-heat-templates/extraconfig/pre_deploy/rhel-registration/ 的核心 heat 模板集合中。

完成以下步骤,从 rhel-registration 方法切换到 rhsm 可组合服务。

流程

  1. 从将来的部署操作中排除 rhel-registration 环境文件。在大多数情况下,排除以下文件:

    • rhel-registration/environment-rhel-registration.yaml
    • rhel-registration/rhel-registration-resource-registry.yaml
  2. 如果您使用自定义 roles_data 文件,请确保 roles_data 文件中的每个角色都包含 OS::TripleO::Services::Rhsm 可组合服务。例如:

    - name: Controller
      description: |
        Controller role that has all the controller services loaded and handles
        Database, Messaging and Network functions.
      CountDefault: 1
      ...
      ServicesDefault:
        ...
        - OS::TripleO::Services::Rhsm
        ...
  3. rhsm 可组合服务参数添加环境文件,以备将来部署操作。

此方法将 rhel-registration 参数替换为 rhsm 服务参数,并更改启用该服务的 heat 资源:

resource_registry:
  OS::TripleO::NodeExtraConfig: rhel-registration.yaml

至:

resource_registry:
  OS::TripleO::Services::Rhsm: /usr/share/openstack-tripleo-heat-templates/deployment/rhsm/rhsm-baremetal-ansible.yaml

您还可以在部署中包含 /usr/share/openstack-tripleo-heat-templates/environments/rhsm.yaml 环境文件以启用该服务。

11.4. rhel-registration 到 rhsm 映射

要帮助将您的详情从 rhel-registration 方法转换为 rhsm 方法,请使用下表来映射您的参数和值。

rhel-registrationrhsm / RhsmVars

rhel_reg_method

rhsm_method

rhel_reg_org

rhsm_org_id

rhel_reg_pool_id

rhsm_pool_ids

rhel_reg_activation_key

rhsm_activation_key

rhel_reg_auto_attach

rhsm_autosubscribe

rhel_reg_sat_url

rhsm_satellite_url

rhel_reg_repos

rhsm_repos

rhel_reg_user

rhsm_username

rhel_reg_password

rhsm_password

rhel_reg_release

rhsm_release

rhel_reg_http_proxy_host

rhsm_rhsm_proxy_hostname

rhel_reg_http_proxy_port

rhsm_rhsm_proxy_port

rhel_reg_http_proxy_username

rhsm_rhsm_proxy_user

rhel_reg_http_proxy_password

rhsm_rhsm_proxy_password

11.5. 将 overcloud 注册到 Red Hat Satellite 服务器

创建一个环境文件,启用并配置 rhsm 可组合服务,以将节点注册到 Red Hat Satellite,而不是红帽客户门户。

流程

  1. 创建名为 templates/rhsm.yml 的环境文件,以存储配置。
  2. 在环境文件中包含您的配置。例如:

    resource_registry:
      OS::TripleO::Services::Rhsm: /usr/share/openstack-tripleo-heat-templates/deployment/rhsm/rhsm-baremetal-ansible.yaml
    parameter_defaults:
      RhsmVars:
        rhsm_activation_key: "myactivationkey"
        rhsm_method: "satellite"
        rhsm_org_id: "ACME"
        rhsm_server_hostname: "satellite.example.com"
        rhsm_baseurl: "https://satellite.example.com/pulp/repos"
        rhsm_release: 8.2

    resource_registryrhsm 可组合服务与 OS::TripleO::Services::Rhsm 资源相关联,该资源可在每个角色上可用。

    RhsmVars 变量向 Ansible 传递参数来配置红帽注册。

  3. 保存环境文件。

11.6. 准备 Leapp 以使用 Satellite 服务器

如果您使用 Satellite Server 6 托管 RPM 内容,请完成这些准备步骤,以确保使用 Satellite 成功升级 Leapp。

前提条件

  • 创建一个 Satellite 服务器激活码,该激活码链接到 Red Hat OpenStack Platform 16.1 和 Red Hat Enterprise Linux 8.2 的软件仓库。
  • 为您的 overcloud 节点生成 Ansible 清单文件。
  • 在管理门户中,为 Red Hat OpenStack Platform 16.1 升级创建并提升内容视图,并包括升级所需的存储库。如需更多信息,请参阅 Red Hat Satellite Server 6 的注意事项
  • 如果您使用 Ceph 订阅并已将 director 配置为将 overcloud-minimal 镜像用于 Ceph 存储节点,则必须在 Satellite 服务器上创建一个内容视图,并将以下 Red Hat Enterprise Linux (RHEL) 8.2 存储库添加到其中:

    • Red Hat Enterprise Linux 8 for x86_64 - AppStream (RPMs)

      rhel-8-for-x86_64-appstream-rpms
      x86_64 8.2
    • Red Hat Enterprise Linux 8 for x86_64 - BaseOS (RPMs)

      rhel-8-for-x86_64-baseos-rpms
      x86_64 8.2

      如需更多信息,请参阅 Red Hat Satellite Content Management 指南中的 Importing Red Hat ContentManaging Content Views

流程

  1. stack 用户的身份登录 undercloud。
  2. 创建名为 playbook-satellite.yaml 的文件,并将以下内容粘贴到文件中:

    - name: Pre-install leapp
      hosts: overcloud
      become: yes
      tasks:
        - name: Pre-install leapp
          yum:
            name:
              - leapp
              - leapp-repository
            state: installed
        - name: Remove katello-host-tools-fact-plugin
          yum:
            name:
              - katello-host-tools-fact-plugin
            state: removed
        - name: Register system
          redhat_subscription:
            activationkey: "osp16-key"
            org_id: "ACME"
            server_hostname: "satellite.example.com"
            rhsm_baseurl: "https://satellite.example.com/pulp/repos"
            force_register: True

    修改 redhat_subscription 变量,以适合您的 Satellite 服务器。

  3. 运行 playbook:

    $ ansible-playbook -i ~/inventory.yaml playbook-satellite.yaml

第 12 章 准备 director 部署的 Ceph Storage 升级

如果您的部署使用 director 部署的 Red Hat Ceph Storage 集群,您必须完成本节中包含的流程。

重要

RHOSP 16.1 在 RHEL 8.2 上被支持。但是,映射到 Ceph Storage 角色的主机会更新到最新的主 RHEL 版本。如需更多信息,请参阅 Red Hat Ceph Storage: 支持的配置

注意

如果使用外部 Ceph 部署升级,您必须跳过本节中包含的流程,并继续 第 13 章 准备使用外部 Ceph 部署升级

升级过程在升级到 Red Hat OpenStack Platform 16.1 期间维护 Red Hat Ceph Storage 3 容器化服务。完成 Red Hat OpenStack Platform 16.1 升级后,您可以将 Ceph Storage 服务升级到 Red Hat Ceph Storage 4。

在完成 Red Hat OpenStack Platform 16.1 升级和 Ceph Storage 服务升级到 Red Hat Ceph Storage 4 前,您无法置备与共享文件系统服务(manila)的新共享。

12.1. 在高级别了解 Ceph Storage 节点升级过程

director 部署的 Ceph Storage 节点在 overcloud 升级过程中继续使用 Red Hat Ceph Storage 3 容器。要了解 Ceph Storage 节点和服务在升级过程中如何受到影响,请阅读 Ceph Storage 升级过程的各个方面的以下摘要。

ceph-ansible

ceph-ansible 是 director 用来安装、维护和升级 Ceph Storage 服务的角色和 playbook 集合。升级 undercloud 时,您将运行某些命令,以确保 ceph-ansible 在过渡到 Red Hat Enterprise Linux 8.2 后仍然保持在最新的版本 3 集合。ceph-ansible 版本 3 通过 overcloud 升级期间将容器化 Ceph Storage 服务保留在版本 3 上。完成升级后,您可以启用 Red Hat Ceph Storage 更新 Red Hat Ceph Storage Tools 4 for RHEL 8 软件仓库,并将 ceph-ansible 更新至版本 4。

迁移到 Podman

在 overcloud 升级过程中,您必须运行 openstack overcloud external-upgrade run --tags ceph_systemd 命令,以更改控制 Ceph Storage 容器化服务以使用 Podman 的 systemd 服务。您可以在包含 Ceph Storage 容器化服务的任何节点上执行操作系统升级前运行此命令。

在将 systemd 服务更改为在节点上使用 Podman 后,您可以执行操作系统升级和 OpenStack Platform 服务升级。该节点上的 Ceph Storage 容器将在 OpenStack Platform 服务升级后再次运行。

Ceph Storage 操作系统升级

您通常遵循 Ceph Storage 节点上与 overcloud 节点上相同的工作流。当您针对 Ceph Storage 节点运行 openstack overcloud upgrade run --tags system_upgrade 命令时,director 在 Ceph Storage 节点上运行 Leapp,并将操作系统升级到 Red Hat Enterprise Linux 8.2。然后,您将针对 Ceph Storage 节点运行未标记的 openstack overcloud upgrade 命令,它会运行以下容器:

  • Red Hat Ceph Storage 3 容器化服务
  • Red Hat OpenStack Platform 16.1 容器化服务

升级到 Red Hat Ceph Storage 4

完成 Leapp 升级和 Red Hat OpenStack Platform 升级后,Ceph Storage 容器化服务仍将使用版本 3 容器。此时,您必须将 ceph-ansible 升级到 4,然后运行 openstack overcloud external-upgrade run --tags ceph 命令,它将在所有节点上所有 Red Hat Ceph Storage 服务升级到版本 4。

Ceph Storage 工作流概述

以下列表是 Red Hat Ceph Storage 升级的高级工作流。此工作流集成到一般的 Red Hat OpenStack Platform 工作流中,您可以在 undercloud 上运行升级框架命令来在此工作流中执行操作。

  1. 升级 undercloud,但保留 ceph-ansible版本 3
  2. 启动 overcloud 升级
  3. 对托管 Ceph Storage 容器化服务的每个节点执行以下任务:

    1. 将 Ceph Storage 容器化服务迁移到 Podman
    2. 升级操作系统
    3. 升级 OpenStack Platform 服务,该服务重新启动 Ceph Storage 版本 3 容器化服务
  4. 完成 overcloud 升级
  5. ceph-ansible 升级到 undercloud 上的版本 4
  6. 升级到 overcloud 上的 Red Hat Ceph Storage 4
注意

此列表不会捕获完整的 Red Hat OpenStack Platform 16.1 升级过程中的所有步骤,而是只关注与 Red Hat Ceph Storage 相关的方面,以描述升级过程中 Ceph Storage 服务发生的情况。

12.2. 检查 ceph-ansible 版本

在 undercloud 升级过程中,保留 ceph-ansible 软件包的 Ceph Storage 3 版本。这有助于保持 Ceph Storage 节点上的 Ceph Storage 3 容器的兼容性。验证此软件包仍然在您的 undercloud 上。

流程

  1. stack 用户的身份登录 undercloud。
  2. 运行 dnf 命令检查 ceph-ansible 软件包的版本:

    $ sudo dnf info ceph-ansible

    命令输出显示 ceph-ansible 软件包的版本 3:

    Installed Packages
    Name         : ceph-ansible
    Version      : 3.xx.xx.xx
    ...
重要

如果 ceph-ansible 软件包缺少或不是版本 3 软件包,请从 红帽软件包浏览器 下载最新版本的 3 软件包,并在 undercloud 上手动安装软件包。请注意,ceph-ansible 版本 3 软件包仅适用于 Red Hat Enterprise Linux 7 软件仓库,它不适用于 Red Hat Enterprise Linux 8 软件仓库。在 Red Hat OpenStack Platform 框架进行升级之外,Red Hat Enterprise Linux 8 不支持 Ceph -ansible 版本 3。

12.3. 设置 ceph-ansible 存储库

在 director 将 overcloud 升级到 Red Hat Ceph Storage 4 之前,Red Hat OpenStack Platform 16.1 验证框架会测试 ceph-ansible 是否已正确安装。框架使用 CephAnsibleRepo 参数来检查您是否从正确的存储库安装了 ceph-ansible。director 在运行 openstack overcloud upgrade prepare 命令后禁用测试,并在 Red Hat OpenStack Platform 16.1 overcloud 升级期间禁用此测试。在运行 openstack overcloud upgrade converge 命令后,director 会重新启用此测试。但是,要准备此验证,您必须将 CephAnsibleRepo 参数设置为 Red Hat Ceph Storage Tools 4 for RHEL 8 软件仓库。

流程

  1. stack 用户的身份登录 undercloud。
  2. 编辑包含 overcloud Ceph Storage 配置的环境文件。此文件通常命名为 ceph-config.yaml,您可以在 templates 目录中找到它:

    $ vi /home/stack/templates/ceph-config.yaml
  3. CephAnsibleRepo 参数添加到 parameter_defaults 部分:

    parameter_defaults:
      ...
      CephAnsibleRepo: rhceph-4-tools-for-rhel-8-x86_64-rpms
      ...

    CephAnsibleRepo 设置包含 ceph-ansible 的存储库。验证框架使用此参数来检查是否在 undercloud 上安装了 ceph-ansible

  4. 保存 ceph-config.yaml 文件。

12.4. 在升级前检查 Ceph 集群状态

在进行 overcloud 升级前,您必须验证 Ceph 集群是否按预期工作。

流程

  1. 登录正在运行 ceph-mon 服务的节点。此节点通常是 Controller 节点或独立 Ceph 监控节点。
  2. 输入以下命令查看 Ceph 集群的状态:

    $ docker exec ceph-mon-$HOSTNAME ceph -s
  3. 确认集群的运行状况是 HEALTH_OK,并且所有 OSD 都为 up

第 13 章 准备使用外部 Ceph 部署升级

如果使用外部 Ceph 部署升级,您必须完成本节中包含的流程。

注意

如果您的部署没有使用外部 Ceph Storage 集群,您必须跳过本节中包含的流程,并继续下一部分。

13.1. 安装 ceph-ansible

如果要使用外部 Ceph 部署升级,则必须完成此步骤。

当在 Red Hat OpenStack Platform 中使用 Ceph Storage 时,需要 ceph-ansible 软件包。

流程

  1. 启用 Ceph 工具存储库:

    [stack@director ~]$ sudo subscription-manager repos --enable=rhceph-4-tools-for-rhel-8-x86_64-rpms
  2. 安装 ceph-ansible 软件包:

    [stack@director ~]$ sudo dnf install -y ceph-ansible

13.2. 设置 ceph-ansible 存储库

在 director 将 overcloud 升级到 Red Hat Ceph Storage 4 之前,Red Hat OpenStack Platform 16.1 验证框架会测试 ceph-ansible 是否已正确安装。框架使用 CephAnsibleRepo 参数来检查您是否从正确的存储库安装了 ceph-ansible。director 在运行 openstack overcloud upgrade prepare 命令后禁用测试,并在 Red Hat OpenStack Platform 16.1 overcloud 升级期间禁用此测试。在运行 openstack overcloud upgrade converge 命令后,director 会重新启用此测试。但是,要准备此验证,您必须将 CephAnsibleRepo 参数设置为 Red Hat Ceph Storage Tools 4 for RHEL 8 软件仓库。

流程

  1. stack 用户的身份登录 undercloud。
  2. 编辑包含 overcloud Ceph Storage 配置的环境文件。此文件通常命名为 ceph-config.yaml,您可以在 templates 目录中找到它:

    $ vi /home/stack/templates/ceph-config.yaml
  3. CephAnsibleRepo 参数添加到 parameter_defaults 部分:

    parameter_defaults:
      ...
      CephAnsibleRepo: rhceph-4-tools-for-rhel-8-x86_64-rpms
      ...

    CephAnsibleRepo 设置包含 ceph-ansible 的存储库。验证框架使用此参数来检查是否在 undercloud 上安装了 ceph-ansible

  4. 保存 ceph-config.yaml 文件。

第 14 章 更新网络配置

您必须完成一些网络配置,以便为 overcloud 升级准备。

14.1. 更新网络接口模板

Red Hat OpenStack Platform 包含一个脚本,可自动将缺少的参数添加到 NIC 模板文件中。

流程

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

    $ source ~/stackrc
  3. 在 undercloud 上,创建一个名为 update-nic-templates.sh 的文件,并在文件中包含以下内容:

    #!/bin/bash
    STACK_NAME="overcloud"
    ROLES_DATA="/usr/share/openstack-tripleo-heat-templates/roles_data.yaml"
    NETWORK_DATA="/usr/share/openstack-tripleo-heat-templates/network_data.yaml"
    NIC_CONFIG_LINES=$(openstack stack environment show $STACK_NAME | grep "::Net::SoftwareConfig" | sed -E 's/ *OS::TripleO::// ; s/::Net::SoftwareConfig:// ; s/ http.*user-files/ /')
    echo "$NIC_CONFIG_LINES" | while read LINE; do
        ROLE=$(echo "$LINE" | awk '{print $1;}')
        NIC_CONFIG=$(echo "$LINE" | awk '{print $2;}')
    
        if [ -f "$NIC_CONFIG" ]; then
            echo "Updating template for $ROLE role."
            python3 /usr/share/openstack-tripleo-heat-templates/tools/merge-new-params-nic-config-script.py \
                --tht-dir /usr/share/openstack-tripleo-heat-templates \
                --roles-data $ROLES_DATA \
                --network-data $NETWORK_DATA \
                --role-name "$ROLE" \
                --discard-comments yes \
                --template "$NIC_CONFIG"
        else
            echo "No NIC template detected for $ROLE role. Skipping $ROLE role."
        fi
    done
    • 如果使用自定义 overcloud 名称,请将 STACK_NAME 变量设置为 overcloud 的名称。overcloud 堆栈的默认名称为 overcloud
    • 如果您使用自定义 roles_data 文件,请将 ROLES_DATA 变量设置为自定义文件的位置。如果您使用默认的 roles_data 文件,请将变量保留为 /usr/share/openstack-tripleo-heat-templates/roles_data.yaml
    • 如果您使用自定义 network_data 文件,请将 NETWORK_DATA 变量设置为自定义文件的位置。如果您使用默认的 network_data 文件,请将变量保留为 /usr/share/openstack-tripleo-heat-templates/network_data.yaml
    • 运行 /usr/share/openstack-tripleo-heat-templates/tools/merge-new-params-nic-config-script.py -h 以查看添加到脚本的选项列表。
  4. 在脚本中添加可执行权限:

    $ chmod +x update-nic-templates.sh
  5. 可选:如果您为 RHOSP 环境使用 spine-leaf 网络拓扑,请检查 roles_data.yaml 文件,并确保它为您的部署的 NIC 模板使用正确的角色名称。该脚本使用 roles_data.yaml 文件中的 deprecated_nic_config_name 参数的值。
  6. 运行脚本:

    $ ./update-nic-templates.sh

    该脚本保存每个自定义 NIC 模板的副本,并使用缺少的参数更新每个模板。该脚本还会跳过任何没有自定义模板的角色:

    No NIC template detected for BlockStorage role. Skipping BlockStorage role.
    Updating template for CephStorage role.
    The original template was saved as: /home/stack/templates/custom-nics/ceph-storage.yaml.20200903144835
    The update template was saved as: /home/stack/templates/custom-nics/ceph-storage.yaml
    Updating template for Compute role.
    The original template was saved as: /home/stack/templates/custom-nics/compute.yaml.20200903144838
    The update template was saved as: /home/stack/templates/custom-nics/compute.yaml
    Updating template for Controller role.
    The original template was saved as: /home/stack/templates/custom-nics/controller.yaml.20200903144841
    The update template was saved as: /home/stack/templates/custom-nics/controller.yaml
    No NIC template detected for ObjectStorage role. Skipping ObjectStorage role.

14.2. 在升级过程中维护 Open vSwitch 兼容性

Red Hat OpenStack Platform 13 使用 Open vSwitch (OVS)作为 OpenStack Networking (neutron)的默认 ML2 后端。较新版本的 Red Hat OpenStack Platform 使用 Open Virtual Network (OVN),它扩展了 OVS 功能。但是,为了确保稳定升级,必须在升级期间维护 OVS 功能,然后在完成升级后迁移到 OVN。

要在升级过程中维护 OVS 兼容性,请包含以下环境文件作为环境文件集合的一部分:

  • /usr/share/openstack-tripleo-heat-templates/environments/services/neutron-ovs.yaml

    注意
    当您包含 neutron-ovs.yaml 环境文件时,请检查环境文件集合中是否包含 neutron-ovs-dvr.yaml 环境文件。您必须在 neutron-ovs-dvr.yaml 文件前包含 neutron-ovs.yaml 环境文件,以避免升级过程中失败。

将此文件视为部署的一部分,直到您完成了迁移到 OVN。包含所有 overcloud 升级和部署命令的文件:

  • OpenStack overcloud 升级准备
  • OpenStack overcloud 升级聚合
  • OpenStack overcloud 部署
  • OpenStack overcloud 更新准备
  • OpenStack overcloud 更新聚合
  • 使用环境文件的任何其他命令。

OVS 兼容性故障排除

如果升级过程失败,因为 neutron-ovs.yaml 文件中定义的参数会覆盖 neutron-ovs-dvr.yaml 中定义的参数,请更改包含这些文件的顺序,并在受影响的节点上再次运行 openstack overcloud upgrade prepareopenstack overcloud upgrade run。如果其中一个受影响的节点是 Compute 节点,请从该节点中删除 openstack-neutron* 软件包。

14.3. 在升级过程中维护可组合网络兼容性

Red Hat OpenStack Platform 16.1 的 network_data 文件格式包括可用于定义网络中的其他子网和路由的新部分。但是,如果您使用自定义 network_data 文件,您仍然可以使用 Red Hat OpenStack Platform 13 中的 network_data 文件格式。

  • 当您从 Red Hat OpenStack Platform 13 升级到 16.1 时,在升级过程中和之后使用 Red Hat OpenStack Platform 13 network_data 文件格式。有关 Red Hat OpenStack Platform 13 可组合网络语法的更多信息,请参阅 自定义可组合网络
  • 当您在 Red Hat OpenStack Platform 16.1 上创建新的 overcloud 时,请使用 Red Hat OpenStack Platform 16.1 network_data 文件格式。有关 Red Hat OpenStack Platform 16.1 可组合网络语法的更多信息,请参阅 自定义可组合网络

第 15 章 准备网络功能虚拟化(NFV)

如果使用网络功能虚拟化(NFV),您必须完成一些准备 overcloud 升级。

15.1. 网络功能虚拟化(NFV)环境文件

在典型的 NFV 环境中,您可以启用服务,如下所示:

  • 单根输入/输出虚拟化(SR-IOV)
  • 数据平面开发套件(DPDK)

您不需要对这些服务进行任何特定的重新配置,以适应升级到 Red Hat OpenStack Platform 16.1。但是,请确保启用 NFV 功能的环境文件满足以下要求:

  • 启用 NFV 功能的默认环境文件位于 Red Hat OpenStack Platform 16.1 openstack-tripleo-heat-templatesenvironments/services 目录中。如果您在 Red Hat OpenStack Platform 13 部署中包含 openstack-tripleo-heat-templates 中的默认 NFV 环境文件,请验证 Red Hat OpenStack Platform 16.1 中相应功能的正确环境文件位置:

    • Open vSwitch (OVS)网络和 SR-IOV: /usr/share/openstack-tripleo-heat-templates/environments/services/neutron-sriov.yaml
    • Open vSwitch (OVS)网络和 DPDK: /usr/share/openstack-tripleo-heat-templates/environments/services/neutron-ovs-dpdk.yaml
  • 要在从 Red Hat OpenStack Platform 13 升级到 Red Hat OpenStack Platform 16.1 期间维护 OVS 兼容性,您必须包含 /usr/share/openstack-tripleo-heat-templates/environments/services/neutron-ovs.yaml 环境文件。在运行涉及环境文件的部署和升级命令时,您必须在 neutron-ovs.yaml 文件后包含任何与 NFV 相关的环境文件。例如,在运行 openstack overcloud upgrade 准备使用 OVS 和 NFV 环境文件时,按以下顺序包含文件:
  • OVS 环境文件
  • SR-IOV 环境文件
  • DPDK 环境文件

    $ openstack overcloud upgrade prepare \
        ...
        -e /usr/share/openstack-tripleo-heat-templates/environments/services/neutron-ovs.yaml \
        -e /usr/share/openstack-tripleo-heat-templates/environments/services/neutron-sriov.yaml \
        -e /usr/share/openstack-tripleo-heat-templates/environments/services/neutron-ovs-dpdk.yaml \
        ...
注意

在升级过程中,只有在 RHOSP 13 和 RHOSP 16.1.x Compute 节点处于 混合 状态时,才能在 RHOSP 13 和 RHOSP 16.1.x Compute 节点间迁移实例。如需更多信息,请参阅为实例创建指南中的迁移限制

NFV 工作负载还有额外的迁移约束: 在升级过程中,您无法从 OVS-DPDK Compute 节点实时迁移实例。或者,您可以在升级过程中从 OVS-DPDK Compute 节点冷迁移实例。

第 16 章 升级前进行最后的检查

在开始升级前,请对所有准备步骤进行最终检查。

16.1. 部署中包含的自定义文件

如果部署中的任何 overcloud 节点都是专用的 Object Storage (swift)节点,您必须复制默认的 roles_data.yaml 文件,并编辑 ObjectStorage 以删除 deprecated_server_resource_name: 'SwiftStorage'。然后,使用 --roles-file 选项将文件传递给 openstack overcloud upgrade prepareopenstack overcloud upgrade converge 命令。

16.2. 要包括在部署中的新环境文件

除了常规的 overcloud 环境文件外,还必须包含新的环境文件,以便于升级到 Red Hat OpenStack Platform (RHOSP) 16.1。

File备注

/home/stack/templates/upgrades-environment.yaml

此文件包含特定于升级的参数。此文件只在升级的持续时间内是必需的。运行 openstack overcloud upgrade converge 后丢弃此文件。

/home/stack/templates/rhsm.yaml

此文件包含 overcloud 的注册和订阅信息。此文件将您的系统注册到红帽客户门户或 Red Hat Satellite Server。

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

包含源和准备步骤的文件。这是与 undercloud 升级一起使用的相同文件。

/usr/share/openstack-tripleo-heat-templates/environments/services/neutron-ovs.yaml

OpenStack Platform 16.1 使用 Open Virtual Network (OVN)作为默认网络后端。但是,OpenStack Platform 13 使用 Open vSwitch (OVS)。包括此文件,以便在升级过程中保留 OVS 兼容性。OpenStack Platform 16.1 文档包括在升级后从 OVS 迁移到 OVN 的说明。

运行以下命令,将这些文件添加到环境文件列表的末尾:

  • OpenStack overcloud 升级准备
  • OpenStack overcloud 升级聚合
  • OpenStack overcloud 部署

16.3. 从部署中删除的环境文件

删除特定于 OpenStack Platform Red Hat OpenStack Platform 13 的任何环境文件:

  • Red Hat OpenStack Platform 13 容器镜像列表
  • Red Hat OpenStack Platform 13 客户门户网站或 Satellite rhel-registration 脚本

运行以下命令,从包含的环境文件列表中删除这些文件:

  • OpenStack overcloud 升级准备
  • OpenStack overcloud 升级聚合
  • OpenStack overcloud 部署

16.4. 升级清单

使用以下清单来确定升级 overcloud 的就绪情况:

complete

验证正常工作的 overcloud。

Y / N

对 overcloud control plane 执行 Relax-and-Recover (ReaR)备份。如需更多信息,请参阅 Red Hat OpenStack Platform 13 Undercloud 和 Control Plane 备份和恢复

Y / N

创建在 undercloud 节点上运行的数据库的备份。如需更多信息,请参阅 Red Hat OpenStack Platform 16.1 备份和恢复 undercloud 和 control plane 节点指南中的创建 undercloud 节点数据库备份

Y / N

为 Leapp 实现所有准备,包括:

  • Leapp 环境文件
  • Leapp 复制到 overcloud 节点的数据
  • 现在,所有 overcloud 节点都使用可预测的 NIC 名称。
  • 所有 overcloud 节点都设置了 PermitRootLogin 设置

Y / N

更新了 Red Hat OpenStack Platform 16.1 存储库的注册详情,并合并您的环境文件,以使用基于 Ansible 的方法。

Y / N

更新了网络配置模板。

Y / N

使用 Red Hat OpenStack Platform 16.1 的新环境文件更新了环境文件列表。

Y / N

可选:如果您的部署包含专用 Object Storage (swift)节点:Copied the roles_data.yaml 文件,删除了 deprecated_server_resource_name: 'SwiftStorage',并将该文件传递给 openstack overcloud upgrade prepareopenstack overcloud upgrade converge 命令。

Y / N

删除了仅与 Red Hat OpenStack Platform 13 相关的旧环境文件,如旧的红帽注册和容器镜像位置文件。

Y / N

第 17 章 upgrade 命令概述

升级过程涉及您在一定阶段运行的不同命令。

重要

本节仅包含每个命令的信息。您必须以特定顺序运行这些命令,并提供特定于 overcloud 的选项。等待您收到说明,以便在适当的步骤中运行这些命令。

17.1. OpenStack overcloud 升级准备

此命令执行 overcloud 升级的初始准备步骤,其中包括将 undercloud 上的当前 overcloud 计划替换为新的 OpenStack Platform 16.1 overcloud 计划和更新的环境文件。此命令的功能与 openstack overcloud deploy 命令类似,并使用许多相同的选项。

17.2. OpenStack overcloud 升级运行

此命令执行升级过程。director 根据新的 OpenStack Platform 16.1 overcloud 计划创建一组 Ansible playbook,并在整个 overcloud 上运行快速转发任务。这包括通过每个 OpenStack Platform 版本从 13 升级到 16.1。

除了标准升级过程外,这个命令还可以对 overcloud 节点上的操作系统执行 Leapp 升级。使用 --tags 选项运行这些任务。

为 Leapp 升级任务标签

system_upgrade
合并了 system_upgrade_preparesystem_upgrade_runsystem_upgrade_reboot 的任务。
system_upgrade_prepare
使用 Leapp 准备操作系统升级的任务。
system_upgrade_run
运行 Leapp 和升级操作系统的任务。
system_upgrade_reboot
重启系统并完成操作系统升级的任务。

为工作负载迁移升级任务标签

nova_hybrid_state
在 Compute 节点上设置临时 OpenStack Platform 16.1 容器的任务,以便在升级过程中进行工作负载迁移。

17.3. OpenStack overcloud external-upgrade run

此命令在标准升级过程外执行升级任务。director 根据新的 OpenStack Platform 16.1 overcloud 计划创建一组 Ansible playbook,并使用 --tags 选项运行特定的任务。

用于容器管理的外部任务标签

container_image_prepare
将容器镜像拉取到 undercloud registry 的任务,并为 overcloud 使用准备镜像。

用于 Ceph Storage 升级的外部任务标签

  • 如果您的部署使用了使用 director 部署的 Red Hat Ceph Storage 集群,您可以使用以下标签:

    ceph
    使用 ceph-ansible playbook 安装 Red Hat Ceph Storage 的任务。
    ceph_systemd
    将 Red Hat Ceph Storage systemd 单元文件转换为使用 podman 管理的任务。
  • 如果使用外部 Ceph 部署升级,您可以跳过使用 cephceph_systemd 标签的任务。

数据库传输的外部任务标签

system_upgrade_cleanup
任务清理与 system_upgrade_transfer_data 任务相关的存储目录。
system_upgrade_stop_services
关闭所有服务的任务。
system_upgrade_transfer_data
关闭所有服务并执行数据库传输到 bootstrap 节点的任务。

17.4. OpenStack overcloud 升级聚合

此命令执行 overcloud 升级过程中的最后一步。此最后一步将 overcloud heat 堆栈与 OpenStack Platform 16.1 overcloud 计划和您更新的环境文件同步。此过程可确保生成的 overcloud 与新 OpenStack Platform 16.1 overcloud 的配置匹配。此命令与 openstack overcloud deploy 命令类似,并使用许多相同的选项。

17.5. Overcloud 节点升级工作流

在每个 overcloud 节点上执行升级时,您必须考虑以下方面,以确定升级中相关阶段运行的正确命令:

控制器服务

  • 节点是否包含 Pacemaker 服务?您必须首先升级 bootstrap 节点,以启动数据库传输并启动临时容器,以便于从 Red Hat OpenStack 13 转换到 16.1 期间进行迁移。在 bootstrap Controller 节点升级过程中,会创建一个新的 Pacemaker 集群,并在节点上启动新的 Red Hat OpenStack 16.1 容器,而剩余的 Controller 节点仍然在 Red Hat OpenStack 13 上运行。升级 bootstrap 节点后,您必须使用 Pacemaker 服务升级每个额外节点,并确保每个节点都加入使用 bootstrap 节点启动的新 Pacemaker 集群。在没有 Pacemaker 的情况下升级 split-service Controller 节点的过程不需要这些额外的步骤。

Compute Services

  • Compute 节点是否是节点?如果节点包含计算服务,则必须从节点迁移虚拟机以确保最大可用性。在这种情况下,计算节点包括设计用于托管虚拟机的任何节点。此定义包括以下 Compute 节点类型:

    • 常规 Compute 节点
    • 带有 Hyper-Converged Infrastructure (HCI)的 Compute 节点
    • 具有网络功能虚拟化技术的计算节点,如数据平面开发套件(DPDK)或单根输入/输出虚拟化(SR-IOV)
    • Real Time Compute 节点

Ceph Storage Services

  • 节点是否包含任何 Ceph Storage 服务?您必须将节点上的任何容器化 Ceph Storage 服务的 systemd 单元文件转换为使用 podman 而不是 docker。这适用于以下节点类型:

    • Ceph Storage OSD 节点
    • 带有 Ceph MON 服务的控制器节点
    • split-Controller Ceph MON 节点
    • 带有 Hyper-Converged Infrastructure (HCI)的 Compute 节点

工作流

使用以下工作流图识别特定节点的正确更新路径:

Overcloud node upgrade workflow

第 18 章 升级标准 overcloud

此场景包含标准 overcloud 环境的升级过程示例,其中包括以下节点类型:

  • 三个 Controller 节点
  • 三个 Ceph Storage 节点
  • 多个 Compute 节点

18.1. 运行 overcloud 升级准备

升级需要运行 openstack overcloud upgrade prepare 命令,该命令执行以下任务:

  • 将 overcloud 计划更新至 OpenStack Platform 16.1
  • 为升级准备节点
注意

如果您不使用默认的堆栈名称(overcloud),使用 --stack STACK NAME选项设置堆栈名称,将 STACK NAME 替换为堆栈的名称。

流程

  1. Source stackrc 文件:

    $ source ~/stackrc
  2. 运行 upgrade preparation 命令:

    $ openstack overcloud upgrade prepare \
        --stack STACK NAME \
        --templates \
        -e ENVIRONMENT FILE
        …​
        -e /home/stack/templates/upgrades-environment.yaml \
        -e /home/stack/templates/rhsm.yaml \
        -e /home/stack/containers-prepare-parameter.yaml \
        -e /usr/share/openstack-tripleo-heat-templates/environments/services/neutron-ovs.yaml \
        …​

    包含与您的环境相关的以下选项:

    • 环境文件 (upgrades-environment.yaml) 带有特定于升级的参数 (-e)。
    • 环境文件(rhsm.yaml),以及注册和订阅参数(-e)。
    • 包含新容器镜像位置(-e)的环境文件(containers-prepare-parameter.yaml)。在大多数情况下,这是 undercloud 使用的环境文件。
    • 环境文件(neutron-ovs.yaml),以保持 OVS 兼容性。
    • 与您的部署相关的任何自定义配置文件(-e)。
    • 如果适用,使用 --roles-file 的自定义角色(roles_data)文件。
    • 如果适用,使用 --networks-file 的可组合网络(network_data)文件。
    • 如果使用自定义堆栈名称,请使用 --stack 选项传递名称。
  3. 等待升级准备完成。
  4. 下载容器镜像:

    $ openstack overcloud external-upgrade run --stack STACK NAME --tags container_image_prepare

18.2. 使用 director 部署的 Ceph Storage 升级 Controller 节点

如果您的部署使用了使用 director 部署的 Red Hat Ceph Storage 集群,则必须完成此流程。

要将所有 Controller 节点升级到 OpenStack Platform 16.1,您必须从 bootstrap Controller 节点开始升级每个 Controller 节点。

在 bootstrap Controller 节点升级过程中,会创建一个新的 Pacemaker 集群,并在节点上启动新的 Red Hat OpenStack 16.1 容器,而剩余的 Controller 节点仍然在 Red Hat OpenStack 13 上运行。

升级 bootstrap 节点后,您必须使用 Pacemaker 服务升级每个额外节点,并确保每个节点都加入使用 bootstrap 节点启动的新 Pacemaker 集群。有关更多信息,请参阅 Overcloud 节点升级工作流

在本例中,控制器节点使用默认的 overcloud-controller-NODEID 约定来命名。这包括以下三个控制器节点:

  • overcloud-controller-0
  • overcloud-controller-1
  • overcloud-controller-2

在适用的情况下,将这些值替换为您自己的节点名称。

注意

如果您不使用 overcloud 默认堆栈名称,请使用 --stack STACK NAME 选项设置堆栈名称,将 STACK NAME 替换为堆栈的名称。

流程

  1. Source stackrc 文件:

    $ source ~/stackrc
  2. 通过在 undercloud 节点上运行以下命令来识别 bootstrap Controller 节点:

    $ tripleo-ansible-inventory --list --stack overcloud |jq .overcloud_Controller.hosts[0]
  3. 升级 bootstrap Controller 节点:

    1. 使用 ceph_systemd 标签运行外部升级命令:

      $ openstack overcloud external-upgrade run --stack <stack_name> --tags ceph_systemd -e ceph_ansible_limit=overcloud-controller-0

      <stack_name > 替换为您的堆栈的名称。

      这个命令执行以下功能:

      • 更改控制 Ceph Storage 容器的 systemd 单元以使用 Podman 管理。
      • 使用 ceph_ansible_limit 变量将操作限制为所选 Controller 节点。

      此步骤是为 leapp 升级准备 Ceph Storage 服务的主要措施。

    2. 使用 system_upgrade 标签运行 upgrade 命令:

      $ openstack overcloud upgrade run --stack STACK NAME --tags system_upgrade --limit overcloud-controller-0

      这个命令执行以下操作:

      • 对操作系统执行 Leapp 升级。
      • 作为 Leapp 升级的一部分执行重启。

        重要

        下一个命令会在 control plane 上造成中断。在接下来的几个步骤中,您无法对 overcloud 执行任何标准操作。

    3. 使用 system_upgrade_transfer_data 标签运行外部升级命令:

      $ openstack overcloud external-upgrade run --stack STACK NAME --tags system_upgrade_transfer_data

      此命令将现有节点中的数据库的最新版本复制到 bootstrap 节点。

    4. 使用 nova_hybrid_state 标签运行 upgrade 命令,仅运行 upgrade_steps_playbook.yaml playbook:

      $ openstack overcloud upgrade run --stack STACK NAME --playbook upgrade_steps_playbook.yaml --tags nova_hybrid_state --limit all

      这个命令会在 Compute 节点上启动临时 16.1 容器,以便在稍后的步骤升级 Compute 节点时协助工作负载迁移。

    5. 运行没有标签的 upgrade 命令:

      $ openstack overcloud upgrade run --stack STACK NAME --limit overcloud-controller-0

      此命令执行 Red Hat OpenStack Platform 升级。

      重要

      当此命令完成后,control plane 会变为 active。您可以对 overcloud 执行标准操作。

    6. 验证升级后,新的 Pacemaker 集群是否已启动,并且 control plane 服务(如 galera、rabbit、haproxy 和 redis)是否正在运行:

      $ sudo pcs status
  4. 升级下一个 Controller 节点:

    1. 验证旧集群是否不再运行:

      $ sudo pcs status

      当集群没有运行时,会显示类似如下的错误:

      Error: cluster is not currently running on this node
    2. 使用 ceph_systemd 标签运行外部升级命令:

      $ openstack overcloud external-upgrade run --stack STACK NAME --tags ceph_systemd -e ceph_ansible_limit=overcloud-controller-1

      这个命令执行以下功能:

      • 更改控制 Ceph Storage 容器的 systemd 单元以使用 Podman 管理。
      • 使用 ceph_ansible_limit 变量将操作限制为所选 Controller 节点。

      此步骤是为 leapp 升级准备 Ceph Storage 服务的主要措施。

    3. 在下一个 Controller 节点上运行带有 system_upgrade 标签的 upgrade 命令:

      $ openstack overcloud upgrade run --stack STACK NAME --tags system_upgrade --limit overcloud-controller-1

      这个命令执行以下操作:

      • 对操作系统执行 Leapp 升级。
      • 作为 Leapp 升级的一部分执行重启。
    4. 运行没有标签的 upgrade 命令:

      $ openstack overcloud upgrade run --stack STACK NAME --limit overcloud-controller-0,overcloud-controller-1

      此命令执行 Red Hat OpenStack Platform 升级。除了此节点外,在 --limit 选项中包含之前升级的 bootstrap 节点。

  5. 升级最终 Controller 节点:

    1. 验证旧集群是否不再运行:

      $ sudo pcs status

      当集群没有运行时,会显示类似如下的错误:

      Error: cluster is not currently running on this node
    2. 使用 ceph_systemd 标签运行外部升级命令:

      $ openstack overcloud external-upgrade run --stack STACK NAME --tags ceph_systemd -e ceph_ansible_limit=overcloud-controller-2

      这个命令执行以下功能:

      • 更改控制 Ceph Storage 容器的 systemd 单元以使用 Podman 管理。
      • 使用 ceph_ansible_limit 变量将操作限制为所选 Controller 节点。

      此步骤是为 leapp 升级准备 Ceph Storage 服务的主要措施。

    3. 使用 system_upgrade 标签运行 upgrade 命令:

      $ openstack overcloud upgrade run --stack STACK NAME --tags system_upgrade --limit overcloud-controller-2

      这个命令执行以下操作:

      • 对操作系统执行 Leapp 升级。
      • 作为 Leapp 升级的一部分执行重启。
    4. 运行没有标签的 upgrade 命令:

      $ openstack overcloud upgrade run --stack STACK NAME --limit overcloud-controller-0,overcloud-controller-1,overcloud-controller-2

      此命令执行 Red Hat OpenStack Platform 升级。在 --limit 选项中包含所有 Controller 节点。

18.3. 升级 Ceph Storage 节点的操作系统

如果您的部署使用了使用 director 部署的 Red Hat Ceph Storage 集群,则必须升级每个 Ceph Storage 节点的操作系统。

注意

如果您不使用默认的堆栈名称(overcloud),使用 --stack STACK NAME选项设置堆栈名称,将 STACK NAME 替换为堆栈的名称。

流程

  1. Source stackrc 文件:

    $ source ~/stackrc
  2. 选择 Ceph Storage 节点并升级操作系统:

    1. 使用 ceph_systemd 标签运行外部升级命令:

      $ openstack overcloud external-upgrade run --stack STACK NAME --tags ceph_systemd -e ceph_ansible_limit=overcloud-cephstorage-0

      这个命令执行以下功能:

      • 更改控制 Ceph Storage 容器的 systemd 单元以使用 Podman 管理。
      • 使用 ceph_ansible_limit 变量将操作限制为所选节点。

      此步骤是为 leapp 升级准备 Ceph Storage 服务的主要措施。

    2. 使用 system_upgrade 标签运行 upgrade 命令:

      $ openstack overcloud upgrade run --stack STACK NAME --tags system_upgrade --limit overcloud-cephstorage-0

      这个命令执行以下操作:

      • 对操作系统执行 Leapp 升级。
      • 作为 Leapp 升级的一部分执行重启。
    3. 可选:如果您使用 Ceph 订阅并已将 director 配置为将 overcloud-minimal 镜像用于 Ceph 存储节点,则必须完成以下步骤:

      1. 登录到节点并取消设置 Red Hat Enterprise Linux (RHEL)次版本:

        $ sudo subscription-manager release --unset
      2. 在节点上,执行系统更新:

        $ sudo dnf -y update
      3. 重新引导节点:

        $ sudo reboot
    4. 运行没有标签的 upgrade 命令:

      $ openstack overcloud upgrade run --stack STACK NAME --limit overcloud-cephstorage-0

      此命令运行 config-download playbook,并在 Ceph Storage 节点上配置可组合服务。此步骤不会将 Ceph Storage 节点升级到 Red Hat Ceph Storage 4。Red Hat Ceph Storage 4 升级会在以后的步骤中进行。

  3. 选择下一个 Ceph Storage 节点并升级操作系统:

    1. 使用 ceph_systemd 标签运行外部升级命令:

      $ openstack overcloud external-upgrade run --stack STACK NAME --tags ceph_systemd -e ceph_ansible_limit=overcloud-cephstorage-1

      这个命令执行以下功能:

      • 更改控制 Ceph Storage 容器的 systemd 单元以使用 Podman 管理。
      • 使用 ceph_ansible_limit 变量将操作限制为所选节点。

      此步骤是为 leapp 升级准备 Ceph Storage 服务的主要措施。

    2. 使用 system_upgrade 标签运行 upgrade 命令:

      $ openstack overcloud upgrade run --stack STACK NAME --tags system_upgrade --limit overcloud-cephstorage-1

      这个命令执行以下操作:

      • 对操作系统执行 Leapp 升级。
      • 作为 Leapp 升级的一部分执行重启。
    3. 运行没有标签的 upgrade 命令:

      $ openstack overcloud upgrade run --stack STACK NAME --limit overcloud-cephstorage-1

      此命令运行 config-download playbook,并在 Ceph Storage 节点上配置可组合服务。此步骤不会将 Ceph Storage 节点升级到 Red Hat Ceph Storage 4。Red Hat Ceph Storage 4 升级会在以后的步骤中进行。

  4. 选择最终的 Ceph Storage 节点并升级操作系统:

    1. 使用 ceph_systemd 标签运行外部升级命令:

      $ openstack overcloud external-upgrade run --stack STACK NAME --tags ceph_systemd -e ceph_ansible_limit=overcloud-cephstorage-2

      这个命令执行以下功能:

      • 更改控制 Ceph Storage 容器的 systemd 单元以使用 Podman 管理。
      • 使用 ceph_ansible_limit 变量将操作限制为所选节点。

      此步骤是为 leapp 升级准备 Ceph Storage 服务的主要措施。

    2. 使用 system_upgrade 标签运行 upgrade 命令:

      $ openstack overcloud upgrade run --stack STACK NAME --tags system_upgrade --limit overcloud-cephstorage-2

      这个命令执行以下操作:

      • 对操作系统执行 Leapp 升级。
      • 作为 Leapp 升级的一部分执行重启。
    3. 运行没有标签的 upgrade 命令:

      $ openstack overcloud upgrade run --stack STACK NAME --limit overcloud-cephstorage-2

      此命令运行 config-download playbook,并在 Ceph Storage 节点上配置可组合服务。此步骤不会将 Ceph Storage 节点升级到 Red Hat Ceph Storage 4。Red Hat Ceph Storage 4 升级会在以后的步骤中进行。

18.4. 升级 Compute 节点

将所有 Compute 节点升级到 OpenStack Platform 16.1。

注意

如果您不使用默认的堆栈名称(overcloud),使用 --stack STACK NAME选项设置堆栈名称,将 STACK NAME 替换为堆栈的名称。

流程

  1. Source stackrc 文件:

    $ source ~/stackrc
  2. 迁移您的实例。有关迁移策略的更多信息,请参阅 在 Compute 节点间迁移虚拟机
  3. 使用 system_upgrade 标签运行 upgrade 命令:

    $ openstack overcloud upgrade run --stack STACK NAME --tags system_upgrade --limit overcloud-compute-0

    这个命令执行以下操作:

    • 对操作系统执行 Leapp 升级。
    • 作为 Leapp 升级的一部分执行重启。
  4. 运行没有标签的 upgrade 命令:

    $ openstack overcloud upgrade run --stack STACK NAME --limit overcloud-compute-0

    此命令执行 Red Hat OpenStack Platform 升级。

  5. 要并行升级多个 Compute 节点,请将 --limit 选项设置为您要升级的节点列表。首先执行 system_upgrade 任务:

    $ openstack overcloud upgrade run --stack STACK NAME --tags system_upgrade --limit overcloud-compute-0,overcloud-compute-1,overcloud-compute-2

    然后执行标准 OpenStack 服务升级:

    $ openstack overcloud upgrade run --stack STACK NAME  --limit overcloud-compute-0,overcloud-compute-1,overcloud-compute-2

18.5. 同步 overcloud 堆栈

升级需要更新 overcloud 堆栈,以确保堆栈资源结构和参数与全新的 OpenStack Platform 16.1 部署一致。

注意

如果您不使用默认的堆栈名称(overcloud),使用 --stack STACK NAME选项设置堆栈名称,将 STACK NAME 替换为堆栈的名称。

流程

  1. Source stackrc 文件:

    $ source ~/stackrc
  2. 编辑 containers-prepare-parameter.yaml 文件,并删除以下参数及其值:

    • ceph3_namespace
    • ceph3_tag
    • ceph3_image
    • name_prefix_stein
    • name_suffix_stein
    • namespace_stein
    • tag_stein
  3. 要在 overcloud 中重新启用隔离,请在 fence .yaml 环境文件中将 EnableFencing 参数设置为 true
  4. 运行 upgrade finalization 命令:

    $ openstack overcloud upgrade converge \
        --stack STACK NAME \
        --templates \
        -e ENVIRONMENT FILE
        …​
        -e /home/stack/templates/upgrades-environment.yaml \
        -e /home/stack/templates/rhsm.yaml \
        -e /home/stack/containers-prepare-parameter.yaml \
        -e /usr/share/openstack-tripleo-heat-templates/environments/services/neutron-ovs.yaml \
        …​

    包含与您的环境相关的以下选项:

    • 环境文件 (upgrades-environment.yaml) 带有特定于升级的参数 (-e)。
    • EnableFencing 参数设置为 true 的环境文件(fencing.yaml)。
    • 环境文件(rhsm.yaml),以及注册和订阅参数(-e)。
    • 包含新容器镜像位置(-e)的环境文件(containers-prepare-parameter.yaml)。在大多数情况下,这是 undercloud 使用的环境文件。
    • 环境文件(neutron-ovs.yaml),以保持 OVS 兼容性。
    • 与您的部署相关的任何自定义配置文件(-e)。
    • 如果适用,使用 --roles-file 的自定义角色(roles_data)文件。
    • 如果适用,使用 --networks-file 的可组合网络(network_data)文件。
    • 如果使用自定义堆栈名称,请使用 --stack 选项传递名称。
  5. 等待堆栈同步完成。
重要

对于进一步的部署操作,您不需要 upgrade-environment.yaml 文件。

第 19 章 使用外部 Ceph 部署升级 overcloud

此场景包含具有外部 Ceph 部署的 overcloud 环境的升级过程示例,其中包括以下节点类型:

  • 三个 Controller 节点
  • 外部 Ceph Storage 集群
  • 多个 Compute 节点

19.1. 运行 overcloud 升级准备

升级需要运行 openstack overcloud upgrade prepare 命令,该命令执行以下任务:

  • 将 overcloud 计划更新至 OpenStack Platform 16.1
  • 为升级准备节点
注意

如果您不使用默认的堆栈名称(overcloud),使用 --stack STACK NAME选项设置堆栈名称,将 STACK NAME 替换为堆栈的名称。

流程

  1. Source stackrc 文件:

    $ source ~/stackrc
  2. 运行 upgrade preparation 命令:

    $ openstack overcloud upgrade prepare \
        --stack STACK NAME \
        --templates \
        -e ENVIRONMENT FILE
        …​
        -e /home/stack/templates/upgrades-environment.yaml \
        -e /home/stack/templates/rhsm.yaml \
        -e /home/stack/containers-prepare-parameter.yaml \
        -e /usr/share/openstack-tripleo-heat-templates/environments/services/neutron-ovs.yaml \
        …​

    包含与您的环境相关的以下选项:

    • 环境文件 (upgrades-environment.yaml) 带有特定于升级的参数 (-e)。
    • 环境文件(rhsm.yaml),以及注册和订阅参数(-e)。
    • 包含新容器镜像位置(-e)的环境文件(containers-prepare-parameter.yaml)。在大多数情况下,这是 undercloud 使用的环境文件。
    • 环境文件(neutron-ovs.yaml),以保持 OVS 兼容性。
    • 与您的部署相关的任何自定义配置文件(-e)。
    • 如果适用,使用 --roles-file 的自定义角色(roles_data)文件。
    • 如果适用,使用 --networks-file 的可组合网络(network_data)文件。
    • 如果使用自定义堆栈名称,请使用 --stack 选项传递名称。
  3. 等待升级准备完成。
  4. 下载容器镜像:

    $ openstack overcloud external-upgrade run --stack STACK NAME --tags container_image_prepare

19.2. 使用外部 Ceph 部署升级 Controller 节点

如果要使用外部 Ceph 部署升级,则必须完成此步骤。

要将所有 Controller 节点升级到 OpenStack Platform 16.1,您必须从 bootstrap Controller 节点开始升级每个 Controller 节点。

在 bootstrap Controller 节点升级过程中,会创建一个新的 Pacemaker 集群,并在节点上启动新的 Red Hat OpenStack 16.1 容器,而剩余的 Controller 节点仍然在 Red Hat OpenStack 13 上运行。

升级 bootstrap 节点后,您必须使用 Pacemaker 服务升级每个额外节点,并确保每个节点都加入使用 bootstrap 节点启动的新 Pacemaker 集群。有关更多信息,请参阅 Overcloud 节点升级工作流

在本例中,控制器节点使用默认的 overcloud-controller-NODEID 约定来命名。这包括以下三个控制器节点:

  • overcloud-controller-0
  • overcloud-controller-1
  • overcloud-controller-2

在适用的情况下,将这些值替换为您自己的节点名称。

注意

如果您不使用 overcloud 默认堆栈名称,请使用 --stack STACK NAME 选项设置堆栈名称,将 STACK NAME 替换为堆栈的名称。

流程

  1. Source stackrc 文件:

    $ source ~/stackrc
  2. 通过在 undercloud 节点上运行以下命令来识别 bootstrap Controller 节点:

    $ tripleo-ansible-inventory --list --stack overcloud |jq .overcloud_Controller.hosts[0]
  3. 升级 bootstrap Controller 节点:

    1. 使用 system_upgrade 标签运行 upgrade 命令:

      $ openstack overcloud upgrade run --stack STACK NAME --tags system_upgrade --limit overcloud-controller-0

      这个命令执行以下操作:

      • 对操作系统执行 Leapp 升级。
      • 作为 Leapp 升级的一部分执行重启。

        重要

        下一个命令会在 control plane 上造成中断。在接下来的几个步骤中,您无法对 overcloud 执行任何标准操作。

    2. 使用 system_upgrade_transfer_data 标签运行外部升级命令:

      $ openstack overcloud external-upgrade run --stack STACK NAME --tags system_upgrade_transfer_data

      此命令将现有节点中的数据库的最新版本复制到 bootstrap 节点。

    3. 使用 nova_hybrid_state 标签运行 upgrade 命令,仅运行 upgrade_steps_playbook.yaml playbook:

      $ openstack overcloud upgrade run --stack STACK NAME --playbook upgrade_steps_playbook.yaml --tags nova_hybrid_state --limit all

      这个命令会在 Compute 节点上启动临时 16.1 容器,以便在稍后的步骤升级 Compute 节点时协助工作负载迁移。

    4. 运行没有标签的 upgrade 命令:

      $ openstack overcloud upgrade run --stack STACK NAME --limit overcloud-controller-0

      此命令执行 Red Hat OpenStack Platform 升级。

      重要

      当此命令完成后,control plane 会变为 active。您可以对 overcloud 执行标准操作。

    5. 验证升级后,新的 Pacemaker 集群是否已启动,并且 control plane 服务(如 galera、rabbit、haproxy 和 redis)是否正在运行:

      $ sudo pcs status
  4. 升级下一个 Controller 节点:

    1. 验证旧集群是否不再运行:

      $ sudo pcs status

      当集群没有运行时,会显示类似如下的错误:

      Error: cluster is not currently running on this node
    2. 在下一个 Controller 节点上运行带有 system_upgrade 标签的 upgrade 命令:

      $ openstack overcloud upgrade run --stack STACK NAME --tags system_upgrade --limit overcloud-controller-1

      这个命令执行以下操作:

      • 对操作系统执行 Leapp 升级。
      • 作为 Leapp 升级的一部分执行重启。
    3. 运行没有标签的 upgrade 命令:

      $ openstack overcloud upgrade run --stack STACK NAME --limit overcloud-controller-0,overcloud-controller-1

      此命令执行 Red Hat OpenStack Platform 升级。除了此节点外,在 --limit 选项中包含之前升级的 bootstrap 节点。

  5. 升级最终 Controller 节点:

    1. 验证旧集群是否不再运行:

      $ sudo pcs status

      当集群没有运行时,会显示类似如下的错误:

      Error: cluster is not currently running on this node
    2. 使用 system_upgrade 标签运行 upgrade 命令:

      $ openstack overcloud upgrade run --stack STACK NAME --tags system_upgrade --limit overcloud-controller-2

      这个命令执行以下操作:

      • 对操作系统执行 Leapp 升级。
      • 作为 Leapp 升级的一部分执行重启。
    3. 运行没有标签的 upgrade 命令:

      $ openstack overcloud upgrade run --stack STACK NAME --limit overcloud-controller-0,overcloud-controller-1,overcloud-controller-2

      此命令执行 Red Hat OpenStack Platform 升级。在 --limit 选项中包含所有 Controller 节点。

19.3. 升级 Compute 节点

将所有 Compute 节点升级到 OpenStack Platform 16.1。

注意

如果您不使用默认的堆栈名称(overcloud),使用 --stack STACK NAME选项设置堆栈名称,将 STACK NAME 替换为堆栈的名称。

流程

  1. Source stackrc 文件:

    $ source ~/stackrc
  2. 迁移您的实例。有关迁移策略的更多信息,请参阅 在 Compute 节点间迁移虚拟机
  3. 使用 system_upgrade 标签运行 upgrade 命令:

    $ openstack overcloud upgrade run --stack STACK NAME --tags system_upgrade --limit overcloud-compute-0

    这个命令执行以下操作:

    • 对操作系统执行 Leapp 升级。
    • 作为 Leapp 升级的一部分执行重启。
  4. 运行没有标签的 upgrade 命令:

    $ openstack overcloud upgrade run --stack STACK NAME --limit overcloud-compute-0

    此命令执行 Red Hat OpenStack Platform 升级。

  5. 要并行升级多个 Compute 节点,请将 --limit 选项设置为您要升级的节点列表。首先执行 system_upgrade 任务:

    $ openstack overcloud upgrade run --stack STACK NAME --tags system_upgrade --limit overcloud-compute-0,overcloud-compute-1,overcloud-compute-2

    然后执行标准 OpenStack 服务升级:

    $ openstack overcloud upgrade run --stack STACK NAME  --limit overcloud-compute-0,overcloud-compute-1,overcloud-compute-2

19.4. 同步 overcloud 堆栈

升级需要更新 overcloud 堆栈,以确保堆栈资源结构和参数与全新的 OpenStack Platform 16.1 部署一致。

注意

如果您不使用默认的堆栈名称(overcloud),使用 --stack STACK NAME选项设置堆栈名称,将 STACK NAME 替换为堆栈的名称。

流程

  1. Source stackrc 文件:

    $ source ~/stackrc
  2. 编辑 containers-prepare-parameter.yaml 文件,并删除以下参数及其值:

    • ceph3_namespace
    • ceph3_tag
    • ceph3_image
    • name_prefix_stein
    • name_suffix_stein
    • namespace_stein
    • tag_stein
  3. 要在 overcloud 中重新启用隔离,请在 fence .yaml 环境文件中将 EnableFencing 参数设置为 true
  4. 运行 upgrade finalization 命令:

    $ openstack overcloud upgrade converge \
        --stack STACK NAME \
        --templates \
        -e ENVIRONMENT FILE
        …​
        -e /home/stack/templates/upgrades-environment.yaml \
        -e /home/stack/templates/rhsm.yaml \
        -e /home/stack/containers-prepare-parameter.yaml \
        -e /usr/share/openstack-tripleo-heat-templates/environments/services/neutron-ovs.yaml \
        …​

    包含与您的环境相关的以下选项:

    • 环境文件 (upgrades-environment.yaml) 带有特定于升级的参数 (-e)。
    • EnableFencing 参数设置为 true 的环境文件(fencing.yaml)。
    • 环境文件(rhsm.yaml),以及注册和订阅参数(-e)。
    • 包含新容器镜像位置(-e)的环境文件(containers-prepare-parameter.yaml)。在大多数情况下,这是 undercloud 使用的环境文件。
    • 环境文件(neutron-ovs.yaml),以保持 OVS 兼容性。
    • 与您的部署相关的任何自定义配置文件(-e)。
    • 如果适用,使用 --roles-file 的自定义角色(roles_data)文件。
    • 如果适用,使用 --networks-file 的可组合网络(network_data)文件。
    • 如果使用自定义堆栈名称,请使用 --stack 选项传递名称。
  5. 等待堆栈同步完成。
重要

对于进一步的部署操作,您不需要 upgrade-environment.yaml 文件。

第 20 章 加快 overcloud 升级

要加快 overcloud 升级过程,您可以一次升级 1/3 control plane,从 bootstrap 节点开始。

完成 control plane 的第一个 1/3 升级后,您可以将环境移到混合模式,其中 control plane API 正在运行,云可以正常工作。只有升级整个 control plane 后,才能恢复高可用性操作性能。

当您升级大量 Compute 节点以提高性能时,您可以在 20 个节点组中并行使用 --limit Compute 选项运行 openstack overcloud upgrade run 命令。您可以在后台运行多个升级任务,每个任务都升级一个单独的 20 个节点组。

此场景包含 overcloud 环境的升级过程示例,它包括以下节点类型及可组合角色:

  • 三个 Controller 节点
  • 三个数据库节点
  • 三个 Networker 节点
  • 三个 Ceph Storage 节点
  • 多个 Compute 节点

20.1. 运行 overcloud 升级准备

升级需要运行 openstack overcloud upgrade prepare 命令,该命令执行以下任务:

  • 将 overcloud 计划更新至 OpenStack Platform 16.1
  • 为升级准备节点
注意

如果您不使用默认的堆栈名称(overcloud),使用 --stack STACK NAME选项设置堆栈名称,将 STACK NAME 替换为堆栈的名称。

流程

  1. Source stackrc 文件:

    $ source ~/stackrc
  2. 运行 upgrade preparation 命令:

    $ openstack overcloud upgrade prepare \
        --stack STACK NAME \
        --templates \
        -e ENVIRONMENT FILE
        …​
        -e /home/stack/templates/upgrades-environment.yaml \
        -e /home/stack/templates/rhsm.yaml \
        -e /home/stack/containers-prepare-parameter.yaml \
        -e /usr/share/openstack-tripleo-heat-templates/environments/services/neutron-ovs.yaml \
        …​

    包含与您的环境相关的以下选项:

    • 环境文件 (upgrades-environment.yaml) 带有特定于升级的参数 (-e)。
    • 环境文件(rhsm.yaml),以及注册和订阅参数(-e)。
    • 包含新容器镜像位置(-e)的环境文件(containers-prepare-parameter.yaml)。在大多数情况下,这是 undercloud 使用的环境文件。
    • 环境文件(neutron-ovs.yaml),以保持 OVS 兼容性。
    • 与您的部署相关的任何自定义配置文件(-e)。
    • 如果适用,使用 --roles-file 的自定义角色(roles_data)文件。
    • 如果适用,使用 --networks-file 的可组合网络(network_data)文件。
    • 如果使用自定义堆栈名称,请使用 --stack 选项传递名称。
  3. 等待升级准备完成。
  4. 下载容器镜像:

    $ openstack overcloud external-upgrade run --stack STACK NAME --tags container_image_prepare

20.2. 升级 control plane 节点

要将环境中的 control plane 节点升级到 OpenStack Platform 16.1,您必须一次升级 control plane 节点的 1/3,从 bootstrap 节点开始。

在 bootstrap Controller 节点升级过程中,会创建一个新的 Pacemaker 集群,并在节点上启动新的 Red Hat OpenStack 16.1 容器,而剩余的 Controller 节点将继续在 Red Hat OpenStack 13 上运行。

在本例中,control plane 节点使用默认 overcloud-ROLE-NODEID的形式 命名。这包括带有可组合角色的以下节点类型:

  • overcloud-controller-0
  • overcloud-controller-1
  • overcloud-controller-2
  • overcloud-database-0
  • overcloud-database-1
  • overcloud-database-2
  • overcloud-networker-0
  • overcloud-networker-1
  • overcloud-networker-2
  • overcloud-ceph-0
  • overcloud-ceph-1
  • overcloud-ceph-2

在适用的情况下,将这些值替换为您自己的节点名称。

升级 overcloud-controller-0overcloud-database-0overcloud-networker-0overcloud-ceph-0 bootstrap 节点后,它们组成了 control plane 节点的第一个 1/3,您必须使用 Pacemaker 服务升级每个额外的 1/3 节点,并确保每个节点都加入使用 bootstrap 节点启动的新的 Pacemaker 集群。因此,在升级 overcloud-controller-2, overcloud-database-2, overcloud-networker-2, 和 overcloud-ceph-2 之前,您必须升级 overcloud-controller-1, overcloud-database-1, overcloud-networker-1, 和 overcloud-ceph-1

注意

如果您不使用默认的堆栈名称 overcloud,请使用 --stack STACK NAME 选项来设置堆栈名称,并将 STACK NAME 替换为您的堆栈的名称。

流程

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

    $ source ~/stackrc
  3. 在 undercloud 节点上,运行以下命令来识别 bootstrap Controller 节点:

    $ tripleo-ansible-inventory --list --stack overcloud |jq .overcloud_Controller.hosts[0]
  4. 升级 overcloud-controller-0overcloud-database-0overcloud-networker-0overcloud-ceph-0 control plane 节点:

    1. 使用 ceph_systemd 标签运行外部升级命令:

      $ openstack overcloud external-upgrade run --stack <stack_name> --tags ceph_systemd -e ceph_ansible_limit=overcloud-controller-0,overcloud-database-0,overcloud-networker-0,overcloud-ceph-0

      <stack_name > 替换为您的堆栈的名称。

      这个命令执行以下操作:

      • 更改控制 Ceph Storage 容器的 systemd 单元以使用 Podman 管理。
      • 使用 ceph_ansible_limit 变量将操作限制为所选节点。

      此步骤是为 leapp 升级准备 Ceph Storage 服务的主要措施。

    2. 使用 system_upgrade 标签运行 upgrade 命令:

      $ openstack overcloud upgrade run --stack STACK NAME --tags system_upgrade --limit overcloud-controller-0 &
      $ openstack overcloud upgrade run --stack STACK NAME --tags system_upgrade --limit overcloud-database-0 &
      $ openstack overcloud upgrade run --stack STACK NAME --tags system_upgrade --limit overcloud-networker-0 &
      $ openstack overcloud upgrade run --stack STACK NAME --tags system_upgrade --limit overcloud-ceph-0 &

      这个命令执行以下操作:

      • 对操作系统执行 Leapp 升级。
      • 作为 Leapp 升级的一部分执行重启。

        重要

        下一个命令会在 control plane 上造成中断。在接下来的几个步骤中,您无法对 overcloud 执行任何标准操作。

    3. 使用 system_upgrade_transfer_data 标签运行外部升级命令:

      $ openstack overcloud external-upgrade run --stack STACK NAME --tags system_upgrade_transfer_data

      此命令将现有节点中的数据库的最新版本复制到 bootstrap 节点。

    4. 使用 nova_hybrid_state 标签运行 upgrade 命令,仅运行 upgrade_steps_playbook.yaml playbook:

      $ openstack overcloud upgrade run --stack STACK NAME --playbook upgrade_steps_playbook.yaml --tags nova_hybrid_state --limit all

      这个命令会在 Compute 节点上启动临时 16.1 容器,以便在稍后的步骤升级 Compute 节点时协助工作负载迁移。

    5. 运行没有标签的 upgrade 命令:

      $ openstack overcloud upgrade run --stack STACK NAME --limit overcloud-controller-0,overcloud-database-0,overcloud-networker-0,overcloud-ceph-0 --playbook all

      此命令执行 Red Hat OpenStack Platform 升级。

      重要

      当此命令完成后,control plane 会变为 active。您可以对 overcloud 执行标准操作。

    6. 可选:在 bootstrap Contoller 节点上,验证升级后,新的 Pacemaker 集群是否已启动,以及 galera、rabbit、haproxy 和 redis 等 control plane 服务是否正在运行:

      $ sudo pcs status
  5. 升级 overcloud-controller-1overcloud-database-1overcloud-networker-1overcloud-ceph-1 control plane 节点:

    1. 登录 overcloud-controller-1 节点,并验证旧集群是否不再运行:

      $ sudo pcs status

      当集群没有运行时,会显示类似如下的错误:

      Error: cluster is not currently running on this node
    2. 使用 ceph_systemd 标签运行外部升级命令:

      $ openstack overcloud external-upgrade run --stack STACK NAME --tags ceph_systemd -e ceph_ansible_limit=overcloud-controller-1,overcloud-database-1,overcloud-networker-1,overcloud-ceph-1

      这个命令执行以下功能:

      • 更改控制 Ceph Storage 容器的 systemd 单元以使用 Podman 管理。
      • 使用 ceph_ansible_limit 变量将操作限制为所选节点。

      此步骤是为 leapp 升级准备 Ceph Storage 服务的主要措施。

    3. 使用 system_upgrade 标签运行 upgrade 命令:

      $ openstack overcloud upgrade run --stack STACK NAME --tags system_upgrade --limit overcloud-controller-1,overcloud-database-1,overcloud-networker-1,overcloud-ceph-1

      这个命令执行以下操作:

      • 对操作系统执行 Leapp 升级。
      • 作为 Leapp 升级的一部分执行重启。
    4. 运行没有标签的 upgrade 命令:

      $ openstack overcloud upgrade run --stack STACK NAME --limit overcloud-controller-0,overcloud-controller-1,overcloud-database-0,overcloud-database-1,overcloud-networker-0,overcloud-networker-1,overcloud-ceph-0,overcloud-ceph-1

      此命令执行 Red Hat OpenStack Platform 升级。除了此节点外,在 --limit 选项中包含之前升级的 bootstrap 节点。

  6. 升级 overcloud-controller-2、 overcloud-database- 2、overcloud-networker-2overcloud-ceph-2 control plane 节点:

    1. 登录 overcloud-controller-2 节点,并验证旧集群是否不再运行:

      $ sudo pcs status

      当集群没有运行时,会显示类似如下的错误:

      Error: cluster is not currently running on this node
    2. 使用 ceph_systemd 标签运行外部升级命令:

      $ openstack overcloud external-upgrade run --stack STACK NAME --tags ceph_systemd -e ceph_ansible_limit=overcloud-controller-2,overcloud-database-2,overcloud-networker-2,overcloud-ceph-2

      这个命令执行以下功能:

      • 更改控制 Ceph Storage 容器的 systemd 单元以使用 Podman 管理。
      • 使用 ceph_ansible_limit 变量将操作限制为所选节点。

      此步骤是为 leapp 升级准备 Ceph Storage 服务的主要措施。

    3. 使用 system_upgrade 标签运行 upgrade 命令:

      $ openstack overcloud upgrade run --stack STACK NAME --tags system_upgrade --limit overcloud-controller-2,overcloud-database-2,overcloud-networker-2,overcloud-ceph-2

      这个命令执行以下操作:

      • 对操作系统执行 Leapp 升级。
      • 作为 Leapp 升级的一部分执行重启。
    4. 运行没有标签的 upgrade 命令:

      $ openstack overcloud upgrade run --stack STACK NAME --limit overcloud-controller-0,overcloud-controller-1,overcloud-controller-2,overcloud-database-0,overcloud-database-1,overcloud-database-2,overcloud-networker-0,overcloud-networker-1,overcloud-networker-2,overcloud-ceph-0,overcloud-ceph-1,overcloud-ceph-2

      此命令执行 Red Hat OpenStack Platform 升级。在 --limit 选项中包含所有 control plane 节点。

20.3. 并行升级 Compute 节点

要将大量 Compute 节点升级到 OpenStack Platform 16.1,您可以在组 20 个节点上运行 openstack overcloud upgrade run 命令。

您可以在后台运行多个升级任务,每个任务都升级一个单独的 20 个节点组。当使用此方法并行升级 Compute 节点时,您无法选择升级哪些节点。节点选择取决于运行 tripleo-ansible-inventory 命令时生成的清单文件。例如,如果您的部署中有 80 个 Compute 节点,您可以运行以下命令来并行更新 Compute 节点:

$ openstack overcloud upgrade run -y --limit 'Compute[0:19]' > upgrade-compute-00-19.log 2>&1 &
$ openstack overcloud upgrade run -y --limit 'Compute[20:29]' > upgrade-compute-20-29.log 2>&1 &
$ openstack overcloud upgrade run -y --limit 'Compute[40:59]' > update-compute-40-59.log 2>&1 &
$ openstack overcloud upgrade run -y --limit 'Compute[60:79]' > update-compute-60-79.log 2>&1 &

要升级特定的 Compute 节点,请使用以逗号分隔的节点列表:

$ openstack overcloud upgrade run --limit <Compute0>,<Compute1>,<Compute2>,<Compute3>
注意

如果您不使用默认的堆栈名称 overcloud,请使用 --stack STACK NAME 选项,并将 STACK NAME 替换为您的堆栈的名称。

流程

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

    $ source ~/stackrc
  3. 迁移您的实例。有关迁移策略的更多信息,请参阅 在 Compute 节点间迁移虚拟机
  4. 使用 system_upgrade 标签运行 upgrade 命令:

    $ openstack overcloud upgrade run -y --stack STACK NAME --tags system_upgrade --limit 'Compute[0:19]' > upgrade-compute-00-19.log 2>&1 &
    $ openstack overcloud upgrade run -y --stack STACK NAME --tags system_upgrade --limit 'Compute[20:29]' > upgrade-compute-20-29.log 2>&1 &
    $ openstack overcloud upgrade run -y --stack STACK NAME --tags system_upgrade --limit 'Compute[40:59]' > update-compute-40-59.log 2>&1 &
    $ openstack overcloud upgrade run -y --stack STACK NAME --tags system_upgrade --limit 'Compute[60:79]' > update-compute-60-79.log 2>&1 &

    这个命令执行以下操作:

    • 对操作系统执行 Leapp 升级。
    • 作为 Leapp 升级的一部分执行重启。
  5. 运行没有标签的 upgrade 命令:

    $ openstack overcloud upgrade run -y --stack STACK NAME --limit 'Compute[0:19]' > upgrade-compute-00-19.log 2>&1 &
    $ openstack overcloud upgrade run -y --stack STACK NAME --limit 'Compute[20:29]' > upgrade-compute-20-29.log 2>&1 &
    $ openstack overcloud upgrade run -y --stack STACK NAME --limit 'Compute[40:59]' > update-compute-40-59.log 2>&1 &
    $ openstack overcloud upgrade run -y --stack STACK NAME --limit 'Compute[60:79]' > update-compute-60-79.log 2>&1 &

    此命令执行 Red Hat OpenStack Platform 升级。

  6. 可选: 要升级所选 Compute 节点,请使用 --limit 选项以及您要升级的节点列表。以下示例并行升级 overcloud-compute-0overcloud-compute-1overcloud-compute-2 节点。

    1. 使用 system_upgrade 标签运行 upgrade 命令:

      $ openstack overcloud upgrade run --stack STACK NAME --tags system_upgrade --limit overcloud-compute-0,overcloud-compute-1,overcloud-compute-2
    2. 运行没有标签的 upgrade 命令:

      $ openstack overcloud upgrade run --stack STACK NAME  --limit overcloud-compute-0,overcloud-compute-1,overcloud-compute-2

20.4. 同步 overcloud 堆栈

升级需要更新 overcloud 堆栈,以确保堆栈资源结构和参数与全新的 OpenStack Platform 16.1 部署一致。

注意

如果您不使用默认的堆栈名称(overcloud),使用 --stack STACK NAME选项设置堆栈名称,将 STACK NAME 替换为堆栈的名称。

流程

  1. Source stackrc 文件:

    $ source ~/stackrc
  2. 编辑 containers-prepare-parameter.yaml 文件,并删除以下参数及其值:

    • ceph3_namespace
    • ceph3_tag
    • ceph3_image
    • name_prefix_stein
    • name_suffix_stein
    • namespace_stein
    • tag_stein
  3. 要在 overcloud 中重新启用隔离,请在 fence .yaml 环境文件中将 EnableFencing 参数设置为 true
  4. 运行 upgrade finalization 命令:

    $ openstack overcloud upgrade converge \
        --stack STACK NAME \
        --templates \
        -e ENVIRONMENT FILE
        …​
        -e /home/stack/templates/upgrades-environment.yaml \
        -e /home/stack/templates/rhsm.yaml \
        -e /home/stack/containers-prepare-parameter.yaml \
        -e /usr/share/openstack-tripleo-heat-templates/environments/services/neutron-ovs.yaml \
        …​

    包含与您的环境相关的以下选项:

    • 环境文件 (upgrades-environment.yaml) 带有特定于升级的参数 (-e)。
    • EnableFencing 参数设置为 true 的环境文件(fencing.yaml)。
    • 环境文件(rhsm.yaml),以及注册和订阅参数(-e)。
    • 包含新容器镜像位置(-e)的环境文件(containers-prepare-parameter.yaml)。在大多数情况下,这是 undercloud 使用的环境文件。
    • 环境文件(neutron-ovs.yaml),以保持 OVS 兼容性。
    • 与您的部署相关的任何自定义配置文件(-e)。
    • 如果适用,使用 --roles-file 的自定义角色(roles_data)文件。
    • 如果适用,使用 --networks-file 的可组合网络(network_data)文件。
    • 如果使用自定义堆栈名称,请使用 --stack 选项传递名称。
  5. 等待堆栈同步完成。
重要

对于进一步的部署操作,您不需要 upgrade-environment.yaml 文件。

第 21 章 升级分割控制器 overcloud

此场景包含将 Controller 节点服务分成多个节点的 overcloud 的升级过程示例。这包括以下节点类型:

  • 使用 Pacemaker 的多个分割高可用性服务
  • 多个分割控制器服务
  • 三个 Ceph MON 节点
  • 三个 Ceph Storage 节点
  • 多个 Compute 节点

21.1. 运行 overcloud 升级准备

升级需要运行 openstack overcloud upgrade prepare 命令,该命令执行以下任务:

  • 将 overcloud 计划更新至 OpenStack Platform 16.1
  • 为升级准备节点
注意

如果您不使用默认的堆栈名称(overcloud),使用 --stack STACK NAME选项设置堆栈名称,将 STACK NAME 替换为堆栈的名称。

流程

  1. Source stackrc 文件:

    $ source ~/stackrc
  2. 运行 upgrade preparation 命令:

    $ openstack overcloud upgrade prepare \
        --stack STACK NAME \
        --templates \
        -e ENVIRONMENT FILE
        …​
        -e /home/stack/templates/upgrades-environment.yaml \
        -e /home/stack/templates/rhsm.yaml \
        -e /home/stack/containers-prepare-parameter.yaml \
        -e /usr/share/openstack-tripleo-heat-templates/environments/services/neutron-ovs.yaml \
        …​

    包含与您的环境相关的以下选项:

    • 环境文件 (upgrades-environment.yaml) 带有特定于升级的参数 (-e)。
    • 环境文件(rhsm.yaml),以及注册和订阅参数(-e)。
    • 包含新容器镜像位置(-e)的环境文件(containers-prepare-parameter.yaml)。在大多数情况下,这是 undercloud 使用的环境文件。
    • 环境文件(neutron-ovs.yaml),以保持 OVS 兼容性。
    • 与您的部署相关的任何自定义配置文件(-e)。
    • 如果适用,使用 --roles-file 的自定义角色(roles_data)文件。
    • 如果适用,使用 --networks-file 的可组合网络(network_data)文件。
    • 如果使用自定义堆栈名称,请使用 --stack 选项传递名称。
  3. 等待升级准备完成。
  4. 下载容器镜像:

    $ openstack overcloud external-upgrade run --stack STACK NAME --tags container_image_prepare

21.2. 升级基于 Pacemaker 的节点

将托管 Pacemaker 服务的所有节点升级到 OpenStack Platform 16.1。以下角色包括基于 Pacemaker 的服务:

  • Controller
  • 数据库(MySQL、Galera)
  • 消息传递(RabbitMQ)
  • 负载均衡(HAProxy)
  • 包含以下服务的任何其他角色:

    • OS::TripleO::Services::Pacemaker
    • OS::TripleO::Services::PacemakerRemote

此过程涉及升级从 bootstrap 节点开始的每个节点。

注意

如果您不使用默认的堆栈名称(overcloud),使用 --stack STACK NAME选项设置堆栈名称,将 STACK NAME 替换为堆栈的名称。

流程

  1. Source stackrc 文件:

    $ source ~/stackrc
  2. 通过在 undercloud 节点上运行以下命令来识别 bootstrap 节点:

    $ tripleo-ansible-inventory --list --stack overcloud |jq .overcloud_Controller.hosts[0]
  3. 升级 bootstrap 节点:

    1. 如果节点包含 Ceph Storage 容器,请使用 ceph_systemd 标签运行外部升级命令:

      $ openstack overcloud external-upgrade run --stack <stack_name> --tags ceph_systemd -e ceph_ansible_limit=overcloud-controller-0

      <stack_name > 替换为您的堆栈的名称。

      这个命令执行以下功能:

      • 更改控制 Ceph Storage 容器的 systemd 单元以使用 Podman 管理。
      • 使用 ceph_ansible_limit 变量将操作限制为所选节点。

      此步骤是为 leapp 升级准备 Ceph Storage 服务的主要措施。

    2. 使用 system_upgrade 标签运行 upgrade 命令:

      $ openstack overcloud upgrade run --stack STACK NAME --tags system_upgrade --limit overcloud-controller-0

      这个命令执行以下操作:

      • 对操作系统执行 Leapp 升级。
      • 作为 Leapp 升级的一部分执行重启。
    3. 使用 system_upgrade_transfer_data 标签运行外部升级命令:

      $ openstack overcloud external-upgrade run --stack STACK NAME --tags system_upgrade_transfer_data

      此命令将现有节点中的数据库的最新版本复制到 bootstrap 节点。

    4. 使用 nova_hybrid_state 标签运行 upgrade 命令,仅运行 upgrade_steps_playbook.yaml playbook:

      $ openstack overcloud upgrade run --stack STACK NAME --playbook upgrade_steps_playbook.yaml --tags nova_hybrid_state --limit all

      这个命令会在 Compute 节点上启动临时 16.1 容器,以便在稍后的步骤升级 Compute 节点时协助工作负载迁移。

    5. 运行没有标签的 upgrade 命令:

      $ openstack overcloud upgrade run --stack STACK NAME --limit overcloud-controller-0

      此命令执行 Red Hat OpenStack Platform 升级。

  4. 升级每个基于 Pacemaker 的节点:

    1. 如果节点包含 Ceph Storage 容器,请使用 ceph_systemd 标签运行外部升级命令:

      $ openstack overcloud external-upgrade run --stack STACK NAME --tags ceph_systemd -e ceph_ansible_limit=overcloud-database-0

      这个命令执行以下功能:

      • 更改控制 Ceph Storage 容器的 systemd 单元以使用 Podman 管理。
      • 使用 ceph_ansible_limit 变量将操作限制为所选节点。

      此步骤是为 leapp 升级准备 Ceph Storage 服务的主要措施。

    2. 在下一个节点上运行带有 system_upgrade 标签的 upgrade 命令:

      $ openstack overcloud upgrade run --stack STACK NAME --tags system_upgrade --limit overcloud-database-0

      这个命令执行以下操作:

      • 对操作系统执行 Leapp 升级。
      • 作为 Leapp 升级的一部分执行重启。
    3. 运行没有标签的 upgrade 命令:

      $ openstack overcloud upgrade run --stack STACK NAME --limit overcloud-controller-0,overcloud-database-0

      此命令执行 Red Hat OpenStack Platform 升级。除了此节点外,在 --limit 选项中包含任何之前升级的节点。

  5. 在每个基于 Pacemaker 的节点上重复升级过程,直到您升级了所有基于 Pacemaker 的节点。

21.3. 升级非 Pacemaker Controller 节点

在没有基于 Pacemaker 的服务的情况下将所有节点升级到 OpenStack Platform 16.1。这些节点通常包含特定的 OpenStack 服务。没有基于 Pacemaker 的服务的角色示例包括:

  • Networker
  • Ironic Conductor
  • 对象存储
  • 任何带有服务从标准 Controller 节点分割或扩展的自定义角色

不要在这个组中包含以下节点:

  • 任何 Compute 节点
  • 任何 Ceph Storage 节点

这个过程涉及升级每个节点。

注意

如果您不使用默认的堆栈名称(overcloud),使用 --stack STACK NAME选项设置堆栈名称,将 STACK NAME 替换为堆栈的名称。

流程

  1. Source stackrc 文件:

    $ source ~/stackrc
  2. 使用 system_upgrade 标签运行 upgrade 命令:

    $ openstack overcloud upgrade run --stack STACK NAME --tags system_upgrade --limit overcloud-networker-0

    这个命令执行以下操作:

    • 对操作系统执行 Leapp 升级。
    • 作为 Leapp 升级的一部分执行重启。
  3. 运行没有标签的 upgrade 命令:

    $ openstack overcloud upgrade run --stack STACK NAME --limit overcloud-networker-0

    此命令执行 Red Hat OpenStack Platform 升级。

  4. 在每个节点上重复升级过程,直到您升级了所有基于 Controller 的节点。

21.4. 升级 Ceph MON 节点的操作系统

升级每个 Ceph MON 节点的操作系统。建议单独升级每个 Ceph MON 节点,以维护节点的仲裁。

注意

如果您不使用默认的堆栈名称(overcloud),使用 --stack STACK NAME选项设置堆栈名称,将 STACK NAME 替换为堆栈的名称。

流程

  1. Source stackrc 文件:

    $ source ~/stackrc
  2. 选择 Ceph MON 节点并升级操作系统:

    1. 使用 ceph_systemd 标签运行外部升级命令:

      $ openstack overcloud external-upgrade run --stack STACK NAME --tags ceph_systemd -e ceph_ansible_limit=overcloud-cephmon-0

      这个命令执行以下功能:

      • 更改控制 Ceph Storage 容器的 systemd 单元以使用 Podman 管理。
      • 使用 ceph_ansible_limit 变量将操作限制为所选节点。

      此步骤是为 leapp 升级准备 Ceph Storage 服务的主要措施。

    2. 使用 system_upgrade 标签运行 upgrade 命令:

      $ openstack overcloud upgrade run --stack STACK NAME --tags system_upgrade --limit overcloud-cephmon-0

      这个命令执行以下操作:

      • 对操作系统执行 Leapp 升级。
      • 作为 Leapp 升级的一部分执行重启。
    3. 运行没有标签的 upgrade 命令:

      $ openstack overcloud upgrade run --stack STACK NAME --limit overcloud-cephmon-0

      此命令运行 config-download playbook,并在 Ceph MON 节点上配置可组合服务。此步骤不会将 Ceph MON 节点升级到 Red Hat Ceph Storage 4。Red Hat Ceph Storage 4 升级会在以后的步骤中进行。

  3. 选择下一个 Ceph MON 节点并升级操作系统:

    1. 使用 ceph_systemd 标签运行外部升级命令:

      $ openstack overcloud external-upgrade run --stack STACK NAME --tags ceph_systemd -e ceph_ansible_limit=overcloud-cephmon-1

      这个命令执行以下功能:

      • 更改控制 Ceph Storage 容器的 systemd 单元以使用 Podman 管理。
      • 使用 ceph_ansible_limit 变量将操作限制为所选节点。

      此步骤是为 leapp 升级准备 Ceph Storage 服务的主要措施。

    2. 使用 system_upgrade 标签运行 upgrade 命令:

      $ openstack overcloud upgrade run --stack STACK NAME --tags system_upgrade --limit overcloud-cephmon-1

      这个命令执行以下操作:

      • 对操作系统执行 Leapp 升级。
      • 作为 Leapp 升级的一部分执行重启。
    3. 运行没有标签的 upgrade 命令:

      $ openstack overcloud upgrade run --stack STACK NAME --limit overcloud-cephmon-1

      此命令运行 config-download playbook,并在 Ceph MON 节点上配置可组合服务。此步骤不会将 Ceph MON 节点升级到 Red Hat Ceph Storage 4。Red Hat Ceph Storage 4 升级会在以后的步骤中进行。

  4. 选择最终的 Ceph MON 节点并升级操作系统:

    1. 使用 ceph_systemd 标签运行外部升级命令:

      $ openstack overcloud external-upgrade run --stack STACK NAME --tags ceph_systemd -e ceph_ansible_limit=overcloud-cephmon-2

      这个命令执行以下功能:

      • 更改控制 Ceph Storage 容器的 systemd 单元以使用 Podman 管理。
      • 使用 ceph_ansible_limit 变量将操作限制为所选节点。

      此步骤是为 leapp 升级准备 Ceph Storage 服务的主要措施。

    2. 使用 system_upgrade 标签运行 upgrade 命令:

      $ openstack overcloud upgrade run --stack STACK NAME --tags system_upgrade --limit overcloud-cephmon-2

      这个命令执行以下操作:

      • 对操作系统执行 Leapp 升级。
      • 作为 Leapp 升级的一部分执行重启。
    3. 运行没有标签的 upgrade 命令:

      $ openstack overcloud upgrade run --stack STACK NAME --limit overcloud-cephmon-2

      此命令运行 config-download playbook,并在 Ceph MON 节点上配置可组合服务。此步骤不会将 Ceph MON 节点升级到 Red Hat Ceph Storage 4。Red Hat Ceph Storage 4 升级会在以后的步骤中进行。

21.5. 升级 Ceph Storage 节点的操作系统

如果您的部署使用了使用 director 部署的 Red Hat Ceph Storage 集群,则必须升级每个 Ceph Storage 节点的操作系统。

注意

如果您不使用默认的堆栈名称(overcloud),使用 --stack STACK NAME选项设置堆栈名称,将 STACK NAME 替换为堆栈的名称。

流程

  1. Source stackrc 文件:

    $ source ~/stackrc
  2. 选择 Ceph Storage 节点并升级操作系统:

    1. 使用 ceph_systemd 标签运行外部升级命令:

      $ openstack overcloud external-upgrade run --stack STACK NAME --tags ceph_systemd -e ceph_ansible_limit=overcloud-cephstorage-0

      这个命令执行以下功能:

      • 更改控制 Ceph Storage 容器的 systemd 单元以使用 Podman 管理。
      • 使用 ceph_ansible_limit 变量将操作限制为所选节点。

      此步骤是为 leapp 升级准备 Ceph Storage 服务的主要措施。

    2. 使用 system_upgrade 标签运行 upgrade 命令:

      $ openstack overcloud upgrade run --stack STACK NAME --tags system_upgrade --limit overcloud-cephstorage-0

      这个命令执行以下操作:

      • 对操作系统执行 Leapp 升级。
      • 作为 Leapp 升级的一部分执行重启。
    3. 可选:如果您使用 Ceph 订阅并已将 director 配置为将 overcloud-minimal 镜像用于 Ceph 存储节点,则必须完成以下步骤:

      1. 登录到节点并取消设置 Red Hat Enterprise Linux (RHEL)次版本:

        $ sudo subscription-manager release --unset
      2. 在节点上,执行系统更新:

        $ sudo dnf -y update
      3. 重新引导节点:

        $ sudo reboot
    4. 运行没有标签的 upgrade 命令:

      $ openstack overcloud upgrade run --stack STACK NAME --limit overcloud-cephstorage-0

      此命令运行 config-download playbook,并在 Ceph Storage 节点上配置可组合服务。此步骤不会将 Ceph Storage 节点升级到 Red Hat Ceph Storage 4。Red Hat Ceph Storage 4 升级会在以后的步骤中进行。

  3. 选择下一个 Ceph Storage 节点并升级操作系统:

    1. 使用 ceph_systemd 标签运行外部升级命令:

      $ openstack overcloud external-upgrade run --stack STACK NAME --tags ceph_systemd -e ceph_ansible_limit=overcloud-cephstorage-1

      这个命令执行以下功能:

      • 更改控制 Ceph Storage 容器的 systemd 单元以使用 Podman 管理。
      • 使用 ceph_ansible_limit 变量将操作限制为所选节点。

      此步骤是为 leapp 升级准备 Ceph Storage 服务的主要措施。

    2. 使用 system_upgrade 标签运行 upgrade 命令:

      $ openstack overcloud upgrade run --stack STACK NAME --tags system_upgrade --limit overcloud-cephstorage-1

      这个命令执行以下操作:

      • 对操作系统执行 Leapp 升级。
      • 作为 Leapp 升级的一部分执行重启。
    3. 运行没有标签的 upgrade 命令:

      $ openstack overcloud upgrade run --stack STACK NAME --limit overcloud-cephstorage-1

      此命令运行 config-download playbook,并在 Ceph Storage 节点上配置可组合服务。此步骤不会将 Ceph Storage 节点升级到 Red Hat Ceph Storage 4。Red Hat Ceph Storage 4 升级会在以后的步骤中进行。

  4. 选择最终的 Ceph Storage 节点并升级操作系统:

    1. 使用 ceph_systemd 标签运行外部升级命令:

      $ openstack overcloud external-upgrade run --stack STACK NAME --tags ceph_systemd -e ceph_ansible_limit=overcloud-cephstorage-2

      这个命令执行以下功能:

      • 更改控制 Ceph Storage 容器的 systemd 单元以使用 Podman 管理。
      • 使用 ceph_ansible_limit 变量将操作限制为所选节点。

      此步骤是为 leapp 升级准备 Ceph Storage 服务的主要措施。

    2. 使用 system_upgrade 标签运行 upgrade 命令:

      $ openstack overcloud upgrade run --stack STACK NAME --tags system_upgrade --limit overcloud-cephstorage-2

      这个命令执行以下操作:

      • 对操作系统执行 Leapp 升级。
      • 作为 Leapp 升级的一部分执行重启。
    3. 运行没有标签的 upgrade 命令:

      $ openstack overcloud upgrade run --stack STACK NAME --limit overcloud-cephstorage-2

      此命令运行 config-download playbook,并在 Ceph Storage 节点上配置可组合服务。此步骤不会将 Ceph Storage 节点升级到 Red Hat Ceph Storage 4。Red Hat Ceph Storage 4 升级会在以后的步骤中进行。

21.6. 升级 Compute 节点

将所有 Compute 节点升级到 OpenStack Platform 16.1。

注意

如果您不使用默认的堆栈名称(overcloud),使用 --stack STACK NAME选项设置堆栈名称,将 STACK NAME 替换为堆栈的名称。

流程

  1. Source stackrc 文件:

    $ source ~/stackrc
  2. 迁移您的实例。有关迁移策略的更多信息,请参阅 在 Compute 节点间迁移虚拟机
  3. 使用 system_upgrade 标签运行 upgrade 命令:

    $ openstack overcloud upgrade run --stack STACK NAME --tags system_upgrade --limit overcloud-compute-0

    这个命令执行以下操作:

    • 对操作系统执行 Leapp 升级。
    • 作为 Leapp 升级的一部分执行重启。
  4. 运行没有标签的 upgrade 命令:

    $ openstack overcloud upgrade run --stack STACK NAME --limit overcloud-compute-0

    此命令执行 Red Hat OpenStack Platform 升级。

  5. 要并行升级多个 Compute 节点,请将 --limit 选项设置为您要升级的节点列表。首先执行 system_upgrade 任务:

    $ openstack overcloud upgrade run --stack STACK NAME --tags system_upgrade --limit overcloud-compute-0,overcloud-compute-1,overcloud-compute-2

    然后执行标准 OpenStack 服务升级:

    $ openstack overcloud upgrade run --stack STACK NAME  --limit overcloud-compute-0,overcloud-compute-1,overcloud-compute-2

21.7. 同步 overcloud 堆栈

升级需要更新 overcloud 堆栈,以确保堆栈资源结构和参数与全新的 OpenStack Platform 16.1 部署一致。

注意

如果您不使用默认的堆栈名称(overcloud),使用 --stack STACK NAME选项设置堆栈名称,将 STACK NAME 替换为堆栈的名称。

流程

  1. Source stackrc 文件:

    $ source ~/stackrc
  2. 编辑 containers-prepare-parameter.yaml 文件,并删除以下参数及其值:

    • ceph3_namespace
    • ceph3_tag
    • ceph3_image
    • name_prefix_stein
    • name_suffix_stein
    • namespace_stein
    • tag_stein
  3. 要在 overcloud 中重新启用隔离,请在 fence .yaml 环境文件中将 EnableFencing 参数设置为 true
  4. 运行 upgrade finalization 命令:

    $ openstack overcloud upgrade converge \
        --stack STACK NAME \
        --templates \
        -e ENVIRONMENT FILE
        …​
        -e /home/stack/templates/upgrades-environment.yaml \
        -e /home/stack/templates/rhsm.yaml \
        -e /home/stack/containers-prepare-parameter.yaml \
        -e /usr/share/openstack-tripleo-heat-templates/environments/services/neutron-ovs.yaml \
        …​

    包含与您的环境相关的以下选项:

    • 环境文件 (upgrades-environment.yaml) 带有特定于升级的参数 (-e)。
    • EnableFencing 参数设置为 true 的环境文件(fencing.yaml)。
    • 环境文件(rhsm.yaml),以及注册和订阅参数(-e)。
    • 包含新容器镜像位置(-e)的环境文件(containers-prepare-parameter.yaml)。在大多数情况下,这是 undercloud 使用的环境文件。
    • 环境文件(neutron-ovs.yaml),以保持 OVS 兼容性。
    • 与您的部署相关的任何自定义配置文件(-e)。
    • 如果适用,使用 --roles-file 的自定义角色(roles_data)文件。
    • 如果适用,使用 --networks-file 的可组合网络(network_data)文件。
    • 如果使用自定义堆栈名称,请使用 --stack 选项传递名称。
  5. 等待堆栈同步完成。
重要

对于进一步的部署操作,您不需要 upgrade-environment.yaml 文件。

第 22 章 升级带有超融合基础架构的 overcloud

此场景包含带有超融合基础架构(HCI)的 overcloud 示例升级过程,其中包括以下节点类型:

  • 三个 Controller 节点
  • 多个 HCI Compute 节点,其中包含组合的 Compute 和 Ceph OSD 服务

22.1. 运行 overcloud 升级准备

升级需要运行 openstack overcloud upgrade prepare 命令,该命令执行以下任务:

  • 将 overcloud 计划更新至 OpenStack Platform 16.1
  • 为升级准备节点
注意

如果您不使用默认的堆栈名称(overcloud),使用 --stack STACK NAME选项设置堆栈名称,将 STACK NAME 替换为堆栈的名称。

流程

  1. Source stackrc 文件:

    $ source ~/stackrc
  2. 运行 upgrade preparation 命令:

    $ openstack overcloud upgrade prepare \
        --stack STACK NAME \
        --templates \
        -e ENVIRONMENT FILE
        …​
        -e /home/stack/templates/upgrades-environment.yaml \
        -e /home/stack/templates/rhsm.yaml \
        -e /home/stack/containers-prepare-parameter.yaml \
        -e /usr/share/openstack-tripleo-heat-templates/environments/services/neutron-ovs.yaml \
        …​

    包含与您的环境相关的以下选项:

    • 环境文件 (upgrades-environment.yaml) 带有特定于升级的参数 (-e)。
    • 环境文件(rhsm.yaml),以及注册和订阅参数(-e)。
    • 包含新容器镜像位置(-e)的环境文件(containers-prepare-parameter.yaml)。在大多数情况下,这是 undercloud 使用的环境文件。
    • 环境文件(neutron-ovs.yaml),以保持 OVS 兼容性。
    • 与您的部署相关的任何自定义配置文件(-e)。
    • 如果适用,使用 --roles-file 的自定义角色(roles_data)文件。
    • 如果适用,使用 --networks-file 的可组合网络(network_data)文件。
    • 如果使用自定义堆栈名称,请使用 --stack 选项传递名称。
  3. 等待升级准备完成。
  4. 下载容器镜像:

    $ openstack overcloud external-upgrade run --stack STACK NAME --tags container_image_prepare

22.2. 使用 director 部署的 Ceph Storage 升级 Controller 节点

如果您的部署使用了使用 director 部署的 Red Hat Ceph Storage 集群,则必须完成此流程。

要将所有 Controller 节点升级到 OpenStack Platform 16.1,您必须从 bootstrap Controller 节点开始升级每个 Controller 节点。

在 bootstrap Controller 节点升级过程中,会创建一个新的 Pacemaker 集群,并在节点上启动新的 Red Hat OpenStack 16.1 容器,而剩余的 Controller 节点仍然在 Red Hat OpenStack 13 上运行。

升级 bootstrap 节点后,您必须使用 Pacemaker 服务升级每个额外节点,并确保每个节点都加入使用 bootstrap 节点启动的新 Pacemaker 集群。有关更多信息,请参阅 Overcloud 节点升级工作流

在本例中,控制器节点使用默认的 overcloud-controller-NODEID 约定来命名。这包括以下三个控制器节点:

  • overcloud-controller-0
  • overcloud-controller-1
  • overcloud-controller-2

在适用的情况下,将这些值替换为您自己的节点名称。

注意

如果您不使用 overcloud 默认堆栈名称,请使用 --stack STACK NAME 选项设置堆栈名称,将 STACK NAME 替换为堆栈的名称。

流程

  1. Source stackrc 文件:

    $ source ~/stackrc
  2. 通过在 undercloud 节点上运行以下命令来识别 bootstrap Controller 节点:

    $ tripleo-ansible-inventory --list --stack overcloud |jq .overcloud_Controller.hosts[0]
  3. 升级 bootstrap Controller 节点:

    1. 使用 ceph_systemd 标签运行外部升级命令:

      $ openstack overcloud external-upgrade run --stack <stack_name> --tags ceph_systemd -e ceph_ansible_limit=overcloud-controller-0

      <stack_name > 替换为您的堆栈的名称。

      这个命令执行以下功能:

      • 更改控制 Ceph Storage 容器的 systemd 单元以使用 Podman 管理。
      • 使用 ceph_ansible_limit 变量将操作限制为所选 Controller 节点。

      此步骤是为 leapp 升级准备 Ceph Storage 服务的主要措施。

    2. 使用 system_upgrade 标签运行 upgrade 命令:

      $ openstack overcloud upgrade run --stack STACK NAME --tags system_upgrade --limit overcloud-controller-0

      这个命令执行以下操作:

      • 对操作系统执行 Leapp 升级。
      • 作为 Leapp 升级的一部分执行重启。

        重要

        下一个命令会在 control plane 上造成中断。在接下来的几个步骤中,您无法对 overcloud 执行任何标准操作。

    3. 使用 system_upgrade_transfer_data 标签运行外部升级命令:

      $ openstack overcloud external-upgrade run --stack STACK NAME --tags system_upgrade_transfer_data

      此命令将现有节点中的数据库的最新版本复制到 bootstrap 节点。

    4. 使用 nova_hybrid_state 标签运行 upgrade 命令,仅运行 upgrade_steps_playbook.yaml playbook:

      $ openstack overcloud upgrade run --stack STACK NAME --playbook upgrade_steps_playbook.yaml --tags nova_hybrid_state --limit all

      这个命令会在 Compute 节点上启动临时 16.1 容器,以便在稍后的步骤升级 Compute 节点时协助工作负载迁移。

    5. 运行没有标签的 upgrade 命令:

      $ openstack overcloud upgrade run --stack STACK NAME --limit overcloud-controller-0

      此命令执行 Red Hat OpenStack Platform 升级。

      重要

      当此命令完成后,control plane 会变为 active。您可以对 overcloud 执行标准操作。

    6. 验证升级后,新的 Pacemaker 集群是否已启动,并且 control plane 服务(如 galera、rabbit、haproxy 和 redis)是否正在运行:

      $ sudo pcs status
  4. 升级下一个 Controller 节点:

    1. 验证旧集群是否不再运行:

      $ sudo pcs status

      当集群没有运行时,会显示类似如下的错误:

      Error: cluster is not currently running on this node
    2. 使用 ceph_systemd 标签运行外部升级命令:

      $ openstack overcloud external-upgrade run --stack STACK NAME --tags ceph_systemd -e ceph_ansible_limit=overcloud-controller-1

      这个命令执行以下功能:

      • 更改控制 Ceph Storage 容器的 systemd 单元以使用 Podman 管理。
      • 使用 ceph_ansible_limit 变量将操作限制为所选 Controller 节点。

      此步骤是为 leapp 升级准备 Ceph Storage 服务的主要措施。

    3. 在下一个 Controller 节点上运行带有 system_upgrade 标签的 upgrade 命令:

      $ openstack overcloud upgrade run --stack STACK NAME --tags system_upgrade --limit overcloud-controller-1

      这个命令执行以下操作:

      • 对操作系统执行 Leapp 升级。
      • 作为 Leapp 升级的一部分执行重启。
    4. 运行没有标签的 upgrade 命令:

      $ openstack overcloud upgrade run --stack STACK NAME --limit overcloud-controller-0,overcloud-controller-1

      此命令执行 Red Hat OpenStack Platform 升级。除了此节点外,在 --limit 选项中包含之前升级的 bootstrap 节点。

  5. 升级最终 Controller 节点:

    1. 验证旧集群是否不再运行:

      $ sudo pcs status

      当集群没有运行时,会显示类似如下的错误:

      Error: cluster is not currently running on this node
    2. 使用 ceph_systemd 标签运行外部升级命令:

      $ openstack overcloud external-upgrade run --stack STACK NAME --tags ceph_systemd -e ceph_ansible_limit=overcloud-controller-2

      这个命令执行以下功能:

      • 更改控制 Ceph Storage 容器的 systemd 单元以使用 Podman 管理。
      • 使用 ceph_ansible_limit 变量将操作限制为所选 Controller 节点。

      此步骤是为 leapp 升级准备 Ceph Storage 服务的主要措施。

    3. 使用 system_upgrade 标签运行 upgrade 命令:

      $ openstack overcloud upgrade run --stack STACK NAME --tags system_upgrade --limit overcloud-controller-2

      这个命令执行以下操作:

      • 对操作系统执行 Leapp 升级。
      • 作为 Leapp 升级的一部分执行重启。
    4. 运行没有标签的 upgrade 命令:

      $ openstack overcloud upgrade run --stack STACK NAME --limit overcloud-controller-0,overcloud-controller-1,overcloud-controller-2

      此命令执行 Red Hat OpenStack Platform 升级。在 --limit 选项中包含所有 Controller 节点。

22.3. 使用超融合基础架构(HCI)升级 Compute 节点.

将 HCI Compute 节点升级到 OpenStack Platform 16.1。

注意

如果您不使用默认的堆栈名称(overcloud),使用 --stack STACK NAME选项设置堆栈名称,将 STACK NAME 替换为堆栈的名称。

流程

  1. Source stackrc 文件:

    $ source ~/stackrc
  2. 迁移您的实例。有关迁移策略的更多信息,请参阅 在 Compute 节点间迁移虚拟机
  3. 使用 Ceph MON 服务注销节点,再返回到 undercloud。
  4. 使用 ceph_systemd 标签运行外部升级命令:

    $ openstack overcloud external-upgrade run --stack STACK NAME --tags ceph_systemd -e ceph_ansible_limit=overcloud-computehci-0

    这个命令执行以下功能:

    • 更改控制 Ceph Storage 容器的 systemd 单元以使用 Podman 管理。
    • 使用 ceph_ansible_limit 变量将操作限制为所选 Ceph Storage 节点。

    此步骤是为 leapp 升级准备 Ceph Storage 服务的主要措施。

  5. 使用 system_upgrade 标签运行 upgrade 命令:

    $ openstack overcloud upgrade run --stack STACK NAME --tags system_upgrade --limit overcloud-computehci-0

    这个命令执行以下操作:

    • 对操作系统执行 Leapp 升级。
    • 作为 Leapp 升级的一部分执行重启。
  6. 运行没有标签的 upgrade 命令:

    $ openstack overcloud upgrade run --stack STACK NAME --limit overcloud-computehci-0

    此命令执行 Red Hat OpenStack Platform 升级。

  7. 要并行升级多个 Compute 节点,请将 --limit 选项设置为您要升级的节点列表。首先使用 ceph_systemd 标签运行外部升级命令:

    $ openstack overcloud external-upgrade run --stack STACK NAME --tags ceph_systemd -e ceph_ansible_limit=overcloud-computehci-0,overcloud-computehci-1,overcloud-computehci-2

    然后执行 system_upgrade 任务:

    $ openstack overcloud upgrade run --stack STACK NAME --tags system_upgrade --limit overcloud-computehci-0,overcloud-computehci-1,overcloud-computehci-2

    然后执行标准 OpenStack 服务升级:

    $ openstack overcloud upgrade run --stack STACK NAME  --limit overcloud-computehci-0,overcloud-computehci-1,overcloud-computehci-2

22.4. 同步 overcloud 堆栈

升级需要更新 overcloud 堆栈,以确保堆栈资源结构和参数与全新的 OpenStack Platform 16.1 部署一致。

注意

如果您不使用默认的堆栈名称(overcloud),使用 --stack STACK NAME选项设置堆栈名称,将 STACK NAME 替换为堆栈的名称。

流程

  1. Source stackrc 文件:

    $ source ~/stackrc
  2. 编辑 containers-prepare-parameter.yaml 文件,并删除以下参数及其值:

    • ceph3_namespace
    • ceph3_tag
    • ceph3_image
    • name_prefix_stein
    • name_suffix_stein
    • namespace_stein
    • tag_stein
  3. 要在 overcloud 中重新启用隔离,请在 fence .yaml 环境文件中将 EnableFencing 参数设置为 true
  4. 运行 upgrade finalization 命令:

    $ openstack overcloud upgrade converge \
        --stack STACK NAME \
        --templates \
        -e ENVIRONMENT FILE
        …​
        -e /home/stack/templates/upgrades-environment.yaml \
        -e /home/stack/templates/rhsm.yaml \
        -e /home/stack/containers-prepare-parameter.yaml \
        -e /usr/share/openstack-tripleo-heat-templates/environments/services/neutron-ovs.yaml \
        …​

    包含与您的环境相关的以下选项:

    • 环境文件 (upgrades-environment.yaml) 带有特定于升级的参数 (-e)。
    • EnableFencing 参数设置为 true 的环境文件(fencing.yaml)。
    • 环境文件(rhsm.yaml),以及注册和订阅参数(-e)。
    • 包含新容器镜像位置(-e)的环境文件(containers-prepare-parameter.yaml)。在大多数情况下,这是 undercloud 使用的环境文件。
    • 环境文件(neutron-ovs.yaml),以保持 OVS 兼容性。
    • 与您的部署相关的任何自定义配置文件(-e)。
    • 如果适用,使用 --roles-file 的自定义角色(roles_data)文件。
    • 如果适用,使用 --networks-file 的可组合网络(network_data)文件。
    • 如果使用自定义堆栈名称,请使用 --stack 选项传递名称。
  5. 等待堆栈同步完成。
重要

对于进一步的部署操作,您不需要 upgrade-environment.yaml 文件。

第 23 章 将 director 部署的 Ceph Storage 集群升级到 Red Hat Ceph Storage 4

如果您的部署使用了使用 director 部署的 Red Hat Ceph Storage 集群,您必须完成本节中包含的流程。

重要

当您将 Red Hat Ceph Storage 集群从以前支持的版本升级到 4.2z2 时,升级会在 HEALTH_WARN 状态下完成存储集群,并显示错误消息,显示 monitor 允许不安全的 global_id 重新声明。这是因为补丁的 CVE (CVE-2021-20288),请参阅 带有 'mons 的 Ceph HEALTH_WARN 在安装/升级到 RHCS 4.2z2 (或更新版本)后允许不安全的 global_id reclaim'

由于 CVE 因 CVE 而显示 HEALTH_WARN 状态,因此可以临时静默健康警告。但是,如果您更改了警告,您没有了解连接到集群的潜在旧和未修补的客户端,则存在风险。有关沟通健康警告的更多信息,请参阅 Red Hat Ceph Storage 文档中的升级 Red Hat Ceph Storage 集群

重要

在所有客户端都已升级前,不要手动禁用 global_id_reclaim,否则它们无法连接。您可以以 root 用户身份运行以下命令查看连接到集群的未修补客户端列表:

# ceph health detail

在升级 overcloud 后,将 director 部署的 Ceph Storage 集群升级到 Red Hat Ceph Storage 集群版本 4。

23.1. 安装 ceph-ansible

如果您的部署使用了使用 director 部署的 Red Hat Ceph Storage 集群,则必须完成此流程。

当在 Red Hat OpenStack Platform 中使用 Ceph Storage 时,需要 ceph-ansible 软件包。

流程

  1. 启用 Ceph 工具存储库:

    [stack@director ~]$ sudo subscription-manager repos --enable=rhceph-4-tools-for-rhel-8-x86_64-rpms
  2. 安装 ceph-ansible 软件包:

    [stack@director ~]$ sudo dnf install -y ceph-ansible

23.2. 升级到 Ceph Storage 4

将 Ceph Storage 节点从版本 3 升级到 4 版本。

注意

如果您不使用默认的堆栈名称(overcloud),使用 --stack STACK NAME选项设置堆栈名称,将 STACK NAME 替换为堆栈的名称。

流程

  1. Source stackrc 文件:

    $ source ~/stackrc
  2. 使用 ceph 标签运行 Ceph Storage 外部升级过程:

    $ openstack overcloud external-upgrade run --stack STACK NAME --tags ceph
  3. 等待 Ceph Storage 升级完成。

第 24 章 OSD 从 FileStore 迁移到 BlueStore

完成并验证升级过程后,您必须将 FileStore OSD 迁移到 BlueStore。您必须一次完成一个节点。以下流程使用 ceph-ansible 来完成迁移。只有在 director 部署 Ceph 集群时,才会应用此步骤。

24.1. 检查集群是否运行 FileStore,因此需要迁移

流程

  1. heat-admin 用户身份登录具有 Ceph MON 容器的节点,如 Controller 节点或独立 Ceph MON 节点。例如,在标准 overcloud 部署中,overcloud-controller-1 使用 Ceph MON 容器。
  2. 查询 Ceph 集群,以查看 OSD 正在使用哪些驱动程序:

    [heat-admin@overcloud-controller-1 ~]$ sudo -i
    [root@overcloud-controller-1 ~]# podman exec -it ceph-mon-overcloud-controller-1 sh -c "ceph -f json osd metadata" | jq -c 'sort_by(.hostname) | .[] | ["host", .hostname, "osd_id", .id, "objectstore", .osd_objectstore]'
    [root@overcloud-controller-1 ~]#
  3. 如果任一行返回 "objectstore": "filestore",则该节点需要 OSD 迁移。
警告

迁移时间可能会因集群大小而异。如果您有非常大的集群,迁移时间与该集群中的 OSD 数量以及存储的数据量成比例。确保尽快完成了迁移,以便您的环境不会处于混合架构场景中,这会影响性能。

警告

因为使用 Red Hat Ceph Storage (RHCS) 4 版本的 ceph-ansible 管理基于 FileStore 的 OSD 不被支持,所以在运行任何堆栈更新前先完成迁移。

24.2. 将 OSD 从 FileStore 迁移到 BlueStore

要从 FileStore 迁移到 BlueStore,director 使用 Ansible 删除并重新创建节点上的所有 OSD。director 在迁移过程前执行容量检查。最后,director 使用 BlueStore 后端重新定义 OSD。

先决条件

  • 一个正常运行的 Red Hat Ceph Storage (RHCS) 4 集群。您可以通过在 Controller 或 Standalone Ceph MON 节点上的 ceph MON 容器中输入以下命令来检查集群:

    [root@overcloud-controller-1 ~]# podman exec -it ceph-mon-overcloud-controller-1 sh -c  "ceph  -s"

流程

  1. 确保 CephAnsibleDisksConfig 参数中的 osd_objectstore 不默认为 filestore。如果任何自定义 heat 环境文件中存在 osd_objectstore 参数,则必须明确定义 bluestore 的值。

    parameter_defaults:
      CephAnsibleDisksConfig:
        devices:
          - /dev/sdb
          - /dev/sdc
          - /dev/sdd
        osd_scenario: lvm
       osd_objectstore: bluestore
    注意

    如果您使用任何特定的 FileStore 配置,例如日志,请确保相应地更新配置。有关高级配置的更多信息,请参阅 Deploying an overcloud with containerized Red Hat Ceph 指南中的 Mapping the Ceph Storage Node Disk Layout

  2. stack 用户的身份登录 undercloud。
  3. 使用 ceph_fstobs 标签输入 openstack overcloud external-upgrade run 命令。将 <NODE_NAME > 替换为您要升级的 Ceph OSD 节点的名称。您可以使用 openstack server list 命令查找节点名称。

    [stack@undercloud ~] $ openstack overcloud external-upgrade run --tags ceph_fstobs -e ceph_ansible_limit=<NODE_NAME> | tee oc-fstobs.log
  4. 登录具有 Ceph MON 服务的节点,并查询 Ceph 集群来检查您升级的节点 OSD 的状态。在开始迁移下一个 OSD 节点前,您必须确保您已成功迁移升级:

    [heat-admin@overcloud-controller-1 ~]$ sudo -i
    [root@overcloud-controller-1 ~]# podman exec -it ceph-mon-overcloud-controller-1 sh -c "ceph -f json osd metadata" | jq -c '.[] | select(.hostname == "<NODE_NAME>") | ["host", .hostname, "osd_id", .id, "objectstore", .osd_objectstore]'
    [root@overcloud-controller-1 ~]# exit

    将 <NODE_NAME> 替换为迁移的节点的名称。如果结果显示 OSD 使用 BlueStore,则其迁移成功。

  5. 可选: 要查看特定 OSD 的更多详情,请输入以下命令:

    [root@overcloud-controller-1 ~]# podman exec -it ceph-mon-overcloud-controller-1 sh -c "ceph osd metadata <ID>"

    将 <ID> 替换为您要查询的 OSD 的 ID。

  6. 在下一个节点上启动迁移过程前,您必须等待集群同步。

    [root@overcloud-controller-1 ~]# podman exec -it ceph-mon-overcloud-controller-1 sh -c  "ceph  -s"
    Review the command output and ensure that the health of the cluster is `HEALTH_OK` and the PGs are in the `active+clean` state.
  7. 在下一个节点上启动迁移过程前,您必须等待集群重新平衡过程完成。要遵循状态,请运行以下命令:

    [heat-admin@overcloud-controller-0 ~]$ sudo podman exec ceph-mon-<NODE_NAME> ceph -w

    将 <NODE_NAME> 替换为迁移的节点的名称。

  8. 为存储集群中的每个节点重复迁移过程。

有关从 FileStore 迁移到 BlueStore 的更多信息,请参阅 Red Hat Ceph Storage 管理指南中的 BlueStore

24.3. 验证您的 FileStore 到 BlueStore 的迁移

您可以检查 OSD 的状态,以确保您成功完成迁移。

流程

  1. heat-admin 用户身份登录到托管在其中一个 Controller 节点上的 ceph-mon 容器。
  2. 查询 Ceph 集群:

    [heat-admin@overcloud-controller-1 ~]$ sudo -i
    [root@overcloud-controller-1 ~]# podman exec -it ceph-mon-overcloud-controller-1 sh -c "ceph -f json osd metadata" | jq -c 'sort_by(.hostname) | .[] | ["host", .hostname, "osd_id", .id, "objectstore", .osd_objectstore]'
    [root@overcloud-controller-1 ~]#

如果配置显示集群中的所有 OSD 都使用 BlueStore,则迁移成功。

重要

推荐的最佳实践是运行幂等堆栈更新,以确保配置定义和实际配置匹配。堆栈更新持续时间因系统的大小而异,因此您可以减少计划在维护窗口期间完成迁移的停机时间。

第 25 章 执行升级后的操作

完成 overcloud 升级后,您必须执行一些升级后的配置,以确保您的环境被完全支持并准备好进行将来的操作。

25.1. 从 undercloud 中删除不必要的软件包和目录

在 Leapp 升级后,删除 undercloud 上剩余的不必要的软件包和目录。

流程

  1. 删除不必要的软件包

    $ sudo dnf -y remove --exclude=python-pycadf-common python2*
  2. /httpboot/tftpboot 目录中删除包含 Red Hat OpenStack 13 中使用的旧镜像的内容:

    $ sudo rm -rf /httpboot /tftpboot

25.2. 验证升级后的功能

运行 升级后 验证组来检查升级后的功能。

流程

  1. source stackrc 文件:

    $ source ~/stackrc
  2. 使用 --group post-upgrade 选项运行 openstack tripleo validator run 命令:

    $ openstack tripleo validator run --group post-upgrade
  3. 查看验证报告的结果。要查看特定验证的详细输出,请根据报告中具体验证的 UUID 运行 openstack tripleo validator show run --full 命令:

    $ openstack tripleo validator show run --full <UUID>
重要

FAILED 验证不会阻止您部署或运行 Red Hat OpenStack Platform。但是,FAILED 验证可能会显示生产环境中潜在的问题。

25.3. 升级 overcloud 镜像

您必须将您当前的 overcloud 镜像替换为新版本。新镜像可确保 director 可以使用最新版本的 OpenStack Platform 软件内省和调配您的节点。

先决条件

  • 您已将 undercloud 升级到最新版本。

流程

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

    $ source ~/stackrc
  3. 安装包含 overcloud QCOW2 归档的软件包:

    $ sudo dnf install rhosp-director-images rhosp-director-images-ipa
  4. stack 用户的主目录(/home/stack/images)的 images 中删除任何存在的镜像。

    $ rm -rf ~/images/*
  5. 解压存档:

    $ cd ~/images
    $ for i in /usr/share/rhosp-director-images/overcloud-full-latest-16.1.tar /usr/share/rhosp-director-images/ironic-python-agent-latest-16.1.tar; do tar -xvf $i; done
    $ cd ~
  6. 将最新的镜像导入到 director:

    $ openstack overcloud image upload --update-existing --image-path /home/stack/images/
  7. 将您的节点配置为使用新镜像:

    $ openstack overcloud node configure $(openstack baremetal node list -c UUID -f value)
重要

部署 overcloud 节点时,请确保 overcloud 镜像版本与对应的 heat 模板版本对应。例如,仅将 OpenStack Platform 16.1 镜像与 OpenStack Platform 16.1 heat 模板一起使用。

重要

新的 overcloud-full 镜像替换了旧的 overcloud-full 镜像。如果对旧镜像进行了更改,您必须重复新镜像的更改,特别是在将来部署新节点时。

25.4. 更新 CPU 固定参数

Red Hat OpenStack Platform 16.1 使用新参数进行 CPU 固定:

NovaComputeCpuDedicatedSet
设置专用(固定)CPU。
NovaComputeCpuSharedSet
设置共享(未固定)CPU。

在完成升级到 Red Hat OpenStack Platform 16.1 后,您必须将 CPU 固定配置从 NovaVcpuPinSet 参数迁移到 NovaComputeCpuDedicatedSetNovaComputeCpuSharedSet 参数。

流程

  1. stack 用户的身份登录 undercloud。
  2. 如果您的 Compute 节点支持并发多线程(SMT),但创建了带有 hw:cpu_thread_policy=isolate 策略的实例,您必须执行以下选项之一:

    • 取消设置 hw:cpu_thread_policy 线程策略并调整实例大小:

      1. 提供 overcloud 身份验证文件:

        $ source ~/overcloudrc
      2. 取消设置类别的 hw:cpu_thread_policy 属性:

        (overcloud) $ openstack flavor unset --property hw:cpu_thread_policy <flavor>
        注意
        • 取消设置 hw:cpu_thread_policy 属性可将策略设置为默认的 prefer 策略,这会将实例设置为使用启用了 SMT 的 Compute 节点(如果可用)。您还可以将 hw:cpu_thread_policy 属性设置为 require,这将为启用 SMT 的 Compute 节点设置硬要求。
        • 如果 Compute 节点没有 SMT 架构或足够的 CPU 内核,则调度将失败。要防止这种情况,将 hw:cpu_thread_policy 设置为 prefer 而不是 require。默认 首选 策略确保线程同级在可用时被使用。
        • 如果使用 hw:cpu_thread_policy=isolate,则必须禁用 SMT,或使用不支持 SMT 的平台。
      3. 将实例转换为使用新的线程策略。

        (overcloud) $ openstack server resize --flavor <flavor> <server>
        (overcloud) $ openstack server resize confirm <server>

        使用 hw:cpu_thread_policy=isolated 策略为所有固定实例重复此步骤。

    • 从 Compute 节点迁移实例,并在 Compute 节点上禁用 SMT:

      1. 提供 overcloud 身份验证文件:

        $ source ~/overcloudrc
      2. 禁用 Compute 节点接受新虚拟机:

        (overcloud) $ openstack compute service list
        (overcloud) $ openstack compute service set <hostname> nova-compute --disable
      3. 从 Compute 节点迁移所有实例。有关实例迁移的更多信息,请参阅 在 Compute 节点之间迁移虚拟机实例
      4. 重新引导 Compute 节点,并在 Compute 节点的 BIOS 中禁用 SMT。
      5. 引导 Compute 节点。
      6. 重新启用 Compute 节点:

        (overcloud) $ openstack compute service set <hostname> nova-compute --enable
  3. Source stackrc 文件:

    $ source ~/stackrc
  4. 编辑包含 NovaVcpuPinSet 参数的环境文件。
  5. 将 CPU 固定配置从 NovaVcpuPinSet 参数迁移到 NovaComputeCpuDedicatedSetNovaComputeCpuSharedSet

    • NovaVcpuPinSet 的值迁移到之前用于固定实例的主机的 NovaComputeCpuDedicatedSet
    • NovaVcpuPinSet 的值迁移到之前用于未固定实例的主机的 NovaComputeCpuSharedSet
    • 如果没有为 NovaVcpuPinSet 设置值,则所有 Compute 节点内核都应分配给 NovaComputeCpuDedicatedSetNovaComputeCpuSharedSet,具体取决于您要在节点上托管的实例类型。

    例如,您之前的环境文件可能包含以下固定配置:

    parameter_defaults:
      ...
      NovaVcpuPinSet: 1,2,3,5,6,7
      ...

    要将配置迁移到固定配置,请设置 NovaComputeCpuDedicatedSet 参数,然后取消设置 NovaVcpuPinSet 参数:

    parameter_defaults:
      ...
      NovaComputeCpuDedicatedSet: 1,2,3,5,6,7
      NovaVcpuPinSet: ""
      ...

    要将配置迁移到未固定配置,请设置 NovaComputeCpuSharedSet 参数,然后取消设置 NovaVcpuPinSet 参数:

    parameter_defaults:
      ...
      NovaComputeCpuSharedSet: 1,2,3,5,6,7
      NovaVcpuPinSet: ""
      ...
    重要

    确保 NovaComputeCpuDedicatedSetNovaComputeCpuSharedSet 的配置与 NovaVcpuPinSet 中定义的配置匹配。要更改其中任一个的配置,或配置 NovaComputeCpuDedicatedSetNovaComputeCpuSharedSet,请确保在更新配置前,使用固定配置的 Compute 节点不会运行任何实例。

  6. 保存该文件。
  7. 运行部署命令,以使用新的 CPU 固定参数更新 overcloud。

    (undercloud) $ openstack overcloud deploy \
        --stack _STACK NAME_ \
        --templates \
        ...
        -e /home/stack/templates/<compute_environment_file>.yaml
        ...

25.5. 将用户迁移到成员角色

在 Red Hat OpenStack Platform 13 中,默认成员角色称为 _member_
在 Red Hat OpenStack Platform 16.1 中,默认成员角色称为 member

完成从 Red Hat OpenStack Platform 13 升级到 Red Hat OpenStack Platform 16.1 后,分配给 _member_ 角色的用户仍具有该角色。您可以按照以下步骤将所有用户迁移到 member 角色。

先决条件

  • 您已将 overcloud 升级到最新版本。

流程

  1. 列出云中具有 _member_ 角色的所有用户:

    openstack role assignment list --names --role _member_ --sort-column project
  2. 对于每个用户,删除 _member_ 角色,并应用 member 角色:

    openstack role remove --user <user> --project <project>  _member_
    openstack role add --user <user> --project <project>  member

第 26 章 升级问题故障排除

如果您在升级过程中遇到任何问题,请参阅本节中的建议。

26.1. 修正环境文件

如果您在任何自定义环境文件中出现任何参数错误,您可以更正环境文件,并在升级过程中随时运行 openstack overcloud upgrade prepare 命令。此命令将 overcloud 计划的新版本上传到 director,这将生成一组新的 config-download playbook。

本例在 upgrade -environment.yaml 文件中包含一个存储库名称错误:

parameter_defaults:
  UpgradeLeappEnabled: true
  UpgradeLeappCommandOptions: "--enablerepo rhel-7-for-x86_64-baseos-eus-rpms --enablerepo rhel-8-for-x86_64-appstream-eus-rpms --enablerepo fast-datapath-for-rhel-8-x86_64-rpms"
  CephAnsibleRepo: rhceph-4-tools-for-rhel-8-x86_64-rpms

这个错误会在 Controller 节点的 Leapp 升级过程中出现问题。要更正此问题,请更正错误并运行 openstack overcloud upgrade prepare 命令。

流程

  1. 更正文件中的错误:

    parameter_defaults:
      UpgradeLeappEnabled: true
      UpgradeLeappCommandOptions: "--enablerepo rhel-8-for-x86_64-baseos-tus-rpms --enablerepo rhel-8-for-x86_64-appstream-tus-rpms --enablerepo fast-datapath-for-rhel-8-x86_64-rpms"
      CephAnsibleRepo: rhceph-4-tools-for-rhel-8-x86_64-rpms
  2. 使用更正的文件运行 upgrade preparation 命令:

    $ openstack overcloud upgrade prepare \
        --stack STACK NAME \
        --templates \
        -e ENVIRONMENT FILE
        …​
        -e /home/stack/templates/upgrades-environment.yaml \
        …​

    等待 overcloud 堆栈更新完成。

  3. 继续失败的升级操作步骤。
返回顶部
Red Hat logoGithubredditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

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

让开源更具包容性

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

關於紅帽

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

Theme

© 2025 Red Hat, Inc.