一、创建虚拟机拓扑图
二、流程讲解
虚拟机创建过程:
- 界面或命令行通过RESTful API向keystone获取认证信息。
- keystone通过用户请求认证信息,并生成auth-token返回给对应的认证请求。
- 界面或命令行通过RESTful API向nova-api发送一个boot instance的请求(携带auth-token)。
- 4. nova-api接受请求后向keystone发送认证请求,查看token是否为有效用户和token。
- keystone验证token是否有效,如有效则返回有效的认证和对应的角色(注:有些操作需要有角色权限才能操作)。
- 通过认证后nova-api和数据库通讯。
- 初始化新建虚拟机的数据库记录。
- nova-api通过rpc.call向nova-scheduler请求是否有创建虚拟机的资源(Host ID)。
- 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以及服务关联
- 界面或命令行通过RESTful API向keystone获取认证信息。
[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
- 2. keystone通过用户请求认证信息,并生成auth-token返回给对应的认证请求。
返还给用户token信息和用户通过验证信息,你可以创建了
- 界面或命令行通过RESTful API向nova-api发送一个boot instance的请求(携带auth-token)。
有用户要创建4G,2C,500G,网络使用什么镜像的请求
- 4. nova-api接受请求后向keystone发送认证请求,查看token是否为有效用户和token。
那我得认证用户和令牌的合法性
- keystone验证token是否有效,如有效则返回有效的认证和对应的角色(注:有些操作需要有角色权限才能操作)。
用户和请求都是合法的,你同意创建吧
从keystone数据库中进行查询是否为合法用户
- 通过认证后nova-api和数据库通讯。
有用户请求过来,你赶紧初始化下信息,显示最新的数据库记录给我
connection = mysql+pymysql://nova:NOVA_DBPASS@controller/nova_api
- 初始化新建虚拟机的数据库记录。
我初始化完了
- nova-api通过rpc.call向nova-scheduler请求是否有创建虚拟机的资源(Host ID)。
向MQ发送客户要创建的资源请求,MQ说,你先等等,我替传达给nova-scheduler
transport_url = rabbit://openstack:RABBIT_PASS@controller1:5672,controller2:5672,controller3:5672
- 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调用硬件资源