次要版本升级¶
OpenStack-Ansible 的次要版本升级需要将仓库克隆更新到最新的次要版本标签,更新 Ansible 角色,然后对目标主机运行 playbook。本节提供这些任务的说明。
先决条件¶
为了避免问题并简化升级过程中的故障排除,请通过在 user_variables.yml 文件中将 apply_security_hardening 变量设置为 False,并备份您的 OpenStack-Ansible 安装,来禁用安全加固角色。
执行次要版本升级¶
次要升级通常需要以下步骤
更改目录到克隆仓库的根目录
# cd /opt/openstack-ansible
确保您的 OpenStack-Ansible 代码位于最新的 2025.2 (Flamingo) 标记发布版本
# git checkout 32.0.0.0rc1
更新所有依赖角色到最新版本
# ./scripts/bootstrap-ansible.sh更改到 playbook 目录
# cd playbooks
更新主机
# openstack-ansible openstack.osa.setup_hosts -e package_state=latest
更新基础设施
# openstack-ansible -e rabbitmq_upgrade=true \ openstack.osa.setup_infrastructure
更新所有 OpenStack 服务
# openstack-ansible openstack.osa.setup_openstack -e package_state=latest
注意
您可以限制升级到特定的 OpenStack 组件。有关详细信息,请参阅以下部分。
升级特定组件¶
您可以通过对组运行每个组件的 playbook 来限制升级到特定的 OpenStack 组件。
例如,您可以通过运行以下命令仅更新 Compute 主机
# openstack-ansible openstack.osa.nova --limit nova_compute
要仅更新单个 Compute 主机,请运行以下命令
# openstack-ansible openstack.osa.nova --limit <node-name>
注意
跳过 nova-key 标签是必要的,这样就不会收集所有 Compute 主机上的密钥。
要查看哪些主机属于哪些组,请使用 openstack-ansible-inventory-manage 脚本来显示所有组及其主机。例如
更改目录到仓库克隆根目录
# cd /opt/openstack-ansible
显示所有组及其所属的主机
# openstack-ansible-inventory-manage -G
显示所有主机及其所属的组
# openstack-ansible-inventory-manage -g
要查看 playbook 运行的主机以及执行的任务,请运行以下命令(例如)
查看 playbook 运行的
nova_compute组中的主机# openstack-ansible openstack.osa.nova --limit nova_compute \ --list-hosts
查看在
nova_compute组中的主机上执行的任务# openstack-ansible openstack.osa.nova --limit nova_compute \ --skip-tags 'nova-key' \ --list-tasks
在相同的 OpenStack-Ansible 版本中升级特定组件¶
有时您可能需要在保持在相同的稳定分支上,应用服务的最新安全补丁或错误修复。这可以通过覆盖该服务的 Git 安装分支来完成,这将指示 OpenStack-Ansible 从您正在跟踪的分支拉取最新的代码。但是,直接将分支作为 <service>_git_install_branch 使用强烈不建议。每次重新运行 playbook 时,该服务可能会升级到更新的提交,这可能导致主机之间版本不一致(例如,在稍后添加新的计算节点时)。
因此,推荐的做法是获取所需稳定分支的 HEAD 提交 SHA,并显式设置它。要查找 stable/2025.1 分支的最新 SHA,您可以运行(例如,对于 Nova)
git ls-remote https://opendev.org/openstack/nova refs/heads/stable/2025.1
并在您的配置中使用该 SHA,以确保所有主机上的版本一致,在您的 user_variables.yml 中
nova_git_install_branch: {{SHA}}
并运行
openstack-ansible openstack.osa.nova --tags nova-install
playbook 将获取并安装来自指定分支或提交 SHA 的代码,应用最新的补丁和修复程序。使用固定的 SHA 可确保所有主机上的版本一致,而直接跟踪分支将始终拉取其当前的 HEAD。
我们可以在升级前后验证服务的版本(不要忘记加载所需的环境变量)
$ ansible -m shell -a '/openstack/venvs/nova-{{ openstack_release }}/bin/pip3 freeze | grep nova' nova_all
infra1-nova-api-container-e5dbbe38 | CHANGED | rc=0 >>
nova==31.0.1.dev12
infra2-nova-api-container-0c5d0203 | CHANGED | rc=0 >>
nova==31.0.1.dev12
infra3-nova-api-container-d791a43e | CHANGED | rc=0 >>
nova==31.0.1.dev12
compute | CHANGED | rc=0 >>
nova==31.0.1.dev12
升级到相同分支的最新补丁后
$ ansible -m shell -a '/openstack/venvs/nova-{{ openstack_release }}/bin/pip3 freeze | grep nova' nova_all
infra1-nova-api-container-e5dbbe38 | CHANGED | rc=0 >>
nova==31.1.1.dev9
infra2-nova-api-container-0c5d0203 | CHANGED | rc=0 >>
nova==31.1.1.dev9
infra3-nova-api-container-d791a43e | CHANGED | rc=0 >>
nova==31.1.1.dev9
compute | CHANGED | rc=0 >>
nova==31.1.1.dev9
注意
这种方法不限于 Nova。您可以通过覆盖其相应的 <service>_git_install_branch 变量,将相同的方法应用于 OpenStack-Ansible 管理的任何其他 OpenStack 服务。
在继续之前,请始终确保分支是最新的并且与您的其余部署兼容。