一、openstack简介
1.定义
- OpenStack是什么? OpenStack是一个云操作系统,通过数据中心可控制大型的计算、存储、网络等资源池。所有的管理通过前端界面管理员就可以完成,同样也可以通过web接口让最终用户部署资源。
2.核心项目 (来自百度词条)
- 计算(Compute):Nova。一套控制器,用于为单个用户或使用群组管理虚拟机实例的整个生命周期,根据用户需求来提供虚拟服务。负责虚拟机创建、开机、关机、挂起、暂停、调整、迁移、重启、销毁等操作,配置CPU、内存等信息规格。自Austin版本集成到项目中。
- 对象存储(Object Storage):Swift。一套用于在大规模可扩展系统中通过内置冗余及高容错机制实现对象存储的系统,允许进行存储或者检索文件。可为Glance提供镜像存储,为Cinder提供卷备份服务。自Austin版本集成到项目中。
- 镜像服务(Image Service):Glance。一套虚拟机镜像查找及检索系统,支持多种虚拟机镜像格式(AKI、AMI、ARI、ISO、QCOW2、Raw、VDI、VHD、VMDK),有创建上传镜像、删除镜像、编辑镜像基本信息的功能。自Bexar版本集成到项目中。
- 身份服务(Identity Service):Keystone。为OpenStack其他服务提供身份验证、服务规则和服务令牌的功能,管理Domains、Projects、Users、Groups、Roles。自Essex版本集成到项目中。
- 网络&地址管理(Network):Neutron。提供云计算的网络虚拟化技术,为OpenStack其他服务提供网络连接服务。为用户提供接口,可以定义Network、Subnet、Router,配置DHCP、DNS、负载均衡、L3服务,网络支持GRE、VLAN。插件架构支持许多主流的网络厂家和技术,如OpenvSwitch。自Folsom版本集成到项目中。
- 块存储 (Block Storage):Cinder。为运行实例提供稳定的数据块存储服务,它的插件驱动架构有利于块设备的创建和管理,如创建卷、删除卷,在实例上挂载和卸载卷。自Folsom版本集成到项目中。
- UI 界面 (Dashboard):Horizon。OpenStack中各种服务的Web管理门户,用于简化用户对服务的操作,例如:启动实例、分配IP地址、配置访问控制等。自Essex版本集成到项目中。
- 测量 (Metering):Ceilometer。像一个漏斗一样,能把OpenStack内部发生的几乎所有的事件都收集起来,然后为计费和监控以及其它服务提供数据支撑。自Havana版本集成到项目中。
- 部署编排 (Orchestration):Heat。提供了一种通过模板定义的协同部署方式,实现云基础设施软件运行环境(计算、存储和网络资源)的自动化部署。自Havana版本集成到项目中。
- 数据库服务(Database Service):Trove。为用户在OpenStack的环境提供可扩展和可靠的关系和非关系数据库引擎服务。自Icehouse版本集成到项目中。
3.架构图
-
体系构架图
opensack体系构架图 -
概念构架图
openstack概念架构图
二、openstack认证服务(keystone)
1.keystone的功能
openstack是一个SOA架构,理论上各子项目独立提供相关服务,互不依赖,且是分布式的。如nova提供计算服务,glance提供镜像服务等。
实际上所有的组件都依赖keystone(单点的),它集成了三个功能:
-
管理身份验证(managing authentication):验证用户身份
-
授权(authorization):基于角色role的权限管理
-
服务目录(catalog of services):提服务目录(ServiceCatalog:包括service和endpoint)服务,类似于UDDI服务的概念,用户(无论是Dashboard, APIClient)都需要访问Keystone获取服务列表,以及每个服务的地址(Openstack中称为Endpoint)
2.keystone的基本概念
- User
使用服务的用户,可以是人,服务或者系统,只要是使用了openstack服务的对象都可以称为用户。当User对OpenStack进行访问时,Keystone会对其身份进行验证。 - Project
租户,可以理解为一个人、项目或者组织拥有的资源的合集。在一个租户中可以拥有很多个用户,这些用户可以根据权限的划分使用租户中的资源。 - Token
指的是一串比特值或者字符串,用来作为访问资源的令牌。Token中含有可访问资源的范围和有效时间。 - Role
角色,用于分配操作的权限。角色可以被指定给用户,使得该用户获得角色对应的操作权限。安全包含两部分:Authentication(认证)和 Authorization(鉴权) - Service
Openstack Service,即Openstack中运行的组件服务。nova,glance都是属于一个服务,需要在keystone上进行创建,指定类型。
创建服务有一个服务,就创建一个endpoint,会根据服务类型去查找那个服务。Service 决定每个 Role 能做什么事情 ,Service 通过各自的 policy.json 文件对 Role 进行访问控制 - Endpoint
一个可以通过网络来访问和定位某个Openstack Service的地址,通常是一个URL。例如,Nova需要访问Glance服务去获取Image时,Nova通过访问Keystone拿到Glance的Endpoint,然后通过访问该Endpoint去获取Glance服务,我们可以通过Endpoint的region属性去定义多个region。Endpoint该使用对象分为三类:
Admin URL:给admin用户使用,被从常规的访问中分离。
Internal URL:Openstack内部服务使用来跟别的服务通信,只能被局域网访问。
Public URL:其它用户可以访问的地址,可以被全局访问。 - Catalog
用户和服务可以使用使用keystone管理的catalog,定位到其他的服务,catalog一个openstack部署的相关服务的集合,每个服务都有一个或者多个endpoint(即可以访问的url地址),即catalog=services+endpoint。
3.keystone与其他组件交互
keystone与其他组件协同工作.png4.keystone工作流程
(1) User从Keystone获取令牌以及服务列表
(2) User访问服务时,亮出自己的令牌
(3)相关的服务向Keystone求证令牌的合法性
keystone工作流程.png
三、openstack镜像服务(glance)
1.glance的组件
- Glance-API
主要用来响应各种REST请求然后通过其它模块(主要是glance-registry组件和后端存储接口)完成镜像的上传、删除、查询等操作。可以简单的再分为两部分:一层中间件,它主要是做一些对请求的解析工作(如分析出版本号), 另外一部分提供实际的服务(如与镜像上传下载的后端存储接口交互)。默认绑定端口是9292。 - Glance-Registry
镜像注册服务用于提供镜像元数据的REST接口。主要工作是存储或者获取镜像的元数据,与MySQL数据库进行交互。也可以简单的再细分为两部分,API和具体的Server。元数据是指镜像相关的一些信息(如id,size, status,location,checksum,min_disk,min_ram,owner等)真正的镜像数据保存在实际所使用的后端存储里(如Swift,S3,Filesystem等)。默认绑定的端口是9191。 - Image Store
严格来说Image Store不属于Glance的组件,这里把它单独分出来只是为了方便理解,它只是一个接口层,提供镜像存储和查询的接口。具体的实现则需要外部存储(Swift,S3)的支持。
2.glance的工作流程
Glance需要配置的服务:glance-api、glance-registry
Glance-api:接受云系统镜像的创建、删除、读取请求
Glance-registry:云系统镜像注册服务
glance的工作流程.png
(1)Glance-api接收REST API的请求,类似nova-api
(2)Glance-api在功能上与nova-api十分类似,都是接收REST API请求,然后通过其他模块(glance-registry及Image Store)来完成诸如镜像的查找、‘获取、上传、删除等操作,api默认的监听端口为9292
(3)Glance-registry用于与MySQL数据库交互,用于存储或获取镜像的元数据(metadata);提供镜像元数据相关的REST接口,通过glance-registry,可以向数据库写入或获取镜像的各种数据,glance-registry的监听端口为9191。glance的数据库中有两张表,一张是image表,另一张是imgage propetry表。
(4)image store是一个存储的接口层,通过这个接口,glance可以获取镜像,image store支持有Amazon的S3,OpenStack本身的swift,还有诸如ceph,GlusterFS等分布式存储。Image Store仅仅是一个接口处,具体的实现需要外部的存储支持。
四、openstack计算服务(nova)
1nova的组件
- nova-api:
是整个nova的门户,所有对nova的请求都首先由nova-api处理。Nova-api向外暴露若干HTTP rest api 接口在keystone中,客户端可以将请求发送到endpoint指定的地址,向nova-api请求操作。
Nova-api对收到的HTTP api请求会做如下处理:
(1) 检查客户端传入的参数是否合法;
(2) 调用nova其他子服务的处理客户端HTTP请求;
(3) 格式化nova其他子服务返回的结果并返回给客户端。 - nova-conductor:
Nova-compute需要获取和更新数据库中instance的信息,但nova-compute并不会直接访问数据库,而是通过nova-conductor实现数据的访问。
使用nova-conductor的两个显著好处:
(1) 更好的系统安全性:早期的openstack版本中,nova-compute可以直接访问数据库,但试想如果任意一个计算节点被黑客入侵,都会导致控制节点上的数据库面临极大的风险。为了解决这个问题,引入了nova-conductor;
(2) 更好的伸缩性:nova-conductor建立后,提高了nova的伸缩性。Nova-compute与conductor是通过消息中间件交互的。这种松散的架构允许配置多个nova-conductor实例,从而应对日益增长的计算节点对数据库的访问。 - nova-scheduler
虚拟机调度服务,负责决定在哪个计算节点上运行虚机。
如何选择计算节点——启动实例调度策略
Filter scheduler(调度器),调度过程分两步:
(1) 通过过滤器(filter)选择满足条件的计算节点(运行nova-compute)
(2) 通过权重计算(weighting)选择在最优(权重值最大)的计算节点上创 - nova-compute
nova-compute 在计算节点上运行,负责管理节点上的 instance。OpenStack 对 instance 的操作,最后都是交给 nova-compute 来完成的。nova-compute 与 Hypervisor 一起实现 OpenStack 对 instance 生命周期的管理。 - Console Interface
nova-console: 用户可以通过多种方式访问虚机的控制台:
nova-novncproxy: 基于 Web 浏览器的 VNC 访问
nova-consoleauth: 负责对访问虚机控制台请求提供 Token 认证
nova-cert: 提供 x509 证书支持
2.nova创建云主机
image.png1、界面或命令行通过RESTful API向keystone获取认证信息。
2、keystone通过用户请求认证信息,并生成auth-token返回给对应的认证请求。
3、界面或命令行通过RESTful API向nova-api发送一个boot instance的请求(携带auth-token)。
4、nova-api接受请求后向keystone发送认证请求,查看token是否为有效用户和token。
5、keystone验证token是否有效,如有效则返回有效的认证和对应的角色(注:有些操作需要有角色权限才能操作)。
6、通过认证后nova-api和数据库通讯。
7、初始化新建虚拟机的数据库记录。
8、nova-api通过rpc.call向nova-scheduler请求是否有创建虚拟机的资源(Host ID)。
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请求获取虚拟机消息。(Flavor)
15、nova-conductor从消息队队列中拿到nova-compute请求消息。
16、nova-conductor根据消息查询虚拟机对应的信息。
17、nova-conductor从数据库中获得虚拟机对应信息。
18、nova-conductor把虚拟机信息通过消息的方式发送到消息队列中。
19、nova-compute从对应的消息队列中获取虚拟机信息消息。
20、nova-compute通过keystone的RESTfull API拿到认证的token,并通过HTTP请求glance-api获取创建虚拟机所需要镜像。
21、glance-api向keystone认证token是否有效,并返回验证结果。
22、token验证通过,nova-compute获得虚拟机镜像信息(URL)。
23、nova-compute通过keystone的RESTfull 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的信息调用配置的虚拟化驱动来创建虚拟机。
五、openstack网络服务(neutron)
1.基本概念
- bridge:网桥,Linux中用于表示一个能连接不同网络设备的虚拟设备,Linux中传统实现的网桥类似于一个hub设备,而ovs管理的网桥一般类似交换机。
- br-int:bridge-intergration,综合网桥,常用于表示实现主要内部网络功能的网桥。
- br-ex:bridge-external,外部网桥,通常表示负责跟外部网络通信的网桥。
- GRE:General Routing Encapsulation,一种通过封装来实现隧道的方式。在openstack中一般是基于L3的GRE,即original pkt/GRE/IP/Ethernet
- VETH:虚拟Ethernet接口,通常以pair的方式出现,一端发出的数据包,会被另一端接收,可以形成两个网桥之间的通道。
- qvb:neutron veth,Linux Bridge-side
- qvo:neutron veth,OVS-side
- TAP设备:模拟一个二层的网络设备,可以接受和发送二层数据包。
- TUN设备:模拟一个三层的网络设备,可以接收和发送三层数据包。
- iptables:Linux上常见的实现安全策略的防火墙软件。
- Vlan:虚拟局域网,同一个物理局域网下用标签来实现隔离,可用标号为1-4094.
- VXLAN:一套利用UDP协议作为底层传输协议的Overlay实现。一般认为作为VLAN技术的延伸或替代者。
- namespace:用来实现隔离的一套机制,不同namespace中的资源之间彼此不可见。
2.neutron管理实体
- 网络
隔离的L2广播域,一般是创建它的用户所有。用户可以拥有多个网络。网络是最基础的,子网和端口都需要关联到网络上。
网络上可以有多个子网。同一个网络上的主机一般可以通过交换机或路由器连通起来。 - 子网
隔离的L3域,子网代表了一组分配了IP的虚拟机。每个子网必须有一个CIDR和关联到一个网络。IP可以从CIDR或者用户指定池中选取。
子网可能会有一个网关、一组DNS和主机路由。不同子网之间L3是互相不可见的,必须通过一个三层网关(路由器)经过L3上进行通信 - 端口
可以进出流量的接口,往往绑定上若干MAC地址和IP地址,以进行寻址。一般为虚拟交换机上的虚拟接口。
虚拟机挂载网卡到端口上,通过端口访问网络。当端口有IP时,意味它属于某个子网。
3.抽象系统构架
无论哪种具体的网络虚拟化实现,一个简化和抽象后的系统架构可以表述为下图:
image.png
3.neutron的组件
- Neutron Server
分包含守护进程neutron-server和各种插件neutron--plugin,它们既可以安装在控制节点也可以安装在网络节点。neutron-server提供API接口,并把对API的调用请求传给已经配置好的插件进行后续处理。插件需要访问数据库来维护各种配置数据和对应关系,例如路由器、网络、子网、端口、浮动IP、安全组等等 - 插件代理 (Plugin Agent):
虚拟网络上的数据包的处理则是由这些插件代理来完成的。名字为neutron--agent。在每个计算节点和网络节点上运行。一般来说你选择了什么插件,就需要选择相应的代理。代理与Neutron Server及其插件的交互就通过消息队列来支持。 - DHCP代理(DHCP Agent):
名字为neutron-dhcp-agent,为各个租户网络提供DHCP服务,部署在网络节点上,各个插件也是使用这一个代理。 - 3层代理 (L3 Agent): 名字为neutron-l3-agent,
为客户机访问外部网络提供3层转发服务。也部署在网络节点上。
六、openstack块存储服务(cinder)
1、存储类型介绍
- 在Opestanck中创建云主机的硬盘时,可以是两种存储类型,分别是本地存储和持久存储。(与存储的后端类型无关[块存储,文件存储,对象存储])
- 本地磁盘,指创建云主机的时候,使用物理机上的本地磁盘,是一种临时存储,当虚拟机删除的时候,临时磁盘也随之删除。
- 云硬盘,通过cinder创建的持久存储。由cinder创建,由cinder管理。云服务上也被称之为EVS服务。
2、cinder的组件
- Cinder-Api
用于提供Restful APi的接口,接收来自用户请求的唯一接口。包含卷的增删改查(包括从源卷、镜像、快照创建)、快照的增删改查、备份、volume type管理、挂载/卸载等。 - Cinder- Scheduler
负责手机backend上报的容量、能力信息,根据设定的算法完成卷到指定cinder-volume的调度。 - Cinder-volume
Cinder-Volume用来与块存储服务和 Cinder- Scheduler进程进行直接交互。它也可以与这些进程通过一个消息队列进行交互。 Cinder-Volume服务响应送到块存储服务的读写请求来维持状态,它也可以和多种存储提供者在驱动架构下进行交互。 - Cinder- Backup
实现将卷的数据备份到其它存储介质(Swift/ceph/TSM等提)
3、cinder架构
image.png- 以创建卷为例
1、由cinder-api接收请求(创建卷的类型和卷的规格)
2、cinder-api通过rabbitmq将请求发送给cinder-scheduler
3、cinder-scheduler查询数据库找到符合主机的节点
4、cinder-scheduler通过rabbitmq将消息发送给cinder-volume
5、cinder-volume通过后端对接的驱动创建出一个卷来
七、openstack对象存储服务(swift)
1、swift组件
- Proxy Server
对外提供对象服务API,由于采用无状态REST请求协议,可以进行横向扩展来负载均衡。 - Account Server
提供账户元数据和统计信息,并维护所含容器列表的服务,每个账户的信息被存储在一个SQLite数据库中。 - Container Server
提供容器元数据和统计信息,并维护所含对性列表的服务,每个容器的信息也存储在一个SQLite数据库中。 - Object Server
提供对象元数据和内容服务,每个对象的内容会以文件的形式存储在文件系统中,元数据会最为文件属性来存储,建议采用支持扩展属性的XFS文件系统。 - Replicator
检测本地分区副本和远程副本是否一致,发现不一致时会采用推式(Push)更远程副本,并且确保被标记删除的对象从文件系统中移除。 - Updater
当对性由于高负载的原因而无法立即更新时,任务将会被序列化在本地文件系统中进行排队,以便服务恢复后进行异步更新。
2、Swift数据模型
image.png- Swift共设有三层逻辑结构:Account/Container/Object(即账户/容器/对象)
- 每层节点数均没有限制,可以任意扩展
八、openstack的编排服务(heat)
1、Heat组件
heat向开发人员和系统管理员提供了一个简便的创建和管理一批资源的方法,并且有序且可预测的方式对其资源进行资源配置和更新。
- Heat-api
提供Rest ful API服务,是与其它组件与Heat交互的入口,接收API请求并转发给Heat-engine。 - Heat-api-cfn
提供兼容AWS CloudFormation的API,接收API请求并转发给Heat-engine - Heat-engine
Heat的核心,主要实现任务的调度,资源生命周期管理等作用,自身并不提供资源创建功能,只负责编排资源后分解成具体的事情交友其它组件去处理。
2、Heat架构
image.png- 需要通过模板文件来定义资源,然后交友heat进行编排。
- 具体heat 模板定义可以参照官网https://docs.openstack.org/heat/latest/template_guide/index.html
九、openstack的其它服务
openstack功能之强大,服务之丰富,除列出的重要的一些服务之外,还有ceilometer(计量服务)、horizon(界面服务)、zun(容器服务)、Manila(文件存储服务)等等
网友评论