看一下openstack启动云主机的流程图
通过上图分析可以知道:
1. 用户使用Dashboard或者CLI 把认证信息通过REST请求发送给keystone进行认证。
2. Keystone校验用户发送的认证信息,并且生成/存储/返回认证后的令牌(token),这个令牌被用来向其他组件发送REST请求。
3. Dashboard 和 CLI把“启动云主机”和 “nova-boot”请求转换成REST API请求,并且发送到nova-api。
4. Nova-api收到请求,然后向keystone发送验证令牌和访问权限的请求。
5. Keystone验证令牌并且返回添加了角色和权限的验证信息。
6. Nova-api和数据库交互。
7. 在数据库中创建新云主机的信息。
8. nova-api发送包含云主机ID的rpc.call请求到消息队列,让nova-scheduler从数据库中取得云主机信息。
9. nova-scheduler 从队列中取得请求。
10. nova-scheduler与数据库交互,通过过滤和权重策略,查询合适的主机。
11. 数据库返回合适的宿主机ID(计算节点)
12. nova-scheduler向符合条件的云主机发送“启动云主机”的rpc.cast请求。
13. 对应的nova-compute从队列中取得请求。
14. nova-compute向nova-conductor发送rpc.call请求,需要获得云主机的信息,比如云主机ID和flavor(内存,CPU,硬盘),系统镜像等。
15. nova-conductor 从队列中取得请求。
16. nova-conductor和数据库交互。
17. 数据库返回云主机信息。
18. nova-conductor通过队列向nova-compute返回云主机的信息(内存,CPU,硬盘,系统镜像)。
19. nova-compute发起REST请求,通过发送令牌和镜像ID到glance-api,取得镜像URI。
20. glance-api通过keystone验证令牌。
21. nova-compute获得镜像资源。
22. nova-compute发起REST请求,通过发送令牌和网络信息到Network API,配置云主机网络和IP。(openvswitch-agent)
23. quantum-server(neutron-server)通过keystone验证令牌。
24. nova-compute获得了网络信息。
25. nova-compute发起REST请求,通过发送令牌和卷信息到Volume API,挂载云硬盘。
26. cinder-api通过keystone验证令牌。
27. nova-compute获得了块设备信息。
28. nova-compute生成hypervisor驱动需要的数据,并且向hypervisor(libvirt)发送请求,启动虚拟机。