保持 Red Hat OpenStack Platform 更新
执行 Red Hat OpenStack Platform 的次要更新
摘要
第 1 章 简介
本文档提供了工作流,可帮助您通过最新的软件包和容器保持您的 Red Hat OpenStack Platform 16.0 环境更新。
本指南通过以下版本提供升级路径:
旧的 Overcloud 版本 | 新的 Overcloud 版本 |
---|---|
Red Hat OpenStack Platform 16.0 | Red Hat OpenStack Platform 16.0.z |
1.1. 高级工作流
下表提供了升级过程所需的步骤:
Step | Description |
---|---|
更新 undercloud | 将 undercloud 更新至最新的 OpenStack Platform 16.0.z 版本。 |
更新 overcloud | 将 overcloud 更新至最新的 OpenStack Platform 16.0.z 版本。 |
更新 Ceph Storage 节点 | 升级所有 Ceph Storage 服务。 |
完成升级 | 运行 convergence 命令来刷新 overcloud 堆栈。 |
第 2 章 准备次要更新
在开始将 Red Hat OpenStack Platform 16.0 更新至最新的次版本前,您必须遵循 undercloud 的一些准备步骤。
2.1. 将环境锁定到 Red Hat Enterprise Linux 版本
Red Hat OpenStack Platform 16.0 在 Red Hat Enterprise Linux 8.1 上被支持。在进行更新前,将 undercloud 和 overcloud 存储库锁定到 Red Hat Enterprise Linux 8.1 版本,以避免将操作系统升级到较新的次版本。
流程
-
以
stack
用户的身份登录 undercloud。 Source
stackrc
文件:$ source ~/stackrc
创建 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.1:
$ cat > ~/set_release.yaml <<'EOF' - hosts: overcloud,undercloud gather_facts: false tasks: - name: set release to 8.1 command: subscription-manager release --set=8.1 become: true EOF
运行
set_release.yaml
playbook:$ ansible-playbook -i ~/inventory.yaml -f 25 ~/set_release.yaml
要手动将节点锁定到版本,请登录到节点并运行 subscription-manager release
命令:
$ sudo subscription-manager release --set=8.1
2.2. 更改为扩展更新支持(EUS)软件仓库
您的 Red Hat OpenStack Platform 订阅包括了 Red Hat Enterprise Linux 8.1 延长更新支持(EUS)的软件仓库。EUS 软件仓库包括 Red Hat Enterprise Linux 8.1 的最新安全补丁和程序错误修复。在执行次版本更新前,切换到以下软件仓库。
标准软件仓库 | EUS Resporitory |
---|---|
rhel-8-for-x86_64-baseos-rpms | rhel-8-for-x86_64-baseos-eus-rpms |
rhel-8-for-x86_64-appstream-rpms | rhel-8-for-x86_64-appstream-eus-rpms |
rhel-8-for-x86_64-highavailability-rpms | rhel-8-for-x86_64-highavailability-eus-rpms |
流程
-
以
stack
用户的身份登录 undercloud。 Source
stackrc
文件:$ source ~/stackrc
-
编辑 overcloud 订阅管理环境文件,这是包含
RhsmVars
参数的文件。此文件的默认名称是rhsm.yml
。 检查订阅管理配置中的
rhsm_repos
参数。如果此参数没有包括 EUS 软件仓库,请将相关的软件仓库改为 EUS 版本:parameter_defaults: RhsmVars: rhsm_repos: - rhel-8-for-x86_64-baseos-eus-rpms - rhel-8-for-x86_64-appstream-eus-rpms - rhel-8-for-x86_64-highavailability-eus-rpms - ansible-2.9-for-rhel-8-x86_64-rpms - advanced-virt-for-rhel-8-x86_64-rpms - openstack-beta-for-rhel-8-x86_64-rpms - rhceph-4-osd-for-rhel-8-x86_64-rpms - rhceph-4-mon-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.1 EUS:
$ cat > ~/change_eus.yaml <<'EOF' - hosts: overcloud,undercloud gather_facts: false tasks: - name: change to eus repos command: subscription-manager repos --disable=rhel-8-for-x86_64-baseos-rpms --disable=rhel-8-for-x86_64-appstream-rpms --disable=rhel-8-for-x86_64-highavailability-rpms --enable=rhel-8-for-x86_64-baseos-eus-rpms --enable=rhel-8-for-x86_64-appstream-eus-rpms --enable=rhel-8-for-x86_64-highavailability-eus-rpms become: true EOF
运行
change_eus.yaml
playbook:$ ansible-playbook -i ~/inventory.yaml -f 25 ~/change_eus.yaml
第 3 章 更新 Undercloud
此过程将 undercloud 及其 overcloud 镜像更新至最新的 Red Hat OpenStack Platform 16.0 版本。
3.1. 执行容器化 undercloud 的次要更新
director 提供用于更新 undercloud 节点上的软件包的命令。这可让您在 OpenStack Platform 环境的当前版本中执行次要更新。
流程
-
以
stack
用户身份登录 director。 运行
dnf
以升级 director 的主软件包:$ sudo dnf update -y python3-tripleoclient* openstack-tripleo-common openstack-tripleo-heat-templates tripleo-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.0.tar /usr/share/rhosp-director-images/ironic-python-agent-latest-16.0.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 模板版本。例如,仅将 OpenStack Platform 16 镜像与 OpenStack Platform 16 heat 模板搭配使用。
新的 overcloud-full
镜像取代了旧的 overcloud-full
镜像。如果您更改了旧镜像,您必须在新镜像中重复更改,特别是将来要部署新节点时。
3.3. undercloud Post-Upgrade 备注
-
如果在
stack
用户主目录中使用一组本地核心模板,请确保使用 高级 Overcloud 自定义指南中的使用 自定义核心 Heat 模板中的推荐工作流更新模板。在升级 overcloud 前,您必须更新本地副本。
3.4. 后续步骤
undercloud 升级已完成。现在,您可以更新 overcloud。
第 4 章 更新 Overcloud
此过程更新 overcloud。
前提条件
- 您已将 undercloud 更新至最新版本。
4.1. 运行 overcloud 更新准备
更新需要运行 openstack overcloud update prepare
命令,该命令执行以下任务:
- 将 overcloud 计划更新为 OpenStack Platform 16.0
- 为更新准备节点
流程
Source
stackrc
文件:$ source ~/stackrc
运行 update preparation 命令:
$ openstack overcloud update prepare \ --templates \ -r <ROLES DATA FILE> \ -n <NETWORK DATA FILE> \ -e <ENVIRONMENT FILE> \ -e <ENVIRONMENT FILE> \ --stack <STACK_NAME> \ …
包含以下与您的环境相关的选项:
-
自定义配置环境文件(
-e
) -
如果使用您自己的自定义角色,请包含自定义角色(
roles_data
)文件(-r
) -
如果使用自定义网络,请包含您的可组合网络(
network_data
)文件(-n
) -
如果
overcloud
堆栈的名称与默认名称 overcloud 不同,请在更新准备命令中包含--stack
选项,并将 <STACK_NAME&
gt; 替换为您的堆栈的名称。
-
自定义配置环境文件(
- 等待更新准备完成。
4.2. 运行容器镜像准备
在执行更新前,overcloud 需要最新的 OpenStack Platform 16.0 容器镜像。这涉及执行 container_image_prepare
外部更新过程。要执行此过程,请针对带有 container_image_prepare
标签的任务运行 openstack overcloud external-update run
命令。这些任务:
- 自动准备与您的环境相关的所有容器镜像配置。
- 将相关的容器镜像拉取到 undercloud,除非您之前禁用了这个选项。
流程
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. 更新所有 Controller 节点
此过程将所有 Controller 节点更新至最新的 OpenStack Platform 16.0 版本。这个过程涉及运行 openstack overcloud update run
命令,包括 --limit Controller
选项,以限制为 Controller 节点的操作。
如果您不使用默认的堆栈名称(overcloud
),请将堆栈名称设置为 --stack STACK_NAME
选项将 STACK_NAME
替换为堆栈的名称。
流程
Source
stackrc
文件:$ source ~/stackrc
运行 update 命令:
$ openstack overcloud update run --stack STACK_NAME --limit Controller --playbook all
- 等待 Controller 节点更新完成。
4.4. 更新所有 Compute 节点
此过程将所有 Compute 节点更新至最新的 OpenStack Platform 16.0 版本。这个过程涉及运行 openstack overcloud update run
命令,包括 --nodes Compute
选项,以仅限对 Compute 节点的操作。
如果您不使用默认的堆栈名称(overcloud
),请将堆栈名称设置为 --stack STACK_NAME
选项将 STACK_NAME
替换为堆栈的名称。
流程
Source
stackrc
文件:$ source ~/stackrc
运行 update 命令:
$ openstack overcloud update run --stack STACK_NAME --limit Compute --playbook all
- 等待 Compute 节点更新完成。
4.5. 更新所有 HCI Compute 节点
此流程更新超融合基础架构(HCI) Compute 节点。这个过程涉及:
-
运行
openstack overcloud update run
命令,包括--nodes ComputeHCI
选项,以限制为 HCI 节点的操作。 -
运行
openstack overcloud external-update run --tags ceph
命令,对容器化 Red Hat Ceph Storage 4 集群执行更新。
如果您不使用默认的堆栈名称(overcloud
),请将堆栈名称设置为 --stack STACK_NAME
选项将 STACK_NAME
替换为堆栈的名称。
流程
Source
stackrc
文件:$ source ~/stackrc
运行 update 命令:
$ openstack overcloud update run --stack _STACK_NAME_ --limit ComputeHCI --playbook all
- 等待节点更新完成。
运行 Ceph Storage update 命令。例如:
$ openstack overcloud external-update run --stack _STACK_NAME_ --tags ceph
- 等待 Compute HCI 节点更新完成。
4.6. 更新所有 Ceph Storage 节点
此过程会更新 Ceph Storage 节点。这个过程涉及:
-
运行
openstack overcloud update run
命令,包括--nodes CephStorage
选项,以仅限制对 Ceph Storage 节点的操作。 -
运行
openstack overcloud external-update run
命令以外部进程运行ceph-ansible
,并更新 Red Hat Ceph Storage 4 容器。
如果您不使用默认的堆栈名称(overcloud
),请将堆栈名称设置为 --stack STACK_NAME
选项将 STACK_NAME
替换为堆栈的名称。
流程
Source
stackrc
文件:$ source ~/stackrc
更新组节点。
更新组中的所有节点:
$ openstack overcloud update run --nodes <GROUP_NAME>
更新组中的单一节点:
$ openstack overcloud update run --nodes <GROUP_NAME> [NODE_INDEX]
注意如果选择单独更新节点,请确保更新所有节点。
组中的第一个节点的索引为零(0)。例如,要更新名为
CephStorage
的组中的第一个节点,该命令为:OpenStack overcloud update run --nodes CephStorage[0]
- 等待节点更新完成。
运行 Ceph Storage 容器 update 命令:
$ openstack overcloud external-update run --stack _STACK_NAME_ --tags ceph
- 等待 Ceph Storage 容器更新完成。
4.7. 执行在线数据库更新
有些 overcloud 组件需要其数据库表的在线升级(或迁移)。这包括执行 online_upgrade
外部更新过程。要执行此过程,请针对带有 online_upgrade
标签的任务运行 openstack overcloud external-update run
命令。这会对以下组件执行在线数据库更新:
- OpenStack Block Storage (cinder)
- OpenStack Compute (nova)
流程
Source
stackrc
文件:$ source ~/stackrc
针对使用
online_upgrade
标签标记的任务运行openstack overcloud external-update run
命令:$ openstack overcloud external-update run --stack STACK_NAME --tags online_upgrade
4.8. 最终更新
更新需要最后一步来更新 overcloud 堆栈。这样可确保堆栈的资源结构与 OpenStack Platform 16.0 的常规部署一致,并允许您在以后执行标准 openstack overcloud
部署功能。
流程
Source
stackrc
文件:$ source ~/stackrc
运行 update finalization 命令:
$ openstack overcloud update converge \ --templates \ -r <ROLES DATA FILE> \ -n <NETWORK DATA FILE> \ -e <ENVIRONMENT FILE> \ -e <ENVIRONMENT FILE> \ --stack <STACK_NAME> \ …
包含以下与您的环境相关的选项:
使用自己的自定义角色,+HQ 自定义配置环境文件(
-e
),如果 overcloud 堆栈的名称与默认名称
overcloud 不同,请包括您的可组合网络(network_data
)文件(-n
),如果您的 overcloud 堆栈的名称与默认名称overcloud
不同,在 update prepare 命令中包含
--stack
选项,并将 <STACK_NAME
> 替换为堆栈的名称。- 等待更新最终完成。
第 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 或 Controller 节点,并临时禁用 Ceph 存储集群重新平衡:
$ sudo podman exec -it ceph-mon-controller-0 ceph osd set noout $ sudo podman exec -it ceph-mon-controller-0 ceph osd set norebalance
- 选择第一个要重新引导的 Ceph Storage 节点并登录到该节点。
重新引导节点:
$ sudo reboot
- 稍等片刻,直到节点启动。
登录到节点并检查集群状态:
$ sudo podman exec -it ceph-mon-controller-0 ceph status
确认
pgmap
报告的所有pgs
的状态是否都正常 (active+clean
)。- 注销节点,重新引导下一个节点,并检查其状态。重复此流程,直到您已重新引导所有 Ceph 存储节点。
完成之后,登录 Ceph MON 或 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
执行最后的状态检查,确认集群报告
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 节点重新引导后控制实例的状态:
NovaResumeGuestsStateOnHostBoot
-
确定重新引导后是否将实例返回 Compute 节点上的相同状态。设为
False
时,实例将保持关闭,必须手动启动。默认值为:False
NovaResumeGuestsShutdownTimeout
-
重启前等待实例被关闭的时间(以秒为单位)。建议不要将此值设置为
0
。默认值为:300 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
5.4. 重新引导 HCI Compute 节点
以下流程重启计算超融合基础架构(HCI)节点。
流程
登录到 Ceph MON 或 Controller 节点,并临时禁用 Ceph 存储集群重新平衡:
$ sudo podman exec -it ceph-mon-controller-0 ceph osd set noout $ sudo podman exec -it ceph-mon-controller-0 ceph osd set norebalance
-
以
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
使用以下命令之一迁移您的实例:
将实例迁移到您选择的特定主机:
(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 节点上不剩任何实例。
登录到 Ceph MON 或 Controller 节点,并检查集群状态:
$ sudo podman exec $CEPH_MON_CONTAINER ceph -s
确认
pgmap
报告的所有pgs
的状态是否都正常 (active+clean
)。重启 Compute HCI 节点:
$ sudo reboot
- 稍等片刻,直到节点启动。
再次启用 Compute 节点:
$ source ~/overcloudrc (overcloud) $ openstack compute service set [hostname] nova-compute --enable
验证 Compute 节点是否已启用:
(overcloud) $ openstack compute service list
- 注销节点,重新引导下一个节点,并检查其状态。重复此流程,直到您已重新引导所有 Ceph 存储节点。
完成后,登录到 Ceph MON 或 Controller 节点,然后再次启用集群重新平衡:
$ sudo podman exec $CEPH_MON_CONTAINER ceph osd unset noout $ sudo podman exec $CEPH_MON_CONTAINER ceph osd unset norebalance
执行最后的状态检查,确认集群报告
HEALTH_OK
:$ sudo podman exec $CEPH_MON_CONTAINER ceph status