学习OpenStack原理一篇就够了!!!

  • Post author:
  • Post category:其他




一:OpenStack的起源

  • 早在1988年,类似云计算概念的“网络就是计算机”概念就被SUN微系统公司的合作创建者约翰.盖奇首次提出,但第一个提出云计算概念走向落地的厂商却是亚马逊,这主要与其当时的业务模式有很大关系。
  • 作为全球最知名的电子商务网站,高峰时,支撑亚马逊电子商务业务交易需要极大的计算量,但平时亚马逊却并不需要如此大的计算力。于是,亚马逊开始尝试将这些空闲出来的计算力开放出来给用户使用。
  • 在2002年,亚马逊向客户推出了一项全新的业务——包括存储空间、计算能力等资源服务的Web

    Service,这种早期的“远程控制”方式就是最早期的一种云计算的模式。
  • 但云计算真正被广泛认可却是在亚马逊在2006年推出弹性计算云(Elastic Compute Cloud)之后,EC2的弹性扩展能力吸引了很多厂商的关注。
  • 美国国家航空航天局(NASA)也一直在研究提供类似功能的服务,毕竟这种用于研究的科研机构同样需要强大的计算能力,但一直没有取得太大的进展。直到遇到Rackspace,双方联手后才开始将OpenStack的初级形态构建完成。
  • Rackspace这个厂商对于国内用户并不是很熟悉,但当时它却是美国排名第二的云计算厂商。虽然是美国第二大云计算厂商,但规模仅是亚马逊的5%。
  • 技术上遇到挑战的NASA和市场拓展上遇到挑战的Rackspace开始联手,决定将OpenStack开源,利用社区的力量来强化OpenStack的功能。于是在2010年双发共同开源了OpenStack项目。



二:云计算



2.1:云计算概念

云计算管理的是网络资源、存储资源、服务器资源等物理硬件资源。可以使客户在任何时间任何地点,通过网络,获取所需要的资源或服务,并且按需分配,按用量进行收费。



2.2:云计算


IaaS: Infrastructure-as-a-Service


基础设施即服务:用户通过网络获取虚机、存储、网络,然后用户根据自己的需求操作获取的资源


PaaS: Platform-as-a-Service


平台即服务:将软件研发平台作为一种服务, 如Eclipse/Java编程平台,服务商提供编程接口/运行平台等


SaaS: Software-as-a-Service


软件即服务 :将软件作为一种服务通过网络提供给用户,如web的电子邮件、HR系统、订单管理系统、客户关系系统等。用户无需购买软件,而是向提供商租用基于web的软件,来管理企业经营活动



三:OpenStack优点

  • 开放的架构:OpenStack 的开放架构,能够减少厂商锁定,进而降低风险;
  • 社区的力量:开源软件的一大亮点就是来源社区,有来自全球的开发者的支持;
  • 与公有云互补:目前的云市场环境下,混合云是未来的主流,公有云有AWS、微软等,而私有云搭建方面OpenStack已经成为了一个事实上的标准;
  • 灵活可扩展:OpenStack自身就是个高扩展性的系统。它被设计为松耦合、基于消息通信的架构,不但可以适应小规模的部署,扩展方面也完全满足大型客户的需求;
  • 全面的支持和服务:OpenStack是一个支持一切应用的统一平台;



四:OpenStack架构



4.1:架构图

  • 官网公布的架构图

[OpenStack官网架构图(https://www.openstack.org/software/)

在这里插入图片描述

  • 详细架构图

在这里插入图片描述

  • 全局架构来看:OpenStack包括相互独立的服务组件。所有服务均可通过一个公共身份服务进行身份验证。除了那些需要管理权限的命令,每个服务之间均可通过公共API进行交互。所以,API即是每个服务内部和外部的交界处,隔离了内外。
  • 服务之间交互过程:每个服务又由若干组件组成,包含多个进程。每个服务至少有一个API进程,用于侦听API请求,对这些请求进行预处理,(预处理就是将请求暴露出来的API接口,给keystone进行认证,如果认证通过,则放入队列等待被处理。)

    然后将它们传送到自己服务后端的其他组件,对请求进行处理,而不是API进程去处理。也就是说除了认证服务,实际工作都是由具体的进程完成的。
  • 服务内各个进程之间的通信:使用AMQP消息代理。服务的状态存储在数据库中。

消息队列:常用的三种类型,包括rabbitmq、 rocketmq、kafka,是两个独立的服务之间,消息传递的载体,解决消息在传输是请求的高并发问题,会以容器的方式,存储消息列表(包括请求、交互、报文),划分重要等级放入队列中,逐个处理,处理完的会自动删除。



4.2:各组件服务作用

服务 项目名称 方法描述
UI 界面

Dashboard
Horizon 提供了一个基于web的自服务门户,与OpenStack底层服务交互,诸如启动一个实例,分配IP地址以及配置访问控制
计算

Compute
Nova 在OpenStack环境中计算实例的生命周期管理。按需响应包括生成、调度、回收虚拟机等操作。
网络&地址管理

Networking
Neutron 确保为其它OpenStack服务提供网络连接即服务 “Quantum”–>Neutron
身份服务

Identity Management
Keystone 为其他OpenStack服务提供认证和授权服务,为所有的OpenStack服务提供一个端点目录。
对象存储

Object Storage
Swift 通过一个 RESTful,基于HTTP的应用程序接口存储和任意检索的非结构化数据对象。它拥有高容错机制,基于数据复制和可扩展架构。它的实现并像是一个文件服务器需要挂载目录。在此种方式下,它写入对象和文件到多个硬盘中,以确保数据是在集群内跨服务器的多份复制
块存储

Block Storage
Cinder 为运行实例而提供的持久性块存储。它的可插拔驱动架构的功能有助于创建和管理块存储设备
镜像服务

Image Service
Glance 存储和检索虚拟机磁盘镜像,OpenStack计算会在实例部署时使用此服务。
Telemetry Ceilometer 为OpenStack云的计费、基准、扩展性以及统计等目的提供监测和计量。
数据库服务

Database Service
Trove 提供管理数据库即服务配置关系和非关系数据库引擎节点的Trove相关,同时提供Trove在Horizon中的管理面板
Bare Metal Provisioning Ironic 提供裸金属管理服务,Nova Baremetal驱动程序
部署编排

Orchestration
Heat 提供了基于模板来实现云环境中资源的初始化,依赖关系处理,部署等基本操作,也可以解决自动收缩,负载均衡等高级特性。
Data Processing Service Sahara 使用用户能够在Openstack平台上便于创建和管理Hadoop以及其他计算框架集群



五:OpenStack架构解析



5.1:四大节点


整个OpenStack是由控制节点,计算节点,网络节点,存储节点四大部分组成。(这四个节点也可以安装在一台机器上,单机部署)其中:



控制节点


定位

:运维人员通过控制节点从而控制整个openstack架构。

在这里插入图片描述

控制节点包括支持服务,基础服务,扩展服务和网络接口服务,外部的裸金属服务提供物理资源支撑。

支持服务:包括数据库支持和通信支持,为整个节点提供数据存储服务和服务之间消息队列的通信服务。

基础服务:为虚拟机提供基础的镜像、网络、计算资源;keystone负责整个架构的认证和授权,运维人员通过horizon可视化的界面进行管理。

扩展服务:主要针对虚拟机的数据管理,heat进行数据的编排和管理。计量服务在此获取虚拟机的数据源,进行资源监控和计量,并记录。

网络接口:专门管理节点的网络服务,用于联系控制其他节点。



基础管理服务

  • Keystone:认证管理服务,提供了其余所有组件的认证信息/令牌的管理,创建,修改等等,使用MySQL作为统一的数据库
  • Glance:镜像管理服务,提供了对虚拟机部署的时候所能提供的镜像的管理,包含镜像的导入,格式,以及制作相应的模板
  • Nova:计算管理服务,提供了对计算节点的Nova的管理,使用Nova-API进行通信
  • Neutron:网络管理服务,提供了对网络节点的网络拓扑管理,同时提供了Neutron在Horizon的管理面板
  • Horizon:控制台服务,提供了以web的形式,对所有节点的所有服务管理,,通常把该为DashBoard



扩展管理服务

  • Cinder:提供管理块存储节点服务,同时提供Cinder在Horizon中的管理面板
  • Swift:提供管理对象存储节点服务,同时提供Swift在Horizon中的管理面板
  • Trove:提供管理数据库的节点服务,同时提供Trove在Horizon中的管理面板
  • Heat:提供了基于模板来实现云环境中资源的初始化,依赖关系处理,部署等基本操作,也可以解决自动收缩,负载均衡等高级特性
  • Centimeter:提供对物理资源以及虚拟资源的监控,并且记录这些数据,对该数据进行分析,在一定的条件下,触发相应的动作



计算节点架构

  • 计算节点包括Nova、Neutron、Telemeter三个服务


基础服务

  • Nova:提供虚拟机的创建、运行、迁移、快照等各种围绕虚拟机的服务,并且提供API与控制节点对接,有控制节点下发任务
  • Neotron:提供计算节点与网络节点之间的通信服务

扩展服务

  • Telmeter:提供计算节点的监控代理,将虚拟机的情况反馈给控制节点,是Centimeter的代理服务
计算节点包括最少两个网络端口:eth0和eth1。eth0是与控制节点进行通信,受控制节点统一调配。eth1是与网络节点,存储节点进行通信



5.2:OpenStack之分层

在这里插入图片描述

上图的核心为虚拟机,所有组件围绕虚拟机,为它提供服务。可将上图的架构分为三个部分:


红色方框为全局组件


keystone:为所有服务模块提供认证与授权

ceilometer:度量、监控所有数据资源

horizon :UI平台管理,提供一个web管理页面,与底层交互


紫色方框为外部辅助组件


ironic 提供裸金属环境

trove 提供管理数据库服务(控制关系型和非关系型数据库)

heat,sahara 提供对数据管理和编排


蓝色方框为内部核心组件


glance:Glance是Open Stack的镜像服务,提供了磁盘和服务器虚拟镜像的查询、注册和传输的功能。

neutron:提供网络连接服务

swift:对象存储通过一个 RESTful,基于HTTP的应用程序接口存储和任意检索的非结构化数据对象

cinder:提供块从存储服务。

nova:管理实例的生命周期,并负责调取以上四个资源给虚拟机使用。

  • OpenStack云平台服务有四个核心模块:Nova、Glance、Cinder、Neutron四个核心模块提供计算、镜像、存储、网络;四个辅助模块:Horizen、Ceilometer、KeyStone、Swift提供访问、监控、权限、对象存储
  • OpenStack由多种服务组成,每一种服务都具有独立的命名。在整个OpenStack架构中,Keystone提供认证服务,接收来自用户和服务的认证请求,并且对其身份进行认证请求,并且对其身份进行认证。各个服务之间通过公用的API接口进行交互,大部分服务均包含一个API进程,用于监听API请求,根据服务的性质选择处理请求或转发请求。服务进程之间的通讯通过消息队列实现,如AMQP
  • 在部署完成的云系统平台上,用户通过Horizon或者RestAPI的方式在经Keystone模块认证授权后,可以执行创建虚拟机服务。通过Nova模块创建虚拟机实例,Nova调用Glance模块提供的镜像服务,然后调用Neutron模块提供网络服务。根据需要可以选择给虚拟机增加存储卷,卷功能由Cinder模块提供服务。整个过程在Ceilometer模块的资源监控下完成。同时Cinder提供的Volume和Glance提供的镜像可以通过Swift对象存储机制进保存

消息队列:常用的三种类型,包括rabbitmq、 rocketmq、kafka,是两个独立的服务之间,消息传递的载体,解决消息在传输是请求的高并发问题,会以容器的方式,存储消息列表(包括请求、交互、报文),划分重要等级放入队列中,逐个处理,处理完的会自动删除。



5.3:OpenStack组件通信关系:

  • 基于AMQP协议的通信

用于每个项目内部各个组件之间的通信。

  • 基于SQL的通信

用于各个项目内部的数据库通信。

  • 基于HTTP协议进行通信

通过各项目的API建立的通信关系,API都是RESTful Web API。

  • 通过Native API实现通信

OpenStack各组件和第三方软硬件之间的通信。



六:核心服务



6.1:Keystone概念

Keystone (OpenStack Identity Service)是OpenStack中的一个独立的提供安全认证的模块,主要负责openstack用户的身份认证、令牌管理、提供访问资源的服务目录、以及基于用户角色的访问控制。

Keystone类似一个服务总线,或者说是整 个Openstack框架的注册表,其他服务通过keystone来注册其服务的Endpoint (服务访问的URL),任何服务之间相互的调用,需要经过Keystone的身份验证,来获得目标服务的Endpoint来找到目标服务。



6.2:功能

身份认证:负责令牌的发放和校验

用户授权:授权用户有指定的可执行动作的范围

用户管理:管理用户的账户

服务目录:提供可用服务的API端点位置


用户(user)

  • 使用服务的用户,可以是人,服务或者系统,只要是使用了openstack服务的对象都可以称为用户。当User对OpenStack进行访问时,Keystone会对其身份进行验证


证书(credentials)


用于确认用户身份的凭证,证明自己是自己,包括用户的用户名和密码,或是用户名和API密钥,或者身份管理服务提供的认证令牌。


认证(authentication)


定用户身份的过程。


项目(project)

租户,可以理解为一个人、项目或者组织拥有的资源的合集。在一个租户中可以拥有很多个用户,这些用户可以根据权限的划分使用租户中的资源。

项目是各个服务中的一些可以访问的资源集合,用来分组或隔离资源或身份对象。不同服务中,项目所涉及的资源不同。在Nova服务中项目可以是云主机,在 Swift和 Glance中项目可以是镜像存储,在 Neutron中项目可以是网络资源。默认情况下,用户总是被绑定到项目中。一个项目中可以有多个用户,一个用户可以属于一个或多个项目。


角色(role)

角色,用于分配操作的权限。角色可以被指定给用户,使得该用户获得角色对应的操作权限。安全包含两部分:Authentication(认证)和 Authorization(鉴权)

角色是一组用户可以访问的资源权限集合,这些资源包含虛拟机、镜像、存储资源等。

用户既可以被添加到全局的角色,也可以被添加到指定项目内的角色中。其区别是,全局的角色适用于所有项目中的资源权限,而项目内的角色只适用于某个项目内的资源权限。


服务(service)

可以理解为一个人、或服务所拥有的 资源集合 。在一个Project(Tenant)中可以包含多个User,每一个User都会根据权限的划分来使用Project(Tenant)中的资源。比如通过Nova创建虚拟机时要指定到某个Project中,在Cinder创建卷也要指定到某个Project中。User访问Project的资源前,必须要与该Project关联,并且指定User在Project下的Role。


令牌(token)

指的是一串比特值或者字符串,用来作为访问资源的令牌。Token中含有可访问资源的范围和有效时间。

是一串数字字符串,用于访问0 penStock服务的API以及资源。一个令牌可以在特定的时间内生效,并可以在任意时间释放。在 keystone中主要是引入令牌机制来保护用户对资源的访问。


端点(endpoint)

一个可以通过网络来访问和定位某个openstack service的地址,即用户创建一个项目过程中需要的各个服务资源的位置Endpoint该使用对象分为三类:

Admin URL:给admin用户使用,被从常规的访问中分离。

Internal URL:Openstack内部服务使用来跟别的服务通信,只能被局域网访问。

Public URL:其它用户可以访问的地址,可以被全局访问。

User 通过 Endpoint 访问资源和执行操作

所谓端点,是指用于访问某个服务的网络地址或URL。如果需要访问一个服务,则必须知道该服务的端点。在 keystone中包含一个端点模板,这个模板提供了所有已存在的服务的端点信息。一个端点模板包含一个URL列表,列表中的每个URL都对应一个服务实例的访问地址,并且具有 public、 private和 admin这三种权限。其中 public类型的端点可以被全局访问, private类型的端点只能被 OpenStack内部服务访问, admin类型的端点只能被管理员访问。

OpenStack身份认证服务将管理认证、授权以及服务目录整合为一个访问点,同时也是用户需要和OpenStack进行交互的第一个服务。一旦认证通过,终端用户使用其身份访问OpenStack其他服务。同样的,其他服务也将利用身份认证服务确认来访用户身份是否合法以及是否具备相应的权限。此外, OpenStack身份认证服务可以集成其他的身份认证管理系统



Keystone工作流程

在这里插入图片描述

在这里插入图片描述

  • 用户通过命令行或者horizon控制面板的方式登录openstack,凭借自己的证书(credentials)给keystone验证。
  • Keystone对用户的证书验证,验证通过则会发布一个令牌(token)和用户所需服务的位置点(endpoint)给用户。
  • 用户得到了位置点(endpoint)之后,携带自己的令牌,向nova发起请求,请求创建虚拟机。
  • nova会拿着用户的token向keystone进行认证,看是否允许用户执行这样的操作。
  • keystone认证通过之后,返回给nova,nova即开始执行创建虚拟机的请求。首先需要镜像资源,nova带着令牌(token)和所需要的镜像名向glance提出镜像资源的请求。
  • glance会拿着token去向keystone进行认证,看是否允许提供镜像服务。keystone认证成功后,返回给glance。glance向nova提供镜像服务。
  • 创建虚拟机还需要网络服务,nova携带token向neutron发送网络服务的请求
  • neutron拿着nova给的token向keystone进行认证,看是否允许向其提供网络服务。keystone认证成功后,返回给nuetron。nuetron则给nova提供网络规划服务。
  • nova获取了镜像和网络之后,开始创建虚拟机,通过hypervisior可调用底层硬件资源进行创建。创建完成返回给用户,成功执行了用户的请求。



版权声明:本文为qyf158236原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。