虚拟机创建流程

openstack4j创建虚机 openstack创建虚拟机命令_openstack4j创建虚机

(65)
1、通过命令行或dashboard登录时需要提供相应的账号名及密码,请求会交由keystone进行认证,keystone会通过查询数据库,查看到当前用户的密码以及用户权限(当密码正确并且有权限创建虚拟机,则把请求交由nova api)。

2、keystone通过用户请求认证信息,生成一个临时auth-token字符串返回给对应的认证请求。

3、dahsboard或命令行发送一个创建虚拟机的请求到nova-api(携带上一步的auth-token)。

4、nova-api接收请求后向keystone发送认证请求,查看token是否为有效用户和token。

5、keystone验证nova-api发送过来的token是否有效,并将结果返还给nova-api。

6、通过认证后,nova-api通过nova-conductor访问数据库,把创建虚拟机的元数据写入到数据库中。

7、虚拟机数据写入数据库完成。

8、nova-api通过rpc远程调用rabbitmq,向nova-scheduler请求是否有创建虚拟机的资源(可用node节点)。

9、nova-scheduler进程会监听rabbitmq消息队列,获取nova-api请求并进行消费。

10、nova-scheduler通过查询nova数据库中计算资源的情况,并通过调度算法计算符合虚拟机创建需求的主机。

11、对于有符合虚拟机创建的主机,nova-scheduler更新数据库中虚拟机对应的物理主机资源信息。

12、nova-scheduler通过rpc远程调用向nova-compute发送对应的创建虚拟机请求的消息到rabbitmq(虚拟机创建在哪个node节点上)。

13、nova-compute从对应的消息队列中获取创建虚拟机请求的消息,会判断是否是在自己节点进行创建,如果不是在自己节点,则不会进行虚拟机创建。

14、nova-compute通过rpc调用(把消息发送到rabbitmq)向nova-conductor请求获取虚拟机的类型(Flavor)。

15、nova-conductor从消息队列中拿到nova-compute请求信息。

16、nova-conductor根据消息从nova数据库中查询虚拟机对应的类型信息。

17、nova-conductor从数据库中获取到虚拟机的对应信息、

18、nova-conductor把虚拟机信息通过消息的方式发送到rabbitmq消息队列中。

19、nova-compute从对应的消息队列中获取到虚拟机对应的相关信息。

20、nova-compute请求glance-api获取创建虚拟机所需镜像。

21、glance-api向keystone认证token是否有效,并返回验证结果。

22、token验证通过后,nova-compute获取虚拟机镜像信息(镜像的URL)。

23、nova-compute请求neutron-server获取创建虚拟机所需要的网络信息。

24、neutron-server向keystone认证token是否有效,并返回验证结果。

25、token验证通过后,neutron-server会给nova-compute返回一个DHCP分配的虚拟机IP地址、网关、子网掩码、DNS。

26、如果安装了cinder,则nova-computecinder-api会获取创建虚拟机所需的持久化存储信息。

27、cinder-api向keystone认证token是否有效,并返还验证结果。

28、token通过后,nova-compute获取虚拟机持久化信息,并且cinder-api会调用cinder-storage,在cinder-storage节点创建等同于虚拟机大小的卷

29、如果没有安装cinder,nova-compute根据实例(instance)的信息调用配置的虚拟化驱动来创建虚拟机(由当前物理机通过libvirt调用KVM创建虚拟机)。