前言

-

升级

物理机升级

由于 Zed 及以上版本只支持 Ubuntu 22.04 版本,所以我们需要首先将物理机升级到指定版本

升级前准备

更新依赖

请在每一个节点下执行如下命令来更新节点的依赖

apt update -y
apt upgrade -y
暂停相关服务
停止或驱逐节点上的所有虚拟机

由于我们的服务以教学为目的,寒暑假期间可以随意停止。所以我们这里使用命令批量停止虚拟机的运行。

openstack server stop ${id}

我在这里提供一个简单的 JavaScript 语句,在 /admin/instances 页面的控制台中执行即可自动拼接出所需的命令。

Array.from(document.querySelectorAll('tr[data-object-id]')).map(element => `openstack server stop ${element.dataset.objectId}`).join('; ').concat(';');
在 Ceph 中标记主机为维护模式
# 进入维护模式
ceph orch host maintenance enter ${name}
# 后续你还可以使用如下命令来退出维护模式
ceph orch host maintenance exit ${name}

升级物理机

建议在 BMC 环境下使用 VNC 操作

do-release-upgrade

根据提示操作即可

Kolla 相关组件升级

由于操作系统升级中升级了 Python 版本,所以相关依赖需要重新安装,请根据实际情况自行安装所缺依赖。

升级前的准备

备份配置文件
mkdir -r /opt/kolla/etc
cp -r /etc/kolla /opt/kolla/etc
# 同时请备份你的 inventory
升级 Ansible
# 升级 Ansible 本体
pip install 'ansible-core>=2.14,<2.16'

升级 Kolla 本体

# 查看升级前版本
kolla-ansible --version
# 升级
pip install --upgrade git+https://opendev.org/openstack/kolla-ansible@stable/2023.2
# 为 Kolla 安装依赖
kolla-ansible install-deps
# 查看升级后版本
kolla-ansible --version

所里这里可能会出现无法找到 /usr/bin/pip3.8 的问题,可以直接考虑 cp /usr/bin/pip3 /usr/bin/pip3.8 来临时解决。

配置文件更新

调整 Inventory 文件

将新的配置文件复制到本地

cp /usr/local/share/kolla-ansible/ansible/inventory/multinode .

使用 vimdiff 对比更新

vimdiff multinode multinode.bak

当然如果用 Idea 来对比的话会更快乐,可以通过点击来合并配置 | 比如下面这样

image.png

更新密码文件

cp /etc/kolla/passwords.yml passwords.yml.old
cp /usr/local/share/kolla-ansible/etc_examples/kolla/passwords.yml passwords.yml.new
kolla-genpwd -p passwords.yml.new
# 建议下面两步和上面三步分开执行,避免破坏配置文件
kolla-mergepwd --clean --old passwords.yml.old --new passwords.yml.new --final /etc/kolla/passwords.yml
rm passwords.yml.{old,new}

请注意,在最后一步中我使用了参数 --clean[ 来移除其中不需要的密码,如果你需要保留,请移除这个参数。

这一步可能会报错 ModuleNotFoundError: No module named '_cffi_backend' 建议提前执行命令 pip3 install cffi 来补全环境。

调整全局配置文件

跟编辑 inventory 相关的文件一样,编辑调整你的 /etc/globals.yaml 文件。

其中,新版配置文件位于 /usr/local/share/kolla-ansible/etc_examples/kolla/globals.yml,请手动复制处理。

升级

拉取镜像

# 拉取镜像
kolla-ansible -i multinode pull
# 这里可能会出现缺少 docker 模块的问题,请在所有节点使用如下命令安装
pip install docker

预检

kolla-ansible -i multinode prechecks

升级

kolla-ansible -i multinode upgrade

离谱问题大赏

Nova 相关

oslo_service.service nova.exception.InvalidConfiguration: No local node identity found, but this is not our first startup on this host. Refusing to start after potentially having lost that state!

这个问题是由于 OpenStack 在新版引入了 Compute Node Identification 导致的,详情可见下面的文章。

Compute Node Identification — nova 28.1.0.dev171 documentation (openstack.org)

解决方案也很简单:数据库中其实有一份节点的标识符,你只需要访问到 OpenStack 的 nova 数据库并执行如下 SQL

SELECT CONCAT('ssh -n ', `host_ip`, ' "echo ', `uuid`, ' > /var/lib/docker/volumes/nova_compute/_data/compute_id"')
FROM `compute_nodes`;

就可以获得到自动写入 compute_id 文件的命令,执行即可修复该问题

Duplicate compute node record found for host ${name} node ${name}

这个问题仍是由于节点标识符错误导致的,请参考上一个问题来获取解决方案。

oslo_service.service nova.exception.InternalError: Failure running os_vif plugin plug method: Failed to plug VIF VIFBridge(active=True,address=${address},bridge_name='${bridge_name}',has_traffic_filtering=True,id=$\{id},network=Network(\${network_id}),plugin='ovs',port_profile=VIFPortProfileOpenVSwitch,preserve_on_delete=False,vif_name='tapca1eee7d-02'). Got error: Could not retrieve schema from tcp:127.0.0.1:6640

这是由于 Nova 服务先于 OpenVSwitch 服务启动导致的,请先执行如下命令来引导 OpenVSwitch 服务启动。

kolla-ansible deploy --tag openvswitch

后话

-

最后修改:2024 年 01 月 18 日
如果觉得我的文章对你有用,请随意赞赏