kilo版本存在一个bug:如果虚机是通过config drive方式启动的,那么虚机无法进行热迁移。
原因:config drive会给虚机挂在默认是iso格式的光驱设备。此设备数据会在虚机运行的宿主机的/var/lib/nova/instances/{instance-id}/目录下创建config.disk文件。由于此文件不是存放在共享存储中。导致虚机无法进行热迁移。
社区目前也在试图解决此问题:https://bugs.launchpad.net/nova/+bug/1246201
但是进展比较缓慢。
为此,尝试从nova的层面规避此问题。
思路:
1.在热迁移时将光盘从光驱中取出,使目的主机不需要依赖config.disk文件。
2.设置标志位config drive为空,去注册光驱。这样,此虚机将彻底去掉光驱设备。
上述思路的前提是,虚机只有在第一次启动时,会通过config drive取得metadata设置虚机的属性,后续的运行将不再依赖config drive中的数据。
具体的代码修改:
nova/virt/libvirt/dirver.py:
此文件中首先去掉对于config drive的判断,使热迁移流程可以无障碍进行:
def pre_live_migration(self, context, instance, block_device_info, network_info, disk_info, migrate_data=None): """Preparation live migration."""去掉下面的代码段:
if configdrive.required_by(instance): # NOTE(sileht): configdrive is stored into the block storage # kvm is a block device, live migration will work # NOTE(sileht): the configdrive is stored into a shared path