在看具体的实现之前, 先看看官方给出的流程图。
可以看出, 要创建一个Instance, 需要的东西有很多,步骤也不少。 先看看其每步都干了什么。
1. dashboard 或是 CLI 从用户处获得认证信息(用户名及密码),然后转成REST 的API 发送给 Keystone, 并等待返回结果。Keystone会返回一个token, 然后用于后续的操作。
2. dashboard 或是 CLI 使用上步的token发送基于REST的创建Instance的命令给nova-api。
3. nova-api 使用token对操作的API进行权限认证。
4. nova-api 根据当前参数和数据据进行比较,检查冲突项。并且会在数据库中 建立一条记录
5. nova-api 发送RPC请求到queue, 交给调度器(Scheduler)处理
6. 调度器从queue里把消息取出来
7. 调度器根据各种Filter来进行筛选,从有效的主机中选出一个可用的主机。并且发送RPC请求到queue中。
8. 本地的主机从queue中取出RCP请求消息
9. nova-computer发送RPC请求给nova-conductor获取host相关的信息,并且更新数据库中instance的状态
10. nova-conductor取出消息
11. nova-conductor从数据库中取出信息并且返回给nova-computer
12. nova-computer发送REST请求给Glance, 用以获取Image的信息并且从Image的存储设备上下载对应的Image
13. Glance通过token去Kenstone进行认证,并且下载Image到Host
14. nova-computer发送REST请求给Neutron获取网络相关信息
15. Neutron通过token去Kenstone进行认证,并返回相关信息
16. nova-computer发送REST请求Cinder获取硬盘相关的信息
17. Cinder通过token去Kenstone进行认证,并返回相关信息
18. nova-computer生成相关的信息,然后调用Hyervisor去启动Instance