组件

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之工作流程的更多相关文章

  1. openstack nova工作流程

    工作流程请求:nova boot --image ttylinux --flavor 1 i-01nova-api 接受请求,一个tcp REST请求.nova-api 发送一个创建虚拟机的请求到消息 ...

  2. OpenStack各组件逻辑关系、通信部署关系及工作流程

    一. OpenStack组件之间的逻辑关系 OpenStack 是一个不断发展的系统,所以 OpenStack 的架构是演进的,举个例子: E 版本有5个组件  Compute 是 Nova:Imag ...

  3. Ansible工作流程详解

    1:Ansible的使用者 ------>Ansible的使用者来源于多种维度,(1):CMDB(Configuration Management Database,配置管理数据库),CMDB存 ...

  4. struts2工作流程

    struts2的框架结构图 工作流程 1.客户端请求一个HttpServletRequest的请求,如在浏览器中输入http://localhost: 8080/bookcode/Reg.action ...

  5. SecondaryNameNode的工作流程

    SecondaryNameNode是用来合并fsimage和edits文件来更新NameNode和metadata的. 其工作流程为: 1.secondary通知namenode切换edits文件 2 ...

  6. Storm 中什么是-acker,acker工作流程介绍

    概述 我们知道storm一个很重要的特性是它能够保证你发出的每条消息都会被完整处理, 完整处理的意思是指: 一个tuple被完全处理的意思是: 这个tuple以及由这个tuple所导致的所有的tupl ...

  7. gitlab工作流程简介

    gitlab工作流程简介 新建项目流程 创建/导入项目 可以选择导入github.bitbucket项目,也可以新建空白项目,还可以从SVN导入项目 建议选择private等级 初始化项目 1.本地克 ...

  8. Git 工作流程

    Git 作为一个源码管理系统,不可避免涉及到多人协作. 协作必须有一个规范的工作流程,让大家有效地合作,使得项目井井有条地发展下去.”工作流程”在英语里,叫做”workflow”或者”flow”,原意 ...

  9. Spark基本工作流程及YARN cluster模式原理(读书笔记)

    Spark基本工作流程及YARN cluster模式原理 转载请注明出处:http://www.cnblogs.com/BYRans/ Spark基本工作流程 相关术语解释 Spark应用程序相关的几 ...

  10. tornado 学习笔记10 Web应用中模板(Template)的工作流程分析

             第8,9节中,我们分析Tornado模板系统的语法.使用以及源代码中涉及到的相关类,而且对相关的源代码进行了分析.那么,在一个真正的Web应用程序中,模板到底是怎样使用?怎样被渲染? ...

随机推荐

  1. RocketMQ(4) 消息的消费

    消费者从Broker中获取消息的方式有两种:pull拉取方式和push推动方式.消费者组对于消息消费的模 式又分为两种:集群消费Clustering和广播消费Broadcasting. 1. 获取消息 ...

  2. Java 面向对象的特征一: * 封装与隐藏

    1 * @ 面向对象的特征一: 2 * 封装与隐藏 3 * 创建一个类的对象以后,我们可以通过"对象.属性"的方式,对 4 * 对象的属性进行赋值,这里,赋值操作要受到属性的数据类 ...

  3. VS Code Snippet Generator 插件 生成 vscode代码片段

    VS Code Snippet Generator 插件 生成 vscode代码片段

  4. 灰度发布、蓝绿部署、金丝雀发布和AB测试及在k8s中的实现

    灰度发布.蓝绿部署.金丝雀发布和AB测试都是软件开发和部署中常用的策略,每种策略都有其特定的用途和优势.下面是对这些策略的简要解释: 灰度发布(Grayscale Release): 灰度发布是一种逐 ...

  5. pod探针的三种类型及三种检测方式

    Pod探针是Kubernetes中的一种机制,用于检测Pod中的容器是否正常运行.它主要有三种类型:存活探针(LivenessProbe).就绪探针(ReadinessProbe)和启动探针(Star ...

  6. 基于python的指定时段执行实例解析

    一 概念: python中库很多,这里熟悉下time和interval的用法 二 实例解析 切记这里的interval,输出的是目前的时间是一个数组. import time from interva ...

  7. BigDecimal类处理高精度计算

    BigDecimal类处理高精度计算 Java在java.math包中提供的API类BigDecimal,用来对超过16位有效位的数进行精确的运算.双精度浮点型变量double可以处理16位有效数,但 ...

  8. stars-one的原创工具——文档生成器

    Github 可以快速生成静态页面文档的工具,适用于文档翻译或者是个人项目,个人开发者可以快速将生成的静态页面部署在gitee或者github上 优点 规范 使用流行的markdown格式编写文档 美 ...

  9. AOSP源码编译—交换空间扩容

    编译AOSP源码的时候会出现提示如下: 意思是需要16G左右的内存(实际上编译会超过16G),而我们之前安装Ubuntu的时候只分配了8G,编 译一定会失败!此时需要添加虚拟内存(swap交换空间) ...

  10. 如何让AR物体更真实?

    在增强现实中,除了虚拟物体本身的模型材质等因素,影响物体真实性的主要是光照.反射.阴影.接下来3DCAT实时渲染云平台将带您从这三个方面探索如何让AR物体更真实! AR光估测 要让一个虚拟物体很好的融 ...