1.0 Openstack介绍
OpenStack既是一个社区,也是一个项目和一个开源软件,它提供了一个部署云的操作平台或工具集。其宗旨在于,帮助组织运行为虚拟计算或存储服务的云,为公有云、私有云,也为大云、小云提供可扩展的、灵活的云计算。
2.0 Openstack版本历程
2.1 2010.10 Austin
作为OpenStack第一个正式版本,Austin主要包含两子项目,Swift是对象存储模块,Nova是计算模块;带有一个简单的控制台,允许用户通过web管理计算和存储;带有一个部分实现的Image文件管理模块,未正式发布。
2.2 2011.2 Bexar
Bexar 在此基础上补充了 Image Service (Glance),它在许多方面与计算和存储有交集。1、镜像代表存储在 OpenStack 上的模板虚拟机,用于按需快速启动计算实例;
2、Swift增加了对大文件(大于5G)的支持;
3、增加了支持S3接口的中间件;
4、增加了一个认证服务中间件Swauth;
5、Nova增加对raw磁盘镜像的支持,增加对微软Hyper-V的支持;
6、开始了Dashboard控制台的开发。
2.3 2011.4 Cactus
1、Nova增加新的虚拟化技术支持,如LXC容器(Linux containers的简称,是一种基于容器的操作系统层级的虚拟化技术)、VMWare/vSphere、ESX/ESXi 4.1;
2、支持动态迁移运行中的虚机;
3、增加支持Lefthand/HP SAN作为卷存储的后端。
2.4 2011.9 Diablo
1、Nova整合了Keystone认证;
2、支持KVM的暂停恢复;
3、KVM的块迁移;
4、采用了全局防火墙规则。
2.5 2012.4 Essex
Essex 的发布增加了两个核心项目。
1、OpenStack Identity (Keystone) 隔离之前由 Nova 处理的用户管理元素;
2、OpenStack Dashboard (Horizon) 的引入则标准化和简化了用户界面(UI),使之同时适用于每个租户和 OpenStack 管理人员。
2.6 2012.9 Folsom
Folsom 使得版本项目数量又增加了两个。
1、增加了Cinder块存储,以及Quantum网络模块,后来更名为Neutron。正式发布Quantum项目,提供网络管理服务;
2、正式发布Cinder项目,提供块存储服务;
3、Nova中libvirt驱动增加支持以LVM为后端的虚机实例;
4、Xen API增加支持动态迁移、块迁移等功能;
5、增加可信计算池功能;
6、卷管理服务抽离成Cinder。
2.7 2013.4 Grizzly
1、Nova支持将分布于不同地理位置的机器组织成的集群划分为一个cell(池);
2、支持通过libguestfs直接向guest文件系统中添加文件;
3、通过Glance提供的Image位置URL直接获取Image内容以加速启动;
4、支持无image条件下启动带块设备的实例;
5、支持为虚机实例设置(CPU、磁盘IO、网络带宽)配额;
6、Keystone中使用PKI签名令牌代替传统的UUID令牌;
7、Quantum中可以根据安全策略对3层和4层的包进行过滤;
8、引入仍在开发中的load balancer服务;
9、Cinder中支持光纤通道连接设备;
10、支持LIO做ISCSI的后端。
2.8 2013.10 Havana
1、正式发布Ceilometer项目,进行(内部)数据统计,可用于监控报警;
2、正式发布Heat项目,让应用开发者通过模板定义基础架构并自动部署;
3、网络服务Quantum变更为Neutron;
4、Nove中支持在使用cell时同一cell中虚机的动态迁移;
5、支持Docker管理的容器;使用Cinder卷时支持加密;
6、增加自然支持GlusterFS;
7、Glance中按组限制对Image的元属性的访问修改;
8、增加使用RPC-over-HTTP的注册 API;
9、增加支持Sheepdog、Cinder、GridFS做后端存储;
10、Neutron中引入一种新的边界网络防火墙服务;
11、可通过VPN服务插件支持IPSec VPN;
12、Cinder中支持直接使用裸盘做存储设备无需再创建LVM;
13、新支持的厂商中包含IBM的GPFS。
2.9 2014.4 IceHouse
1、针对集成项目(Integrated Project),主要关注每个项目的稳定性与成熟度,同时包含新功能以及更好地与平台其他服务相整合;
2、一致性的用户体验,提高测试的门槛,特别是针对存储方面;
3、对象存储(Swift)项目有一些大的更新,包括可发现性的引入和一个全新的复制过程(称为s-sync)以提高性能;
4、新的块存储功能使OpenStack在异构环境中拥有更好的性能;
5、联合身份验证将允许用户通过相同认证信息同时访问OpenStack私有云与公有云;
6、新项目Trove (DB as a Service)现在已经成为版本中的组成部分,它允许用户可以在OpenStack环境中管理关系数据库服务
2.10 2014.10 Juno
1、Nova 网络功能虚拟化项目组在五月Atlanta峰会成立,新的功能已经在JUNO中逐渐显现;
2、包括救援模式等很多运维层面的更新工作也落在nova-network中;
3、通过StackForge增加了多个重要的驱动,如支持Ironic和Docker;
4、支持调度和在线升级;Cinder 块存储添加了十种新的存储后端;
5、改进了第三方存储系统的测试;Cinder v2 API集成进Nova;
6、块存储在每个开发周期中不断成熟;
7、Neutron 支持IPv6和第三方驱动,保证网络的可靠性和可持续性;
8、API层面添加了插件支持;支持三层网络高可用;
9、支持分布式网络模式;
10、Swift 存储策略的推出对于对象存储是具有里程碑意义的,存储策略给予用户更多的控制与性能的提升;
11、支持Keystone;Horizon 支持部署Apache Hadoop集群;
12、扩展了RBAC系统;
13、Keystone 联邦认证使用户可以通过同一套认证体系访问私有和共有OpenStack服务;
14、可以配置使用多个认证后端;
15、与LDAP的集成更加便捷;
16、Heat 出错后更易于回滚操作和环境清理;
17、可以授权无权限用户操作;
18、Ceilometer 提高性能;
19、支持负载均衡、防火墙与VPN;
20、Glance 扩展image定义;
21、异步处理进程;
22、可控下载策略;
23、Sahara 应用Hadoop和Spark实现大数据集群快速搭建与管理。
2.11 2015.4 Kilo
Horizon在K版本除了增强了对新增模块的支持,从UE的角度也为我们带来了很多新功能裸机服务Ironic完全发布,增加互操作性。
2.12 2015.10 Liberty
在Liberty版本中,更加精细的访问控制和更简洁的管理功能非常亮眼。这些功能直接满足了OpenStack运营人员的需求。
1、增加了通用库应用和更有效的配置管理功能;
2、为Heat编排和Neutron网络项目增加了基于角色的访问控制(RBAC)。这些可以帮助运维人员更好地调试不同级别的网络和编排功能的安全设置和API;更面向企业,包括开始对跨一系列产品进行滚动升级的支持,以及对管理性和可扩展性的增强。
3、引入了Magum容器管理,支持Kubernetes,Mesos和Docker Swarm。
2.13 2016.4 Mitaka
OpenStack的第13个版本,也就是4月份最新颁布的一版——新版本Mitaka聚焦于可管理性、可扩展性和终端用户体验三方面。
1、重点在用户体验上简化了Nova,Keynote的使用;
2、使用一致的API调用创建资源;
3、Mitaka版本中可以处理更大的负载和更为复杂的横向扩展。
2.14 2016.10 Newton
OpenStack的第14个版本。推出的新功能包括:
1、Ironic裸机开通服务;
2、Magnum容器编排集群管理器;
3、Kuryr容器组网项目可将容器、虚拟和物理基础设施无缝集成于统一控制面板;
4、Newton还可解决扩展性和弹性问题;
5、Newton可大大降低实现架构性和功能性扩展的难度,可实现跨平台、跨地域的向上扩展和向下扩展,从而提升OpenStack在搭建各类规模云解决方案中的主导作用;
6、Newton在高可用性、适应性以及自我修复功能方面提升显著,无论负载需求有多大,都可以满足运营商对稳定性的要求。其中,项目组件Cinder、Ironic、Neutron以及Trove都可提供增强的高可用功能;
7、Newton的安全性也得以提升,例如,Keystone提供的升级中包括PCI合规和加密证书。Cinder增加了对重新录入加密文件到解密流量的支持,反之亦然;
8、Cinder还包含微版本支持,可借助集联功能使用快照方式来删除流量,同时提供备份服务可扩展至多个实例;
9、Newton版本显著提升了OpenStack作为单一云平台对虚拟化、裸机及容器的管理,并为运营商及应用开发者增高了易用性,令OpenStack的安装、运行、变更及维修变得更加便捷和自动化;
2.15 2017.02 Ocata
1、新的Nova计算“取代”原有应用编程接口(简称API),旨在帮助用户更为智能地根据应用需求分配资源;
2、Cells v2亦作为默认配置以提升Nova可扩展性;
3、OpenStack的Horizon仪表板现在提供新的OS配置UI以实现各keystone间联动,意味着运营人员能够在各项OpenStack服务之间检测性能问题;
4、Keystone身份联动机制如今能够自动动态配置项目,并在验证成功后为联动用户分配角色;
5、Ironic裸机服务迎来网络与驱动程序增强;
6、Telemetry各项目实现性能与CPU使用量改进:如今用户可利用Ceilometer配合Gnocchi存储引擎每秒存储数百万条指标;
7、Cinder块存储服务中的主动/主动高可用性如今可通过驱动程序实现;
8、Congress治理框架现在迎来政策语言增强,旨在实现网络地址操作以实现更好的网络与安全性治理。
9、Ocata亦在网络层对基于容器的应用框架提供更为出色的支持能力;
10、在最新版本当中,大家亦可对OpenStack各服务进行容器化。这意味着我们将能够更轻松地将OpenStack作为微服务应用进行部署与管理。
11、OpenStack还引入了新的基于容器应用框架及部署工具。其中具体包括用于实现OpenStack服务容器化的Kolla、用于桥接容器网络与存储资源的Kuryr以及用于容器管理的Zun;
12、新引入的“nova-status upgrade check”命令允许运营人员测试其部署的准备情况,从而使其了解其是否能够安全升级至Ocata。如果无法安全升级,该命令将提示其需要解决相应问题后再行升级。
3.0 openstack的主要模块介绍
OpenStack 是面向 Iaas 服务的,即基础架构云平台。该平台的可以比喻成一个生产虚拟化基础架构的车间。这个车间主要生产 a. 虚拟机实例,b. 虚拟存储块,c. 虚拟网段等云服务组件,而每种服务组件都有相应的“车间主任”进行管理、调度和分配,这里的“车间主任”就是 OpenStack 云平台的管理模块,下面对 OpenStack 的管理模块进行介绍:
3.1 Identify(Keystone)
为OpenStack其它几个模块提供认证服务,整个keystone其实就是在数据库中建立用户(user)、角色(role)、Tenant、服务(service)、endpoint以及其相互对应关系。Tenant在之前的版本中叫做Project,Tenant是一个独立的资源容器。每个Tenant都可以定义独立的VLAN, volumes, instances, images, keys, users等。服务指的是OpenStack所提供的那几种服务(network, volume, image, identify, compute, swift)。endpoint是指各服务的内部、外部及管理接口址(REST API)。这个模块可以看做是云系统车间的安全部门。
3.2 Compute(Nova)
这个模块很重要,可以说是 OpenStack 的核心模块之一,以至于在 OpenStack 的初期版本里大部分的云系统管理功能都是由该模块负责管理的,只不过后来为了减轻该“车间主任”的压力,也便于功能分配管理,才把虚拟存储、网络等部分分离出来,而使该模块主要负责云虚拟机实例(Compute 或 Instance) 的生成、监测、终止等管理功能。
它由nova-compute模块通过libvirt、XenAPI等管理hypervisor,从而管理虚机,此外它还通过nova-api服务向外提供如EC2兼容、管控功能等的接口,通过nova-scheduler模块提供虚机调研逻辑等;这些模块间的通信全部通过消息队列完成。
3.3 Image(Glance)
提供云虚拟机上的服务镜像(Image)功能,该模块可看成车间里的模具生产部门,该模具最基本的使用方式就是在为云虚拟机实例提供安装操作系统的模式,比如 RedHat Linux、Ubuntu、Windows 等。同时云服务使用者也可以在已经生成和个性化安装后的云虚拟机实例来生成自定义的镜像。这样以后就可以根据该自定义镜像直接生成所需的虚拟机实例。
3.4 Network(Neutron)
提供 OpenStack 虚拟网络服务,也是 OpenStack 重要的核心模块之一,该模块最开始是 Nova 的一部分,叫 nova-network,后来从 Nova 中分离出来,开始名字为 Quantum,后来由于商业名权的原因改为了 Neutron。该模块之所以重要是因为如果没有虚拟网络服务,OpenStack 就变为单纯提供虚拟机实例和虚拟存储服务的平台,这就违背了提供分布式虚拟服务的云计算核心价值。该模块不仅提供基本的创建子网、路由和为虚拟机实例分配 IP 地址功能,还提供了 a. 同时支持多种物理网络类型,支持 Linux Bridge、Hyper-V 和 OVS bridge 计算节点共存;b. 支持防火墙服务;c. 支持虚拟网络中节点间 VPN 服务;d. SDN 实现完善和提高。
在OpenStack的网络管理流程中,通常需要经过以下几个步骤:
1.创建一个网络;
2.创建一个子网;
3.启动一个虚机,将一块网卡对接到指定的网络上;
4.删除虚机;
5.删除网络端口;
6.删除网络;
3.5 Block Storage(Cinder)
提供 OpenStack 存储块(Volume)服务,该管理模块原来也为 Nova 的一部分,即 Nova-volume,后来从 Folsom 版本开始使用 Cinder 来分离出块存储服务。具体地说 Cinder 是云存储服务的调度监控模块,它需要与如 NFS、Ceph 等网络文件系统配合使用。
3.6 Dashboard(Horizon)
为 OpenStack 提供交互式界面的 UI 组件。
3.7 Object Storage(Swift)
对象存储,存储的是一些资源文件,如图片、代码等文件。对象存储服务是OpenStack最早期的两个服务之一(另一个是计算服务),在OpenStack平台中,任何的数据都是一个对象。
以上是 OpenStack 的基本组件,通过这些组件就可以搭建一套基本的云计算服务平台,如果再加入用于 OpenStack 系统资源监控的 Ceilometer、云系统部署用的 Heat、以及大数据部署的Sahara,该云计算平台则会更加完善。
4.0 Openstack概念架构图
先看 OpenStack 官网上的该云系统的概念图,该概念图展示了 OpenStack 云系统上各模块是如何协同工作的以及工作流程,这使我们对 OpenStack 各组件的逻辑概念有了先导的作用。之后我们通过各组件的逻辑概念再逐步深入了解 OpenStack 的逻辑架构
在制定好的云系统平台上,用户在经 KeyStone 模块授权后(Provide Auth),通过 Horizon 或 RestAPI 模式创建虚拟机服务。创建过程包括了利用 Nova 模块创建虚拟机实例(VM Provision),该 VM 采用了 Glance 模块提供的镜像服务(Provide Image),然后用 Neutron 模块为新建的 VM 分配 IP 地址,把其纳入到虚拟网络中(Provide network connectivity),之后再通过 Cinder 模块创建的 Volume 为 VM 挂载存储块。整个过程都在 Cellometer 模块的资源监控下(Monitors),Cinder 产生的 Volume 和 Glance 提供的 Image 可以通过 Swift 的对象存储机制进行保存。
通过以上解析我们可以看到 OpenStack 云平台服务的提供主要是依靠 Nova、Glance、Cinder 和 Neutron 四个核心模块完成的,相对四个辅助模块 Horizon、Cellometer、Keystone、Swift 提供的访问、监控、权限和对象存储功能
5.0 openstack逻辑架构图
5.1 Compute(Nova)模块详解
nova-api :
起到Cloud Controller的作用,主要为所有的API查询提供了一个接口(比如Openstack API ,Amazon EC2 API),引发多数业务流程的活动(如运行一个实例),并实施一些政策(主要是配额检查)。
nova-schedule :
负责从nova-queue(消息队列)里取得虚拟实例请求并通过算法决定该请求应该在那台主机上运行,即起到调度器(Scheduler)的作用。schedule算法可以由我们指定,目前有Simple (最少加载主机),chancd(随机主机分配) ,zone(可用区域内的随机节点)等算法。
nova-compute:
是一个非常重要的守护进程,负责创建和终止虚拟机实例,即管理着虚拟机实例的生命周期。该模块内部非常复杂,基本原理是简单的,就是接受来自队列的动作然后通过运行一系列命令执行相应的系统操作(如启动一个KVM实例),并且更新数据库的状态。
Queue:
消息队列,为各个模块之间的通信提供起到一个集线器的作用,即数据交换中心,nova各个组建之间的通信几乎都是靠它进行的。当前的Queue是采用RabbitMQ 实现的,理论上是可以采用任何的基于python ampqlib的AMPQ message queue,它和database一起为各个守护进程之间传递消息。
SQL database:
存储云基础设施构建时和运行时状态。包括可用的实例类型,正在使用的实例类型,可用的网络和项目。理论上,OpenStack Compute是支持所有基于 SQL-Alchemy的数据库,但目前广泛使用的数据库主要是Sqlite3,Mysql,PostgreSQL。
eg:
为了看看nova是如何工作的,我们可以以启动一个实例为例来进行说明,因为启动一个新的instance涉及到很多openstack nova里面的组件共同协作。
其中:
API :处理客户端的请求,并且转发到 Queue和Database中。
Scheduler:选择一个host去执行命令
nova-compute :启动和停止实例,附加和删除卷等操作
nova-network:管理网络资源,分配固定IP。
5.2 Image(Glance)模块详解
创建一个虚拟机实例的过程如下:
API:
例如我们输入一个命令:euca-run-instances -k test -t m1.tiny ami-tiny 它会执行以下操作:
查看这种类型的instance是否达到最大值,然后给scheduler发送一个消息(实际上是发送到Queue中)去运行这个实例。
Schedule:
调度器接收到了消息队列Queue中API发来的消息,然后根据事先设定好的调度规则,选择好一个host,之后,这个instance会在这个host上创建。
Compute:
真正去创建一个instance的操作是由Compute完成的,而这个过程中computer组件与Glance密不可分,如图所示:
从上图我们可以看出,通过Glance,Opentack的3个模块被链接成了一个整体,Glance为Nova提供镜像的查找操作,而Swift又为Glance提供实际的存储服务,Swift可以看作是Glacne存储接口的一个具体实现。
glance-api:
主要是用来接受各种api调用请求,并提供相应的操作。
glacne-registry:
用来和MySQL数据库进行交互,存储或者获取镜像的元数据,注意, Swift在自己的Storage Server中是不保存元数据的,这儿的元数据是指保存在MySQL数据库中的关于镜像的一些信息,这个元数据是属于Glance的。
image store:
也就是图中的”Swift of S3″,是一个存储接口,通过接口,glance可以获取镜像,image不仅仅支持OpenStack自己的Swift格式的镜像,也同时支持Amazon S3等其他的镜像。
5.3 Block Storage(Cinder)
主要功能:管理所有块存储设备,为VM服务。
cinder-api处理发送过来的请求,处理结果发送到rabbit MQ,通过消息中间件把所有请求发送到cinder-scheduler,通过调度器决定存储到哪里,并且创建VM,cinder-volume管理存储模块的生命周期。
5.4 Network(Neutron)
主要功能:为云计算提供虚拟的网络功能,为每个不同的租户建立独立的网路环境。
三种不同的网络模式(Flat模式 Flat DHCP模式,Vlan模式)
5.5 Object Storage(Swift)
account-->container-->Object 某个账户下的某个容器的某个对象,可以通过HTTP(S),Object API,S3进行存取。
5.6 Identify(Keystone)
用户身份认证(Idenity):
user:用户(租户下有很多用户,验证方式用户名密码,API keys等)
Tenant:租户(可以访问资源的集合)
role:角色 (一组用户可以访问资源的权限)
访问请求控制(Token):
Service(nova,glance,swift等服务需要在keystone上注册)
Endpoint(service暴露出来的访问地址)
Token(访问资源的令牌,具有时效性)
注册表服务(Catalog):
openstack服务需要注册到keystone注册表中
身份验证引擎(Policy):
决定用户有哪些访问控制权限
5.7 Dashboard(Horizon)
该项目是一个可选的项目,主要是为开发者等提供API(两种用户云管理员,云用户)。
5.8 Ceilometer
该项目的目标是计量 Metering 方面,为上层的计费、结算或者监控应用提供统一的资源使用数据收集功能。
5.8.1 Ceilometer的主要概念
Meter:计量项
Sample:某Resource 某时刻某 Meter 的值
Statistics:某区间 Samples 的聚合值
Alarm:某区间 Statistics 满足给定条件后发出的告警
5.8.1.1 Meter
资源使用的某个计量项,它的属性包括:名称(name)、单位 (unit)、类型 (cumulative:累计值,delta:变化值、gauge:离散或者波动值)以及对应的资源属性等。
(1)在这里可以看到所有的 Ceilometer meter 列表和说明。
(2)使用CLI “ceilometer meter-list” 来获取所有的meters。例如:
s1@controller:~$ ceilometer meter-list
+---------------------+------------+----------+--------------------------------------+----------------------------------+----------------------------------+
|
Name
| Type | Unit |
Resource ID
| User ID
| Project
ID
|
+---------------------+------------+----------+--------------------------------------+----------------------------------+----------------------------------+
|
cpu
| cumulative | ns |
440e4e2c-f255-43b3-8150-c6bc6b061ef7 | 1dc0db32a936496ebfc50be54924a7cc
| fa2046aaead44a698de8268f94759fc1 |
| cpu_util |
gauge |
% |
440e4e2c-f255-43b3-8150-c6bc6b061ef7 | 1dc0db32a936496ebfc50be54924a7cc
| fa2046aaead44a698de8268f94759fc1 |
| cpu_util |
gauge |
% | 49618cae-dd28-41a0-ae97-e98899d717eb
| 8f4f734443674afcbbb57b9909d5a07f | d6feddb5279a42f4854b93a729470448 |
|
image
| gauge | image |
1e7b0a5a-7b78-4673-8d56-3abff7b491ae | None
|
fa2046aaead44a698de8268f94759fc1 |
ps:
(a)meter列表结果和被计量对象关联。该CLI只列出的当前存在的计量对象的meter列表。
(b)meter列表结果和samples关联。没有 samples的meter不出现在列表中。
5.8.1.2 Sample
某时刻某个 resource 的某个 meter 的值。Sample 的收集有区间概念,即收集数据的时间间隔。它的属性出了meter属性外,还有 timestampe(采样时间)和 Volume (采样值)。
5.8.1.3 Statistics
一个时间段(Period)内的 samples 聚合值,包括计数(Count)、最大(Max)、最小(Min)、平均 (Avg)、求和(Sum)等。例如:
这里的Period表示当前该查询的区间,使用 -p 参数指定;Duration 表示 samples 的区间。
这里的Period表示当前该查询的区间,使用 -p 参数指定;Duration 表示 samples 的区间。
需要注意的是,你可以使用 ”-q“ 指定统计的目标范围。当不指定的时候,表示对当前租户(tenant)内的所有虚机的 sample 做统计。比如指定 resource_id 来只统计某一个虚机: ceilometer statistics -m cpu_util -p 60 -q resource_id=d7ce68d4-3d58-404c-85a6-f9c19fe9d96c。
5.8.1.4 Alarm
Alarm 包括 threshold alarm (阈值告警)和 combination (组合告警)两种类型。
1)Threshold alarm 根据监控指标的阈值去判断alarm的状态,它只是针对某一个监控指标建立alarm。它包括几个要素:
a.一个静态阈值和比较方法 (a static threshold value & comparison operator)
b.指定的 meter statistic (against which a selected meter statistic is compared)
c.比较的时间窗 (over an evaluation window of configurable length into the recent past.)
2)Combination alarm 根据多个alarm的状态来判断自己的状态的,多个alarm之间是or/and的关系,这相当于是对多个监控指标建立了一个alarm
Alarm的状态:
a.ALARM (告警状态):
b.OK (数据充足,未告警):
b.Insufficient Data (默认状态 - 数据不足):
5.8.3 Ceilometer的数据处理
Ceilometer 的功能就是对上面各种概念的对象的处理:
Collect-->Transform-->Publish-->Store-->Read