保持 Red Hat OpenStack Platform 更新
执行 Red Hat OpenStack Platform 的小更新
OpenStack Documentation Team
rhos-docs@redhat.com
摘要
使开源包含更多
红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。我们从这四个术语开始:master、slave、黑名单和白名单。由于此项工作十分艰巨,这些更改将在即将推出的几个发行版本中逐步实施。详情请查看 CTO Chris Wright 的信息。
对红帽文档提供反馈
我们感谢您对文档提供反馈信息。与我们分享您的成功秘诀。
使用直接文档反馈(DDF)功能
使用 添加反馈 DDF 功能,用于特定句子、段落或代码块上的直接注释。
- 以 Multi-page HTML 格式查看文档。
- 请确定您看到文档右上角的 反馈 按钮。
- 用鼠标指针高亮显示您想评论的文本部分。
- 点 添加反馈。
- 在添加反馈项中输入您的意见。
- 可选:添加您的电子邮件地址,以便文档团队可以联系您以讨论您的问题。
- 点 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. 高级别工作流
下表概述了升级过程所需的步骤:
Step | Description |
---|---|
更新 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 版本,以避免将操作系统升级到更新的次版本。
流程
-
以
stack
用户的身份登录 undercloud。 Source
stackrc
文件:$ source ~/stackrc
-
编辑 overcloud 订阅管理环境文件,它是包含
RhsmVars
参数的文件。此文件的默认名称为rhsm.yml
。 检查
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"
- 保存 overcloud 订阅管理环境文件。
创建 overcloud 的静态清单文件:
$ tripleo-ansible-inventory --ansible_ssh_user heat-admin --static-yaml-inventory ~/inventory.yaml
如果您使用不同于
overcloud
的默认 overcloud 名称,请使用--plan
选项来设置 overcloud 的名称。创建一个 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
运行
set_release.yaml
playbook:$ ansible-playbook -i ~/inventory.yaml -f 25 ~/set_release.yaml --limit <undercloud>,<Controller>,<Compute>
-
使用
--limit
选项将内容应用到所有 RHOSP 节点。将 <undercloud&
gt; , <Controller
> , <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 订阅
流程
-
以
stack
用户的身份登录 undercloud。 Source
stackrc
文件:$ source ~/stackrc
-
编辑 overcloud 订阅管理环境文件,它是包含
RhsmVars
参数的文件。此文件的默认名称为rhsm.yml
。 在订阅管理配置中检查
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
- 保存 overcloud 订阅管理环境文件。
创建 overcloud 的静态清单文件:
$ tripleo-ansible-inventory --ansible_ssh_user heat-admin --static-yaml-inventory ~/inventory.yaml
如果您使用与
overcloud
的默认 overcloud 名称不同的 overcloud 名称,请使用--plan
选项来设置 overcloud 的名称。创建一个 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
运行
change_tus.yaml
playbook:$ ansible-playbook -i ~/inventory.yaml -f 25 ~/change_tus.yaml --limit <undercloud>,<Controller>,<Compute>
-
使用
--limit
选项将内容应用到所有 RHOSP 节点。将 <undercloud&
gt; , <Controller
> , <Compute
> 替换为环境中包含这些节点的 Ansible 组。 - 如果您要为这些节点使用不同的订阅,则无法针对 Ceph Storage 节点运行此 playbook。
-
使用
2.3. 更新 Red Hat Openstack Platform 和 Ansible 软件仓库
更新您的存储库,以使用 Red Hat OpenStack Platform 16.1 和 Ansible 2.9 软件包。
流程
-
以
stack
用户的身份登录 undercloud。 Source
stackrc
文件:$ source ~/stackrc
-
编辑 overcloud 订阅管理环境文件,它是包含
RhsmVars
参数的文件。此文件的默认名称为rhsm.yml
。 在订阅管理配置中检查
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
- 保存 overcloud 订阅管理环境文件。
创建 overcloud 的静态清单文件:
$ tripleo-ansible-inventory --ansible_ssh_user heat-admin --static-yaml-inventory ~/inventory.yaml
如果您使用与
overcloud
的默认 overcloud 名称不同的 overcloud 名称,请使用--plan
选项来设置 overcloud 的名称。创建一个 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
运行
update_rhosp_repos.yaml
playbook:$ ansible-playbook -i ~/inventory.yaml -f 25 ~/update_rhosp_repos.yaml --limit <undercloud>,<Controller>,<Compute>
-
使用
--limit
选项将内容应用到所有 RHOSP 节点。将 <undercloud&
gt; , <Controller
> , <Compute
> 替换为环境中包含这些节点的 Ansible 组。 - 如果您要为这些节点使用不同的订阅,则无法针对 Ceph Storage 节点运行此 playbook。
-
使用
创建一个 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
运行
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
,以确保在所有节点上使用正确的软件包版本。
流程
-
以
stack
用户的身份登录 undercloud。 Source
stackrc
文件:$ source ~/stackrc
创建 overcloud 的静态清单文件:
$ tripleo-ansible-inventory --ansible_ssh_user heat-admin --static-yaml-inventory ~/inventory.yaml
如果您使用不同于
overcloud
的默认 overcloud 名称,请使用--plan
选项来设置 overcloud 的名称。创建一个 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
针对所有节点运行
container-tools.yaml
playbook:$ ansible-playbook -i ~/inventory.yaml -f 25 ~/container-tools.yaml
2.5. 更新容器镜像准备文件
您的容器准备文件是包含 ContainerImagePrepare
参数的文件。您可以使用此文件来定义为 undercloud 和 overcloud 获取容器镜像的规则。在更新环境前,请检查 文件以确保获取正确的镜像版本。
流程
-
编辑容器准备文件。此文件的默认名称为
containers-prepare-parameter.yaml
。 检查每个规则集的
tag
参数设置为16.1
:parameter_defaults: ContainerImagePrepare: - push_destination: true set: … tag: '16.1' tag_from_label: '{version}-{release}'
如果您不想将特定的标签用于更新,如 16.1
或 16.1.2
,请删除标签键-值对,并只指定
。在确定要用作更新过程中的标签的值时,将使用安装的 Red Hat OpenStack Platform 版本。
tag
_from_label
- 保存这个文件。
2.6. 更新 SSL/TLS 配置
从 resource_registry
中删除 NodeTLSData
资源,以更新 SSL/TLS 配置。
流程
-
以
stack
用户的身份登录 undercloud。 Source
stackrc
文件:$ source ~/stackrc
-
编辑自定义 overcloud SSL/TLS 公共端点文件,该文件通常命名为
~/templates/enable-tls.yaml
。 从 '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
部分。- 保存 SSL/TLS 公共端点文件。
2.7. 在 overcloud 中禁用隔离
在更新 overcloud 之前,请确保隔离已被禁用。
如果在 Controller 节点更新过程中部署隔离,则 overcloud 可能会将某些节点视为禁用并尝试隔离操作,这可能会导致意外的结果。
如果您在 overcloud 中启用了隔离,您必须在更新期间临时禁用隔离,以避免出现意外的结果。
流程
-
以
stack
用户的身份登录 undercloud。 source
stackrc
文件:$ source ~/stackrc
登录到一个 Controller 节点,并运行 Pacemaker 命令来禁用隔离:
$ ssh heat-admin@CONTROLLER_IP "sudo pcs property set stonith-enabled=false"
-
在
fence.yaml
环境文件中,将EnableFencing
参数设置为false
,以确保在更新过程中禁用隔离功能。
第 3 章 更新 undercloud
此流程将 undercloud 及其 overcloud 镜像更新至最新的 Red Hat OpenStack Platform 16.1 版本。
3.1. 执行容器化 undercloud 的小更新
director 提供了 命令来更新 undercloud 节点上的主要软件包。这样,您可以在当前版本的 OpenStack Platform 环境中执行次要更新。
流程
-
以
stack
用户身份登录 director。 运行
dnf
以升级 director 主软件包:$ sudo dnf update -y python3-tripleoclient* tripleo-ansible ansible
director 使用
openstack undercloud upgrade
命令更新 undercloud 环境。运行以下命令:$ openstack undercloud upgrade
- 等待 undercloud 升级过程完成。
重新引导 undercloud 以更新操作系统的内核和其他系统软件包:
$ sudo reboot
- 稍等片刻,直到节点启动。
3.2. 更新 overcloud 镜像
您需要将当前的 overcloud 镜像替换为新版本。新镜像确保 director 可以使用最新版本的 OpenStack Platform 软件内省和置备节点。
前提条件
- 您已将 undercloud 更新至最新版本。
流程
Source
stackrc
文件:$ source ~/stackrc
从
stack
用户的主目录(/home/stack/images
)的images
中删除任何存在的镜像。$ rm -rf ~/images/*
解压存档:
$ 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 ~
将最新的镜像导入到 director:
$ openstack overcloud image upload --update-existing --image-path /home/stack/images/
将节点配置为使用新镜像:
$ openstack overcloud node configure $(openstack baremetal node list -c UUID -f value)
验证新镜像是否存在:
$ 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 自定义指南中的 自定义默认网络接口模板。
流程
Source
stackrc
文件:$ source ~/stackrc
运行更新准备命令:
$ 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
)。
-
如果
- 等待更新准备完成。
4.2. 运行容器镜像准备
在执行更新前,overcloud 需要最新的 OpenStack Platform 16.1 容器镜像。这包括执行 container_image_prepare
外部更新过程。要执行这个过程,您必须针对带有 container_image_prepare
标签标记的任务运行 openstack overcloud external-update run
命令。这些任务执行以下操作:
- 自动准备与您的环境相关的所有容器镜像配置。
- 将相关容器镜像拉取到 undercloud,除非您之前禁用了这个选项。
如果不使用默认堆栈名称(overcloud
),请使用 --stack <stack_name> 选项替换 < ;stack_name&
gt; 选项设置堆栈名称,并将 < stack_name
> 替换为您的堆栈的名称。
流程
Source
stackrc
文件:$ source ~/stackrc
针对带有
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>
; 选项,并将 < ;stack_name
> 替换为堆栈的名称。
流程
-
以
stack
用户的身份登录 undercloud。 Source
stackrc
文件:$ source ~/stackrc
针对具有 ovn 标签的任务运行 openstack overcloud external-update run 命令:
$ openstack overcloud external-update run --stack <stack_name> --tags ovn
- 等待 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> 选项替换 < ;stack_name&
gt; 选项设置堆栈名称,并将 < stack_name
> 替换为您的堆栈的名称。
流程
Source
stackrc
文件:$ source ~/stackrc
运行更新命令:
$ openstack overcloud update run --stack <stack_name> --limit Controller
- 等待 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> 选项替换 < ;stack_name&
gt; 选项设置堆栈名称,并将 < stack_name
> 替换为您的堆栈的名称。
流程
Source
stackrc
文件:$ source ~/stackrc
运行更新命令:
$ openstack overcloud update run --stack <stack_name> --limit Compute
- 等待 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> 选项替换 < ;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_WARN
或HEALTH_ERR
状态。有关故障排除指南,请参阅 Red Hat Ceph Storage 4 故障排除指南。
流程
Source
stackrc
文件:$ source ~/stackrc
运行更新命令:
$ openstack overcloud update run --stack <stack_name> --limit ComputeHCI
- 等待节点更新完成。
运行 Ceph Storage update 命令。例如:
$ openstack overcloud external-update run --stack <stack_name> --tags ceph
- 等待计算 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> 选项替换 < ;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_WARN
或HEALTH_ERR
状态。有关故障排除指南,请参阅 Red Hat Ceph Storage 4 故障排除指南。
流程
Source
stackrc
文件:$ source ~/stackrc
更新组节点。
更新组中的所有节点:
$ 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]
- 等待节点更新完成。
运行 Ceph Storage 容器更新命令:
$ openstack overcloud external-update run --tags ceph
- 等待 Ceph Storage 容器更新完成。
4.8. 执行在线数据库更新
有些 overcloud 组件需要其数据库表的在线升级(或迁移)。这包括执行 online_upgrade
外部更新过程。要执行这个过程,请针对带有 online_upgrade
标签标记的任务 运行 openstack overcloud external-update
命令。这会对以下组件执行在线数据库更新:
- OpenStack Block Storage (cinder)
- OpenStack Compute (nova)
流程
Source
stackrc
文件:$ source ~/stackrc
针对使用
online_upgrade
标签的任务运行 openstack overcloud external-update
:$ openstack overcloud external-update run --tags online_upgrade
4.9. 对更新进行最终大小
更新需要最后一步来更新 overcloud 堆栈。这样可确保堆栈的资源结构与 OpenStack Platform 16.1 的常规部署保持一致,并允许您在以后执行标准的 openstack overcloud deploy
功能。
流程
Source
stackrc
文件:$ source ~/stackrc
-
要在 overcloud 中重新启用隔离,在
fence.yaml
环境文件中将EnableFencing
参数设置为true
。 运行更新最终化命令:
$ 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
)。
-
- 等待更新最终完成。
第 5 章 重新引导 overcloud
在次要 Red Hat OpenStack 版本更新后,重启您的 overcloud。重启会更新带有任何关联的内核、系统级别和容器组件更新的节点。这些更新可能会提供性能和安全性优势。
计划停机时间来执行以下重启过程。
5.1. 重新引导 Controller 和可组合节点
完成以下步骤以基于可组合角色重新引导 Controller 节点和独立节点,不包括 Compute 节点和 Ceph Storage 节点。
步骤
- 登录您要重新引导的节点。
可选:如果节点使用 Pacemaker 资源,请停止集群:
[heat-admin@overcloud-controller-0 ~]$ sudo pcs cluster stop
重新引导节点:
[heat-admin@overcloud-controller-0 ~]$ sudo reboot
- 稍等片刻,直到节点启动。
检查服务。例如:
如果该节点使用 Pacemaker 服务,请检查该节点是否已重新加入集群:
[heat-admin@overcloud-controller-0 ~]$ sudo pcs status
如果该节点使用 Systemd 服务,请检查是否所有服务都已启用:
[heat-admin@overcloud-controller-0 ~]$ sudo systemctl status
如果该节点使用容器化服务,则检查节点上的所有容器是否已激活:
[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_WARN
或HEALTH_ERR
状态。有关故障排除指南,请参阅 Red Hat Ceph Storage 4 故障排除指南。
步骤
登录到运行
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)架构,则必须在设置
noout
和norebalance
标志时指定集群名称。例如:sudo podman exec -it ceph-mon-controller-0 ceph osd set noout --cluster <cluster_name>
- 选择第一个要重新引导的 Ceph Storage 节点并登录到该节点。
重新引导节点:
$ sudo reboot
- 稍等片刻,直到节点启动。
登录到节点,并检查集群的状态:
$ sudo podman exec -it ceph-mon-controller-0 ceph status
确认
pgmap
报告的所有pgs
的状态是否都正常 (active+clean
)。- 注销节点,重新引导下一个节点,并检查其状态。重复此流程,直到您已重新引导所有 Ceph 存储节点。
完成后,登录到运行
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)架构,您必须在取消设置
noout
和norebalance
标志时指定集群名称。例如:sudo podman exec -it ceph-mon-controller-0 ceph osd set noout --cluster <cluster_name>
执行最后的状态检查,确认集群报告
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 参数。
步骤
-
以
stack
用户的身份登录 undercloud。 列出所有的 Compute 节点及其 UUID:
$ source ~/stackrc (undercloud) $ openstack server list --name compute
识别您要重新引导的 Compute 节点的 UUID。
从 undercloud 中,选择 Compute 节点。禁用该节点:
$ source ~/overcloudrc (overcloud) $ openstack compute service list (overcloud) $ openstack compute service set <hostname> nova-compute --disable
列出 Compute 节点上的所有实例:
(overcloud) $ openstack server list --host <hostname> --all-projects
- 如果您决定不迁移实例,则跳至此步骤。
如果您决定将实例迁移至另一个 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
命令可能会引发一些弃用警告,这些警告信息可以被安全忽略。
- 稍等片刻,直至迁移完成。
确认迁移成功完成:
(overcloud) $ openstack server list --host <hostname> --all-projects
- 继续迁移实例,直到所选 Compute 节点中不剩任何实例。
登录到 Compute 节点并重启节点:
[heat-admin@overcloud-compute-0 ~]$ sudo reboot
- 稍等片刻,直到节点启动。
重新启用 Compute 节点:
$ source ~/overcloudrc (overcloud) $ openstack compute service set <hostname> nova-compute --enable
确认是否已启用 Compute 节点:
(overcloud) $ openstack compute service list