OSA从Rocky升级到Stein后python-openstackclient上传镜像报409冲突错误
故障分析与排查解决步骤
你遇到的Glance API返回409 Conflict错误是Stein版本升级后配合Ceph Nautilus RBD后端的常见兼容性/配置遗留问题,可按以下步骤排查解决:
1. 优先检查Glance RBD后端配置变更
Rocky升级到Stein后Glance RBD存储驱动有两处必填配置变更极易遗漏:
- 检查
/etc/glance/glance-api.conf中[glance_store]段配置:- 确认已设置
rbd_store_chunk_size = 67108864,Stein默认要求块大小对齐Ceph Nautilus的对象大小,未配置会导致写入时触发冲突 - 确认已开启
show_multiple_locations = True,该参数在Stein版本中对RBD后端的镜像上传/引用逻辑为强制要求
- 确认已设置
- 配置修改后重启glance-api服务生效:
systemctl restart openstack-glance-api
2. 查看Glance服务端日志定位具体冲突原因
当前客户端debug日志仅返回通用409错误,未包含服务端的具体错误描述,登录Glance节点执行以下命令查看对应请求ID的日志即可定位根因:
grep "req-bf01af04-aa24-4ba6-bf93-7f909f442f37" /var/log/glance/api.log
常见的服务端错误场景:
- RBD池权限不足:虽然你排除了OpenStack侧权限,但需确认glance用户的Ceph keyring是否有rbd池的写入、创建对象权限,执行
ceph auth get-or-create client.glance检查权限是否包含mon 'allow r' osd 'allow class-read object_prefix rbd_children, allow rwx pool=images' - 镜像格式校验冲突:Stein默认开启
enforce_image_format_check = True,如果上传的镜像头损坏、格式声明与实际不符会触发409错误,可先尝试上传官方校验过的Cirros镜像复现验证 - RBD遗留锁冲突:升级过程中可能存在旧版本Glance遗留的RBD锁,可对报错的镜像ID执行
rbd lock ls images/395b1140-c0e3-48a9-872e-8b535cb237e5 --id glance检查,存在锁的话用rbd lock rm命令清理即可
3. 适配性验证方案
如果调整配置后仍报错,可通过以下方式验证是否为RBD后端专属适配问题:
- 临时将Glance存储后端切换为文件后端,测试镜像上传是否正常,如果正常即可确定问题在RBD驱动与Ceph的适配层
- 升级python-rbd客户端包到与Ceph Nautilus版本匹配的版本,避免客户端版本不兼容导致的写入冲突:
yum upgrade python3-rbd
内容的提问来源于stack exchange,提问作者rkruck
相关产品推荐
相关产品推荐

