我们在openstack环境下创建虚机,可能会有异常情况导致虚机创建失败,这时我们除了要定位异常原因之外还要清理创建失败的error虚机,如果为该虚机外挂了磁盘,则有可能会清理失败,本文对此做详细介绍。
在nova端删除虚机时,会走_shutdown_instance的流程,将bdm参数传进去,在_shutdown_instance方法里检查如果bdm不为空则调用cinder来detach磁盘:
self.volume_api.detach(context, bdm.volume_id)
在cinder端会根据attachment_id在数据库中检查到该磁盘的attachment来做detach处理,如果attachment_id不存在则分三种情况:
len(attachments) > 1
表示该磁盘被多次挂载,在没有attachment_id情况下不能进行detach操作len(attachments) = 1
正常进行detach操作- len(attachments) <1
表示该磁盘没有被挂载过,不能进行detach卸载操作,此时代码中会返回异常:
raise exception.InvalidVolume(reason=msg)
nova中捕获到异常后停止删除虚机的流程,导致虚机删除失败。
在cinder-api中查看具体报错信息为:

在OpenStack环境中,当虚机创建失败需要清理时,可能因detach云盘异常导致虚机无法删除。本文深入探讨了这个问题,分析了cinder在处理detach过程中的逻辑错误,并提出了两种解决方案: nova端捕获异常忽略,或cinder端优化处理。社区已采用优化cinder的方法进行修复。
最低0.47元/天 解锁文章
716

被折叠的 条评论
为什么被折叠?



