OpenStack卷启动的虚拟机rebuild无效

Posted by elrond on September 20, 2021

1. 描述

卷启动的虚拟机rebuild无效,rebuild卷启动的虚拟机相当于仅仅对虚拟机进行了一次重启。

  • 版本信息如下
组件 版本
openstack train
nova 20.6.0-1

看了好几遍rebuild的代码,都没有找到对卷启动的云硬盘重建或者数据清空的操作,最后找了下社区,找到了一些资料,原来社区没实现对卷启动虚拟机的rebuild,怪不得没找到相关的代码逻辑。

2. 相关资料

社区要实现一个专门用于卷启动虚拟机重装的api, 还没实现,但是已经有不是非常严谨的修复方案可以先用。

bp specs

3. 修复方案

将原来的卷删除掉,使用重装的虚拟机创建一个新的卷挂给虚拟机,实现代码 Replace root volume during rebuild

4. 分析过程

总体代码流程就是一路rpc调用+检查,到计算节点上执行 nova.compute.manager.rebuild_instance -> _do_rebuild_instance -> _rebuild_default_impl

  • 卸载块存储、更新镜像元数据、销毁虚拟机

-> virt/libvirt/driver.spawn – 这一步又个创建镜像,卷启动的虚拟机不会创建镜像,所以rebuild实际上只是 关机->卸载磁盘->开机->挂盘

  • 创建新的虚拟机
  • 挂载块存储
  • 启动
  • 重建成功

具体代码流程可以参考这里,rebuild时序图

修复之后功能OK

刚找资料查看了下kk的博客,看到rebuild之后虚拟机创建的快照少个元数据 base_image_ref 通过博客上面的方式修复即可