Openstack之工作流程
组件
OpenStack的核心部件即包括Nova(用于计算)、Keystone(用于身份服务)、Neutron(用于网络和地址管理)、Cinder(块存储)、Swift(对象存储)、Glance(镜像服务)、Horizon(UI界面)、Heat(用于部署编排)和Ceilometer(监控测量)。其中最核心的就是计算基础架构Nova、存储基础架构Swift和镜像服务Glance。
Nova是OpenStack云计算架构控制器,管理OpenStack云里的计算资源、网络、授权、和扩展,负责虚拟机创建、开机、关机、挂起、暂停、调整、迁移、重启、销毁等操作,配置CPU、内存等信息规格。
Swift为OpenStack提供分布式的虚拟对象存储,通过分布式的穿过节点, Swift 有能力存储数十亿计的对象,Swift具有内置冗余、容错管理、存档、流媒体的功能,并且高度扩展,不论大小(多个 PB 级别)和能力(对象的数量)。
Glance镜像服务用于查找和检索虚拟机的镜像系统。
Horizon(Dashboard)是OpenStack中各种服务的Web管理门户,与其他主要模块相连接,用于简化操作,便于用户管理与控制各个模块。通过Ceilometer可以监控的模块包括Nova、Glance、Cinder和Neutron,可以收集记录各种信息,为其他服务提供数据支撑。Keystone模块可以对其他模块进行身份及权限验证,包括Nova、Glance、Cinder、Swift、Neutron和Ceilometer。
对于虚拟机(Virtual Machine,VM),Nova可以为其提供计算资源,Glance为其提供镜像,Cinder为其提供块存储资源,Neutron为其提供网络资源及网络连接。Cinder连接VM后所产生的数据可以备份到Swift对象存储中,Glance提供镜像可以保存在Swift对象存储中。
Open Stack的各个服务之间通过统一的REST风格的API调用,实现系统的松耦合。它内部组件的工作过程是一个有序的整体。诸如计算资源分配、控制调度、网络通信等都通过AMQP实现。Open Stack的上层用户是程序员、一般用户和Horizon界面等模块。这三者都是采用OpenStack各个组件提供的API接口进行交互,而它们之间则是通过AMQP进行互相调用,它们共同利用底层的虚拟资源为上层用户和程序提供云计算服务。
工作流程

1.创建虚拟机流程
创建虚拟机是OpenStack最基本的且较为核心的功能,整个流程以Nova组件为核心,并与其他组件如Keystone、Glance、Neutron、Cinder等进行交互。下面为创建虚拟机过程的具体流程:
1、登录界面或命令行通过RESTful API向Keystone获取认证信息。
2、Keystone通过用户请求认证信息,并生成Auth-Token返回给对应的认证请求。
3、界面或命令行通过RESTful API向Nova-api发送一个boot instance的请求(携带Auth-Token)。
4、Nova-api接受请求后向Keystone发送认证请求,验证Token的有效性。
5、Keystone验证Token是否有效,如有效则返回有效的认证和对应的角色。
6、通过认证后,Nova-api和数据库(DataBase,db)进行通讯。
7、初始化新建虚拟机的数据库记录。
8、Nova-api通过rpc.call向Nova-scheduler请求是否有创建虚拟机的资源(Host ID)。通过消息队列(MQ)。
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请求获取虚拟机消息。
15、Nova-conductor从消息队队列中拿到Nova-compute请求消息。
16、Nova-conductor根据消息查询虚拟机对应的信息。
17、Nova-conductor从数据库中获得虚拟机对应信息。
18、Nova-conductor把虚拟机信息通过消息的方式发送到消息队列中。
19、Nova-compute从对应的消息队列中获取虚拟机信息消息。
20、Nova-compute通过Keystone的RESTful API拿到认证的Token,并通过HTTP请求Glance-api获取创建虚拟机所需要镜像。
21、Glance-api向Keystone认证Token是否有效,并返回验证结果。
22、Token验证通过,Nova-compute获得虚拟机镜像信息(URL)。
23、Nova-compute通过Keystone的RESTful 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的信息调用配置的虚拟化驱动来创建虚拟机。
2.OpenStack组件之间的通信
OpenStack各个组件之间大部分是通过调用其他组件的REST api方式进行通信。OpenStack的各个服务组件都有提供相应的API接口,如Nova-api、Glance-api等。使用这些API和扩展可以让用户在OpenStack中实现通讯并进行一系列的操作,如启动服务主机、创建镜像、给主机和镜像设置元数据、创建容器和对象等。
Restful API从字面就可以知道,他是REST式的接口,REST指的是一组架构约束条件和原则,基于HTTP,提供了一个新的架构设计思路,满足这些约束条件和原则的应用程序或设计就是 RESTful。REST定义中把所有事物都定义为资源,每一个资源对应一个独有的ID,在OpenStack中每一个资源也对应一个UUID。RESTful API 就可以通过一套统一的接口为所有客户端提供web服务,实现前后端分离。
Keystone中Token是一个字符串表示,作为访问资源的令牌,Token包含了在指定范围和有效时间内可以被访问的资源。
Keystone中,Endpoint是一个可以通过网络来访问和定位某个OpenStack service的地址,通常是一个URL。比如,当Nova需要访问Glance服务去获取image 时,Nova通过访问Keystone拿到Glance的endpoint,然后通过访问该endpoint去获取Glance服务。我们可以通过Endpoint的region属性去定义多个region。Endpoint 该使用对象分为三类:
admin URL --给admin用户使用,Post:35357
internal URL--OpenStack内部服务使用来跟别的服务通信,Port:5000
public URL --其它用户可以访问的地址,Post:5000
创建完service后创建API EndPoint。在OpenStack中,每一个service都有三种end points:Admin、public、internal。
Admin是用作管理用途的,如它能够修改user/tenant(project);
public是让客户调用的,比如可以部署在外网上让客户可以管理自己的云;
internal是OpenStack内部调用的。
三种endpoints 在网络上开放的权限一般也不同,Admin通常只能对内网开放,public通常可以对外网开放,internal通常只能对安装有OpenStack对服务的机器开放。
3.Nova、Cinder和Neutron
3.1 Nova主要组成
Nova-api、Nova-scheduler、Nova-compute、Nova-conductor。
Nova各组件功能:
Nova-api是一个交互接口,管理者可以通过这个接口来管理内部基础设施,也可以通过这个接口向用户提供服务。基于Web的管理也是通过这个接口,然后向消息队列发送消息,达到资源调度的功能。
Nova-compute是最核心的组件,实现虚拟机管理功能。通过消息队列接收请求,并承担操作工作。
Nova-scheduler是一个拥有把Nova-api调用映射为OpenStack功能的组件,会根据诸如CPU构架、可用域的物理距离、内存、负载等作出调度决定。
Nova-conductor负责数据库的访问权限控制,避免Nova-compute直接访问数据库。
3.2 Cinder主要组成
Cinder-api、Cinder-scheduler、Cinder-volume。
Cinder各组件功能:
Cinder-api是Cinder服务的endpoint,提供REST接口,负责处理client请求,并将RPC请求发送至Cinder-scheduler组件。
Cinder-scheduler负责Cinder请求调度,其核心部分就是scheduler_driver,作为scheduler manager的driver,负责Cinder-volume具体的调度处理,发送Cinder RPC请求到选择的Cinder-volume。
Cinder-volume负责具体的volume请求处理,由不同后端存储提供volume存储空间。
3.3 Neutron包含组件
Neutron-server、Neutron-plugin、Neutron-agent。
Neutron各组件功能:
Neutron-server可以理解为一个专门用来接收Neutron REST API调用的服务器,然后负责将不同的REST API分发到不同的Neutron-plugin上。
Neutron-plugin可以理解为不同网络功能实现的入口,Neutron-plugin接收Neutron-server分发过来的REST API,向Neutron database完成一些信息的注册,然后将具体要执行的业务操作和参数通知给自身对应的Neutron agent。
Neutron-agent可以理解为Neutron-plugin在设备上的代理,接收相应的Neutron-plugin通知的业务操作和参数,并转换为具体的设备级操作,以指导设备的动作。当设备本地发生问题时,Neutron-agent会将情况通知给Neutron-plugin。
Openstack之工作流程的更多相关文章
- openstack nova工作流程
工作流程请求:nova boot --image ttylinux --flavor 1 i-01nova-api 接受请求,一个tcp REST请求.nova-api 发送一个创建虚拟机的请求到消息 ...
- OpenStack各组件逻辑关系、通信部署关系及工作流程
一. OpenStack组件之间的逻辑关系 OpenStack 是一个不断发展的系统,所以 OpenStack 的架构是演进的,举个例子: E 版本有5个组件 Compute 是 Nova:Imag ...
- Ansible工作流程详解
1:Ansible的使用者 ------>Ansible的使用者来源于多种维度,(1):CMDB(Configuration Management Database,配置管理数据库),CMDB存 ...
- struts2工作流程
struts2的框架结构图 工作流程 1.客户端请求一个HttpServletRequest的请求,如在浏览器中输入http://localhost: 8080/bookcode/Reg.action ...
- SecondaryNameNode的工作流程
SecondaryNameNode是用来合并fsimage和edits文件来更新NameNode和metadata的. 其工作流程为: 1.secondary通知namenode切换edits文件 2 ...
- Storm 中什么是-acker,acker工作流程介绍
概述 我们知道storm一个很重要的特性是它能够保证你发出的每条消息都会被完整处理, 完整处理的意思是指: 一个tuple被完全处理的意思是: 这个tuple以及由这个tuple所导致的所有的tupl ...
- gitlab工作流程简介
gitlab工作流程简介 新建项目流程 创建/导入项目 可以选择导入github.bitbucket项目,也可以新建空白项目,还可以从SVN导入项目 建议选择private等级 初始化项目 1.本地克 ...
- Git 工作流程
Git 作为一个源码管理系统,不可避免涉及到多人协作. 协作必须有一个规范的工作流程,让大家有效地合作,使得项目井井有条地发展下去.”工作流程”在英语里,叫做”workflow”或者”flow”,原意 ...
- Spark基本工作流程及YARN cluster模式原理(读书笔记)
Spark基本工作流程及YARN cluster模式原理 转载请注明出处:http://www.cnblogs.com/BYRans/ Spark基本工作流程 相关术语解释 Spark应用程序相关的几 ...
- tornado 学习笔记10 Web应用中模板(Template)的工作流程分析
第8,9节中,我们分析Tornado模板系统的语法.使用以及源代码中涉及到的相关类,而且对相关的源代码进行了分析.那么,在一个真正的Web应用程序中,模板到底是怎样使用?怎样被渲染? ...
随机推荐
- HashMap很美好,但线程不安全怎么办?ConcurrentHashMap告诉你答案!
写在开头 在<耗时2天,写完HashMap>这篇文章中,我们提到关于HashMap线程不安全的问题,主要存在如下3点风险: 风险1: put的时候导致元素丢失:如两个线程同时put,且ke ...
- 为什么带NOLOCK的查询语句还会造成阻塞
背景 客户反映HIS数据库在11点出现了长时间的阻塞,直到手动KILL掉阻塞的源头.请我们协助分析原因,最终定位到.NET程序中使用的SqlDataReader未正常关闭导致. 现象 登录SQL专家云 ...
- BeanShell Sample 如何使用?
一 引入: eanShell Sample主要用于生成一些逻辑复杂的数据,例如用于加解密数据: **每次调用前重置bsh.Interpreter:每个BeanShell副本都有自己的解释器副本(每个线 ...
- ThinkPHP6 事件的简单应用
一.序章 ThinkPHP6的手册中关于[事件]章节的介绍都是直接文字说明,给出创建的类文件,并没有一个好的示例来进行补充说明.对于刚接触[事件]的同学在阅读理解上增加了一点点困难,本文就在此结合示例 ...
- pandas plot函数:数据可视化的快捷通道
一般来说,我们先用pandas分析数据,然后用matplotlib之类的可视化库来显示分析结果.而pandas库中有一个强大的工具--plot函数,可以使数据可视化变得简单而高效. 1. plot 函 ...
- [好文推荐] 如何保护价值上千万的Node.js源代码? - 主要是ncc
如何保护价值上千万的Node.js源代码? https://zhuanlan.zhihu.com/p/84386456 一个强大的JS混淆器. github.com/javascript-obfusc ...
- iview 多弹框,显示z-index 不对,被遮挡的解决方案 goTop函数 modal Drawer 抽屉
iview 多弹框,显示z-index 不对,被遮挡的解决方案 goTop函数 modal 原因 弹多个modal框的时候,会被遮挡,导致后显示的框在下面 解决原理 获取当前弹框的z-index,然后 ...
- php time 时间 前台拿到 需要*1000能正确显示 dayjs(time*1000).format('YYYY-MM-DD HH:mm:ss')
php time 时间 前台拿到 需要1000能正确显示 dayjs(time1000).format('YYYY-MM-DD HH:mm:ss')
- deepin版的微信无法启动
我在网上找了半天的了,出现问题的原因应该是deepin-wine的问题: 既然是deepin-wine出了问题,那重装一下就好了,嗯~ 我直接,yay!结果发现有一个deepin-wine需要更新,更 ...
- const用法及与constexpr区别总结
1.用const修饰函数的参数 参数是值传递 由于函数将自动产生临时变量复制该参数,该参数无需保护,没必要用const 参数是指针传递或者引用传递 const修饰的指针或引用所指向的值不可变.如果该参 ...