后端cinder对接ceph
1、客戶端接受请求并路由到 VolumeAttachmentController
nova-api处理该请求的入口函数为 nova.api.openstack.compute.volumes.VolumeAttachmentController.delete
根据虚机uuid获取instance实例对象 调用cinderclient,根据卷uuid获取卷实例对象 获取block_device_mapping表 中该 instance挂在该卷的映射信息
2、nova api服务调用nova-compute服务对外的呈现接口
调用cinderclient,更新cinder数据库中卷的状态为detaching 调用nova-compute rpc客户端发送卸载卷的rpc请求 ########################################### nova-compute中日志如下: 2021-08-19 10:40:41.305 7 INFO nova.compute.manager [req-48426331-1529-406d-859f-b9ee3e12181e 667ed6aed9d74a8ebfb09a5720ee9cbe 1dc2e27bb01143539f615fc1f0d9a407 - default default] [instance: 33daefff-e61c-4642-bfbc-4d7f4a63e84c] Detaching volume 33a5b7cc-1e20-42e7-9048-1ab7afe33b32 2021-08-19 10:40:41.420 7 INFO nova.virt.block_device [req-48426331-1529-406d-859f-b9ee3e12181e 667ed6aed9d74a8ebfb09a5720ee9cbe 1dc2e27bb01143539f615fc1f0d9a407 - default default] [instance: 33daefff-e61c-4642-bfbc-4d7f4a63e84c] Attempting to driver detach volume 33a5b7cc-1e20-42e7-9048-1ab7afe33b32 from mountpoint /dev/vda
3、nova-compute服务接受发送过来的卸载卷rpc请求并处理,
调用的是 _detach_volume 获取rdb driver驱动,该参数的值为nova.virt.block_device.DriverVolumeBlockDevice 调用rdb 驱动执行卸载卷操作,self.driver = nova.virt.libvirt.driver.LibvirtDriver 设置nova 数据库中该卷的rdb deleted标志位删除状态
4、rdb driver detach操作
虚机端卸载卷操作 调用cinderclient,发送os-terminate_connection请求,cinder端取消后端存储卷的挂载关系 ######################## cinder-volume日志如下: 2021-08-19 10:40:41.574 40 INFO cinder.volume.manager [req-2f4456ea-aa05-4e1e-9b99-e2de1fad0a6d 667ed6aed9d74a8ebfb09a5720ee9cbe 1dc2e27bb01143539f615fc1f0d9a407 - default default] Terminate volume connection completed successfully ############################################## 调用cinderclient,发送os-detach请求,更新cinder 数据库中,卷的状态 调用libvirt里面的实际驱动进行处理 获取虚机的xml信息,删除xml文件中挂载卷的信息



