设为首页 收藏本站
查看: 1605|回复: 0

[经验分享] Openstack中Nova创建虚机流程分析

[复制链接]

尚未签到

发表于 2017-12-5 07:49:07 | 显示全部楼层 |阅读模式
  Openstack作为一个虚拟机管理平台,核心功能自然是虚拟机的生命周期的管理,而负责虚机管理的模块就是Nova。
  今天学到了以下三点: 1,了解了openstack的整体架构以及这种架构的优点是什么;
                                       2,了解了架构中的各个组件,组件提供的主要功能与各个组件之间的交互;
                                       3,了解了虚机的启动过程,能在遇到问题时发现问题出在哪个模块中的哪个组件。
  Nova组件:
  下图为创建虚拟机的一个大概流程图:



客户端:可以认为是web页面op或者Horizonl;也可以是命令行的nova client。
Nova Api:用于接收和处理客户端发送的HTTP请求;
Nova Scheduler:nova的调度宿主机的服务,决定虚拟机创建在哪个节点上。
Nova compute:Nova中最和新的服务,负责虚拟机的生命周期的管理。
nova conductor:数据访问权限的控制操作,可以理解为数据库代理服务。
其他服务:nova cert管理证书,为了兼容aws;nova vncproxy和consoleauth控制台服务。
不同的模块之间是通过HTTP请求REST API服务
同一个模块不同组件之间(如nova-scheduler请求nova-compute)是RPC远程调用,通过Rabbmq来实现。
             MQ全称为Message Queue, 消息队列(MQ)是一种应用程序对应用程序的通信方法。应用程序通过读写出入队列的消息(针对应用程序的数据)来通信,而无需专用连接来链接它们。消息传递指的是程序之间通过在消息中发送数据进行通信,而不是通过直接调用彼此来通信,直接调用通常是用于诸如远程过程调用的技术。排队指的是应用程序通过 队列来通信。队列的使用除去了接收和发送应用程序同时执行的要求。其中较为成熟的MQ产品有IBM WEBSPHERE MQ等等。
虚机创建流程梳理





1.客户端使用自己的用户名密码请求认证。
2.keystone通过查询在keystone的数据库user表中保存了user的相关信息,包括password加密后的hash值,并返回一个token_id(令牌),和serviceCatalog(一些服务的endpoint地址,cinder、glance-api后面下载镜像和创建块存储时会用到)。
3.客户端带上keystone返回的token_id和创建虚机的相关参数,Post请求nova-api创建虚拟机
4.nova-api接收到请求后,首先使用请求携带的token_id来访问该api,以验证请求是否有效。
5.keystone验证通过后返回更新后的认证信息。
6.nova api检查创建虚拟机参数是否有效与合法。
检查虚拟机name是否符合命名规范,flavor_id是否在数据库中存在,image_uuid是否是正确的uuid格式
检查instance、vcpu、ram的数量是否超过配额。
7.当且仅当所有传参都有效合法时,更新nova数据库,新建一条instance记录,vm_states设为BUILDING,task_state设为SCHEDULING.
8.nova api 远程调用传递请求、参数给nova scheduler,把消息“请给我创建一台虚拟机”丢到消息队列,然后定期查询虚机的状态。
9.nova scheduler从queue中获取到这条消息
10.nova scheduler访问nova 数据库,通过调度算法,过滤出一些合适的计算节点,然后进行排序。
11.更新虚机节点信息,返回一个最优节点id给nova scheduler。
12.nova scheduler选定host之后,通过rpc调用nova-compute服务,把“创建虚机请求”消息丢个mq。
13.nova compute收到创建虚拟机请求的消息
#nova-compute有个定时任务,定期从数据库中查找到运行在该节点上的所有虚拟机信息,统计得到空闲内存大小和空闲磁盘大小。然后更新数据库compute_node信息,以保证调度的准确性。
14.nova compute通过rpc查询nova数据库中虚机的信息例如主机模板和id
15.nova conductor从消息队列中拿到请求查询数据库
16.nova conductor查询nova数据库
17.数据库返回虚机信息
18.nova compute从消息队列中获取信息。
19.nova compute 请求glance 的rest api,下载所需要的镜像,一般是qcow2的。
http://www.cnblogs.com/zhoumingang/p/5522463.html  
20.glance api 也会去验证请求的token的有效性。
21.glance api 返回镜像信息给nova-compute。
22.同理,nova compute请求neutron api配置网络,例如获取虚机ip地址
23.验证token的有效性
24.neutron返回网络信息
25-27 同glance、neutron验证token返回块设备信息
28.据上面配置的虚拟机信息,生成xml,写入libvirt,xml文件,然后调用libvirt driver去使用libvirt.xml文件启动虚拟机。



总结:
1、Openstack这种分布式的架构,各个模块之间松耦合,可以很容易的新增模块,而且配置灵活,服务可以安装在不同节点,即使部分服务挂了也不会影响。
2、虚拟机创建简单说来三步,nova api接受创建虚机请求,nova scheduler为创建虚机指定宿主机,nova compute启动虚拟机。如果能够理解上面的所有步骤,那么对于定位问题可以精准,甚至有些问题可以自己解决,譬如虚机error了,如果你看到虚机的信息已经有host信息了,那基本能从nova-compute的日志中看到问题所在,如果没有,基本是scheduler会有错误信息提示。

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-420690-1-1.html 上篇帖子: openstack-dashboard开发环境搭建 下篇帖子: 浅谈OpenStack与虚拟机的区别与联系
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表