十二、openstack虚拟机创建流程

一、创建虚拟机拓扑图

二、流程讲解

虚拟机创建过程:

  1. 界面或命令行通过RESTful API向keystone获取认证信息。
  2. keystone通过用户请求认证信息,并生成auth-token返回给对应的认证请求。
  3. 界面或命令行通过RESTful API向nova-api发送一个boot instance的请求(携带auth-token)。
  4. 4.   nova-api接受请求后向keystone发送认证请求,查看token是否为有效用户和token
  5. keystone验证token是否有效,如有效则返回有效的认证和对应的角色(注:有些操作需要有角色权限才能操作)。
  6. 通过认证后nova-api和数据库通讯。
  7. 初始化新建虚拟机的数据库记录。
  8. nova-api通过rpc.call向nova-scheduler请求是否有创建虚拟机的资源(Host ID)。
  9. nova-scheduler进程侦听消息队列,获取nova-api的请求。

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

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

12. nova-scheduler通过rpc.cast向nova-compute发送对应的创建虚拟机请求的消息。

13. nova-compute会从对应的消息队列中获取创建虚拟机请求的消息。

14. nova-compute通过rpc.call向nova-conductor请求获取虚拟机消息。(Flavor)

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

16. nova-conductor根据消息查询虚拟机对应的信息。

17. nova-conductor从数据库中获得虚拟机对应信息。

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

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

20. nova-compute通过keystone的RESTfull API拿到认证的token,并通过HTTP请求glance-api获取创建虚拟机所需要镜像。

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

22. token验证通过,nova-compute获得虚拟机镜像信息(URL)。

23. nova-compute通过keystone的RESTfull API拿到认证k的token,并通过HTTP请求neutron-server获取创建虚拟机所需要的网络信息。

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

25. token验证通过,nova-compute获得虚拟机网络信息。

26. nova-compute通过keystone的RESTfull API拿到认证的token,并通过HTTP请求cinder-api获取创建虚拟机所需要的持久化存储信息。

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

28. token验证通过,nova-compute获得虚拟机持久化存储信息。

29. nova-compute根据instance的信息调用配置的虚拟化驱动来创建虚拟机。

三、访问流程与API以及服务关联

  1. 界面或命令行通过RESTful APIkeystone获取认证信息。

[root@controller1 ~]# vim /etc/openstack-dashboard/local_settings中

OPENSTACK_KEYSTONE_URL = "http://%s:5000/v3" % OPENSTACK_HOST

OPENSTACK_KEYSTONE_DEFAULT_ROLE = "user"

OPENSTACK_HOST = "controller1"

到哪台主机上,使用什么角色,登录哪个链接,且默认回复的请求会放在如下中

CACHES = {

    'default': {

         'BACKEND': 'django.core.cache.backends.memcached.MemcachedCache',

         'LOCATION': 'controller:11211',

    }

}

 

我要验证用户和拿token

  1. 2.   keystone通过用户请求认证信息,并生成auth-token返回给对应的认证请求。

返还给用户token信息和用户通过验证信息,你可以创建了

  1. 界面或命令行通过RESTful API向nova-api发送一个boot instance的请求(携带auth-token)。

有用户要创建4G,2C,500G,网络使用什么镜像的请求

 

 

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

那我得认证用户和令牌的合法性

 

 

  1. keystone验证token是否有效,如有效则返回有效的认证和对应的角色(注:有些操作需要有角色权限才能操作)。

用户和请求都是合法的,你同意创建吧

从keystone数据库中进行查询是否为合法用户

  1. 通过认证后nova-api和数据库通讯。

有用户请求过来,你赶紧初始化下信息,显示最新的数据库记录给我

connection = mysql+pymysql://nova:NOVA_DBPASS@controller/nova_api

  1. 初始化新建虚拟机的数据库记录。

我初始化完了

  1. nova-api通过rpc.call向nova-scheduler请求是否有创建虚拟机的资源(Host ID)。

向MQ发送客户要创建的资源请求,MQ说,你先等等,我替传达给nova-scheduler

transport_url = rabbit://openstack:RABBIT_PASS@controller1:5672,controller2:5672,controller3:5672

  1. nova-scheduler进程侦听消息队列,获取nova-api的请求。

Nova-seheduler你好,Nova-api有个创建资源的请求

transport_url = rabbit://openstack:RABBIT_PASS@controller1:5672,controller2:5672,controller3:5672

Secheduler计算哪个计算资源能承受用户请求

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

那我得去数据库里查下,符合这个请求的主机

nova-scheduler计算资源,看哪台计算资源上能承受用户请求

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

计算好了,并更新数据库中的新的信息

从数据库中查询到合适的compute,并更新信息

12. nova-scheduler通过rpc.cast向nova-compute发送对应的创建虚拟机请求的消息。

Hello,mq,我找到这个compute了,你把请求发给他

Nova-scheduler通过mq向nova-compute发送创建资源的消息请求

13. nova-compute会从对应的消息队列中获取创建虚拟机请求的消息。

transport_url = rabbit://openstack:RABBIT_PASS@controller1:5672,controller2:5672,controller3:5672

copmpute你的任务来了,scheduler说,在你上面能创建符合资源的虚拟机

 

14. nova-compute通过rpc.call向nova-conductor请求获取虚拟机消息。(Flavor)

transport_url = rabbit://openstack:RABBIT_PASS@controller1:5672,controller2:5672,controller3:5672

啊?什么类型的虚拟机啊?帮我向nova-conductor问问,看看什么类型的资源

你的虚拟机请求具体是多少core、多少内存,网络,镜像、网络等消息

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

你那是什么类型的资源啊?帮我向数据库查下

16. nova-conductor根据消息查询虚拟机对应的信息。

我查下用户请求的到底是什么类型的资源

17. nova-conductor从数据库中获得虚拟机对应信息。

哦,原来是这种的资源

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

mq,我查到了,是4G,4C等的类型

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

Compute,我查到了,是4G,4C等的类型的资源

20. nova-compute通过keystone的RESTfull API拿到认证的token,并通过HTTP请求glance-api获取创建虚拟机所需要镜像。

Glance,有人要用你的服务,你看下合法不?

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

那我得认证下token,看看能不能用,合法不,然后便去认证

22. token验证通过,nova-compute获得虚拟机镜像信息(URL)。

Token认证通过了,是合法的,可以用我的glance资源

nova-compute通过keystone的RESTfull API拿到认证k的token,并通过HTTP请求neutron-server获取创建虚拟机所需要的网络信息。

Neutron,有人要用你的资源,你看看能不能用,合法不?

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

我靠,我也得找keystone认证下,看是否合法,然后便去认证

24. token验证通过,nova-compute获得虚拟机网络信息。

Token通过了,给你虚拟机网络资源用吧

25. nova-compute通过keystone的RESTfull API拿到认证的token,并通过HTTP请求cinder-api获取创建虚拟机所需要的持久化存储信息。

Cinder,有人要用你的cinder资源,你看看用户请求是否可以用,合法不?

26. cinder-api向keystone认证token是否有效,并返回验证结果。

卧槽,我也得找keystone认证下用户token是否合法

27. token验证通过,nova-compute获得虚拟机持久化存储信息。

用户验证通过了,可以用我的存储资源

29、nova-compute根据instance的信息调用配置的虚拟化驱动来创建虚拟机。

我草,真不容易,终于可用满足用户的请求了,于是乎开始大干了

30、compute通过程序或者用户,和virsh工具集,libvirtapi集,进行和一系列的libvirt抽象驱动层进行访问,最后到具体的驱动层,QEMM,XEN,LXC调用硬件资源

猜你喜欢

转载自www.cnblogs.com/hanjingzheng/p/9082345.html
今日推荐