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 完整演练一遍,把每个组件的坑都踩出来再上生产。

标签: none

添加新评论