OverView
OpenStack 包括 OpenStack计算(代号Nova),OpenStack对象存储(代号Swift),OpenStack镜像服务(代号Glance)等的集合。
OpenStack提供了一个操作平台,或工具包,用于编排云。
一. Openstack架构
整个OpenStack由 控制节点、网络节点、计算节点、存储节点四大部分组成。
1.1 控制节点架构
- 管理支持服务,包含Mysql 数据库 和 Rabbit MQ 消息中间件
- 基础管理服务
- keystone:认证管理服务
- Glance:镜像管理服务
- Nova:计算管理服务
- Neutron:网路管理服务
- Horizon:控制台服务
- 扩展管理服务
- Cinder:块存储服务
- Swift:对象存储服务
- Trove:数据库服务
- Heat:集群服务
- Ceilometer:监控服务
1.2 网络节点架构
网络节点仅包含Neutron服务:负责管理私有网段与公有网段的通信,以及管理虚拟机网络之间的通信/拓扑,管理虚拟机之上的防火等等。
包含三个网络端口:
eth0
:用于与控制节点的通信eth1
:用于与计算、存储节点的通信eth2
:用于外部虚拟机与相应网络之间的通信
1.3 计算节点架构
计算节点包含 Nova、Neutron、Telemeter三个服务
- 基础服务
- Nova:提供虚拟机的创建,运行,迁移,快照等服务,并提供API与控制节点对接,由控制节点下发任务。
- Neutron:提供计算节点与网络节点之间的通信服务
- 扩展服务
- Telemeter:提供计算节点的监控代理,将虚拟机的情况反馈给控制节点
计算节点至少包含两个网络端口
eth0
:与控制节点通信,受控制节点统一调配eth1
:与网络节点,存储节点通信
1.4 存储节点架构
存储节点包含 Cinder,Swift 等服务
- Cinder:块存储服务。就是虚拟出一块磁盘,可以挂载到相应的虚拟机之上,不受文件系统等因素影响。对虚拟机来说,这个操作就像是新加了一块硬盘,可以完成对磁盘的任何操作 。
- Swift:对象存储服务,提供高可用分布式对象存储服务,为Nova组件提供虚拟机镜像存储,提供存储数据的易用服务。
存储节点至少包含两个网络端口:
eth0
:与控制节点通信,接受控制节点的任务,受控制节点统一调配eth1
:与计算/网络节点通信,完成控制节点下发的各类任务
二、各组件的作用与关系
2.1 Horizon –UI服务
Horizon
是一个用以管理、控制OpenStack
服务的Web控制面板,它可以管理实例、镜像、创建密匙对,对实例添加卷、操作Swift容器等
2.1.1 OpenStack管理的web接口–horizon
- 实例管理:创建、终止实例,查看终端日志,VNC链接,添加卷等
- 访问与安全管理:创建安全群组,管理密匙对,设置浮动IP等
- 偏好设定:对虚拟硬件模板可以进行不同的偏好设置
- 镜像管理:编辑或删除镜像
- 用户管理:创建用户、管理用户、配额等
- 卷管理:创建卷和快照
- 对象存储处理:创建、删除容器和对象
- 为项目下载环境变量
2.2 Nova –计算服务
Nova
是OpenStack
计算的弹性控制器,云实例生命期所需的各种动作都将由Nova
进行处理和支撑,负责管理整个云的计算资源、网络、授权及测度。它使用libvirt API
与虚拟机的宿主机进行交互。Nova 通过Web服务API对外提供处理接口。
2.2.1 Nova弹性云包含的部分
nova-api(API服务器): API服务器提供了云设施与外界交互的接口。通过使用
Web服务
来调用API
,接着API服务器通过消息队列把请求送达至云内目标设施进行处理。Rabbit MQ Server(消息队列):Nova对请求应答进行异步调用,当请求接收后便立即触发一个回调。
nova-scheduler(调度器):调度器负责把
nova-api
调用送达给目标。调度器以名为nova-schedule
的守护进程运行,并根据调度算法从可用资源池中选择运算服务器。nova-computer(运算工作站):通过消息队列接收请求并执行,从而对实例进行各种操作。
nova-network(网络控制器):处理主机的网络配置,例如 IP地址分配,配置项目VLAN,设定安全群组及为计算节点配置网络
nova-volume(卷工作站):基于LVM的实例卷,能够为一个实例创建、删除、附加卷,也可以从一个实例中分离卷。
卷管理为何如此重要?
因为 它提供了一种保持实例持续存储的手段,比如当结束一个 实例后,根分区如果是非持续化的,那么对其的任何改变都将丢失。可是,如果从一个实例中将卷分离出来,或者为这个实例附加上卷的话,即使实例被关闭,数据 仍然保存其中。这些数据可以通过将卷附加到原实例或其他实例的方式而重新访问。
因此,为了日后访问,重要数据务必要写入卷中。这种应用对于数据服务器实例的存储而言,尤为重要。
2.2.2 Nova常用术语
- KVM:内核虚拟化,为openstack中默认的Hypervisor层
- Qemu:KVM的替补,KVM用户空间的管理工具
- Flavor:新建虚拟机的配置列表,可以认为是创建虚拟机模板
- Keypair:SSH连接访问实例的密钥对
- 安全组:控制实例访问策略的容器,包含各种安全组规则
- 安全组规则:控制实例访问的具体策略
2.3 Keystone –认证服务
Keystone
为所有的Openstack
组件提供认证和访问策略服务。依赖自身REST(基于identity API)系统进行工作。主要对(不仅限于)Swift、Glance、Nova等进行认证和授权。授权是通过动作消息来源者请求的合法性进行鉴定。
2.3.1 keystone认证原理
用户创建时通过keystone申请一张访问令牌access token,当用户提出创建虚拟机实例请求时,用户将访问令牌及创建请求提交给Nova,Nova为确保令牌未被篡改,会先将令牌发到Keystone验证,验证通过后Nova为了启动虚拟机实例还需向Glance申请镜像资源,Glance做如上操作无误后会向Nova发放镜像资源,Netron等同理
2.3.2 keystone常用术语
User:openstack最基本的用户
Project:分配给使用者资源的集合
Role:一组用户可以访问资源的权限
Domain:定义管理边界,是最上层的集合。可以包含多个project、user、role等
Endpoint:服务URL路径(服务入口),可以认为是服务暴露出的访问点,每个OpenStack服务都拥有一个指定的端口和专属的URL
2.4 Swift –对象存储服务
Swift
为openstack提供一种分布式、持续虚拟对象存储。内建冗余和失效备援管理,也能处理归档和媒体流,特别是大数据(千兆字节)和大容量(多对象数量)的测度非常高效。
2.4.1 Swift 包含的部分
- Swift代理服务器:用户都是通过Swift-API 与服务器进行交互,代理服务器是接收外界请求的门卫,它检测合法的实体位置并路由它们的请求。代理服务器也处理实体失效而转移时,故障切换的实体重复路由请求。
- swift对象服务器:是一种二进制存储,负责处理本地存储中的对象数据的存储、检索和删除。对象都是文件系统中存放的典型的二进制文件,具有扩展文件属性的元数据(xattr)。
- Swift容器服务器:容器服务器将列出一个容器中所有的对象,默认对象列表将存储为
SQLite
文件,也可以指定为Mysql
文件。容器服务器也会统计包含的对象数量及容器的存储空间耗费。 - Swift账户服务器:列出容器中的对象。
- Ring(索引环):Ring容器记录着Swift中物理存储对象的位置信息,是真实物理存储位置的实体名的虚拟映射。(这里的实体指账户、容器、对象,它们都拥有自己的不同的Rings。)
2.4.2 Swift 常用术语
- Account:不是帐户,而是用户定义的存储管理区域。
- Container:存储隔间,类似文件夹或目录
- Object:对象。包含了基本的存储实体和它自身的元数据
- Ring:记录了磁盘上存储的实体名称和物理位置的映射关系
- Region:地域,从地理位置划分的一个概念
- Zone:可用区,按照独立的供网、供电基础设施划分
- Disk:磁盘。物理服务器上的存储设备
- Cluster:集群,为冗余考虑的部署架构
2.5 Glance –镜像服务
为 nova 提供镜像服务,以便启动实例的组件。实现镜像的创建、镜像快照管理和镜像模板等。
镜像格式:raw,qcow,vhd,vdi,iso,qcow2,aki,ami
镜像不保存在本地而在后端。swift,filesystem,amazons3。
2.5.1 Glance 组件
- Glance-api:负责提供镜像服务的rest api服务。
- Glance-registry:负责与Glance适用的数据库交互。
2.6 Neutron –网络服务
提供网络服务的核心组件,基于软件定义网络的思想。
将从API接到的消息以消息队列的方式提交给二层或三层代理。
DHCP-Agent实现子网创建及IP地址自动分发。
L2-Agent实现相同VLAN下网络通信。
L3-Agent实现统一租户网络下不同子网间通信。
2.6.1 Neutron 组件
- Neutron-DHCP-agent:为子网自动分发IP地址
- Neutron-I3-agent:租户网络和
floating IP
间地址转换,通过Linux中iptable
中nat
实现 - Neutron-meterdata-agent:响应
Nova
的meterdata
请求 - LBaa S agent:为多台实例和
open vswich agent
提供负载均衡服务
2.6.2 Neutron常用术语
- Bridge-int:实现内部网络功能的网桥
- Br-ex:跟外部网络通信的网桥
- Neutron-server:提供API接口
- Neutron-L2-agent:实现二层网络通信代理,用于管理VLAN的插件,接收Neutron-server的指令创建VLAN
2.7 Cinder –块存储服务
为虚拟机实例提供 volume
卷的持久化块存储服务,可将卷挂载到实例上作为实例的本地磁盘使用。一个卷可同时挂载多个实例,但共享的卷同时只能被一个实例写操作。支持对卷的快照,备份等管理。基于插件的服务,容易扩展。
User或Nova computer提出创建卷的请求时,Cinder API接收请求,再以消息队列的方式发给Cinder Scheduler,Scheduler监听来自API的数据后到database查询当前存储节点的状态信息,并根据预定的策略选择卷的最佳Volume Service节点,再将调度结果发布出来给Volume Service调用,Service接收到调度结果会查找Volume Providers在特定的存储节点创建相关卷,将相关结果返回给用户同时将修改的数据写入数据库。
2.7.1 支持的文件系统类型
- LVM/ISCSI
- NFS
- NetAPP NFS
- Gluster
- DELL Equall Logic
2.7.2 Cinder 常用术语
- Volume备份:volume卷备份。存放在存放在备份的设备中。
- Volume快照:卷在某个时间点的状态
- Cinder API:为cinder请求提供统一风格的Rest API服务
- Cinder Volume:与存储的块设备交互,实现卷的创建、删除、修改等操作
- Cinder Scheduler:为新卷指定块存储设备
- Cinder Backup:负责通过驱动和后端的备份设备打交道
2.8 Ceilometer –监控服务
计量服务,数据监控器。平台中各个组件信息的统一采集和处理,实现对各组件的监控及流量统计。为流量计费提供数据支撑。
数据采集有两种方式,一种是消耗各服务自动发出的Notification(首要数据来源),另一种是调用各服务API主动轮询获取数据。
2.8.1 Ceilometer 重要节点
- Ceilometer-agent-computer:运行在计算节点上,收集计算节点上信息的代理
- Ceilometer-agent-central:运行在控制节点上,轮询服务的非持续化数据
- Ceilometer-collector:运行在一个或多个控制节点上,监听Message Bus,将收集到的消息写入数据库
- Storage:存储收集到的样本数据
- API Server:运行在控制节点上,提供对数据库数据的访问
- Message Bus:计量数据的消息总线,提供数据给collector
2.9 Heat –编排服务
提供基于模板的编排服务。
用户在 Horizon 或命令行中提交创建模板和参数的请求时,Heat服务接收请求调用用Heat API
或 Heat API CFN
验证模板的正确性,然后通过消息队列异步传送给Heat Engine
处理。Heat Engine
处理Heat
层面的请求,根据模板和输入的参数创建stack
,解析stack里各种资源的依赖关系及stack
的嵌套关系,根据解析出的关系依次调用各种服务的client
来创建各种资源。
2.9.1 Heat组件
- Heat-cfntools、Heat-init:在镜像中安装完成实例操作任务的工具
- Heat-api-cloudwatch:监控编排服务
- Resource:底层各种服务抽象的集合
- Heat-client:调用访问其他组件的client工具
2.9.2 Heat常用术语
- Stack:Heat要用到的所有设施和资源的集合
- Heat template:Heat的模板,以 .yaml结尾的文件,用于创建stack
- Heat-api:提供rest api服务,将api请求发送给heat engine执行
- Heat-api-cfn:支持亚马逊格式访问的 rest api
- Heat-engine:Heat的核心模块,接收API请求在openstack中创建资源