Openstack创建虚机流程

openstack在创建虚机的过程中nova的每个服务都扮演了什么角色,以及它们是如何协作的?

nova组件的子服务

nova中的各个子服务介绍:

服务 说明
nova-api 接收并相应用户的请求,执行一些策略,并且发起一些流程,比如:启动一个虚机
nova-conductor 中间层,用于nova-compute和database之间的互动,消除了nova-compute服务对数据库的直接访问
nova-scheduler 从消息队列中获取一个虚机的请求,然后决定在哪个计算节点执行
nova-compute nova组件中最核心的服务,通过调用hypervisor API实现了虚机的管理功能。比如:虚机的创建,重启,关闭,删除等操作。
nova-consoleauth 为控制台代理提供用户的身份令牌。
nova-vpcproxy 提供了一个通过VNC连接正在运行的虚机的代理。

其中每个服务都有以下一个文件:

文件 作用
api.py 供其他组件进行调用
rpcapi.py RPC请求的封装,或者可以这样理解,RPC实现的client端
manager.py 服务的实现,RPC的server端

nova创建虚机的流程

创建虚机的流程图:

创建虚机流程如下:

  1. 通过Dashboard或者command-line获取用户凭据,然后通过RESTful API调用keystone进行身份验证;
  2. keystone对用户凭据进行认证并且生成和发送auth-token信息,以便其它组件之间通过REST-call方式发送请求时使用auth-token信息;
  3. Dashboard或者command-line将‘launch instance’或者‘nova-boot’的请求转化为一个REST API请求,并且发送给nova-api;
  4. nova-api接收到这个请求后,向keystone发送请求验证auth-token和访问权限;
  5. keystone验证token是否有效,如果有效,更新auth的头部信息,包括角色和权限,并且返回;
  6. nova-api与数据库进行通讯;
  7. 对新建的虚拟机在数据库中初始化一条记录;
  8. nova-api向nova-scheduler发送RPC同步调用请求;
  9. nova-scheduler从消息队列中监听到该请求;
  10. nova-scheduler通过查询数据库计算资源的使用情况,并且通过调度算法,筛选出创建虚机使用的物理机;
  11. 返回更新后的该虚拟机对应的数据库的记录,此次主要更新虚机对应的物理机的信息;
  12. nova-scheduler向指定物理机的nova-compute发送创建虚机的RPC异步请求,这里指定的物理机指的是第10步中筛选出的物理机
  13. nova-compute从消息队列中监听到该请求;
  14. nova-compute向nova-conductor发送RPC同步调用,更新虚机的信息,比如:物理机ID和规格(内存,CPU,硬盘)等信息
  15. nova-condutor从消息队列中监听到该请求;
  16. nova-conudctor更新该虚机对应的数据库记录;
  17. nova-conductor向nova-compute发送RPC异步调用,发送内容包括该虚机的信息
  18. nova-compute从消息队列中监听到该请求,并且获取到该虚机的信息;
  19. nova-compute通过auth-token访问glance-api服务,通过镜像ID获取镜像的URI,然后从镜像存储服务器上下载该镜像;
  20. glance-api调用keystone验证auth-toker信息;
  21. 验证通过后,nova-compute获取镜像的元数据;
  22. nova-cmpute使用auth-toker访问Network API,给虚机分配和配置网络信息,例如:虚机的IP地址;
  23. quantum-server调用keystone验证auth-token;
  24. 验证通过后,nova-compute获取到网络信息;
  25. 同样的,nova-cmpute使用auth-toker访问Volume API,给虚机绑定云硬盘;
  26. cinder-api调用keystone验证auth-token
  27. nova-compute获取云硬盘信息;
  28. nova-compute生成Hypervisor驱动需要的数据,并且在Hypervisor上执行请求(通过libvirt或者API)

参考链接:Request Flow for Provisioning Instance in Openstack

推荐文章