wKioL1e5O6mhbZBsAANVT406Ge8062.png-wh_50

 根据官方提供的流程图,我个人将OpenStack云主机的创建步骤分为四个阶段:

  1. KeyStone验证阶段

  2. Nova服务组件交换

  3. OpenStack其它服务交换

  4. 执行创建

第一阶段:KeyStone验证

1.      用户使用Dashboard Horizon或者命令行CLI,通过REST APIIdentity 服务Keystone发送用户凭据(credentials)并验证(authenticates)。Keystone使用用户凭据进行验证,然后返回一个auth-token。然后后续操作就可以使用这个auth-token通过REST调用请求OpenStack其他的组件。

2.      Horizon或者CLIlaunch instance 或者nova-boot转换形成为一个REST API的请求发送给nova-api

3.      nova-api接到这个请求后,首先向keystone发送一个请求来确认auth-token是否有效和是否有访问权限。Keystone确认auth-token后,发送一个包含角色和权限的更新后的认证头。

4.      nova-apiNova数据库交互,将用户的创建虚拟机的请求在nova 数据库里记录下来。


第二阶段:Nova服务组件交互

5.      nova-apirpc.call的方式发送一个请求给nova-schedule,nova-scheduler去选择一个计算节点来创建虚拟机。注意是通过消息队列发送给nova-scheduler

6.      nova-schedule调度服务会侦听Scheduler队列,从队列中获取数据。

7.      nova-schedulerNova数据库交互,通过调度算法,也就是filtering weighing最终选择一台运行nova-compute的计算节点,然后nova-schedule将虚拟机信息使用rpc.cast的模式发送至nova-compute.计算节点队列。让nova-compute在选择好的计算节点中去创建实例。

8.      Nova-Compute从队列获取请求。

9.      nova-compute发送一个rpc.call 请求给nova-conductor,去获取实例的信息,比如host ID和选择的FlavorCPU、内存和磁盘)。

10.  nova-conductor从队列中获取请求。

11.  nova-conductornova的数据库进行交互。nova-conductor返回实例的信息。nova-compute从队列中获取实例的信息。


第三阶段:OpenStack其它服务交互

在第二阶段nova-compute为了获取到创建实例所需要的资源,比如镜像、网络、存储。会使用在第一阶段用户验证后获取到的auth-tokon分别和镜像服务Glanceglance-api,网络服务Neutronneutron-server已经块存储服务Cindercinder-api进行交互。而且每次对方收到请求后都需要到keystone上去验证auth-token是否有效。

12. nova-compute使用验证后获取的auth-token发起一个REST调用给glance-api获取镜像。然后nova-compute使用使用镜像ID。从镜像服务中得到Image URI。从(p_w_picpath storage)镜像存储中加载镜像。

13.glance-apiKeystone上验证auth-token是否有效。如果有效,nova-compute就可以获取镜像的元数据metadata

14.nova-compute使用验证后获取的auth-token执行一个REST调用给neutron-server,让neutron-server给分配和配置网络,为实例分配IP地址。

15.neutron-ServerKeystone验证auth-token是否有效。如果有效,nova-compute就可以获取到网络的相关信息。

16.nova-compute使用验证后获取的auth-token执行一个REST调用给cinder-api,给实例附加卷存储,也就是云硬盘。

17.cinder-apiKeystone验证auth-token是否有效,如果有效,那么nova-compute就可以获取到块存储的相关信息。


第四阶段:执行创建

在第三阶段,nova-compute已经通过GlanceNeutronCinder分别获取到了镜像、网络和存储相关的信息。那么在第四阶段nova-compute就开始创建虚拟机了。

18.nova-computehypervisor的驱动生成数据,并且通过libvirt或者其他APIhypervisor执行请求来创建虚拟机。这样虚拟机创建的交互流程基本结束,剩下的步骤就是hypervisor最终创建虚拟机的流程。

然后nova-api去轮训nova database,查看虚拟机的状态是否变成正确创建虚拟机的状态(Active,none,sunning),若状态正确,则虚拟机创建正常成功。


转载自赵班长微信:

http://mp.weixin.qq.com/s?__biz=MzIxMDAwOTcwMA==&mid=2247483688&idx=1&sn=e9f5b6d8131320e4b74905a10311a221&scene=1&srcid=0821aruPgZflt9bsqw4sYXH6#wechat_redirect