保持 Red Hat OpenStack Platform 更新

Red Hat OpenStack Platform 16.1

执行 Red Hat OpenStack Platform 的小更新

OpenStack Documentation Team

摘要

本文档提供了对 Red Hat OpenStack Platform 环境的小更新的步骤。

使开源包含更多

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

对红帽文档提供反馈

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

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

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

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

第 1 章 简介

本文档提供了一个工作流,可帮助您使用最新的软件包和容器更新 Red Hat OpenStack Platform 16.1 环境。

本指南通过以下版本提供升级路径:

旧的 OpenStack 版本新的 OpenStack 版本

Red Hat OpenStack Platform 16.0

Red Hat OpenStack Platform 16.1.z

Red Hat OpenStack Platform 16.1

Red Hat OpenStack Platform 16.1.z

1.1. 高级别工作流

下表概述了升级过程所需的步骤:

StepDescription

更新 undercloud

将 undercloud 更新至最新的 OpenStack Platform 16.1.z 版本。

更新 overcloud

将 overcloud 更新至最新的 OpenStack Platform 16.1.z 版本。

更新 Ceph Storage 节点

升级所有 Ceph Storage 服务。

完成升级

运行 convergence 命令以刷新 overcloud 堆栈。

如果您有多堆栈基础架构,请一次完全更新每个 overcloud 堆栈。如果您有分布式计算节点(DCN)基础架构,请完全在中央位置更新 overcloud,然后在每个边缘站点更新 overcloud,一次逐一更新 overcloud。

更新 RHOSP 环境前的注意事项

要帮助指导您在更新过程中,请考虑以下信息:

  • 红帽建议备份 undercloud 和 overcloud control plane。有关备份节点的更多信息,请参阅 备份和恢复 undercloud 和 control plane 节点
  • 熟悉可能会阻止更新的已知问题。
  • 要识别您当前的维护版本,请运行 $ cat /etc/rhosp-release。您还可以在更新环境后运行此命令来验证更新。

1.2. 可能会阻止更新的问题

查看以下可能影响成功次版本更新的已知问题。

运行 Pacemaker 版本 2.0.3-5.el8_2.4 的 overcloud 节点可能无法成功更新,因为关闭节点上的集群时出现竞争条件。

如果当前安装了 Pacemaker 版本 2.0.3-5.el8_2.4,为了避免 BZ#1973660,您必须在更新 overcloud 节点前升级 Pacemaker。如需更多信息,请参阅以下红帽知识库解决方案 从 OSP16.1 更新至 OSP16.2 可能无法更新某些 HA 容器

+ 对于运行 RHEL 8.2 的节点,且基于可组合角色,您必须先更新 Database 角色,然后才能更新任何其他角色。

已知问题会导致 LDAP 连接在从版本 16.1.6 或更早版本升级到 16.1.7 或更高版本后失败。使用 RHOSP 16.1.7,身份服务(keystone)容器在主机文件系统上挂载 /etc/openldap。如果您之前已从 RHOSP 13 更新,旧的配置文件可能出现在 /etc/openldap 目录中,这会导致 Identity service LDAP 连接失败。

作为临时解决方案,在每个控制器上运行以下命令:

$ sudo cp /etc/openldap/ldap.conf.rpmnew /etc/openldap/ldap.conf
$ sudo podman restart keystone

如果您满足以下条件,在 ovn-controller 重启过程中遍历提供商网络的网络流量会被中断:

  • 您的环境有一个提供商网络,它由提供商网络上的浮动 IP 或直接端口连接
  • 您更新至任何 16.1 发行版本

停机时间可能会因现有工作负载的数量而异。为了避免停机,请在 从早于 16.2.2 的 OSP 更新/升级过程中应用红帽知识库解决方案 Data plane 中断中的临时解决方案,包括所有 16.1 版本

第 2 章 准备次要更新

在开始将 Red Hat OpenStack Platform 16.1 更新至最新的次版本前,您必须遵循一些有关 undercloud 和 overcloud 的准备步骤。

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

Red Hat OpenStack Platform 16.1 在 Red Hat Enterprise Linux 8.2 上被支持。在执行更新前,请将 undercloud 和 overcloud 存储库锁定到 Red Hat Enterprise Linux 8.2 版本,以避免将操作系统升级到更新的次版本。

流程

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

    $ source ~/stackrc
  3. 编辑 overcloud 订阅管理环境文件,它是包含 RhsmVars 参数的文件。此文件的默认名称为 rhsm.yml
  4. 检查 rhsm_release 参数的订阅管理配置。如果没有设置此参数,请添加此参数并将参数设置为 8.2:

    parameter_defaults:
      RhsmVars:
        …​
        rhsm_username: "myusername"
        rhsm_password: "p@55w0rd!"
        rhsm_org_id: "1234567"
        rhsm_pool_ids: "1a85f9223e3d5e43013e3d6e8ff506fd"
        rhsm_method: "portal"
        rhsm_release: "8.2"
  5. 保存 overcloud 订阅管理环境文件。
  6. 创建 overcloud 的静态清单文件:

    $ tripleo-ansible-inventory --ansible_ssh_user heat-admin --static-yaml-inventory ~/inventory.yaml

    如果您使用不同于 overcloud 的默认 overcloud 名称,请使用 --plan 选项来设置 overcloud 的名称。

  7. 创建一个 playbook,其中包含在所有节点上将操作系统版本锁定到 Red Hat Enterprise Linux 8.2 的任务:

    $ cat > ~/set_release.yaml <<'EOF'
    - hosts: all
      gather_facts: false
      tasks:
        - name: set release to 8.2
          command: subscription-manager release --set=8.2
          become: true
    EOF
  8. 运行 set_release.yaml playbook:

    $ ansible-playbook -i ~/inventory.yaml -f 25 ~/set_release.yaml --limit <undercloud>,<Controller>,<Compute>
    • 使用 --limit 选项将内容应用到所有 RHOSP 节点。将 & lt;undercloud& gt ; , <Controller & gt; , <Compute > 替换为环境中包含这些节点的 Ansible 组。
    • 如果您要为这些节点使用不同的订阅,则无法针对 Ceph Storage 节点运行此 playbook。
注意

要将节点手动锁定到版本,登录到节点并运行 subscription-manager release 命令:

$ sudo subscription-manager release --set=8.2

2.2. 从 EUS 存储库更改为 TUS 软件仓库

您的 Red Hat OpenStack Platform 订阅包括 Red Hat Enterprise Linux 8.2 延长更新支持(EUS)的软件仓库。2022 年 4 月 30 日后,您必须启用 RHEL 8.2 Telecommunications Update Service (TUS) 软件仓库进行维护支持。TUS 软件仓库包括 Red Hat Enterprise Linux 8.2 的最新安全补丁和程序错误修复。在进行更新前切换到以下软件仓库。

EUS 仓库TUS 仓库

rhel-8-for-x86_64-baseos-eus-rpms

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

rhel-8-for-x86_64-appstream-eus-rpms

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

rhel-8-for-x86_64-highavailability-eus-rpms

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

重要

您必须使用 TUS 软件仓库来保持与特定 Podman 版本的兼容性。Podman 的后续版本针对 Red Hat Open Stack Platform 16.1 发行版本未经测试,可能会导致意外的结果。

前提条件

  • RHOSP 16.1 EUS 订阅

流程

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

    $ source ~/stackrc
  3. 编辑 overcloud 订阅管理环境文件,它是包含 RhsmVars 参数的文件。此文件的默认名称为 rhsm.yml
  4. 在订阅管理配置中检查 rhsm_repos 参数。如果此参数不包含 TUS 存储库,请将相关的软件仓库改为 TUS 版本:

    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
          - ansible-2.9-for-rhel-8-x86_64-rpms
          - advanced-virt-for-rhel-8-x86_64-rpms
          - openstack-16.1-for-rhel-8-x86_64-rpms
          - rhceph-4-tools-for-rhel-8-x86_64-rpms
          - fast-datapath-for-rhel-8-x86_64-rpms
  5. 保存 overcloud 订阅管理环境文件。
  6. 创建 overcloud 的静态清单文件:

    $ tripleo-ansible-inventory --ansible_ssh_user heat-admin --static-yaml-inventory ~/inventory.yaml

    如果您使用与 overcloud 的默认 overcloud 名称不同的 overcloud 名称,请使用 --plan 选项来设置 overcloud 的名称。

  7. 创建一个 playbook,其中包含在所有节点上将存储库设置为 Red Hat Enterprise Linux 8.2 TUS 的任务:

    $ cat > ~/change_tus.yaml <<'EOF'
    - hosts: all
      gather_facts: false
      tasks:
        - name: change to tus repos
          command: subscription-manager repos --disable=rhel-8-for-x86_64-baseos-eus-rpms --disable=rhel-8-for-x86_64-appstream-eus-rpms --disable=rhel-8-for-x86_64-highavailability-eus-rpms --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
          become: true
    EOF
  8. 运行 change_tus.yaml playbook:

    $ ansible-playbook -i ~/inventory.yaml -f 25 ~/change_tus.yaml --limit <undercloud>,<Controller>,<Compute>
    • 使用 --limit 选项将内容应用到所有 RHOSP 节点。将 & lt;undercloud& gt ; , <Controller & gt; , <Compute > 替换为环境中包含这些节点的 Ansible 组。
    • 如果您要为这些节点使用不同的订阅,则无法针对 Ceph Storage 节点运行此 playbook。

2.3. 更新 Red Hat Openstack Platform 和 Ansible 软件仓库

更新您的存储库,以使用 Red Hat OpenStack Platform 16.1 和 Ansible 2.9 软件包。

流程

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

    $ source ~/stackrc
  3. 编辑 overcloud 订阅管理环境文件,它是包含 RhsmVars 参数的文件。此文件的默认名称为 rhsm.yml
  4. 在订阅管理配置中检查 rhsm_repos 参数。如果 rhsm_repos 参数使用 Red Hat OpenStack Platform 16.0 和 Ansible 2.8 软件仓库,请将存储库改为正确的版本:

    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
          - ansible-2.9-for-rhel-8-x86_64-rpms
          - advanced-virt-for-rhel-8-x86_64-rpms
          - openstack-16.1-for-rhel-8-x86_64-rpms
          - fast-datapath-for-rhel-8-x86_64-rpms
  5. 保存 overcloud 订阅管理环境文件。
  6. 创建 overcloud 的静态清单文件:

    $ tripleo-ansible-inventory --ansible_ssh_user heat-admin --static-yaml-inventory ~/inventory.yaml

    如果您使用与 overcloud 的默认 overcloud 名称不同的 overcloud 名称,请使用 --plan 选项来设置 overcloud 的名称。

  7. 创建一个 playbook,其中包含将存储库设置为所有节点上的 Red Hat OpenStack Platform 16.1 的任务:

    $ cat > ~/update_rhosp_repos.yaml <<'EOF'
    - hosts: all
      gather_facts: false
      tasks:
        - name: change osp repos
          command: subscription-manager repos --disable=openstack-16-for-rhel-8-x86_64-rpms --enable=openstack-16.1-for-rhel-8-x86_64-rpms --disable=ansible-2.8-for-rhel-8-x86_64-rpms --enable=ansible-2.9-for-rhel-8-x86_64-rpms
          become: true
    EOF
  8. 运行 update_rhosp_repos.yaml playbook:

    $ ansible-playbook -i ~/inventory.yaml -f 25 ~/update_rhosp_repos.yaml --limit <undercloud>,<Controller>,<Compute>
    • 使用 --limit 选项将内容应用到所有 RHOSP 节点。将 & lt;undercloud& gt ; , <Controller & gt; , <Compute > 替换为环境中包含这些节点的 Ansible 组。
    • 如果您要为这些节点使用不同的订阅,则无法针对 Ceph Storage 节点运行此 playbook。
  9. 创建一个 playbook,其中包含将存储库设置为所有节点上的 Red Hat OpenStack Platform 16.1 的任务:

    $ cat > ~/update_ceph_repos.yaml <<'EOF'
    - hosts: all
      gather_facts: false
      tasks:
        - name: change ceph repos
          command: subscription-manager repos --disable=openstack-16-deployment-tools-for-rhel-8-x86_64-rpms --enable=openstack-16.1-deployment-tools-for-rhel-8-x86_64-rpms --disable=ansible-2.8-for-rhel-8-x86_64-rpms --enable=ansible-2.9-for-rhel-8-x86_64-rpms
          become: true
    EOF
  10. 运行 update_ceph_repos.yaml playbook:

    $ ansible-playbook -i ~/inventory.yaml -f 25 ~/update_ceph_repos.yaml --limit CephStorage

    使用 --limit 选项,将内容应用到 Ceph Storage 节点。

2.4. 设置 container-tools 版本

container-tools 模块设置为版本 2.0,以确保在所有节点上使用正确的软件包版本。

流程

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

    $ source ~/stackrc
  3. 创建 overcloud 的静态清单文件:

    $ tripleo-ansible-inventory --ansible_ssh_user heat-admin --static-yaml-inventory ~/inventory.yaml

    如果您使用不同于 overcloud 的默认 overcloud 名称,请使用 --plan 选项来设置 overcloud 的名称。

  4. 创建一个 playbook,其中包含一个任务,在所有节点上将 container-tools 模块设置为版本 2.0:

    $ cat > ~/container-tools.yaml <<'EOF'
    - hosts: all
      gather_facts: false
      tasks:
        - name: disable default dnf module for container-tools
          command: dnf module reset -y container-tools
          become: true
        - name: set dnf module for container-tools:2.0
          command: dnf module enable -y container-tools:2.0
          become: true
    EOF
  5. 针对所有节点运行 container-tools.yaml playbook:

    $ ansible-playbook -i ~/inventory.yaml -f 25 ~/container-tools.yaml

2.5. 更新容器镜像准备文件

您的容器准备文件是包含 ContainerImagePrepare 参数的文件。您可以使用此文件来定义为 undercloud 和 overcloud 获取容器镜像的规则。在更新环境前,请检查 文件以确保获取正确的镜像版本。

流程

  1. 编辑容器准备文件。此文件的默认名称为 containers-prepare-parameter.yaml
  2. 检查每个规则集的 tag 参数设置为 16.1

    parameter_defaults:
      ContainerImagePrepare:
      - push_destination: true
        set:
          …​
          tag: '16.1'
        tag_from_label: '{version}-{release}'
注意

如果您不想将特定的标签用于更新,如 16.116.1.2,请删除标签键-值对,并只指定 tag _from_label。在确定要用作更新过程中的标签的值时,将使用安装的 Red Hat OpenStack Platform 版本。

  1. 保存这个文件。

2.6. 更新 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 公共端点文件。

2.7. 在 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. fence.yaml 环境文件中,将 EnableFencing 参数设置为 false,以确保在更新过程中禁用隔离功能。

第 3 章 更新 undercloud

此流程将 undercloud 及其 overcloud 镜像更新至最新的 Red Hat OpenStack Platform 16.1 版本。

3.1. 执行容器化 undercloud 的小更新

director 提供了 命令来更新 undercloud 节点上的主要软件包。这样,您可以在当前版本的 OpenStack Platform 环境中执行次要更新。

流程

  1. stack 用户身份登录 director。
  2. 运行 dnf 以升级 director 主软件包:

    $ sudo dnf update -y python3-tripleoclient* tripleo-ansible ansible
  3. director 使用 openstack undercloud upgrade 命令更新 undercloud 环境。运行以下命令:

    $ openstack undercloud upgrade
  4. 等待 undercloud 升级过程完成。
  5. 重新引导 undercloud 以更新操作系统的内核和其他系统软件包:

    $ sudo reboot
  6. 稍等片刻,直到节点启动。

3.2. 更新 overcloud 镜像

您需要将当前的 overcloud 镜像替换为新版本。新镜像确保 director 可以使用最新版本的 OpenStack Platform 软件内省和置备节点。

前提条件

  • 您已将 undercloud 更新至最新版本。

流程

  1. Source stackrc 文件:

    $ source ~/stackrc
  2. stack 用户的主目录(/home/stack/images)的 images 中删除任何存在的镜像。

    $ rm -rf ~/images/*
  3. 解压存档:

    $ 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 ~
  4. 将最新的镜像导入到 director:

    $ openstack overcloud image upload --update-existing --image-path /home/stack/images/
  5. 将节点配置为使用新镜像:

    $ openstack overcloud node configure $(openstack baremetal node list -c UUID -f value)
  6. 验证新镜像是否存在:

    $ openstack image list
    $ ls -l /var/lib/ironic/httpboot
重要
  • 在部署 overcloud 节点时,请确保 overcloud 镜像版本对应于对应的 heat 模板版本。例如,只使用带有 RHOSP 16.1 heat 模板的 RHOSP 16.1 镜像。
  • 如果您部署了使用红帽客户门户网站或 Red Hat Satellite Server 的连接的环境,则 overcloud 镜像和软件包存储库版本可能没有同步。为确保 overcloud 镜像和软件包存储库版本相匹配,您可以使用 virt-customize 工具。有关更多信息,请参阅红帽知识库解决方案 使用 virt-customize 修改 Red Hat Linux OpenStack Platform Overcloud 镜像
  • 新的 overcloud-full 镜像替换旧的 overcloud-full 镜像。如果对旧镜像进行了更改,您必须对新镜像重复更改,特别是未来要部署新节点时。

3.3. undercloud 升级后备注

  • 如果您在 stack 用户主目录中使用一组本地核心模板,请参照高级 Overcloud 自定义指南中的使用自定义核心 heat 模板中推荐的工作流来更新模板。在升级 overcloud 之前,您必须更新本地副本。

第 4 章 更新 overcloud

更新 undercloud 后,您可以通过运行 overcloud 和容器镜像准备命令、更新节点并运行 overcloud 更新 聚合命令来更新 overcloud。control plane API 在次版本更新过程中完全可用。

前提条件

  • 您已将 undercloud 更新至最新版本。

4.1. 运行 overcloud 更新准备

要为更新过程准备 overcloud,请运行 openstack overcloud update prepare 命令,它将执行以下任务:

  • 将 overcloud 计划更新为 OpenStack Platform 16.1
  • 为更新准备节点

前提条件

  • 如果使用 Ceph 订阅并将 director 配置为使用 Ceph 存储节点的 overcloud-minimal 镜像,您必须确保 roles_data.yaml 角色定义文件中,则 rhsm_enforce 参数设置为 False
  • 如果您渲染自定义 NIC 模板,则必须使用 openstack-tripleo-heat-templates 集合的更新版本重新生成模板,以避免与 overcloud 版本不兼容。有关自定义 NIC 模板的更多信息,请参阅高级 Overcloud 自定义指南中的 自定义默认网络接口模板

流程

  1. Source stackrc 文件:

    $ source ~/stackrc
  2. 运行更新准备命令:

    $ openstack overcloud update prepare \
        --templates \
        --stack <stack_name> \
        -r <roles_data_file> \
        -n <network_data_file> \
        -e <environment_file> \
        -e <environment_file> \
        …​

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

    • 如果 overcloud 堆栈的名称与默认名称 overcloud 不同,请在更新准备命令中包含 --stack 选项,并将 < stack_name& gt; 替换为您的堆栈的名称。
    • 如果您使用自己的自定义角色,请包含您的自定义角色(<roles_data>)文件 (-r)。
    • 如果您使用自定义网络,请包含可组合网络(_<network_data>)文件 _ (-n)。
    • 如果您部署高可用性集群,请在 update preparation 命令中包含 --ntp-server 选项,或者在环境文件中包含 NtpServer 参数和值。
    • 任何自定义配置环境文件(-e)。
  3. 等待更新准备完成。

4.2. 运行容器镜像准备

在执行更新前,overcloud 需要最新的 OpenStack Platform 16.1 容器镜像。这包括执行 container_image_prepare 外部更新过程。要执行这个过程,您必须针对带有 container_image_prepare 标签标记的任务运行 openstack overcloud external-update run 命令。这些任务执行以下操作:

  • 自动准备与您的环境相关的所有容器镜像配置。
  • 将相关容器镜像拉取到 undercloud,除非您之前禁用了这个选项。
注意

如果不使用默认堆栈名称(overcloud),请使用 --stack <stack_name> 选项替换 &lt ;stack_name& gt; 选项设置堆栈名称,并将 < stack_name > 替换为您的堆栈的名称。

流程

  1. Source stackrc 文件:

    $ source ~/stackrc
  2. 针对带有 container_image_prepare 标签的任务运行 openstack overcloud external-update run 命令:

    $ openstack overcloud external-update run --stack <stack_name> --tags container_image_prepare

4.3. 可选:更新所有 overcloud 服务器上的 ovn-controller 容器

如果您使用 Modular Layer 2 Open Virtual Network 机制驱动程序(ML2/OVN)部署 overcloud,请将 ovn-controller 容器更新至最新的 RHOSP 16.1 版本。更新在运行 ovn-controller 容器的每个 overcloud 服务器上发生。

注意

如果您不使用默认的堆栈名称(即 overcloud ),请将您的堆栈名称设置为 --stack < stack_name&gt; 选项,并将 &lt ;stack_name > 替换为堆栈的名称。

流程

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

    $ source ~/stackrc
  3. 针对具有 ovn 标签的任务运行 openstack overcloud external-update run 命令:

    $ openstack overcloud external-update run --stack <stack_name> --tags ovn
  4. 等待 ovn-controller 容器更新完成。

4.4. 更新所有 Controller 节点

此过程会将所有 Controller 节点更新至最新的 OpenStack Platform 16.1 版本。此过程涉及运行 openstack overcloud update run 命令,包括 --limit Controller 选项,以仅限制操作到 Controller 节点。control plane API 在次版本更新过程中完全可用。

重要

在解决 BZ#1872404 之前,对于基于可组合角色的节点,您必须先更新 Database 角色,然后再更新 Controller, Messaging, Compute, Ceph 和其他角色。

注意

如果不使用默认堆栈名称(overcloud),请使用 --stack <stack_name> 选项替换 &lt ;stack_name& gt; 选项设置堆栈名称,并将 < stack_name > 替换为您的堆栈的名称。

流程

  1. Source stackrc 文件:

    $ source ~/stackrc
  2. 运行更新命令:

    $ openstack overcloud update run --stack <stack_name> --limit Controller
  3. 等待 Controller 节点更新完成。

4.5. 更新所有 Compute 节点

此流程将所有 Compute 节点更新至最新的 OpenStack Platform 16.1 版本。此过程涉及运行 openstack overcloud update run 命令,包括 --limit Compute 选项,以限制仅向 Compute 节点限制操作。

并行化注意事项

当您更新大量计算节点以提高性能时,您可以使用 20 个节点并行使用 --limit Compute 选项运行 openstack overcloud update 命令。例如,如果您的部署中有 80 个 Compute 节点,您可以运行以下命令并行更新 Compute 节点:

$ openstack overcloud update run -y --limit 'Compute[0:19]' > update-compute-0-19.log 2>&1 &
$ openstack overcloud update run -y --limit 'Compute[20:39]' > update-compute-20-39.log 2>&1 &
$ openstack overcloud update run -y --limit 'Compute[40:59]' > update-compute-40-59.log 2>&1 &
$ openstack overcloud update run -y --limit 'Compute[60:79]' > update-compute-60-79.log 2>&1 &

'Compute[0:19]', 'Compute[20:39]', 'Compute[40:59]',, and 'Compute[60:79]' ' 方法对节点空间进行随机分区,您没有控制要更新哪些节点。

要更新特定的 Compute 节点,列出您要在以逗号分开的批处理中更新的节点:

$ openstack overcloud update run --limit <Compute0>,<Compute1>,<Compute2>,<Compute3>
注意

如果不使用默认堆栈名称(overcloud),请使用 --stack <stack_name> 选项替换 &lt ;stack_name& gt; 选项设置堆栈名称,并将 < stack_name > 替换为您的堆栈的名称。

流程

  1. Source stackrc 文件:

    $ source ~/stackrc
  2. 运行更新命令:

    $ openstack overcloud update run --stack <stack_name> --limit Compute
  3. 等待 Compute 节点更新完成。

4.6. 更新所有 HCI Compute 节点

此过程更新超融合基础架构(HCI) Compute 节点。进程涉及:

  • 运行 openstack overcloud update run 命令,并包括 --limit ComputeHCI 选项,将操作限制为仅限 HCI 节点。
  • 运行 openstack overcloud external-update run --tags ceph 命令,以执行对容器化 Red Hat Ceph Storage 4 集群的更新。
注意

如果不使用默认堆栈名称(overcloud),请使用 --stack <stack_name> 选项替换 &lt ;stack_name& gt; 选项设置堆栈名称,并将 < stack_name > 替换为您的堆栈的名称。

先决条件

  • 在运行 ceph-mon 服务的 Ceph Monitor 或 Controller 节点上,检查 Red Hat Ceph Storage 集群是否正常运行,并且 pg 状态是 active+clean

    $ sudo podman exec -it ceph-mon-controller-0 ceph -s

    如果 Ceph 集群处于健康状态,它将返回 HEALTH_OK 状态。

    如果 Ceph 集群状态不健康,它将返回 HEALTH_WARNHEALTH_ERR 状态。有关故障排除指南,请参阅 Red Hat Ceph Storage 4 故障排除指南

流程

  1. Source stackrc 文件:

    $ source ~/stackrc
  2. 运行更新命令:

    $ openstack overcloud update run --stack <stack_name> --limit ComputeHCI
  3. 等待节点更新完成。
  4. 运行 Ceph Storage update 命令。例如:

    $ openstack overcloud external-update run --stack <stack_name> --tags ceph
  5. 等待计算 HCI 节点更新完成。

4.7. 更新所有 Ceph Storage 节点

此过程更新 Ceph Storage 节点。进程涉及:

  • 运行 openstack overcloud update run 命令,包括 --limit CephStorage 选项,以仅将操作限制为 Ceph Storage 节点。
  • 运行 openstack overcloud external-update run 命令以外部进程运行 ceph-ansible,并更新 Red Hat Ceph Storage 3 容器。
重要

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

注意

如果不使用默认堆栈名称(overcloud),请使用 --stack <stack_name> 选项替换 &lt ;stack_name& gt; 选项设置堆栈名称,并将 < stack_name > 替换为您的堆栈的名称。

先决条件

  • 在运行 ceph-mon 服务的 Ceph Monitor 或 Controller 节点上,检查 Red Hat Ceph Storage 集群是否正常运行,并且 pg 状态是 active+clean

    $ sudo podman exec -it ceph-mon-controller-0 ceph -s

    如果 Ceph 集群处于健康状态,它将返回 HEALTH_OK 状态。

    如果 Ceph 集群状态不健康,它将返回 HEALTH_WARNHEALTH_ERR 状态。有关故障排除指南,请参阅 Red Hat Ceph Storage 4 故障排除指南

流程

  1. Source stackrc 文件:

    $ source ~/stackrc
  2. 更新组节点。

    更新组中的所有节点:

    $ openstack overcloud update run --limit <GROUP_NAME>

    更新组中的单个节点:

    $ openstack overcloud update run --limit <GROUP_NAME> [NODE_INDEX]
    注意

    如果您选择单独更新节点,请确保您更新所有节点。

    组中第一个节点的索引为零(0)。例如,要更新名为 CephStorage 的组中的第一个节点:

    openstack overcloud update run --limit CephStorage[0]

  3. 等待节点更新完成。
  4. 运行 Ceph Storage 容器更新命令:

    $ openstack overcloud external-update run --tags ceph
  5. 等待 Ceph Storage 容器更新完成。

4.8. 执行在线数据库更新

有些 overcloud 组件需要其数据库表的在线升级(或迁移)。这包括执行 online_upgrade 外部更新过程。要执行这个过程,请针对带有 online_upgrade 标签标记的任务 运行 openstack overcloud external-update 命令。这会对以下组件执行在线数据库更新:

  • OpenStack Block Storage (cinder)
  • OpenStack Compute (nova)

流程

  1. Source stackrc 文件:

    $ source ~/stackrc
  2. 针对使用 online_upgrade 标签的 任务运行 openstack overcloud external-update

    $ openstack overcloud external-update run --tags online_upgrade

4.9. 对更新进行最终大小

更新需要最后一步来更新 overcloud 堆栈。这样可确保堆栈的资源结构与 OpenStack Platform 16.1 的常规部署保持一致,并允许您在以后执行标准的 openstack overcloud deploy 功能。

流程

  1. Source stackrc 文件:

    $ source ~/stackrc
  2. 要在 overcloud 中重新启用隔离,在 fence.yaml 环境文件中将 EnableFencing 参数设置为 true
  3. 运行更新最终化命令:

    $ openstack overcloud update converge \
        --templates \
        --stack <stack_name> \
        -r <roles_data_file> \
        -n <network_data_file> \
        -e <environment_file> \
        -e <environment_file> \
        ...
        ...

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

    • fence.yaml 环境文件,将 EnableFencing 参数设置为 true
    • 如果 overcloud 堆栈的名称与默认名称 overcloud 不同,请在更新准备命令中包含 --stack 选项,并将 < stack_name& gt; 替换为您的堆栈的名称。
    • 如果使用自己的自定义角色,请包含您的自定义角色(<roles_data>)文件(-r)
    • 如果使用自定义网络,请包含可组合网络(<network_data>)文件(-n)
    • 任何自定义配置环境文件(-e)。
  4. 等待更新最终完成。

第 5 章 重新引导 overcloud

在次要 Red Hat OpenStack 版本更新后,重启您的 overcloud。重启会更新带有任何关联的内核、系统级别和容器组件更新的节点。这些更新可能会提供性能和安全性优势。

计划停机时间来执行以下重启过程。

5.1. 重新引导 Controller 和可组合节点

完成以下步骤以基于可组合角色重新引导 Controller 节点和独立节点,不包括 Compute 节点和 Ceph Storage 节点。

步骤

  1. 登录您要重新引导的节点。
  2. 可选:如果节点使用 Pacemaker 资源,请停止集群:

    [heat-admin@overcloud-controller-0 ~]$ sudo pcs cluster stop
  3. 重新引导节点:

    [heat-admin@overcloud-controller-0 ~]$ sudo reboot
  4. 稍等片刻,直到节点启动。
  5. 检查服务。例如:

    1. 如果该节点使用 Pacemaker 服务,请检查该节点是否已重新加入集群:

      [heat-admin@overcloud-controller-0 ~]$ sudo pcs status
    2. 如果该节点使用 Systemd 服务,请检查是否所有服务都已启用:

      [heat-admin@overcloud-controller-0 ~]$ sudo systemctl status
    3. 如果该节点使用容器化服务,则检查节点上的所有容器是否已激活:

      [heat-admin@overcloud-controller-0 ~]$ sudo podman ps

5.2. 重新引导 Ceph Storage (OSD) 集群

完成以下步骤以重新引导 Ceph Storage (OSD) 节点集群。

先决条件

  • 在运行 ceph-mon 服务的 Ceph Monitor 或 Controller 节点上,检查 Red Hat Ceph Storage 集群是否正常运行,并且 pg 状态是 active+clean

    $ sudo podman exec -it ceph-mon-controller-0 ceph -s

    如果 Ceph 集群处于健康状态,它将返回 HEALTH_OK 状态。

    如果 Ceph 集群状态不健康,它将返回 HEALTH_WARNHEALTH_ERR 状态。有关故障排除指南,请参阅 Red Hat Ceph Storage 4 故障排除指南

步骤

  1. 登录到运行 ceph-mon 服务的 Ceph Monitor 或 Controller 节点,并临时禁用 Ceph Storage 集群重新平衡:

    $ sudo podman exec -it ceph-mon-controller-0 ceph osd set noout
    $ sudo podman exec -it ceph-mon-controller-0 ceph osd set norebalance
    注意

    如果您有多堆栈或分布式计算节点(DCN)架构,则必须在设置 nooutnorebalance 标志时指定集群名称。例如: sudo podman exec -it ceph-mon-controller-0 ceph osd set noout --cluster <cluster_name>

  2. 选择第一个要重新引导的 Ceph Storage 节点并登录到该节点。
  3. 重新引导节点:

    $ sudo reboot
  4. 稍等片刻,直到节点启动。
  5. 登录到节点,并检查集群的状态:

    $ sudo podman exec -it ceph-mon-controller-0 ceph status

    确认 pgmap 报告的所有 pgs 的状态是否都正常 (active+clean)。

  6. 注销节点,重新引导下一个节点,并检查其状态。重复此流程,直到您已重新引导所有 Ceph 存储节点。
  7. 完成后,登录到运行 ceph-mon 服务的 Ceph Monitor 或 Controller 节点,并重新启用集群重新平衡:

    $ sudo podman exec -it ceph-mon-controller-0 ceph osd unset noout
    $ sudo podman exec -it ceph-mon-controller-0 ceph osd unset norebalance
    注意

    如果您有多堆栈或分布式计算节点(DCN)架构,您必须在取消设置 nooutnorebalance 标志时指定集群名称。例如: sudo podman exec -it ceph-mon-controller-0 ceph osd set noout --cluster <cluster_name>

  8. 执行最后的状态检查,确认集群报告 HEALTH_OK

    $ sudo podman exec -it ceph-mon-controller-0 ceph status

5.3. 重新引导 Compute 节点

完成以下步骤以重新引导 Compute 节点。为确保 Red Hat OpenStack Platform 环境中实例的停机时间最少,此步骤还包括有关从您要重新引导的 Compute 节点迁移实例的说明。其中会涉及以下工作流:

  • 决定是否在重新引导节点前将实例迁移到另一个 Compute 节点。
  • 选择并禁用您要重新引导的 Compute 节点,使其不置备新实例。
  • 将实例迁移到另一个 Compute 节点中。
  • 重新引导空的 Compute 节点。
  • 启用空的 Compute 节点。

先决条件

重启 Compute 节点之前,必须决定是否在节点重启过程中将实例迁移到另一个 Compute 节点。

查看在 Compute 节点之间迁移虚拟机实例时可能遇到的迁移约束列表。如需更多信息,请参阅为实例创建配置 Compute Service 中的迁移限制

如果您无法迁移实例,则可设置以下核心模板参数以在 Compute 节点重启后控制实例的状态:

NovaResumeGuestsStateOnHostBoot
确定重新引导后是否将实例返回 Compute 节点上的相同状态。设为 False 时,实例保持关闭,必须手动启动。默认值为:False
NovaResumeGuestsShutdownTimeout
重启前等待实例被关闭的时间(以秒为单位)。建议不要将此值设置为 0。默认值为:300

有关 overcloud 参数及其用法的更多信息,请参见 Overcloud 参数

步骤

  1. stack 用户的身份登录 undercloud。
  2. 列出所有的 Compute 节点及其 UUID:

    $ source ~/stackrc
    (undercloud) $ openstack server list --name compute

    识别您要重新引导的 Compute 节点的 UUID。

  3. 从 undercloud 中,选择 Compute 节点。禁用该节点:

    $ source ~/overcloudrc
    (overcloud) $ openstack compute service list
    (overcloud) $ openstack compute service set <hostname> nova-compute --disable
  4. 列出 Compute 节点上的所有实例:

    (overcloud) $ openstack server list --host <hostname> --all-projects
  5. 如果您决定不迁移实例,则跳至此步骤
  6. 如果您决定将实例迁移至另一个 Compute 节点,则使用以下命令之一:

    • 将实例迁移至其他主机:

      (overcloud) $ openstack server migrate <instance_id> --live <target_host> --wait
    • nova-scheduler 自动选择目标主机:

      (overcloud) $ nova live-migration <instance_id>
    • 一次性实时迁移所有实例:

      $ nova host-evacuate-live <hostname>
      注意

      nova 命令可能会引发一些弃用警告,这些警告信息可以被安全忽略。

  7. 稍等片刻,直至迁移完成。
  8. 确认迁移成功完成:

    (overcloud) $ openstack server list --host <hostname> --all-projects
  9. 继续迁移实例,直到所选 Compute 节点中不剩任何实例。
  10. 登录到 Compute 节点并重启节点:

    [heat-admin@overcloud-compute-0 ~]$ sudo reboot
  11. 稍等片刻,直到节点启动。
  12. 重新启用 Compute 节点:

    $ source ~/overcloudrc
    (overcloud) $ openstack compute service set <hostname>  nova-compute --enable
  13. 确认是否已启用 Compute 节点:

    (overcloud) $ openstack compute service list