controller节点输入如下命令:
cinder create --display-name admin-volume1 1
一、cinder-api流程(图下面的字是解释上面的日志文件的)
1、cinder-api接收到以http协议发送的POST请求,经过http body分析:创建一个size为1GB的volume
2、cinder-api启动volume_create_api工作流(flow),flow的状态从pending->running->success,该工作流包含若干个任务(TASK),TASK的转换状态与工作流一样,都是到success结束,每个TASK完成特定的任务。
(1)volume_create_api包含的TASK包括:
①ExtractVolumeRequestTask获取request信息
②QuotaReserverTask预留配额
③EntryCreateTask在数据库中创建volume条目
④QuotaCommitTask确认配额
以上①②③④都是创建volume的准备工作,然后
⑤VolumeCastTask向cinder-scheduler发送消息,实际就是把消息发给rabbitmq,所以看到有连接AMQP
最后,volume_create_api flow达到success状态,完成了pending->running->success整个流程。
PS:这里的Volume created successfully只代表cinder-api处理完成,不代表后端存储节点上的volume创建成功。
二、cinder-scheduler
1、cinder-scheduler也是开启一个volume_create_scheduler flow,这个flow也包含若干个任务
①ExtraceSchedulerSpecTask,不知道这个TASK干嘛用的,从日志里看这个TASK返回的结果,好像是指定了volume的一些性质
②SchedulerCreateVolumeTask完成的是filter和weight的工作
filter依次经过:
·AvailabilityZoneFilter,可以给存储节点划分az,这样就可以通过该过滤器过滤到用户指定的az中创建卷;
·CapacityFilter过滤掉存储空间不满足用户需求的存储节点;
·CapabilitiesFilter,不同的后端存储,比如lvm、ceph、sheepdog等等这些产品有不同的特性,cinder用户允许创建volume时指定需要的Capabilities(特性),这个在dashboard页面中,通过volume Type来指定这个特性,volume Type可以根据不同的存储产品特性自定义。
③volume_create_scheduler到达success状态
三、cinder-volume
1、cinder-volume开启volume_create_manager flow,首先该flow的Task包括:
①ExtractVolumeRefTask
②OnFailureRescheduleTask
③ExtractVolumeSpecTask
④NotifyVolumeActionTask
这四个Task为volume创建做准备,到底是什么功能,可以看他们都返回什么result,日志里有显示
⑤CreateVolumeFromSpecTask真正的执行volume创建任务,我的存储是lvm的(openstack默认的是lvm,可以在cinder.conf里指定后端存储类型),当然就用lvcreate这样的命令创建卷了,前面这个sudo cinder-rootwrap /etc/cinder/rootwrap.conf应该是类似于ssh到对应的存储节点上吧,而且应该和对应存储的驱动相关,待细看再说。
⑥CreatevolumeOnFinishTask,完成扫尾工作,具体的扫什么尾要看看代码了。
最后volume_create_manager flow达到success状态