前言
OpenStack 是当今最具影响力的云计算管理工具——通过命令或者基于 Web 的可视化控制面板来管理 IaaS 云端的资源池(服务器、存储和网络)。它最先由美国国家航空航天局(NASA)和 Rackspace 在 2010 年合作研发,现在参与的人员和组织汇集了来自 100 多个国家的超过 9500 名的个人和 850 多个世界上赫赫有名的企业,如 NASA、谷歌、惠普、Intel、IBM、微软等。
OpenStack 支持 KVM、Xen、Lvc、Docker 等虚拟机软件或容器,默认为 KVM。通过安装驱动,也支持 Hyper-V 和 VMware ESXi,不过有些功能暂时不支持。
OpenStack 采用 Python 语言开发,遵循 Apache 开源协议,因此相比 CloudStack 来说,更轻量化,效率更高。
云计算服务类型
- 基础设施及服务(Infrastructure as a Service,Iaas)
云服务提供商把IT系统的基础设施层作为服务租出去,由消费者自己安装操作系统、中间件、数据库和应用程序
面向对象一般是IT管理人员 - 平台即服务(Platform as a Service,Paas)
云服务提供商把IT系统中的平台软件层作为服务租出去,消费者自己开发或者安装程序,并运行程序
面向对象一般是开发人员 - 软件即服务(Software as a Service,SaaS)
云服务提供商把IT系统中的应用软件层作为服务租出去,消费者不用自己安装应用软件,直接使用即可,这进一步降低了云服务消费者的技术门槛
面向对象一般是普通用户
OpenStack的核心组件
整个OpenStack架构由多个子服务组成:以下是几个核心项目:
服务 | 项目 | 描述 |
---|---|---|
Compute | Nova | 负责实列生命周期的管理,计算资源的单位。对Hypervisor进行屏蔽,支持多种虚拟化技术(红帽默认KVM)支持横向拓展 |
Network 网络服务 | Neutron | 负责虚拟网络的管理,为实例创建网络的拓扑结构。是面向租户的网络管理,可以自己定义自己的网络,各个租户之间互不影响 |
Identify 身份认证服务 | Keystone | 类似于LDAP服务,对用户、租户和角色、服务进行认证与授权,且支持多认证机制 |
Dashboard 控制面板服务 | Horizon | 提供一个Web管理界面,与OpenStack底层服务进行交互 |
Image Service 镜像服务 | Glance | 提供虚拟机镜像模板的注册与管理,将做好的操作系统拷贝为镜像模板,在创建虚拟机时直接使用,可支持多格式的镜像 |
Block Storage 块存储服务 | Cinder | 负责为运行实例提供持久的块存储设备,可进行方便的扩展,按需付费,支持多种后端存储 |
Object Storage 对象存储服务 | Swift | 为OpenStack提供基于云的弹性存储,支持集群无单点故障 |
Telemetry 计量服务 | Ceilometer | 用于度量、监控和控制数据资源的集中来源,为OpenStack用户提供记账途径 |
Openstack优势
- 模块松耦合:与其他开源软件相比,OpenStack模块分明。添加独立功能的组件非常简单。有时候,不需要通读整个OpenStack的代码,只需要了解其接口规范及API使用,就可以轻松地添加一个新的模块
- 组件配置较为灵活:OpenStack也需要不同的组件。但是OpenStack的组件安装异常灵活。可以全部都装在一台物理机上,也可以分散至多个物理机中,甚至可以把所有的结点都装在虚拟机中。
- 二次开发容易:OpenStack发布的OpenStack API是Rest-full API。其他所有组件也是采种这种统一的规范。因此,基于OpenStack做二次开发,较为简单。而其他3个开源软件则由于耦合性太强,导致添加功能较为困难。
- 兼容性:OpenStack兼容其他公有云,方便用户进行数据迁移。
- 可扩展性:模块化设计,可以通过横向扩展,增加节点、添加资源。
openstack 架构
OpenStack是由一系列具有RESTful接口的Web服务所实现的,是一系列组件服务集合。如下图为OpenStack的概念架构,我们看到的是一个标准的OpenStack项目组合的架构。这是比较典型的架构,但不代表这是OpenStack的唯一架构,我们可以选取自己需要的组件项目,来搭建适合自己的云计算平台,设计的基本原则如下:
- 按照不同的功能和通用性划分不同项目,拆分子系统
- 按照逻辑计划、规范字系统之间的通信
- 通过分层设计整个系统架构
- 不同的功能子系统间提供统一的API接口
OpenStack 概念架构
分析:
- 红色方框为全局组件:
keystone:为所有服务模块提供认证与授权
ceilometer:度量、监控所有数据资源
horizon :UI平台管理,提供一个web管理页面,与底层交互 - 蓝色和绿色方框为外部辅助组件:
ironic 提供裸金属环境
trove 提供管理数据库服务(控制关系型和非关系型数据库)
heat,sahara 提供对数据管理和编排 - 橙色方框为内部核心组件:
glance:提供镜像服务
neutron:提供网络服务
swift:提供对象存储资源
cinder:提供快存储资源
nova:管理实例的生命周期,并负责调取以上四个资源给虚拟机使用。 - 黑色圆圈:
虚拟机,所有的组件都是为虚拟机服务
具体流程:
云平台用户在经过Keystone服务认证授权后,通过Horizon或者Reset API模式创建虚拟机服务,创建过程中包括利用Nova服务创建虚拟机实例,虚拟机实例采用Glance提供镜像服务,然后使用Neutron为新建的虚拟机分配IP地址,并将其纳入虚拟网络中,之后在通过Cinder创建的卷为虚拟机挂载存储块,整个过程都在Ceilometer模块资源的监控下,Cinder产生的卷(Volume)和Glance提供的镜像(Image) 可以通过Swift的对象存储机制进行保存。
介绍:
- 全局架构来看:OpenStack包括相互独立的服务组件。所有服务均可通过一个公共身份服务进行身份验证。除了那些需要管理权限的命令,每个服务之间均可通过公共API进行交互。所以,API即是每个服务内部和外部的交界处,隔离了内外。
- 服务之间交互过程:每个服务又由若干组件组成,包含多个进程。每个服务至少有一个API进程,用于侦听API请求,对这些请求进行预处理,( 预处理就是将请求暴露出来的API接口,给keystone进行认证,如果认证通过,则放入队列等待被处理。) 然后将它们传送到自己服务后端的其他组件,对请求进行处理,而不是API进程去处理。也就是说除了认证服务,实际工作都是由具体的进程完成的。
- 服务内各个进程之间的通信:使用AMQP消息代理,将不同的消息格式进行转换,能够统一处理。服务的状态存储在数据库中。
补充
消息队列:常用的三种类型,包括rabbitmq、 rocketmq、kafka,是两个独立的服务之间,消息传递的载体,解决消息在传输是请求的高并发问题,会以容器的方式,存储消息列表(包括请求、交互、报文),划分重要等级放入队列中,逐个处理,处理完的会自动删除。
消息代理:消息代理是一个中间件应用程序,它将电子邮件从一种专有格式转换为另一种格式。此应用程序有助于在消息体系结构与另一种体系结构之间平稳地转换消息。 消息代理是将电子邮件从一种格式转换为另一种格式的应用程序。
OpenStack组件通信关系:
- 基于AMQP协议的通信:用于每个项目内部各个组件之间的通信。
- 基于SQL的通信:用于各个项目内部的数据库通信。
- 基于HTTP协议进行通信:通过各项目的API建立的通信关系,API都是RESTful Web API。
- 通过Native API实现通信:OpenStack各组件和第三方软硬件之间的通信。
OpenStack 的节点
控制节点包括以下内容:
- 管理支持服务
MySQL:数据库作为基础/扩展服务产生的数据存放的地方
Qpid:消息代理(也称消息中间件)为其他各种服务之间提供了统一的消息通信服务 - 基础管理服务包含Keystone,Glance,Nova,Neutron,Horizon五个服务
Keystone:认证管理服务,提供了其余所有组件的认证信息/令牌的管理,创建,修改等等,使用MySQL作为统一的数据库
Glance:镜像管理服务,提供了对虚拟机部署的时候所能提供的镜像的管理,包含镜像的导入,格式,以及制作相应的模板
Nova:计算管理服务,提供了对计算节点的Nova的管理,使用Nova-API进行通信
Neutron:网络管理服务,提供了对网络节点的网络拓扑管理,同时提供Neutron在Horizon的管理面板
Horizon:控制台服务,提供了以Web的形式对所有节点的所有服务的管理,通常把该服务称为DashBoard - 扩展管理服务包含Cinder,Swift,Trove,Heat,Centimeter五个服务
Cinder:提供管理存储节点的Cinder相关,同时提供Cinder在Horizon中的管理面板
Swift:提供管理存储节点的Swift相关,同时提供Swift在Horizon中的管理面板
Trove:提供管理数据库节点的Trove相关,同时提供Trove在Horizon中的管理面板
Heat:提供了基于模板来实现云环境中资源的初始化,依赖关系处理,部署等基本操作,也可以解决自动收缩,负载均衡等高级特性。
Centimeter:提供对物理资源以及虚拟资源的监控,并记录这些数据,对该数据进行分析,在一定条件下触发相应动作
控制节点一般来说只需要一个网络端口用于通信/管理各个节点
网络节点架构
网络节点仅包含Neutron服务
Neutron:负责管理私有网段与公有网段的通信,以及管理虚拟机网络之间的通信/拓扑,管理虚拟机之上的防火等等
网络节点包含三个网络端口
eth0:用于与控制节点进行通信
eth1:用于与除了控制节点之外的计算/存储节点之间的通信
eth2:用于外部的虚拟机与相应网络之间的通信
计算节点架构
计算节点包含Nova,Neutron,Telemeter三个服务: - 基础服务
Nova:提供虚拟机的创建,运行,迁移,快照等各种围绕虚拟机的服务,并提供API与控制节点对接,由控制节点下发任务
Neutron:提供计算节点与网络节点之间的通信服务 - 扩展服务:
Telmeter:提供计算节点的监控代理,将虚拟机的情况反馈给控制节点,是Centimeter的代理服务
计算节点包含最少两个网络端口
eth0:与控制节点进行通信,受控制节点统一调配
eth1:与网络节点,存储节点进行通信
存储节点架构
存储节点包含Cinder,Swift等服务
- Cinder:块存储服务,提供相应的块存储,简单来说,就是虚拟出一块磁盘,可以挂载到相应的虚拟机之上,不受文件系统等因素影响,对虚拟机来说,这个操作就像是新加了一块硬盘,可以完成对磁盘的任何操作,包括挂载,卸载,格式化,转换文件系统等等操作,大多应用于虚拟机空间不足的情况下的空间扩容等等
- Swift:对象存储服务,提供相应的对象存储,简单来说,就是虚拟出一块磁盘空间,可以在这个空间当中存放文件,也仅仅只能存放文件,不能进行格式化,转换文件系统,大多应用于云磁盘/文件
- 存储节点包含最少两个网络接口
eth0:与控制节点进行通信,接受控制节点任务,受控制节点统一调配
eth1:与计算/网络节点进行通信,完成控制节点下发的各类任务
Keystone身份认证服务
Keystone概念:
Keystone (OpenStack Identity Service)是OpenStack中的一个独立的提供安全认证的模块,主要负责openstack用户的身份认证、令牌管理、提供访问资源的服务目录、以及基于用户角色的访问控制。
Keystone类似一个服务总线,或者说是整 个Openstack框架的注册表,其他服务通过keystone来注册其服务的Endpoint (服务访问的URL),任何服务之间相互的调用,需要经过Keystone的身 份验证,来获得目标服务的Endpoint来找到目标服务。
主要功能
- 身份认证:负责令牌的发放和校验
- 用户授权:授权用户有指定的可执行动作的范围
- 用户管理:管理用户的账户
- 服务目录:提供可用服务的API端点位置
Keystone的管理对象
Keystone服务贯穿整个架构,在进行身份认证服务的整个流程中,有几个重要的概念。 - 用户(user):指的是使用openstack架构的用户。
- 证书(credentials):用于确认用户身份的凭证,证明自己是自己,包括用户的用户名和密码,或是用户名和API密钥,或者身份管理服务提供的认证令牌。
- 认证(authentication):确定用户身份的过程。
- 项目(project):可以理解为一个人,或服务所拥有的资源的集合。
- 角色(role):用于划分权限,通过给user指定role,使user获得role对应操作权限
- 服务(service):openstack架构的组件服务,如nova、neutron、cinder、swift、glance等。
- 令牌(token):由字符串表示,作为访问资源的凭证,是用户的身份/权限证明文件;
token决定了用户的权限范围,在指定的权限内进行操作;也包括令牌的有效期,在指定的时间范围内用户才有这些权限。 - 端点(endpoint):一个可以通过网络来访问和定位某个openstack service的地址,即用户创建一个项目过程中需要的各个服务资源的位置
Keystone工作流程
以用户想要通过openstack平台创建一个虚拟机的过程为例:
注解:
- 用户通过命令行或者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可调用底层硬件资源进行创建。创建完成返回给用户,成功执行了用户的请求。