Openstack------架构知识理论

 

OpenSatck既是是一个社区,也是一个项目和一个开源软件,提供开放源码软件,建立公有和私有云,它提供了一个部署云的操作平台和工具集。

OpenSatck的目的在于:帮助组织运行为虚拟计算或者存储服务的云,为公有云、私有云等,提供可扩展的,灵活的云计算

OpenStack开源项目由社区维护,其中包括计算(Nova)、对象存储(swift)、镜像服务(Glance)

Opensatck-----控制节点

顾名思义就是OpenStack中实现数据中心控制的节点,管理OpenStack的所有组件,不管所有组件接在哪里,都需要控制节点完成类似的注册工作

由拓补图可知,控制节点包括:管理支持服务、基础管理服务、扩展管理服务

管理支持服务

  • MySQL:数据库作为基础扩展服务产生的数据存放的地方
  • Qpid:消息队列(也称为消息中间件)为其他服务之间提供统一的消息通信服务

基础管理服务

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

扩展管理服务

  • Cinder:提供管理块存储节点服务,同时提供Cinder在Horizon中的管理面板
  • Swift:提供管理对象存储节点服务,同时提供Swift在Horizon中的管理面板
  • Trove:提供管理数据库的节点服务,同时提供Trove在Horizon中的管理面板
  • Heat:提供了基于模板来实现云环境中资源的初始化,依赖关系处理,部署等基本操作,也可以解决自动收缩,负载均衡等高级特性

Openstack-----计算节点

  • 计算节点包括Nova,Neutron,Telemeter三个服务组件

Nova组件

  • 提供虚拟机的创建、运行、迁移、快照等各种围绕虚拟机的服务,并且提供API与控制节点对接,有控制节点下发任务

Neutron组件

  • 提供计算节点与网络节点之间的通信服务

Telmeter组件

  • 提供计算节点的监控代理,将虚拟机的情况反馈给控制节点,是Centimeter的代理服务

Openstack-----网络节点

  • 网络节点只包含Neutron服务
  • Neutron:负责管理私有网段与公有网段的通信,以及管理虚拟机网络之间的通信拓扑,管理虚拟机之上的防火墙等等

Openstack-----存储节点

  • 存储节点包括块存储和对象存储服务等等
  • Cinder:块存储服务,提供相应的块存储服务,简单来说,就是虚拟出一块磁盘,可以挂载到相应的虚拟机之上,不受文件系统等因素的影响,对于虚拟机来说,这个操作就像新加了一块硬盘,可以对完成对磁盘的任何操作,包括挂载,卸载,格式化,转换文件系统等操作,大多应用于虚拟机空间不足的情况
  • Swift:对象存储服务,提供相应的对象存储,简单来说,就是虚拟出一块磁盘空间,可以在这个空间当中存放文件,也仅仅只能存放文件,不能进行格式化,转换文件系统,大多应用于云磁盘/文件

Openstack-----组件之间的关系图

  • OpenStack云平台服务有四个核心模块:Nova、Glance、Cinder、Neutron四个核心模块提供计算、镜像、存储、网络
  • 四个辅助模块:Horizen、Ceilometer、KeyStone、Swift提供访问、监控、权限、对象存储

Nova

主要组件

  • nova-api:接受客服端的API请求
  • nova-compute:一个守护进程,通过API接口创建或终止虚拟机,上层发来的请求通过compute去管理虚拟化组件,kvm、qemu去创建虚拟机实例
  • nova-scheduler:在OS群集中可能存在多个nova计算节点,那么请求来的时候scheduler会通过计算优先级决定那台节点去创建虚拟机实例。类似于负载均衡。
  • nova-conductor:为了保证数据库里的数据安全性,conductor作用就是存在于数据库和nova-compute之间,避免数据直接交换。conductor不能装在有nova-conpute的节点上。

其他组件

  • nova-consoleauth daemon:身份验证的一个进程,用户的授权令牌。
  • nova-novncproxy daemon:通过vnc连接来访问运行的虚拟机实例的代理。
  • the queue:消息队列rabbitmq。进程之间传递消息的中心

Keystone认证服务

  • keystone采用两种授权方式:基于用户密码和基于令牌
  • keystone提供三种服务:令牌服务(含有授权用户的授权信息)、目录服务(含有用户合法操作的可用服务列表)、策略服务(利用Keystone具体指定用户或者群组某些访问权限)

user(用户)

  • 在Openstack中,用户是使用Openstack云服务的人、系统或者服务。用户可以登录或者使用指定的token访问云中的资源,并可以被指派到指定的项目或者角色,认证服务通过对用户身份的确认,来判断一个请求是否被允许。用户通过认证信息如密码、API Keys等进行验证

role(角色)

  • 角色是一组用户可以访问的资源权限集合,这些资源包含虚拟机、镜像、存储资源等。用户既可以被添加到全局的角色,也可以被添加到指定项目内的角色。区别是,全局的角色适用于所有项目中的资源权限,而项目内的角色只适用于该项目内的资源权限

service(服务)

  • 用户使用云中的资源是用锅访问服务的方式是实现,Openstack中包含许多服务,如提供计算服务的Nova,提供镜像服务的Glance。一个服务可以确认当前用户是否具有访问其资源的权限。但是当一个用户尝试访问项目内的服务时,那么该用户必须知道这个服务是否存在以及如何访问这个服务

token(令牌)

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

身份认证服务包含以下组件:

  • 服务器:一个中心化的服务器使用RESTful接口来提供认证和授权服务
  • 驱动:驱动或服务后端被整合到集中式服务器中。它们被用来访问OpenStack外部仓库的身份信息,并且它们可能已经存在于OpenStack被部署在基础设置(如SQL数据库或LDAP服务)中
  • 模块:模块运行使用身份认证服务的OpenStack组件的地址空间中这些模块拦截服务请求,获取用户凭证,并将它们送入中央服务器以寻求授权。使用Python Web服务器网关接口,可以实现中间件模块和OpenStack组件间的整合

Glance镜像模块

  • 镜像服务允许用户发现、注册和获取虚拟机镜像。它提供了一个REST API,允许查询虚拟机镜像的元数据,并获取一个现存的镜像。可以将虚拟机镜像存放到各种位置,从简单的文件系统到对象存储系统,如OpenStack Swift项目,默认是存储在本地文件系统上的。其实在生产环境中这个模块本身不存储大量的数据,需要挂载后台存储swift来存放实际的镜像数据.
  • 在OpenStack环境中,镜像是用于在计算节点生成虚拟机。脱离了镜像服务,就无法创建虚拟机,所以镜像服务是OpenStack的一一个核心服务

相关组件

  • glance-api:用于接收镜像,发现、检索和存储的api接口
  • glance-registry:管理镜像的元数据,镜像的大小和类型,这是一个OS系统内部的服务,不能对用户显示接口
  • database:用来存储镜像的元数据
  • storage repository for image files:镜像的存储仓库,支持各种类型的存储。

支持的镜像格式

RAW

  • RAW是一种没有格式或裸格式的磁盘文件类型,RAW对数据不做任何修饰和处理,直接保存最原始的状态,所在性能方面非常出色。由于RAW格式保存原始数据、因此更容易和其它镜像进行转换

QCOW2

  • QCOW2是QCOW的升级版本,其主要的特性是磁盘文件大小可以动态按需增长,并且不会占用所有的实际磁

VHD

  • VHD是微软公司产品使用的磁盘格式

VMDK

  • VMDK是VMware公司产品使用的磁盘格式

VDI

  • VDI是oracle公司的virtualBox虚拟软件所使用的格式

ISO

  • ISO是指一种存档数据文件在光盘上的格式

AKI、ARI、AMI

  • Amazon公司的AWS所使用的的镜像格式

Cidenr

  • 块存储服务(Cinder)提供块存储。存储的分配和消耗是由块存储驱动器或者多后端配置的驱动器决定的。还有很多驱动程序可用: NAS/SAN、 NFS, ISCSI、CEPH等。块存储适合性能敏感性业务场景,例如数据库存储大规模可扩展的文件系统或服务器需要访问到块级的裸设备存储。典型情况下,块服务API和调度器服务运行在控制节点上。取决于使用的驱动,卷服务器可以运行在控制节点、计算节点或单独的存储节点之上。
  • 块存储服务为OpenStack中的实例提供持久的存储,块存储提供-一个基础设施,用于管理卷以及和OpenStack计算服务交互,为实例提供卷、快照、卷类型等功能。站在实例的角度,挂载的每个卷都是--块独立的硬盘。Cinder提供了从创建卷到删除卷整个生命周期的管理。

相关组件

  • Cinder-API:用来接受API请求,并将其路由到Cinder-Volume执行
  •  Cinder-Volume:用来与块存储服务和Cinder-Scheduler进程进行直接交互,它也可以;与这些进程通过一个消息队列进行交互。Cinder-Volume服务响应送到块存储服务的读写请求来维持状态,它也可以和多种存储提供者在驱动架构下进行交互。当用户请求一一个存储资 源时,由Cinder -API负责接受请求,Cinder-Scheduler负责调度资源,而真正执行存储任务的是Cinder -Volume.这样的工作机制使得存储架构非常容易扩展。当存储资源不足时,可以增加存储节点(运行Cinder -Volume)。当客户 的请求量太大调度不过来时,可以增加调度(运行Cinder-Scheduler)
  • Cinder-Scheduler:守护进程会选择最优存储节点来创建卷,其工作机制与Nova-Scheduler类似。当需要创建卷时,Cinder- Scheduler根据存储节点的资源使用情况选择-一个最合适的节点来创建卷
  • Cinder-Baeckup:守护进程服务提供任何种类备份卷到一个备份存储提供者。就像Cinder-Volume服务,它与多种存储提供者在驱动架构下进行交互。
  • 消息队列作用是在块存储的进程之间路由信息。Cinder 各个子服务通过消息队列实现进程间通信和相互协作。

以创建卷为例,cinder的工作流程如下:

  • (1)用户向cinder-api发送创建卷请求:“帮我创建一个卷”;
  • (2)cider-api对请求做一些必要处理后,向消息队列发送一条消息:“让cinder-scheduler创建一个卷”;
  • (3)cinder-scheduler从消息队列获取到消息,然后执行调度算法,从若干存储节点中选出节点A;
  • (4)cinder-scheduler向消息队列发送一条信息:“让存储节点A创建这个卷”;
  • (5)存储节点A的cinder-volume从消息队列中获取到信息,然后通过卷提供者的驱动创建卷。

Neutron

  • OpenStack早起的网络模块是nova-network,而neutron则是nova-network的更新换代产品,也是目前OpenStack重要组

Neutron功能

  • 二层功能:Neutron支持多种虚拟交换机,一般使用Linux Bridge和Open vSwitch创建传统的VLAN网络,以及基于隧道技术的Overlay网络,如VxLAN和GRE(Linux Bridge 目前只支持 VxLAN)。
  • 三层功能:Neutron从Juno版开始正式加入的DVR(Distributed Virtual Router)服务,它将原本集中在网络节点的部分服务分散到了计算节点上。可以通过namespace中使用ip route或者iptables实现路由或NAT,也可以通过openflow给OpenvSwitch下发流表来实现
  • 负载均衡:LBaaS 支持多种负载均衡产品和方案,不同的实现以 Plugin 的形式集成到 Neutron,通过HAProxy来实现。
  • 防火墙:Neutron有两种方式来保障instance和网络的安全性,分别是安全组以及防火墙功能,均可以通过iptables来实现,前者是限制进出instance的网络包,后者是进出虚拟路由器的网络包。

五种网络类型

Local:本地的一个Linux Bridge,除了虚拟机的虚拟网卡不连接其他的网络设备,实际场景很少使用,可以忽略。

 Flat:不带vlan tag的网络,相当于Local网络的Linux Bridge连接到一个物理网卡,该网络中的instance能与同网络的instance通信,且可以跨多个节点,实际场景也很少用到。

VlAN:可以跨节点,目前是私有云网络应用较多

VXLAN:是基于隧道技术的 overlay 网络,通过唯一的VNI区分于其他 vxlan 网络。vxlan中数据包通过VNI封装成UPD包进行传输,因为二层的包通过封装在三层传输,能够克服vlan和物理网络基础设施的限制

GRE:与vxlan类似的一种overlay网络,使用IP包进行封装

主要组件

Neutron-server:Neutron-server提供一组API来定义网络连接和IP地址,供Nova等客户端调用,它本身也是分层模型设计,其层次结构如下

Plugin:处理Neutron Server发来的请求,维护OpenStack逻辑网络的状态,并调用Agent处理请求。

Agent:处理Plugin的请求,负责在Network Provider上真正实现各种网络功能。

Network Provider:提供网络服务的虚拟或者物理网络设备,比如Linux Bridge,OpenVSwitch或者其他支持Neutron的物理交换机。

Queue:Neutron Server,Plugin和Agent之间通过Messaging Queue通信和调用。

Database:存放OpenStack的网络状态信息,包括Network,Subnet,Port,Router等

Neutron-server包括4个层次,自上而下依次说明如下:

  • Resetful API:直接对接客户端API服务,属于最前端的API,包括Core API和Extension API两种类型。Core API提供管理网络,子网和端口核心资源的Resetful API;Extension API提供给网络管理路由器、负载均衡、防火墙、安全组等扩展资源的Resetful API
  • Commnon Service:通用服务,调用keystone,负责对API请求进行检验、认证,并授权。
  • Neutron core:核心处理处理程序,调用相应的插件API来处理API的请求。
  • Plugin API:定义插件的抽象功能集合,提供调用通用插件的API接口,包括CorePlugin API和Extension Plugin API两种类型,Neutron core通过Core Plugin API调用相应的Core Plugin,通过Extension Plugin API调用相应的Service Plugin
发布了78 篇原创文章 · 获赞 5 · 访问量 2576

猜你喜欢

转载自blog.csdn.net/qq397750142/article/details/104839109