一、OpenStack是什么
OpenStack是一系列开源工具(或开源项目) 的组合,主要使用池化虚拟资源来构建和管理私有云及公共云。其中的六个项目主要负责处理核心云计算服务,包括计算、网络、存储、身份和镜像服务。还有另外十个可选项目,用户可把它们捆绑打包,用来创建独特、可部署的云架构。
二、云计算的三种模式
1、IaaS:基础设施即服务(个人比较习惯的):用户通过网络获取虚机、存储、网络,然后用户根据自己的需求操作获取的资源
2、PaaS:平台即服务:将软件研发平台作为一种服务, 如Eclipse/Java编程平台,服务商提供编程接口/运行平台等
3、SaaS:软件即服务 :将软件作为一种服务通过网络提供给用户,如web的电子邮件、HR系统、订单管理系统、客户关系系统等。用户无需购买软件,而是向提供商租用基于web的软件,来管理企业经营活动
三、OpenStack 中有哪些项目
OpenStack 架构由大量开源项目组成。其中包含 6 个稳定可靠的核心服务,用于处理计算、网络、存储、身份和镜像; 同时,还为用户提供了十多种开发成熟度各异的可选服务。OpenStack 的 6 个核心服务主要担纲系统的基础架构,其余项目则负责管理控制面板、编排、裸机部署、信息传递、容器及统筹管理等操作。
- keystone:Keystone 认证所有 OpenStack 服务并对其进行授权。同时,它也是所有服务的端点目录。
- glance:Glance 可存储和检索多个位置的虚拟机磁盘镜像。
- nova:是一个完整的 OpenStack 计算资源管理和访问工具,负责处理规划、创建和删除操作。
- neutron:Neutron 能够连接其他 OpenStack 服务并连接网络。
- dashboard:web管理界面,为OpenStack底层服务进行交互。
- Swift: 是一种高度容错的对象存储服务,使用 RESTful API 来存储和检索非结构数据对象。
- Cinder 通过自助服务 API 访问持久块存储。
- Ceilometer:用于度量、监控和控制数据资源的集中来源,为OpenStack用户提供记账途径
- Heat:编排
四、OpenStack的优势
1、控制性
完全开源的平台,提供API接口,方便与第三方技术集成
2、兼容性
OpenStack兼容其他共有与,方便用户进行数据迁移
3、可扩展性
模块化设计,可以通过横向扩展,增加节点、添加资源
4、灵活性
根据自己的需要建立相应的基础设施、增加集群规模
5、行业标准
众多IT领军企业已经加入到OpenStack项目中
五、OpenStack架构
OpenStack 在设计过程中有几个原则
1、按照不同的功能和通用性划分不同项目,拆分子系统
2、按照逻辑计划、规范字系统之间的通信
3、通过分层设计整个系统架构
4、不同的功能子系统间提供通用的API接口
概念架构图
OpenStack架构概念
- 云平台用户在经过Keystone服务认证授权后,通过Hrizon 或者R额setAPI 模式创建虚拟机服务,创建过程中包括利用Nova 服务创建虚拟机实例,虚拟机实例采用Glance提供镜像服务,然后使用Neutron为新建的虚拟机分配 ip 地址,并将其纳入虚拟网络中,之后在通过Cinder创建的卷为虚拟机挂载存储快,整个过程都在Ceilometer 模块的监控下,Cinder产生的卷(VAOLUME)和 Glance 提供的镜像(image)可以通过Swift 的对象存储机制进行保存。
OpenStack 逻辑架构图
以上架构图,包括各大组件的主要部分
Nova
Nova简介
- Nova是负责提供计算资源的模块,也是OpenStack中核心模块,其主要功能是负责虚拟机实例的生命周期管理、网络管理、用户管理以及其他相关云平台管理功能。
- OpenStack使用计算服务来托管和管理云计算系统。OpenStack计算服务是基础设施服务(IaaS)系统的主要组成部分,模块主要由Python实现
- OpenStack计算组件请求Openstack Identify服务进行认证,请求OpenStack Image服务提供磁盘,为OpenStack提供用户和管理接口。磁盘镜像访问限制在项目与用户上,配额以每个项目进行设定。例如,每个项目下可以创建多少实例。OpenStack组件可以在标准硬件上横向大规模扩展,并且下载磁盘镜像启动虚拟机实例。
Nova-api(API服务器)
- 接收和响应来自最终用户的计算API请求,对外提供一个与云基础设施交互的接口,也是外部可用于管理基础设施的唯一组件。此服务支持OpenStack计算服务API、Amazon EC2 API以及特殊管理的API。用于接收用户管理操作的请求。管理使用EC2 API通过Web Services调用实现,然后APi Server通过消息队列(Message Queue)轮流与云基础设施的相关组件通信。作为EC2 API的另外一种选择,OpenStack也提供一个内部使用的“OpenStack API”
Nova-api-metadata服务
- 接收来自虚拟机发送的云数据请求,Nova-api-metadata服务一般在Nova-Network服务的多主机模式下使用
Nova-Compute(运算工作站)
- Nova-compute的主要任务是管理实例的整个生命周期,他们通过消息队列接收请求并且执行,从而对实例进行各种操作,在典型实际生产环境下,会架设很多运算工作站,根据调度算法,一个实例可以在可用的任意一台运算工作站上部署
Nova-Conductor
- Nova-Conductor模块作用与Nova-Compute服务与数据库之间,避免了由Nova-Compute服务对云数据库的直接访问,它可以横向扩展,但是,不要将他部署在运行Nova-Compute服务的主机节点上
Nova-Scheduler(调度器)
- 调度器负责把nova-API调用送达给目标。调度器以名为“nova-schedule”的守护进程方式运行,并根据调度算法从可用资源池中恰当地选择运算服务器。有很多因素都可以影响调度结果,比如负载、内存、子节点的远近、CPU架构等等。强大的是nova调度器采用的是可插入式架构。
- Nova调度器的基本调度算法有
- 随机化:主机随机选择可用的节点
- 可用化:与随机相似,只是随机选择的范围被制定
- 简单化:应用这种方式,主机选择负载最小者来运行实例。
Nova-placement-api
- Nova-placement-api用于追踪记录资源提供者目录和资源使用情况,这些资源包括计算、存储以及IP地址池等
由于nova也有数据迁移的功能,我们来说一下,冷迁移和热迁移 冷迁移(cold migration),也叫静态迁移。关闭电源的虚拟机进行迁移。通过冷迁移,可以选择将关联的磁盘从一个数据存储移动到另一个数据存储。 好处:虚拟机不需要位于共享存储器上,数据丢失率小。 缺点:需要关闭电源,业务中断。 热迁移(Live Migration),又叫动态迁移、实时迁移,即虚拟机保存/恢复,通常是将整个虚拟机的运行状态完整保存下来,同时可以快速的恢复到原有硬件平台甚至是不同硬件平台上。恢复以后,虚拟机仍旧平滑运行,用户不会察觉到任何差异。 好处:软件和硬件系统的维护升级,不会影响用户的关键服务,提高了服务的高可用性和 用户的满意度。 缺点:过程不可中断,操作复杂
Keystone
Keystone为所有的OpenStack组件提供认证和访问策略服务,它依赖资深REST(基于Identity API)系统进行工作主要对(单不限于)Swift、Glance、Nova等进行认证与授权。事实上,授权通过对动作消息来源者请求的合法性进行鉴定
- keystone采用两种授权方式:基于用户密码和基于令牌
- keystone提供三种服务:令牌服务(含有授权用户的授权信息)、目录服务(含有用户合法操作的可用服务列表)、策略服务(利用Keystone具体指定用户或者群组某些访问权限)
user(用户)
- 在Openstack中,用户是使用Openstack云服务的人、系统或者服务。用户可以登录或者使用指定的token访问云中的资源,并可以被指派到指定的项目或者角色,认证服务通过对用户身份的确认,来判断一个请求是否被允许。用户通过认证信息如密码、API Keys等进行验证
project(项目)
- 项目是各个服务中的一些可以访问的资源集合,用来分组或者隔离资源或者身份对象。不同的服务中,项目所涉及的资源不同,在Nova服务中项目可以是云主机,在Swift和Glance中项目可以是镜像存储,在Neutron中项目可以是网络资源。默认情况下,用户总是被绑定到项目中。一个项目可以用多个用户,一个用户也可以属于多个项目
role(角色)
- 角色是一组用户可以访问的资源权限集合,这些资源包含虚拟机、镜像、存储资源等。用户既可以被添加到全局的角色,也可以被添加到指定项目内的角色。区别是,全局的角色适用于所有项目中的资源权限,而项目内的角色只适用于该项目内的资源权限
service(服务)
- 用户使用云中的资源是用锅访问服务的方式是实现,Openstack中包含许多服务,如提供计算服务的Nova,提供镜像服务的Glance。一个服务可以确认当前用户是否具有访问其资源的权限。但是当一个用户尝试访问项目内的服务时,那么该用户必须知道这个服务是否存在以及如何访问这个服务
token(令牌)
- 令牌是一串数字字符串,用于访问OpenStack服务API以及资源。一个令牌可以待在特定的时间内生效,并且可以在任意时间释放。在Keystone中主要是引入令牌机制来保护用户对资源的访问
身份认证服务包含以下组件
- 服务器:一个中心化的服务器使用RESTful接口来提供认证和授权服务
- 驱动:驱动或者服务后端被整合到集中式服务器中。它们被用来访问Openstack外部仓库的身份信息,并且它们可能已经存在于Openstak被部署在的基础设施中
- 模块:模块运行于使用身份认证服务的OpenStack组件的地址空间中,这些模块拦截服务请求,获取用户凭证,并且将它们送入中央服务器来寻求授权,可以是实现中间件模块和OpenStack组件间的整合
Glance
镜像模块简述
- 镜像服务允许用户发现、注册和获取虚拟机镜像。它提供了一个REST API,允许查询虚拟机镜像的元数据,并获取一个现存的镜像。可以将虚拟机镜像存放到各种位置,从简单的文件系统到对象存储系统,如OpenStack Swift项目,默认是存储在本地文件系统上的。其实在生产环境中这个模块本身不存储大量的数据,需要挂载后台存储swift来存放实际的镜像数据.,
- 在OpenStack环境中,镜像是用于在计算节点生成虚拟机。脱离了镜像服务,就无法创建虚拟机,所以镜像服务是OpenStack的一一个核心服务
Glance主要组件
- glance-api用于接收镜像API的调用,诸如镜像发现、恢复以及存储等。作为一个后台进程,glance-api 对外提供RESTAPI接口,响应用户发起的镜像查询、获取和存储的调用。
- glance-registry用于存储、处理和恢复镜像的元数据,元数据包括镜像的的大小和类型等属性,registry 是-一个内部服务接口,不建议暴露给普通用户。
- database用于存放镜像的元数据,可以根据需要选择数据库,如MySQL、 SQLite 等。
- storage repository for image files, 一般情况下,glance 并不需要存储任何镜像,而是将镜像存储在后端仓库中。Glance支持多种reposi tory.主要包括对象存储Swift、块存储Cinder、VMware的ESX/ESXi或者vCenter.亚马逊的S3、HTTP 可用服务器、Ceph等
Glance支持的镜像格式
- Glance 支持多种镜像格式,包括磁盘格式和容器格式。
- OpenS tack中可以支持多种虚拟化的技术,如KVM、XenServer、 Hyper-V 和VMware等。
- 用户在上传镜像时,需要指定上传镜像文件的格式。除了磁盘格式,在Glance中还有容器的格式。- -般在 上传镜像时只需指定容器格式为bare,即为空。因为Glance中并没有真正使用到容器格式。容器格式用来表示虚拟机镜像文件是否包含了元数据,例如OVF格式
以下列出了Glance常用的镜像文件格式
RAW是一种没有格式或裸格式的磁盘文件类型,RAW 对数据不做任何修饰和处理,直接保存最原始的状态,所以在性能方面非常出色。由于RAW格式保存原始数据,因此更容易和其他镜像格式进行转换。 QCOW2是QCOW的升级版本,其主要特性是磁盘文件大小可以动态按需增长,并且不会占用所有的实际磁盘空间大小。例如创建了100GB 的QCOW2格式的磁盘,而实际只保存了2GB数据,那么将只占用了实际物理磁盘的2GB空间。与RAW相比,使用这种格式可以节省磁盘容量。 VHD是微软公司产品使用的磁盘格式。Virtual PC (微软早期虚拟化产品)和Hyper-V使用的就是VHD格式.VirtualBox也提供了对VHD的支持。如需在OpenStack.上使用Hyper-V类型的虚拟化,就应上传VHD格式的镜像文件。 VMDK是VMware公司产品使用的磁盘格式。目前也是一个开放的通用格式,除了VMware自家的产品外,QEMU和VirtualBox也提供了对VMDK格式的支持。 VDI是Oracle公司的VirtualBox虛拟软件所使用的格式。 ISO是指- -种存档数据文件在光盘上的格式。 AKI、ARI、AMI是Amazon公司的AWS所使用的镜像格式。
Cidenr
Cidenr简介
- 块存储服务(Cinder)提供块存储。存储的分配和消耗是由块存储驱动器或者多后端配置的驱动器决定的。还有很多驱动程序可用: NAS/SAN、 NFS, ISCSI、CEPH等。块存储适合性能敏感性业务场景,例如数据库存储大规模可扩展的文件系统或服务器需要访问到块级的裸设备存储。典型情况下,块服务API和调度器服务运行在控制节点上。取决于使用的驱动,卷服务器可以运行在控制节点、计算节点或单独的存储节点之上。
- 块存储服务为OpenStack中的实例提供持久的存储,块存储提供-一个基础设施,用于管理卷以及和OpenStack计算服务交互,为实例提供卷、快照、卷类型等功能。站在实例的角度,挂载的每个卷都是--块独立的硬盘。Cinder提供了从创建卷到删除卷整个生命周期的管理。
其具体功能包括: 提供REST API接口,使用户能够查询和管理卷、卷快照以及卷类型: 协调卷的创建请求,合理优化存储资源的分配; 通过驱动架构支持多种后端存储方式,包括LVM、NFS. Ceph和其他诸如EMC、IBM等商业存储产品和方案
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的工作流程
- 用户向Cinder-API发送创建卷请求:“帮我创建- -个卷 ”;
- Cinder-API 对请求做一些必要处理后,向消息队列发送一条消息:“让Cinder- -Scheduler创建-一个卷”;
- Cinder-Scheduler 从消息队列获取到消息,然后执行调度算法,从若干存储节点中选出节点A:
- Cinder-Scheduler 向消息队列发送- -条消息: “让存储节点A创建这个卷”:
- 存储节点A的Cinder-Volume从消息队列中获取到消息,然后通过卷提供者的驱动创建卷。
Neutron
Neutron简述
- Neutron是 OpenStack项目中负责提供网络服务的组件,它基于软件定义网络的思想,实现了网络虚拟化下的资源管理。Neutron 的设计目标是实现“网络即服务(Networking as a Service)”,在设计上遵循了基于 SDN 实现网络虚拟化的原则,在实现上充分利用了 Linux 系统上的各种网络相关的技术
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组件
- Neutron Server:对外提供OpenStack网络API,接收请求,并调用Plugin处理请求。
- 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等
Swift
swift简述
- Swift为OpenStack提供一种分布式、持续虚拟对象存储,它类似于Amazon Web Service的S3简单存储服务。Swift具有跨节点百级对象的存储能力。Swift内建冗余和失效备援管理,也能够处理归档和媒体流,特别是对大数据(千兆字节)和大容量(多对象数量)的测度非常高效。
- swift的功能以及特点
海量对象存储 大文件(对象)存储 数据冗余管理 归档能力-----处理大数据集 为虚拟机和云应用提供数据容器 处理流媒体 对象安全存储 备份与归档 良好的可伸缩性
swift服务的分类
- Swift代理服务器(Proxy server):用户都是通过Swift-API与代理服务器进行交互,代理服务器正是接收外界请求的门卫,它检测合法的实体位置并路由它们的请求。此外,代理服务器也同时处理实体失效而转移时,故障切换的实体重复路由请求
- Swift对象服务器(Object Server):对象服务器是一种二进制存储,它负责处理本地存储中的对象数据的存储、检索和删除。对象都是文件系统中存放的典型的二进制文件,具有扩展文件属性的元数据(xattr)
- Swift容器服务器(Container Server):容器服务器将列出一个容器中的所有对象,默认对象列表将存储为SQLite文件(译者注:也可以修改为MySQL,安装中就是以MySQL为例)。容器服务器也会统计容器中包含的对象数量及容器的存储空间耗费。
- Swift账户服务器(Account Server):账户服务器与容器服务器类似,将列出容器中的对象
- Ring容器:Ring容器记录着Swift中物理存储对象的位置信息,它是真实物理存储位置的实体名的虚拟映射,类似于查找及定位不同集群的实体真实物理位置的索引服务。这里所谓的实体指账户、容器、对象,它们都拥有属于自己的不同的Rings。
Horizon
- Horizon是一个用以管理、控制OpenStack服务的Web控制面板,它可以管理实例、镜像、创建密匙对,对实例添加卷、操作Swift容器等。除此之外,用户还可以在控制面板中使用终端(console)或VNC直接访问实例。
- Horizon的特点
实例管理:创建、终止实例,查看终端日志,VNC连接,添加卷等 访问与安全管理:创建安全群组,管理密匙对,设置浮动IP等 偏好设定:对虚拟硬件模板可以进行不同偏好设定 镜像管理:编辑或删除镜像 查看服务目录 管理用户、配额及项目用途 用户管理:创建用户等 卷管理:创建卷和快照 对象存储处理:创建、删除容器和对象
- 如上图所示,整个OpenStack是有控制节点、计算节点、网络节点、存储节点四大部分组成(四个节点可以部署在一台机器上)
- 控制节点负责对其余节点的控制,包括虚拟机的建立,迁移,网络分配,存储等。因此控制节点需要