Nova 模块调用流程图
Nova 建立虚机详细流程
基本状态
Horizon 发送命令到Keystone验证
用户通过Horizon发送验证请求到keystone,通过RESTful API 发送HTTP请求到Keystone,keytone通过用户验证之后返回给Horizon用户token令牌,用于余下流程的验证使用。
nova-api接收API请求
Horizon将建立虚机需要的参数通过RESTful API 请求传给nova-api
nova-api带着token请求keystone验证
通过验证之后nova-api就会初始化DB
通过验证之后,nova-api就会创建和初始化新虚机的nova database,这一步操作通过nova-conductor完成。
nova-api通过消息队列把消息传给nova-schedule
通过RPC.CALL的方式,请求实例调度,交给nova-schedule根据调度策略选出能够建立虚机的host。
nova-schedule根据过滤器和调度策略,在DB中选出合适的host
nova-schedule将参数传给compute节点的nova-compute进行虚机创建
nova-schedule选择出host id之后,通过RPC.CAST给nova-compute进行实际的虚机创建操作。
nova-compute –> queue –> nova-network
nova-compute会通过消息队列RPC.CALL请求nova-network来给虚机分配网络信息。
- 如果这里用的是Neutron的话,由于Nova和Neutron之间是没有消息队列通信的,所以需要通过API通信
nova-compute –> hypervisor
nova-compute 会去nova database里面获取虚机信息(就是一开始在Horizon定义好的那些),然后通过API或者libvirt下发给hypervisor进行处理