detach云盘失败导致虚机未能删除

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

我们在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中捕获到异常后停止删除虚机的流程,导
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值