OpenStack源码分析-挂载卷流程

当Nova volume-attach server volume执行后,主要经过以下几步:

a. Nova Client解析指令,通过RESTFUL接口访问nova-api;

b. Nova API解析响应请求获取虚拟机的基本信息,然后向cinder-api发出请求保留,并向nova-compute发送RPC异步调用请求卷挂载;

c. Nova-compute向cinder-api初始化信息,并根据初始化连接调用Libvirt的接口完成挂卷流程;

d. 进而调用cinder-volume获取连接,获取了连接后,通过RESTFUL请求cinder-api进行数据库更新操作。

2. 源码详解

1. Nova Client

(1) \nova\nova\api\openstack\compute\contrib\volumes.py

在Nova Client进程中,由VolumeAttachmentController接受挂载请求

2. Nova API

(1) \nova\nova\compute\api.py

VolumeAttachmentController的create函数用于响应卷挂载的请求。

(2) \nova\nova\volume\cinder.py

compute.API调用attach_volume函数,分别获取卷信息、检查状态并做保留盘操作

(3) \nova\nova\compute\rpcapi.py

通过attach_colume发送rpc调用Compute中的_attach_volume函数

3. Nova Compute

(1) \nova\nova\compute\manager.py

ComputeManager进行核心调用,首先获取initiator,然后初始化连接。

(2) \nova\nova\virt\block_device.py

DriverVolumeBlockDevice初始化连接后调用connect_volume函数进行卷的挂载

(3) \nova\nova\virt\libvirt\volume.py

LibvirtISCSIVolumeDriver的connect_volume是调用最核心流程,分为多路径和单路径两种情况,在单路径的调用中会执行login、检查session、设置自启动等操作,如果一次未连接成功则还会每tries \ 2秒重复调用,直到达到调用的限制。其中牵扯到的指令有:

a. 尝试连接

iscsiadm -m node -T target_iqn -p target_protal

b. 连接失败重新建立连接

iscsiadm -m node -T target_iqn -p target_protal -op new

iscsiadm -m node -T target_iqn -p target_protal –op update -n node.session.auth.authmethod -v auth_method

iscsiadm -m node -T target_iqn -p target_protal –op update -n node.session.auth.username -v auth_username

iscsiadm -m node -T target_iqn -p target_protal –op update -n node.session.auth.password -v auth_password

c. 检查session,登陆

iscsiadm -m session检查是否登录成功

iscsiadm –m node –T targetname –p ip –login 登陆建立session

d. 设置为随机器启动而启动

iscsiadm -m node -T target_iqn -p target_protal –op update -n node.startup -v automatic

iscsiadm -m node -T target_iqn -p target_protal –rescan

4. Cinder API

(1) \cinder\cinder\volume\api.py

volume.API会继续调用VolumeAPI进行挂卷的数据库更新

(2) \cinder\cinder\volume\rpcapi.py

VolumeAPI通过rpc调用VolumeManager

我来评几句
登录后评论

已发表评论数()

相关站点

+订阅
热门文章