十二、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获取认证信息。

[[email protected] ~]# 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:[email protected]/nova_api

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

我初始化完了

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

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

transport_url = rabbit://openstack:[email protected]:5672,controller2:5672,controller3:5672

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

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

transport_url = rabbit://openstack:[email protected]: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:[email protected]:5672,controller2:5672,controller3:5672

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

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

transport_url = rabbit://openstack:[email protected]: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调用硬件资源

原文地址:https://www.cnblogs.com/hanjingzheng/p/9082345.html

时间: 2024-08-27 10:33:58

十二、openstack虚拟机创建流程的相关文章

OpenStack-liberty版虚拟机创建流程(八)

虚拟机创建流程: 根据官方提供的流程图,我个人将OpenStack云主机的创建步骤分为四个阶段: 1.KeyStone验证阶段 2.Nova服务组件交换 3.OpenStack其它服务交换 4.执行创建 第一阶段:KeyStone验证 用户使用Dashboard Horizon或者命令行CLI,通过REST API给Identity 服务Keystone发送用户凭据(credentials)并验证(authenticates).Keystone使用用户凭据进行验证,然后返回一个auth-toke

“全栈2019”Java第二十二章:控制流程语句中的决策语句if-else

难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java第二十二章:控制流程语句中的决策语句if-else 下一章 "全栈2019"Java第二十三章:流程控制语句中决策语句switch上篇 学习小组 加入同步学习小组,共同交流与进步. 方式一:关注头条号Gorhaf,私信"Java学习小组". 方式二:关注公众号Gorhaf

别以为真懂Openstack: 虚拟机创建的50个步骤和100个知识点(5)

八.KVM 这一步,像virsh start命令一样,将虚拟机启动起来了.虚拟机启动之后,还有很多的步骤需要完成. 步骤38:从DHCP Server获取IP 有时候往往数据库里面,VM已经有了IP,很多人就认为虚拟机就得到了IP,可是总是连不进去,不知从何入手,其实界面上能看到VM的IP和VM真正从DHCP获得IP是两回事情. 步骤39:cloud-init连接Metadata Server,并注入Key Metadata Server有很复杂的架构,cloud-init连接Metadata

别以为真懂Openstack: 虚拟机创建的50个步骤和100个知识点(3)

四.Nova-compute 步骤17:nova-compute接收到请求后,通过Resource Tracker将创建虚拟机所需要的资源声明占用 步骤18:调用Neutron API配置Network,虚拟机处于Networking的状态 需要注意的是,这一步虽然是配置Network,但是主要是数据结构的准备,真正的设备并没有创建. 由于在创建虚拟机的时候,我们指定了将虚拟机放到哪个private network里面,因而在创建真正的设备之前,所有的信息都需要准备好. 这里的知识点设计Netw

别以为真懂Openstack: 虚拟机创建的50个步骤和100个知识点(2)

二.nova-api 步骤3:nova-api接收请求 nova-api接收请求,也不是随便怎么来都接收的,而是需要设定rate limits,默认的实现是在ratelimit的middleware里面实现的. 然而有时候,我们希望实现distributed rate-limiting,从而Turnstile是一个不错的选择. https://github.com/klmitch/turnstilehttp://pypi.python.org/pypi/turnstile 步骤4:对Token的

别以为真懂Openstack: 虚拟机创建的50个步骤和100个知识点(4)

六.Libvirt 对于Libvirt,在启动虚拟机之前,首先需要define虚拟机,是一个XML格式的文件 列出所有的Instance # virsh list Id    Name                           State---------------------------------------------------- 10    instance-00000006              running # virsh dumpxml instance-000

JAVA-初步认识-第十二章-多线程创建方式一继承

一. 既然是创建线程,那么线程应该怎么创建?在没有学习java之前,这些程序是谁在操作执行的呢?是由我们所在的操作系统来完成的.Windows里面有个任务管理器,它来管理这些任务,它来创建这些进程,并来创建进程中所用的线程.是由系统来完成的,我们无法直接使用系统来帮我们做这件事情.解决问题的时候,首先想到的是java中是否有给我们提供能解决该问题的对象,尤其是线程还走了系统.你不玩java,它没有多线程,因为windows具备这能力,它在帮你做这个分配呢.我们是做不了的,我们就想说java是否也

Android 源码分析(十) Dalvik 虚拟机创建过程

一. 介绍Dalvik 1.java的运行需要JVM(后面有大量篇幅介绍),同样android中使用了java语言,也需要一个VM.针对手机处理器和内存等硬件资源不足而推出来的一款VM,为android运行提供环境,叫DVM. 2.Dalvik虚拟机允许多个instance的存在.实际上android中的每一个app都是运行在自己VM实例之中(沙盒).每一个VM实例在linux中又是一个单独的进程,所以可以认为是同一个概念.运行在自己的DVM进程之中,不同的app不会相互干扰,且不会因为一个DV

JavaWeb学习总结(五十二)——使用JavaMail创建邮件和发送邮件

一.RFC882文档简单说明 RFC882文档规定了如何编写一封简单的邮件(纯文本邮件),一封简单的邮件包含邮件头和邮件体两个部分,邮件头和邮件体之间使用空行分隔. 邮件头包含的内容有: from字段  --用于指明发件人 to字段      --用于指明收件人 subject字段  --用于说明邮件主题 cc字段     -- 抄送,将邮件发送给收件人的同时抄送给另一个收件人,收件人可以看到邮件抄送给了谁 bcc字段   -- 密送,将邮件发送给收件人的同时将邮件秘密发送给另一个收件人,收件人