用户创建一个虚拟机实例的过程:
1、用户通过dashboard/cli发起请求,要首先进入keystone认证;
2、keystone认证通过,返回一个令牌;
3、然后拿着令牌去找nova-api,请求启动实例;
4、nova-api拿着令牌去keystone验证令牌是不是合法的;
5、keystone返回没问题;
6、nova-api把用户请求创建虚拟机的信息记录到Nova-DB中(如虚拟机大小,叫什么名字,基于那个flavor创建的);
7、Nova-DB返回信息;
8、nova-api开始和Queue队列交互,把用户的请求扔到队列中;
9、nova-scheduler从Queue队列中取得请由进行调度;
10、nova-scheduler去查下nova-DB中的数据,查看请求的是谁,资源有多大,看看每个compute节点当前的状态,并根据这些状态信息做出调度决策;
11、Nova-DB返回结果信息;
12、通过上述步骤,nova-scheduler知道把这个请求调度给谁,然后把这个结果附加到请求中,扔回队列;
13、这时候,nova-compute节点发现可能和自己相关的信息了,nova-compute从Queue队列中取得由自己启动实例的相关信息,开始启动虚拟机;
14、启动完实例之后,nova-compute开始多次往Queue中扔信息,如自己对虚拟机状态的改变,实例的状态由building状态转换为running状态,然后把多次把这些信息扔到Queue队列,元数据保存在nova-db中,nova-compute节点不能和nova-db直接进行交互,需要借助nova-conductor统一集中对nova-db进行操作
15、nova-conductor从Queue取得信息;
16、nova-conductor把取得的信息更新到nova-db中;
17、nova-db告诉nova-conductor数据已经更新;
18、nova-conductor把数据扔回Queue队列,告诉nova-compute的已经存储完成;
19、nova-compute联系glance-api,请求映像文件;
20、glance-api去keystone确认请求合法性,keystone返回确认结果;
21、glance-api返回映像文件给nova-compute;
22、nova-compute向neutron-server发起网络创建请求;
23、neutron-server去向keystone验证请求的合法性,并返回结果;
24、keystone确认ok后,neutron-server返回创建一个网络;
25、nova-compute想cinder-api发起创建一个外部卷请求;
26、cinder-api去向keystone请求确认合法性,keystone返回确认结果,请求通过后,从本地创建一个卷,并且在本地输出一个target;
27、将结果返回给nava-compute;
28、所有的请求都获得通过以后,nova-compute开始通过hypervisors启动一个实例;