OpenStack 大版本升级实战:跨 3 个版本怎么跨
OpenStack 一年俩版本,业内大部分集群都落后 5-10 个版本。本文讲跨 3+ 版本升级的策略。
一个个升 vs 一次跨
官方支持N→N+1 升级(如 Yoga→Zed)。跨多版本理论上不支持,实操有 3 种思路:
思路 1:逐版本升
最稳,但慢。8 个版本就要做 8 次维护窗口。
思路 2:fast-forward upgrade(FFU)
社区工具支持 4-5 个版本一次跨。Red Hat 的 director、Mirantis 的 mcp 都有 FFU 流程。
思路 3:新搭一套 + 数据迁移
最暴力但最干净。适合升级跨度太大、原集群一堆历史包袱的场景。
我推荐:思路 2(FFU)
实际流程(以 Yoga → 2024.2 为例):
1. 准备阶段(不影响业务)
- 备份所有数据库:Keystone、Nova、Glance、Neutron、Cinder
- 备份配置文件:
/etc/{keystone,nova,glance,neutron,cinder,heat} - 导出 inventory:所有 VM、网络、卷的元数据
- 跑 release notes 检查:每个版本的 breaking change
2. 控制面升级(业务能跑)
按依赖顺序升:
Keystone → Glance → Placement → Nova → Neutron → Cinder → Heat → Horizon
每个组件:
# 1. 停服务
systemctl stop neutron-server
# 2. 升包
pip install --upgrade neutron==X.Y.Z
# 或 dnf upgrade openstack-neutron
# 3. 数据库迁移
neutron-db-manage upgrade head
# 4. 起服务
systemctl start neutron-server
# 5. 验证
openstack network list
控制面升级期间 API 不可用(5-15 分钟),但已有 VM 正常运行。
3. 数据面升级(要 live-migrate)
Nova-compute、Neutron-agent 升级要节点逐个滚动:
for node in compute1 compute2 compute3; do
# 1. 把 VM 迁走
openstack server migrate --live $other_node <vm>
# 2. 节点上升级
ssh $node 'dnf upgrade openstack-nova-compute openstack-neutron-*'
# 3. 重启服务
ssh $node 'systemctl restart openstack-nova-compute neutron-*-agent'
done
必看 breaking changes
跨版本升级最容易翻车的点:
- placement 从 Nova 拆出来(Stein 之后是独立服务)
- neutron ML2/OVS 转 OVN(Yoga 之后官方推 OVN)
- glance 镜像格式变化(不再支持某些老格式)
- keystone v2 API 移除(Train 之后)
- mysql 5.7 → 8.0 兼容性
回滚预案
每个组件升级前打 snapshot:
- 数据库:
mysqldump全备 - 配置:tar 整个
/etc/<service>/ - 包:记下当前版本
dnf list installed | grep openstack
回滚 = 还原包 + 还原配置 + 还原 DB。
教训:跨 3+ 版本不要赌一把成功——先在 staging 完整演练一遍,把每个组件的坑都踩出来再上生产。