第 4 章 执行 overcloud 采用
overcloud 采用涉及以下任务:
- 在每个堆栈上,将网络和主机调配配置导出到 overcloud。
- 定义新容器和其他兼容性配置。
4.1. 运行 overcloud 升级准备
升级需要运行 openstack overcloud upgrade prepare
命令,该命令执行以下任务:
- 将 overcloud 计划更新至 OpenStack Platform 17.1
- 为升级准备节点
流程
-
以
stack
用户身份登录 undercloud 主机。 查找
stackrc
undercloud 凭证文件:$ source ~/stackrc
验证 undercloud 升级过程中导出的以下文件是否包含 overcloud 升级的预期配置。您可以在
~/overcloud-deploy
目录中找到以下文件:-
tripleo-<stack>-passwords.yaml
-
tripleo-<stack>-network-data.yaml
-
tripleo-<stack>-virtual-ips.yaml
tripleo-<stack>-baremetal-deployment.yaml
注意如果在 undercloud 升级后没有生成这些文件,请联系红帽支持。
-
在主堆栈上,将 password
.yaml
文件复制到~/overcloud-deploy/$(<stack>)
目录。在环境中的每个堆栈中重复此步骤:$ cp ~/overcloud-deploy/<stack>/tripleo-<stack>-passwords.yaml ~/overcloud-deploy/<stack>/<stack>-passwords.yaml
-
将
<stack>
替换为您的堆栈的名称。
-
将
在主堆栈上,将
network-data.yaml
文件复制到 stack 用户的主目录并部署网络。在环境中的每个堆栈中重复此步骤:$ cp ~/overcloud-deploy/<stack>/tripleo-<stack>-network-data.yaml ~/ $ mkdir ~/overcloud_adopt $ openstack overcloud network provision --debug \ --output /home/stack/overcloud_adopt/generated-networks-deployed.yaml tripleo-<stack>-network-data.yaml
有关更多信息,请参阅使用 director 安装和管理 Red Hat OpenStack Platform 中的置备和部署 overcloud。
在主堆栈上,将
virtual-ips.yaml
文件复制到 stack 用户的主目录,并置备网络 VIP。在环境中的每个堆栈中重复此步骤:$ cp ~/overcloud-deploy/<stack>/tripleo-<stack>-virtual-ips.yaml ~/ $ openstack overcloud network vip provision --debug \ --stack <stack> --output \ /home/stack/overcloud_adopt/generated-vip-deployed.yaml tripleo-<stack>-virtual-ips.yaml
在主堆栈上,将
baremetal-deployment.yaml
文件复制到 stack 用户的主目录,并置备 overcloud 节点。在环境中的每个堆栈中重复此步骤:$ cp ~/overcloud-deploy/<stack>/tripleo-<stack>-baremetal-deployment.yaml ~/ $ openstack overcloud node provision --debug --stack <stack> \ --output /home/stack/overcloud_adopt/baremetal-deployment.yaml \ tripleo-<stack>-baremetal-deployment.yaml
完成以下步骤以准备容器:
备份用于 undercloud 升级的
containers-prepare-parameter.yaml
文件:$ cp containers-prepare-parameter.yaml \ containers-prepare-parameter.yaml.orig
在运行脚本以更新
containers-prepare-parameter.yaml
文件前,定义以下环境变量:-
NAMESPACE
: UBI9 镜像的命名空间。例如,NAMESPACE='"namespace":"example.redhat.com:5002",'
-
EL8_NAMESPACE
:UBI8 镜像的命名空间。 -
NEUTRON_DRIVER
:要使用的驱动程序,并确定要使用的 OpenStack Networking (neutron)容器。设置为用于部署原始堆栈的容器类型。例如,设置为NEUTRON_DRIVER='"neutron_driver":"ovn",'
以使用基于 OVN 的容器。 -
EL8_TAGS
: UBI8 镜像的标签,例如EL8_TAGS='"tag":"rhel_8_rhosp17.1",'
。 -
EL9_TAGS
: UBI9 镜像的标签,例如EL9_TAGS='"tag":"rhel_9_rhosp17.1",'
。 CONTROL_PLANE_ROLES
:使用--role
选项的 control plane 角色列表,如--role ControllerOpenstack, --role Database, --role Messaging, --role Networker, --role CephStorage
。要查看环境中的 control plane 角色列表,请运行以下命令:$ sudo awk '/tripleo_role_name/ {print "--role " $2}' \ /var/lib/mistral/$STACK/tripleo-ansible-inventory.yaml \ | grep -vi compute
COMPUTE_ROLES
:使用--role
选项的 Compute 角色列表,如--Compute-1
。要查看环境中的 Compute 角色列表,请运行以下命令:$ sudo awk '/tripleo_role_name/ {print "--role " $2}' \ /var/lib/mistral/$STACK/tripleo-ansible-inventory.yaml \ | grep -i compute
-
CEPH_TAGS
:如果您部署 Red Hat Ceph Storage,请指定 Red Hat Ceph Storage 5 容器镜像。例如:"ceph_tag":"5-404"
。
-
运行以下脚本以更新
containers-prepare-parameter.yaml
文件:$ python3 /usr/share/openstack-tripleo-heat-templates/tools/multi-rhel-container-image-prepare.py \ ${COMPUTE_ROLES} \ ${CONTROL_PLANE_ROLES} \ --enable-multi-rhel \ --excludes collectd \ --excludes nova-libvirt \ --minor-override "{${EL8_TAGS}${EL8_NAMESPACE}${CEPH_TAGS}${NEUTRON_DRIVER}\"no_tag\":\"not_used\"}" \ --major-override "{${EL9_TAGS}${NAMESPACE}${CEPH_TAGS}${NEUTRON_DRIVER}\"no_tag\":\"not_used\"}" \ --output-env-file \ /home/stack/containers-prepare-parameter.yaml
如果使用 Red Hat Ceph Storage,请创建一个名为
ceph_params.yaml
的文件,并包含以下内容:parameter_defaults: CephSpecFqdn: true CephConfigPath: "/etc/ceph" CephAnsibleRepo: "rhceph-5-tools-for-rhel-8-x86_64-rpms" DeployedCeph: true
注意如果您的 Red Hat Ceph Storage 部署包含短名称,您必须将
CephSpecFqdn
参数设置为false
。如果设置为true
,则清单会生成一个短名称和域名,从而导致 Red Hat Ceph Storage 升级失败。在 templates 目录中创建一个名为
upgrade-environment.yaml
的环境文件,并包含以下内容:parameter_defaults: ExtraConfig: nova::workarounds::disable_compute_service_check_for_ffu: true DnsServers: ["<dns_servers>"] DockerInsecureRegistryAddress: <undercloud_FQDN> UpgradeInitCommand: | sudo subscription-manager repos --disable=* if $( grep -q 9.2 /etc/os-release ) then sudo subscription-manager repos --enable=rhel-9-for-x86_64-baseos-eus-rpms --enable=rhel-9-for-x86_64-appstream-eus-rpms --enable=rhel-9-for-x86_64-highavailability-eus-rpms --enable=openstack-17.1-for-rhel-9-x86_64-rpms --enable=fast-datapath-for-rhel-9-x86_64-rpms sudo podman ps | grep -q ceph && subscription-manager repos --enable=rhceph-5-tools-for-rhel-9-x86_64-rpms sudo subscription-manager release --set=9.2 else 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=openstack-17.1-for-rhel-8-x86_64-rpms --enable=fast-datapath-for-rhel-8-x86_64-rpms sudo podman ps | grep -q ceph && subscription-manager repos --enable=rhceph-5-tools-for-rhel-8-x86_64-rpms sudo subscription-manager release --set=8.4 fi if $(sudo podman ps | grep -q ceph ) then sudo dnf -y install cephadm fi
-
将
<dns_servers>
替换为 DNS 服务器 IP 地址的逗号分隔列表,例如["10.0.0.36", "10.0.0.37"]
。 将
<undercloud_FQDN
> 替换为 undercloud 主机的完全限定域名(FQDN),例如"undercloud-0.ctlplane.redhat.local:8787"
。有关您可以在环境文件中配置的升级参数的更多信息,请参阅升级 参数。
-
将
在 undercloud 上,在 templates 目录中创建一个名为
overcloud_upgrade_prepare.sh
的文件。您必须为环境中的每个堆栈创建此文件。此文件包含 overcloud 部署文件的原始内容,以及与您的环境相关的环境文件。例如:#!/bin/bash openstack overcloud upgrade prepare --yes \ --timeout 460 \ --templates /usr/share/openstack-tripleo-heat-templates \ --ntp-server 192.168.24.1 \ --stack <stack> \ -r /home/stack/roles_data.yaml \ -e /home/stack/templates/internal.yaml \ -e /usr/share/openstack-tripleo-heat-templates/environments/services/neutron-ovs.yaml \ -e /home/stack/templates/network/network-environment.yaml \ -e /home/stack/templates/inject-trust-anchor.yaml \ -e /home/stack/templates/hostnames.yml \ -e /usr/share/openstack-tripleo-heat-templates/environments/ceph-ansible/ceph-ansible.yaml \ -e /home/stack/templates/nodes_data.yaml \ -e /home/stack/templates/debug.yaml \ -e /home/stack/templates/firstboot.yaml \ -e /home/stack/templates/upgrades-environment.yaml \ -e /home/stack/overcloud-params.yaml \ -e /home/stack/overcloud-deploy/overcloud/overcloud-network-environment.yaml \ -e /home/stack/overcloud_adopt/baremetal-deployment.yaml \ -e /home/stack/overcloud_adopt/generated-networks-deployed.yaml \ -e /home/stack/overcloud_adopt/generated-vip-deployed.yaml \ -e /usr/share/openstack-tripleo-heat-templates/environments/nova-hw-machine-type-upgrade.yaml \ -e /home/stack/skip_rhel_release.yaml \ -e ~/containers-prepare-parameter.yaml
-
在原始
network-environment.yaml
文件中(/home/stack/templates/network/network-environment.yaml
),删除所有指向OS::TripleO::*::Net::SoftwareConfig
的 resource_registry 资源。 在
overcloud_upgrade_prepare.sh
文件中,包含与您的环境相关的以下选项:-
环境文件 (
upgrades-environment.yaml
) 带有特定于升级的参数 (-e
)。 -
包含新容器镜像位置(
-e
)的环境文件(containers-prepare-parameter.yaml
)。在大多数情况下,这是 undercloud 使用的环境文件。 -
环境文件(
skip_rhel_release.yaml
),带有发行版本参数(-e)。 -
与您的部署相关的任何自定义配置文件(
-e
)。 -
如果适用,使用
--roles-file
的自定义角色(roles_data
)文件。 -
对于 Ceph 部署,环境文件(
ceph_params.yaml
)以及 Ceph 参数(-e)。 -
在 overcloud 采用过程中生成的文件(network
-deployed.yaml
,vip-deployed.yaml
,baremetal-deployment.yaml
) (-e)。 -
如果适用,带有您的 IPA 服务(-e)的环境文件(
ipa-environment.yaml
)。 如果使用自定义堆栈名称,请使用
--stack
选项传递名称。注意您必须在模板中包含
nova-hw-machine-type-upgrade.yaml
文件,直到所有 RHEL 8 Compute 节点都升级到环境中的 RHEL 9。如果排除了此文件,则/var/log/containers/nova
目录中的nova_compute.log
中会出现一个错误。将所有 RHEL 8 Compute 节点升级到 RHEL 9 后,您可以从配置中删除此文件并更新堆栈。
-
环境文件 (
如果您在要升级的部署中通过 NFS 启用共享文件系统服务(manila),则必须在
overcloud_upgrade_prepare.sh
脚本文件末尾指定额外的环境文件。您必须在脚本末尾添加环境文件,因为它会覆盖之前在脚本中指定的另一个环境文件:-e /usr/share/openstack-tripleo-heat-templates/environments/ceph-ansible/manila-cephfsganesha-config.yaml
-
在原始
为环境中的每个堆栈运行升级准备命令:
$ source stackrc $ chmod 755 /home/stack/overcloud_upgrade_prepare.sh $ sh /home/stack/overcloud_upgrade_prepare.sh
- 等待升级准备完成。
下载容器镜像:
$ openstack overcloud external-upgrade run --stack <stack> --tags container_image_prepare