openstack attach volume过程详解

用了很长时间的openstack,回过头来,回想一些细节问题,可能还是没有彻底理解。比如:

cinder中有attach volume的API

nova中也有volulme attachment create的API

那么两者有什么区别的?


下面详细介绍。

openstack 给节点挂载云盘有两种方式:

1)nova boot时候,添加 --block-device选项

2)创建好的虚机,动态attach-volume

针对这两种方法,在openstack nova模块中的实现方式也就不一样。


一个是在server.py目录下

一个是在volume.py文件下,有个volume_attachment  controller。

个人感觉,这个就是对restful API的最好诠释,把要操作的对象,转化为可以增删改成的资源。

对于server资源,可以crud

对于volumeattachment(把一个挂载动作抽象为资源),也可以增产改查

为什么nova中不抽象为针对volume的CRUD操作?因为volume的声明周期管理是cinder的职责,nova仅仅是云盘的使用者,用volumeattachment更合适。


步骤:

1)cinder create volume

2)nova volume-attach instance-id volume-id

3)nova get volume info,reserver volume,create blockdevicemapping object

4)cast to nova compute

5)nova compute.driver attach

6)block_device.attach

     6.1  block_device get  connector( 也就是计算节点的initiator信息,这里有个专门的库,os_brick,来获取 initiator信息)

     6.2  inialize_connection_info with connector

     6.3) cinder initialization connection info (export lun to the given initiator)

7)connection info got, virt_driver.attach_volume,    virt_driver attach volume to  localhost,then attach to vm

8)  notify   cinder.attach volume (only declare, no need implent)










你可能感兴趣的:(openstack)