openstack创建虚拟机的流程

1.在命令行或者web界面执行创建虚拟机的命令
2.命令提交后会找keystone去验证身份,验证当前用户是否能够验证通过获得token,验证失败直接返回401
3.验证通过后带着创建虚拟机的请求及token去访问nova-api,请求中包含用什么镜像、网络、什么规格主机、什么安全组、虚拟机名字这些信息都需提供
4.nova-api收到创建虚拟机的请求之后,会先把请求写到数据库中
5.nova-api会给消息队列发一条消息,发给nova-scheduler
6.nova-scheduler接收到任务后,会去读取数据库,读取要创建的实例的配置要求,其次读取计算节点当前的资源剩余情况,方便后续调度,如果发现所有计算节点都不满足创建虚拟机的要求,就会返回报错,没有有效的主机,计算节点资源满足的话就选一个合适的计算节点用于创建虚拟机
7.挑出合适的计算节点后,通过消息队列,直接将创建虚拟机的消息发给计算节点
8.计算节点收到消息后,去数据库中了解要创建的虚拟机的配置,但是计算节点不直接连接数据库,计算节点会通过消息队列去找nova-conductor,nova-conductor会连接数据库,将数据取出后通过消息队列返回给计算节点
9.nova-compute计算节点拿到虚拟机的配置后才开始创建虚拟机
-
根据配置指定的镜像,去glance镜像服务下载对应的镜像
-
glance镜像服务收到请求后,会先去keystone验证一下,看该请求是否有权限获得镜像(不是谁都能获取镜像的),有权限就返回镜像的获取地址,没权限直接拒绝。随之镜像下载失败,虚拟机启动失败。
-
假设虚拟机下载镜像成功,接下来虚拟机还要上网,就要去找neutron-server网络服务获取IP地址,neutron-server也需要去keystone进行验证该请求是否有权限获取IP地址。验证通过后就安排DHCP-agent分配IP地址,neutron-plugins-agent创建桥接网卡。
-
如果将实例创建在卷上的话,就需要找cinder存储服务分配一块硬盘。 (虚拟机不创建在卷上的话,就不需要去找cinder以及产生相关步骤了)
-
cinder也需要去keystone进行验证该请求,验证通过后,通过cinder-scheduler把分配的任务安排下去,最终安排了一个cinder-volume来提供请求的硬盘。
-
nova-compute会提前把内存和cpu准备出来,硬盘也有了就把所有的资源都准备好了。
-
最后把虚拟机通过Hypervisor跑起来(kvm)
整个流程可以分成两大部分
第一部分是nova节点内部的调用,第二部分是nova-compute与其他服务的调用(glance,nuetron,cinder等),每步调用都需要通过keystone进行验证