aa

 

 

 

虚拟机启动过程如下:

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

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

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

  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的信息调用配置的虚拟化驱动来创建虚拟机

openstack从入门到放弃更多原理:  http://blog.51cto.com/egon09/1845226

  好文要顶 关注我 收藏该文  

 

本文转载于网络 如有侵权请联系删除

相关文章

  • C#-笔记-多态-第四章

    多态概念:让一个对象能够表现出多种状态(类型) 虚方法 关键字virtualoverride 步骤:将父类的方法标记为虚方法,使用关键字virtual,这个函数可以被子类重新写一个遍历。publicclassRealDuck{ publicvirtualvoidsayHell(){ Console.WriteLine("嘎嘎亂叫"); } } publicclassXpDuck:RealDuck { publicoverridevoidsayHell() { Console.WriteLine("吱吱亂叫"); } } publicclassMtDuck:RealDuck { publicoverridevoidsayHell() { Console.WriteLine("嘎嘎亂叫"); } }复制调用:RealDuckrd=newRealDuck(); XpDuckxd=newXpDuck(); MtDuckmd=newMtDuck(); //声明父类类型的数组 RealDuck[]ducks={rd,xd,md}; for

  • 移动端测试策略【译】

    移动APP与人们之间的关系已成为不可动摇的纽带。随着移动应用程序的发展,迫切需要一种可靠的移动应用程序测试策略。让我们看一下统计数据,这些统计数据表明了移动应用程序测试的重要性。Statista最近进行的一项研究表明,每天在GooglePlay商店中发布的应用程序超过5000个。这听起来很令人震惊,但是绝大部分很难在用户的手机中保持长期的停留。这就是为什么经过几次使用后90%的移动应用程序会被卸载的原因。对于那些努力创造它的开发人员来说,这可能是悲惨的。最近的一项研究显示,50%的测试人员承认,在有限的期限内不可能全面测试移动应用程序。但是,对高质量移动应用程序的需求仍在不断增长。为了弥补增加的搜索和严格的deadline之间的差距,采取了成功的自动移动应用程序的测试策略是紧迫性的。大约60%的质量工程师认为,自动化移动应用程序测试过程已帮助他们实现了前所未有的目标,自动化测试也是生产高质量应用程序的固定解决方案。移动应用策略背后的思想创建测试策略并不是一天两天的任务。它需要对发展趋势有深入的了解,需要采用新方法来做好业务准备,需要质量检查团队的专业知识来学习和适应变化,并有经验来分析

  • pytest文档63-内置fixture之pytestconfig

    前言前面讲request是pytest的一个内置fixture,作用是获取测试的上下文,可以通过request.config获取配置对象。 pytestconfig的作用跟request.config是一样的,都是获取配置对象pytestconfig源码分析pytestconfig是一个内置fixture,用于获取配置对象pytestconfig源码 pytestconfig有2个常用的方法.getoption()获取命令行参数.getini()获取ini配置文件的参数@fixture(scope="session") defpytestconfig(request:FixtureRequest)->Config: """Session-scopedfixturethatreturnsthe:class:`_pytest.config.Config`object. Example:: deftest_foo(pytestconfig): ifpytestconfig.getoption("verbose")

  • Spring Boot 整合Thymeleaf

    概要信息Thymeleaf官网:https://www.thymeleaf.org/Thymeleaf在Github的主页:https://github.com/thymeleaf/thymeleafSpring官方文档:https://docs.spring.io/spring-boot/docs/2.1.6.RELEASE/reference/htmlsingle/#using-boot-starterThymeleaf在Github的主页:https://github.com/thymeleaf/thymeleafSpring官方文档:https://docs.spring.io/spring-boot/docs/2.0.3.RELEASE/reference/htmlsingle/#using-boot-starter什么是ThymeleafThymeleaf是一个跟Velocity、FreeMarker类似的模板引擎,它可以完全替代JSP。相较与其他的模板引擎,它有如下三个极吸引人的特点Thymeleaf在有网络和无网络的环境下皆可运行,即它可以让美工在浏览器查看页面的静态效

  • 九度OJ——1028继续畅通工程

    题目描述: 省政府“畅通工程”的目标是使全省任何两个村庄间都可以实现公路交通(但不一定有直接的公路相连,只要能间接通过公路可达即可)。现得到城镇道路统计表,表中列出了任意两城镇间修建道路的费用,以及该道路是否已经修通的状态。现请你编写程序,计算出全省畅通需要的最低成本。 输入: 测试输入包含若干测试用例。每个测试用例的第1行给出村庄数目N(1<N<100);随后的N(N-1)/2行对应村庄间道路的成本及修建状态,每行给4个正整数,分别是两个村庄的编号(从1编号到N),此两村庄间道路的成本,以及修建状态:1表示已建,0表示未建。当N为0时输入结束。复制输出: 每个测试用例的输出占一行,输出全省畅通需要的最低成本。 样例输入: 3 1210 1320 2340 3 1210 1320 2341 3 1210 1321 2341 0 样例输出: 3 1 0思路:Kruskal算法应用,这题与九度OJ——1024畅通工程和九度OJ——1017还是畅通工程有点像,但新特点,主要是加入了该路是否已经修建的标志数据项,如已经修建那么把边数减1,并把边的两顶点进行并操作,单边不加入最小堆,

  • SAP ui5 ABAP repository handler class的 get_webcontent方法

  • 爬虫模拟有道字典进行翻译,还发现了一条好玩的js

    08.14自我总结爬虫模拟有道字典进行翻译一.代码importrequests fromlxml.htmlimportetree #headers={ #'User-Agent':'Mozilla/5.0(WindowsNT6.1;Win64;x64)AppleWebKit/537.36(KHTML,likeGecko)Chrome/75.0.3770.90Safari/537.36', #'Cookie':'DICT_UGC=be3af0da19b5c5e6aa4e17bd8d90b28a|;webDict_HdAD=%7B%22req%22%3A%22http%3A//dict.youdao.com%22%2C%22width%22%3A960%2C%22height%22%3A240%2C%22showtime%22%3A5000%2C%22fadetime%22%3A500%2C%22notShowInterval%22%3A3%2C%22notShowInDays%22%3Afalse%2C%22last

  • Flask-SocketIO 文档译文

    專欄 ❈译者:詹聪聪投稿邮箱:zhancongc@gmail.com❈——序言:本人工作中需要用到flask-socketio,在学习英文文档时发现,flask-socketio目前并没有相关的中文文档。斗胆利用业余时间将这个库的英文文档翻译出来,希望能够帮助那些没有时间或精力研习英文文档的朋友。鉴于水平有限,翻译错误在所难免,还望各位不吝赐教。任何问题都可以发送邮件给我。(email:zhancongc@gmail.com)注意:译者所用的flask-socketio版本号是:2.7.2,无特殊情况,本文档的一切特性均以2.7.2版本为准。正文:flask-SocketIO为flask应用提供了一个客户端与服务器之间低延迟的双向通信。客户端应用可以用Javascript,C++,Java,Swift或者其它任意的编程语言的socketio官方库的客户端去和服务端创建一个永久的连接。1.安装你可以使用pip这样常规的方式来安装这个包: >pipinstallflask-socketio2.依赖Flask-SocketIO兼容python2.7和python3.3+。这个异步的服务

  • android toast点击事件_android生命周期七种方法

    大家好,又见面了,我是你们的朋友全栈君。设置AndroidToast持续时间非常长(例如1分钟)(SetAndroidToastdurationtobereallylong(e.g.,1minute))我尝试将我的Toast节目时间设置为1分钟。我试试这个:finalToasttoast=Toast.makeText(getApplicationContext(),“MESSAGE”,Toast.LENGTH_LONG);toast.show();Handlerhandler=newHandler();handler.postDelayed(newRunnable(){ @Overridepublicvoidrun(){ toast.cancel();}},60000);谢谢你的帮助。ItrytosetmyToastshowdurationlike1minute.Itrythis:finalToasttoast=Toast.makeText(getApplicationContext(),“MESSAGE”,Toast.LENGTH_LONG);toast.show();Handler

  • MyBatis(十一):Mybatis 动态SQL语句完成多条件查询

    之前文章中对in的用法做过讲解:《MyBatis(四):mybatis中使用in查询时的注意事项》 实际上对于多个参数的用法也是这是注意的: 多参&if判空&List集合判空&in用法 @Options(useCache=true,flushCache=Options.FlushCachePolicy.FALSE,timeout=60000) @Select(value={ "<script>", "SELECT`id`,`title`", "FROM`tb_article`", "WHERE`category_id`=#{article.categoryId}", "<iftest='article.status!=null'>", "AND`status`=#{article.status}", "</if>", "<iftest='typeList!=nulland!typeList.isEmpty()'>", "and`article_type`in", "<foreachcollection=\"

  • Django - 发送邮件

    在Python中已经内置了一个smtp邮件发送模块,Django在此基础上进行了简单地封装,让我们在Django环境中可以更方便更灵活的发送邮件。 所有的功能都在django.core.mail中。 一、快速上手 两行就可以搞定一封邮件: fromdjango.core.mailimportsend_mail send_mail( 'Subjecthere', 'Hereisthemessage.', 'from@example.com', ['to@example.com'], fail_silently=False, ) 复制 导入功能模块,然后发送邮件,soeasy! 默认情况下,使用配置文件中的EMAIL_HOST和EMAIL_PORT设置SMTP服务器主机和端口,EMAIL_HOST_USER和EMAIL_HOST_PASSWORD是用户名和密码。如果设置了EMAIL_USE_TLS和EMAIL_USE_SSL,它们将控制是否使用相应的加密链接。 二、单发send_mail() 方法原型:send_mail(subject,message,from_email,reci

  • &lt;C和指针---读书笔记16&gt;

    条件编译 符合条件,才进行编译。不符合条件的部分,直接忽略,根本不对其进行编译,能大大的提高效率。 主要有两种方式:  (1) #ifexpressition 看表达式结果。                  (2) #ifdef xxx    看是否有过definexxx行为。 (1)#if expression 首先对这个表达式求值,若为真,则进行接着往下走。 #ifexpression1 ..... #elifexpression2 ..... #else .... #endif 复制    (2)#ifdef xxx:首先检查之前是否有过definexxx的操作,不关心把xxxdefine成什么,即使define成空,也无所谓。   文件包含 #include<标

  • ngnix学习视频

    https://www.bilibili.com/video/av36019080/?p=1

  • ZolltyMVC配置-说明文档

      目前XML里支持的一级元素如下:     <!--配置-->     <xsd:elementref="mvc"/>     <xsd:elementref="logger"/>     <xsd:elementref="errorPage"/>     <xsd:elementref="no-intercept"/>     <xsd:elementref="component-scan"/>     <!--基础-->     <xsd:elementref="bean"/> &n

  • 二级python考试回顾(备考用时24天)

    备考说明 2020年本人大三,是从学校过渡到社会的重要年份,这一年不仅拿到了会计证书,而且做了自己喜欢的新媒体实习。在工作中发现编程太有趣了,自动化设计能够帮非技术人员减少许多枯燥的工作,在实习期间自己用HTML和CSS给文案写了可以复用的排版样式,用python写了一个批量二维码生成器,但我不确定自己适不适合编程,此时距11月份python考试时还有24天,想借此机会试一试,看能不能迈入这道门,由于时间紧促,自己在资料选择和备考策略上比较追求短平快,并且舍弃了公共基础知识部分的准备。最后出分80/100。 备考准备 贴一下使用的参考资料。 参考攻略(鸣谢JYP理事): 计算机二级Python怎么考?考什么?-JYP理事的回答-知乎 备考资料: python程序设计-嵩天课程 python123网站 【书籍-officalguide】python语言程序设计 【书籍-officalguide】高教版python语言程序设计冲刺试卷(含线上题库) 目标:上完网课+刷完12套题(完成)。 备考安排: 10月29日-10月31日:过一遍网课(预计12小时),每天完成4章,3-4小时。 11月

  • 回溯法实例详解(转)

    概念 回溯算法实际上一个类似枚举的搜索尝试过程,主要是在搜索尝试过程中寻找问题的解,当发现已不满足求解条件时,就“回溯”返回,尝试别的路径。      回溯法是一种选优搜索法,按选优条件向前搜索,以达到目标。但当探索到某一步时,发现原先选择并不优或达不到目标,就退回一步重新选择,这种走不通就退回再走的技术为回溯法,而满足回溯条件的某个状态的点称为“回溯点”。      许多复杂的,规模较大的问题都可以使用回溯法,有“通用解题方法”的美称。 基本思想      在包含问题的所有解的解空间树中,按照深度优先搜索的策略,从根结点出发深度探索解空间树。当探索到某一结点时,要先判断该结点是否包含问题的解,如果包含,就从该结点出发继续探索下去,如果该结点不包含问题的解,则逐层向其祖先结点回溯。(其实回溯法就是对隐式图的深度优先搜索算法)。      若用回溯法求问题的所有解时,要回溯到根,

  • kubernetes集群之高可用实现

    部署coredns [root@master-1~]#catcoredns.yaml apiVersion:v1 kind:ServiceAccount metadata: name:coredns namespace:kube-system --- apiVersion:rbac.authorization.k8s.io/v1 kind:ClusterRole metadata: labels: kubernetes.io/bootstrapping:rbac-defaults name:system:coredns rules: -apiGroups: -"" resources: -endpoints -services -pods -namespaces verbs: -list -watch -apiGroups: -discovery.k8s.io resources: -endpointslices verbs: -list -watch --- apiVersion:rbac.authorization.k8s.io/v1 kind:ClusterRoleBindin

  • 多次查询与关联查询讲解

      A,B两个表数据规模十几万,数据规模都不大,单机MySQL够用了,在单机的基础上要关联两表的数据,先说一个极端情况,A,B两个表都没有索引,并且关联是笛卡尔积,那关联结果会爆炸式增长,可能到亿级别,这个时候网络IO成了瓶颈,这个时候两次十万行结果集的拉去可能远小于1次亿级别的结果集的拉取,那么将关联合并拉到service层做更快。但实际业务中一般不会有这么蠢的行为,一般关联会有连接条件,并且连接条件上会有索引,一般是有一个结果集比较小,拿到这个结果集去另一张表去关联出其它信息,如果放到service层去做,最快的方式是,先查A表,得到一个小的结果集,一次rpc,再根据结果集,拼凑出B表的查询条件,去B表查到一个结果集,再一次rpc,再把结果集拉回service层,再一次rpc,然后service层做合并,3次rpc,如果用数据库的join,关联结果拉回来,一次rpc,帮你省了两次rpc,当然数据库上做关联更快,对应到数据库就是一次blknestedloopjoin,这是业务常用情况。但是确实大多数业务都会考虑把这种合并操作放到service层,我觉得有几方面考虑:第一:单

  • poj2253--Frogger--最小瓶颈树

    Description给出两只青蛙的坐标A、B,和其他的n-2个坐标,任一两个坐标点间都是双向连通的。显然从A到B存在至少一条的通路,每一条通路的元素都是这条通路中前后两个点的距离,这些距离中又有一个最大距离。现在要求求出所有通路的最大距离,并把这些最大距离作比较,把最小的一个最大距离作为青蛙的最小跳远距离。 SampleInput 2 00 34 3 174 194 185 0复制 SampleOutput Scenario#1 FrogDistance=5.000 Scenario#2 FrogDistance=1.414复制 题解:   本题可以用二分或者kruskal来做。若是二分,抓住题中“最大边权最小”的要求,由此最优转化为判定可行解。   也可以看作是最短路的变形应用,这里贴一发kruskal的水解法。   首先考虑我们是如何转化到最小生成树问题的,题中的意思可以看作加若干条边,使得1和2联通。   其次回想一下kruskal求最小生成树的过程,第一步是将边从小到大排序,再贪心加边。放到本题中,相当于依次从小到大加边,直到1和2联通为止。   显然因为kruskal

  • php 批量进行复制文件

    php批量进行复制文件 1、前言 目标:php批量进行复制指定的目录文件夹下所有文件复制到另一个文件夹下 所使用的的php函数:is_dir,opendir,readdir,scandir,mkdir,closedir,等等(注:其他文件操作函数也可以完成,这里只列举了本次使用的函数)   2、相关函数介绍 2.1、is_dir 详情参考:https://www.w3cschool.cn/php/func-filesystem-is-dir.html 2.2、opendir 详情参考:https://www.w3cschool.cn/php/func-directory-opendir.html 2.3、readdir 详情参考:https://www.w3cschool.cn/php/func-directory-readdir.html 2.4、scandir 详情参考:https://www.w3cschool.cn/php/func-directory-scandir.html 2.5、mkdir 详情参考:https://www.w3cschool.cn/

  • UE编辑器中Actor属性的展示和修改

    一、如何展示actor的属性 查看/修改一个对象的时候,我们都是在编辑器中打开地图,然后选中地图中的一个actor,右侧就会自动出现该actor对应的属性列表。下面是一个选中一个Actor对象时创建对应更新属性对象的调用链。可以看到,当选中一个Actor对象时,对于该对象的属性遍历是自动进行。由于UE支持C++反射,所以给出一个Actor对象时,就可以遍历这个对象的所有Property。UE4Editor-PropertyEditor.dll!FPropertyValueImpl::FPropertyValueImpl(TSharedPtr<FPropertyNode,0>InPropertyNode,FNotifyHook*InNotifyHook,TSharedPtr<IPropertyUtilities,0>InPropertyUtilities)行48 C++UE4Editor-PropertyEditor.dll!FPropertyHandleBase::FPropertyHandleBase(TSharedPtr<FPropertyNode,0

相关推荐

推荐阅读