一、初识OpenStack
一)OpenStack架构简述
1、理解OpenStack
OpenStack既是一个社区,也是一个项目和一个开源软件,提供开放源码软件,建立公共和私有云,它提供了一个部署云的操作平台或工具集,其宗旨在于:帮助组织运行为虚拟计算或存储服务的云,为公有云、私有云,也为大云、小云提供可扩展的、灵活的云计算。
OpenStack开源项目由社区维护,包括OpenStack计算(代号为Nova),OpenStack对象存储(代号为Swift),并OpenStack镜像服务(代号Glance)的集合。 OpenStack提供了一个操作平台,或工具包,用于编排云。
1、OpenStack是什么?
- OpenStack是一套资源管理平台;
- 主要基于KVM之上;
- 开源、免费、Python编写
- 2010年7月份NASA和Rackspace公司将其开源
2、各种私有云的使用占比
2、OpenStack的架构
3、OpenStack组成
整个OpenStack是由控制节点,计算节点,网络节点,存储节点四大部分组成。(这四个节点也可以安装在一台机器上,单机部署)其中:
- 控制节点负责对其余节点的控制,包含虚拟机建立,迁移,网络分配,存储分配等等
- 计算节点负责虚拟机运行
- 网络节点负责对外网络与内网络之间的通信
- 存储节点负责对虚拟机的额外存储管理等等
4、Openstack的各个组件作用及关系
1、OpenStack的组件及作用
- Keystone - 认证服务(Identity Service):
- 为OpenStack其他服务提供身份验证、服务规则和服务令牌的功能,管理Domains、Projects、Users、Groups、Roles。自Essex版本集成到项目中
- Nova - 计算服务(Compute):
- 一套控制器,用于为单个用户或使用群组管理虚拟机实例的整个生命周期,根据用户需求来提供虚拟服务。负责虚拟机创建、开机、关机、挂起、暂停、调整、迁移、重启、销毁等操作,配置CPU、内存等信息规格。自Austin版本集成到项目中。
- Neutron-网络服务(Network):
- 提供云计算的网络虚拟化技术,为OpenStack其他服务提供网络连接服务。为用户提供接口,可以定义Network、Subnet、Router,配置DHCP、DNS、负载均衡、L3服务,网络支持GRE、VLAN。插件架构支持许多主流的网络厂家和技术,如OpenvSwitch。自Folsom版本集成到项目中
- Glance - 镜像服务(Image Service):
- 一套虚拟机镜像查找及检索系统,支持多种虚拟机镜像格式(AKI、AMI、ARI、ISO、QCOW2、Raw、VDI、VHD、VMDK),有创建上传镜像、删除镜像、编辑镜像基本信息的功能。自Bexar版本集成到项目中
- Cinder-块存储服务 (Block Storage):
- 为运行实例提供稳定的数据块存储服务,它的插件驱动架构有利于块设备的创建和管理,如创建卷、删除卷,在实例上挂载和卸载卷。自Folsom版本集成到项目中
- Swift - 对象存储服务(Object Storage):
- 一套用于在大规模可扩展系统中通过内置冗余及高容错机制实现对象存储的系统,允许进行存储或者检索文件。可为Glance提供镜像存储,为Cinder提供卷备份服务。自Austin版本集成到项目中
- Horizon - UI服务(Dashboard):
- OpenStack中各种服务的Web管理门户,用于简化用户对服务的操作,例如:启动实例、分配IP地址、配置访问控制等。自Essex版本集成到项目中
- Ceilometer - 监控服务(Metering):
- 像一个漏斗一样,能把OpenStack内部发生的几乎所有的事件都收集起来,然后为计费和监控以及其它服务提供数据支撑。自Havana版本集成到项目中
- Heat - 集群服务(Orchestration):
- 提供了一种通过模板定义的协同部署方式,实现云基础设施软件运行环境(计算、存储和网络资源)的自动化部署。自Havana版本集成到项目中
- Trove - 数据库服务(Database Service):
- 为用户在OpenStack的环境提供可扩展和可靠的关系和非关系数据库引擎服务。自Icehouse版本集成到项目中
2、OpenStack各个组件的关系图
二)OpenStack四个组成部详解
1、控制节点架构
控制节点一般来说只需要一个网络端口用于通信/管理各个节点
1、控制架构服务按职能分为
- 管理支持服务
- 基础管理服务
- 扩展管理服务
2、管理支持服务包含MySQL与Qpid(rabbitMQ)两个服务
- MySQL:数据库作为基础/扩展服务产生的数据存放的地方
- Qpid(rabbitMQ):消息代理(也称消息中间件)为其他各种服务之间提供了统一的消息通信服务
3、基础管理服务包含Keystone,Glance,Nova,Neutron,Horizon五个服务
- Keystone:认证管理服务,提供了其余所有组件的认证信息/令牌的管理,创建,修改等等,使用MySQL作为统一的数据库
- Glance:镜像管理服务,提供了对虚拟机部署的时候所能提供的镜像的管理,包含镜像的导入,格式,以及制作相应的模板
- Nova:计算管理服务,提供了对计算节点的Nova的管理,使用Nova-API进行通信
- Neutron:网络管理服务,提供了对网络节点的网络拓扑管理,同时提供Neutron在Horizon的管理面板
- Horizon:控制台服务,提供了以Web的形式对所有节点的所有服务的管理,通常把该服务称为DashBoard
4、扩展管理服务包含Cinder,Swift,Trove,Heat,Centimeter五个服务
- Cinder:提供管理存储节点的Cinder相关,同时提供Cinder在Horizon中的管理面板
- Swift:提供管理存储节点的Swift相关,同时提供Swift在Horizon中的管理面板
- Trove:提供管理数据库节点的Trove相关,同时提供Trove在Horizon中的管理面板
- Heat:提供了基于模板来实现云环境中资源的初始化,依赖关系处理,部署等基本操作,也可以解决自动收缩,负载均衡等高级特性。
- Centimeter:提供对物理资源以及虚拟资源的监控,并记录这些数据,对该数据进行分析,在一定条件下触发相应动作
2、网络节点架构
1、网络节点仅包含Neutron服务
Neutron:负责管理私有网段与公有网段的通信,以及管理虚拟机网络之间的通信/拓扑,管理虚拟机之上的防火等等
2、网络节点包含三个网路端口
- eth0:用于与控制节点进行通信
- eth1:用于与除了控制节点之外的计算/存储节点之间的通信
- eth2:用于外部的虚拟机与相应网络之间的通信
3、计算节点架构
计算节点包含Nova,Neutron,Telemeter三个服务
1、基础服务
- Nova:提供虚拟机的创建,运行,迁移,快照等各种围绕虚拟机的服务,并提供API与控制节点对接,由控制节点下发任务
- Neutron:提供计算节点与网络节点之间的通信服务
2、扩展服务
- Telmeter:提供计算节点的监控代理,将虚拟机的情况反馈给控制节点,是Centimeter的代理服务
3、计算节点最少两个网络端口
- eth0:与控制节点进行通信,受控制节点统一调配
- eth1:与网络节点,存储节点进行通信
4、存储节点
1、存储节点包含Cinder,Swift(可以使用其他代替如:ceph等)等服务
- Cinder:块存储服务,提供相应的块存储,简单来说,就是虚拟出一块磁盘,可以挂载到相应的虚拟机之上,不受文件系统等因素影响,对虚拟机来说,这个操作就像是新加了一块硬盘,可以完成对磁盘的任何操作,包括挂载,卸载,格式化,转换文件系统等等操作,大多应用于虚拟机空间不足的情况下的空间扩容等等
- Swift:对象存储服务,提供相应的对象存储,简单来说,就是虚拟出一块磁盘空间,可以在这个空间当中存放文件,也仅仅只能存放文件,不能进行格式化,转换文件系统,大多应用于云磁盘/文件
2、存储节点包含最少两个网络接口
- eth0:与控制节点进行通信,接受控制节点任务,受控制节点统一调配
- eth1:与计算/网络节点进行通信,完成控制节点下发的各类任务
三)OpenStack各组件逻辑关系、通信部署关系及工作流程
https://www.cnblogs.com/panwenbin-logs/p/8445640.html
二、详解OpenStack各个组件
一)OpenStack认证服务(keystone)
1、keystone的功能和认证流程
Keystone为所有的OpenStack组件提供认证和访问策略服务,它依赖自身REST(基于Identity API)系统进行工作,主要对(但不限于)Swift、Glance、Nova等进行认证与授权。事实上,授权通过对动作消息来源者请求的合法性进行鉴定。
下图显示了身份认证服务流程
2、keystone两种授权方式
- 用户名/密码
- 基于令牌(Token)
3、keystone除上述之外,提供以下三种服务
- 令牌服务:含有授权用户的授权信息
- 目录服务:含有用户合法操作的可用服务列表
- 策略服务:利用Keystone具体指定用户或群组某些访问权限
4、keystone基本概念
- User:使用OpenStack的实体——用户、系统或者服务
- Credentials:身份证明信息——用户名密码、token、API Key等等
- Authentication:keystone验证User身份的过程
- Tocken:数字和字母组成的字符串,默认有效期24小时
- Project:对OpenStack资源进行分组和隔离
- Service:任何通过Keystone进行连接或管理的组件都被称为服务,每个组件差不多是一个service,比如Nova、Cinder、Neutron
- Endpoint:网络上可访问的一个地址(url),Service通过Endpoint暴露自己的API,有public(公共)、private(内部)和admin(管理)这三种权限
- Role:角色(为了维护安全限定,就云内特定用户可执行的操作而言,该用户关联的角色是非常重要的。)
可以参照下表理解
二)OpenStack镜像服务(glance)
1、glance概述
1、定义
OpenStack镜像服务器是一套虚拟机镜像发现、注册、检索系统。
2、存储:可以将镜像存储到以下任意一种存储中:
- 本地文件系统:NFS,swift和ceph等(默认)
- S3直接存储
- S3对象存储(作为S3访问的中间渠道)
- OpenStack对象存储等等。
2、glance功能和特点
提供镜像相关服务
3、glance构件
- Glance-API:主要负责接收响应镜像管理命令的Restful请求,分析消息请求信息并分发其所带的命令(如新增,删除,更新等)。默认绑定端口是9292。
- Glance-Registry:主要负责接收响应镜像元数据命令的Restful请求。分析消息请求信息并分发其所带的命令(如获取元数据,更新元数据等)。默认绑定的端口是9191。
4、glance架构
5、glance工作流程
6、上传镜像时,状态对应表
7、glance的配置文件
- glance-api.conf:glance api服务配置文件
- glance-registry.conf:glance registry服务配置文件,用于存储镜像有关的元数据
- glance-scrubber.conf:用于请理已删除的镜像的服务
- policy.json:镜像服务访问控制。可以定义角色和策略,是OpenStack Glance中的安全特性
8、扩展:镜像的各种格式
三)OpenStack计算服务(Nova)
Nova技术图解:Nova技术图解_nova调度器类型有哪些?描述过滤器调度器的调度过程,并列出常用的过滤器-CSDN博客
1、Nova概述
Nova是OpenStack计算的弹性控制器。
OpenStack云实例生命期所需的各种动作都将由Nova进行处理和支撑,这就意味着Nova以管理平台的身份登场,负责管理整个云的计算资源、网络、授权及测度。
虽然Nova本身并不提供任何虚拟能力,但是它将使用libvirt API与虚拟机的宿主机进行交互。Nova通过Web服务API来对外提供处理接口,而且这些接口与Amazon的Web服务接口是兼容的。
2、Nova功能及特点
- 实例生命周期管理
- 计算资源管理
- 网络与授权管理
- 基于REST的API
- 异步连续通信
- 支持各种宿主:Xen、XenServer/XCP、KVM、UML、VMware vSphere及Hyper-V
3、Nova弹性云主要组成部分
- API Server(nova-api)
- 消息队列(rabbit-mq server)
- 运算工作站(nova-compute)
- 网络控制器(nova-network)
- 卷管理(nova-volume)
- 调度器(nova-scheduler)
1、API服务器(nova-api)
API服务器提供了云设施与外界交互的接口,它是外界用户对云实施管理的唯一通道。
通过使用web服务来调用各种EC2的API,接着API服务器便通过消息队列把请求送达至云内目标设施进行处理。作为对EC2-api的替代,用户也可以使用OpenStack的原生API,我们把它叫做“OpenStack API”。
2、消息队列(Rabbit MQ Server)
OpenStack内部在遵循AMQP(高级消息队列协议)的基础上采用消息队列进行通信。Nova对请求应答进行异步调用,当请求接收后便则立即触发一个回调。由于使用了异步通信,不会有用户的动作被长置于等待状态。
例如,启动一个实例或上传一份镜像的过程较为耗时,API调用就将等待返回结果而不影响其它操作,在此异步通信起到了很大作用,使整个系统变得更加高效。
3、调度器(nova-scheduler)
调度器负责把nova-API调用送达给目标。调度器以名为“nova-schedule”的守护进程方式运行,并根据调度算法从可用资源池中恰当地选择运算服务器。
有很多因素都可以影响调度结果,比如负载、内存、子节点的远近、CPU架构等等。强大的是nova调度器采用的是可插入式架构。
Nova-scheduler组件说明
目前nova调度器使用了几种基本的调度算法:
- 随机化:主机随机选择可用节点;
- 可用化:与随机相似,只是随机选择的范围被指定;
- 简单化:应用这种方式,主机选择负载最小者来运行实例。负载数据可以从别处获得,如负载均衡服务器。
4、运算工作站(nova-compute)
运算工作站的主要任务是管理实例的整个生命周期。
他们通过消息队列接收请求并执行,从而对实例进行各种操作。在典型实际生产环境下,会架设许多运算工作站,根据调度算法,一个实例可以在可用的任意一台运算工作站上部署。
5、网络控制器(nova-network)
网络控制器处理主机的网络配置,例如IP地址分配,配置项目VLAN,设定安全群组以及为计算节点配置网络。
6、卷工作站(nova-volume)
卷工作站管理基于LVM的 实例卷,它能够为一个实例创建、删除、附加卷,也可以从一个实例中分离卷。
卷管理为何如此重要?
因为它提供了一种保持实例持续存储的手段,比如当结束一个 实例后,根分区如果是非持续化的,那么对其的任何改变都将丢失。可是,如果从一个实例中将卷分离出来,或者为这个实例附加上卷的话,即使实例被关闭,数据 仍然保存其中。这些数据可以通过将卷附加到原实例或其他实例的方式而重新访问。
因此,为了日后访问,重要数据务必要写入卷中。这种应用对于数据服务器实例的存储而言,尤为重要。
4、Nova组件图及其架构
1、Nova组件图
2、Nova架构
5、Nova创建虚拟机的过程
6、 Nova过滤器类型说明
- DifferentHostFilter:选择与一个集合的虚拟机不同位置的主机;
- SameHostFilter:选择与一组虚拟机相同位置的主机;
- GroupAntiAffinityFilter:选择与一个集合的虚拟机不同位置的主机,集合中的每个元素都是一个虚拟机的组;
- AggregateInstanceExtraSpecsFilter:返回能够建立某一类型虚拟机的主机列表
- AvailabilityZoneFilter(可用区过滤):通过可用的区域来过滤主机host
- ComputeCapabilitiesFilter(计算节点特性过滤):根据host的capabilities判断是否允许创建虚拟机(例如:x86_64、i686)
- ComputeFilter(nova-compute服务正常过滤):根据主机capabilities的状态和服务的可用性过滤
- CoreFilter(CPU core数过滤):基于主机的CPU内核数进行过滤(超量使用设置:cpu_allocation_ratio = 16.0 OpenStack认为有计算节点的16倍核数)
- DiskFilter(磁盘容量过滤):基于磁盘使用率的主机host过滤(超量使用设置:disk_allocation_ratio = 1.0 磁盘不建议跳大)
- IoOpsFilter:过滤掉有过多的I/O操作的主机host
- RamFilter(内存过滤):只返回有足够可使用的RAM主机host(超量使用设置:ram_allocation_ratio = 3,OpenStack认为有计算节点的三倍内存)
- RetryFilter(重试过滤):跳过已经尝试过的节点
7、OpenStack设置cpu和内存虚拟化比例
默认OpenStack的CPU超配比例是1:16,内存超配比例是1:1.5。下面配置的就是这个比例,你可以自己算一下,cat /proc/cpuinfo里面的逻辑核数,再x16就是你能够分配给虚拟机的。内存也是类似。
配置文件nova.conf中修改了如下参数
#cpu_allocation_ratio=16.0 #ram_allocation_ratio=1.5
当然了,这个值其实是给nova-scheduler看的,人家来决定,你有没有资源创建虚拟机,以及创建在哪个节点上。
四)OpenStack网络服务(Neutron)
1、Neutron概述
Neutron提供网络服务,可插拔的架构设计,支持众多主流网络供应商以及技术,SDN(software defined networking)
2、提供哪些网络服务
- 二层交换 Switching、 Linux bridge / Open vSwitch
- 三层路由 Routing
- 负载均衡
- 防火墙
- VPN
3、Neutron的基本概念
- flat:扁平网络(使用多)
- vlan:一个二层的广播域,同一vlan中的instance可以通信,不同vlan只能提供router通信。vlan可以跨节点,是应用最广泛的网络类型。
- vXlan:提供唯一的segmentation ID(也叫VNI)与其他vxlan网络区分。vxlan中数据包会通过VNI封装成UPD包进行传输。因为二层的包通过封装在三层传输,能够克服vlan和物理网络设施的限制。
- gre:gre是与vxlan类似的一种overlay网络。主要区别在于使用IP包而非UDP进行封装。
- network:一个隔离的二层广播域。neutron支出多种类型的network,包括local,flat,vlan,vxlan和GRE
- subnet:子网,subnet是一个IPv4或者IPv6地址段。instance的IP从subnet中分配。每个subnet需要定义IP地址的范围和掩码。
- port:可以看做虚拟交换机上一个端口。port上定义了MAC地址和IP地址,当instance的虚拟网卡VIF(virtual interface)绑定到port时,port会将MAC和IP分配给VIF。
1、VLAN
- 端口的分隔。即便在同一个交换机,处于不同VLAN的端口也是不能通信的,这样的一个物理交换机可以当做多个逻辑交换机使用。
- 网络的安全。不同VLAN不能直接通信,杜绝了广播信息的不安全性。
- 灵活的管理。更改用户所属的网络不必换端口和连线,只更改软件配置就可以了。
2、VxLAN
为何出现VxLAN?
- VLAN的数量限制:4096个VLAN远不能满足大规模元计算数据中心的需求
- 物理网络基础设施的限制:基于IP子网的区域划分限制了需要二层网络连通性的应用负载的部署。
- TOR交换机MAC表耗尽:虚拟机以及东西向流量导致更多的MAC表项
- 多租户场景:IP地址重叠
4、Neutron架构
5、net namespace
1、namespace概述
Linux Namespace机制是一种资源隔离方案。
特点:轻量、高效、开销小
docker的namespace
2、namespace的分类
3、Net Namespace
network namespace是实现网络虚拟化的重要功能,他能创建多个隔离的网络空间,他们有独自的网络栈信息、不管是虚拟机还是容器,运行的时候仿佛自己就在独立的网络中。
默认情况下,nerwork namespace是不能和主机网络或者其他network namespace通信的。
命令ip netns
ip netns add net1 创建名为net1的network namespace ip netns list 列出当前存在的network namespace ip netns exec net1 ip addr 查看这个namespace里的网卡信息 ip netns exec net1 /bin/bash --rcfile <(echo "PS1=\" namespace net1>\"") 完全进入namespace命令模式
4、Network namespace之间通信——veth pair
建立veth pair:双向的pipe(管道)
ip link add type veth #添加命令 ip link set veth0 netns net0 ip link set veth1 netns net1 ip netns exec net0 ip link set veth0 up ip netns exec net0 ip addr 10.1.1.1/24 dev veth0
5、Network namespace之间通信——bridge
6、Neutron的工作流程
五)OpenStack存储模块(cinder)
1、cinder概述
- 提供数据块存储服务
- 可插拔驱动架构设计
- 后端支持LVM、NFS、Ceph和其他商业存储产品方案(EMC、IBM等)
2、cinder架构
六)OpenStack管理的web接口(Horizon)
1、Horizon概述
Horizon是一个用以管理、控制OpenStack服务的Web控制面板,它可以管理实例、镜像、创建密匙对,对实例添加卷、操作Swift容器等。除此之外,用户还可以在控制面板中使用终端(console)或VNC直接访问实例。
2、Horizon功能特点
- 实例管理:创建、终止实例,查看终端日志,VNC连接,添加卷等
- 访问与安全管理:创建安全群组,管理密匙对,设置浮动IP等
- 偏好设定:对虚拟硬件模板可以进行不同偏好设定
- 镜像管理:编辑或删除镜像
- 查看服务目录
- 管理用户、配额及项目用途
- 用户管理:创建用户等
- 卷管理:创建卷和快照
- 对象存储处理:创建、删除容器和对象
- 为项目下载环境变量
七)OpenStack存储设施(swift)
1、Swift概述
Swift为OpenStack提供一种分布式、持续虚拟对象存储,它类似于Amazon Web Service的S3简单存储服务。
Swift具有跨节点百级对象的存储能力。Swift内建冗余和失效备援管理,也能够处理归档和媒体流,特别是对大数据(千兆字节)和大容量(多对象数量)的测度非常高效。
2、Swift功能特点
- 海量对象存储
- 大文件(对象)存储
- 数据冗余管理
- 归档能力-----处理大数据集
- 为虚拟机和云应用提供数据容器
- 处理流媒体
- 对象安全存储
- 备份与归档
- 良好的可伸缩性
3、Swift组件
- Swift账户
- Swift容器
- Swift对象
- Swift代理
- Swift RING
1、Swift代理服务器
用户都是通过Swift-API与代理服务器进行交互,代理服务器正是接收外界请求的门卫,它检测合法的实体位置并路由它们的请求。
此外,代理服务器也同时处理实体失效而转移时,故障切换的实体重复路由请求。
2、Swift对象服务器
对象服务器是一种二进制存储,它负责处理本地存储中的对象数据的存储、检索和删除。对象都是文件系统中存放的典型的二进制文件,具有扩展文件属性的元数据(xattr)。
注意:xattr格式被Linux中的ext3/4,XFS,Btrfs,JFS和ReiserFS所支持,但是并没有有效测试证明在XFS,JFS,ReiserFS,Reiser4和ZFS下也同样能运行良好。不过,XFS被认为是当前最好的选择。
3、Swift容器服务器
容器服务器将列出一个容器中的所有对象,默认对象列表将存储为SQLite文件(译者注:也可以修改为MySQL,安装中就是以MySQL为例)。容器服务器也会统计容器中包含的对象数量及容器的存储空间耗费。
4、Swift账户服务器
账户服务器与容器服务器类似,将列出容器中的对象。
5、Ring(索引环)
Ring容器记录着Swift中物理存储对象的位置信息,它是真实物理存储位置的实体名的虚拟映射,类似于查找及定位不同集群的实体真实物理位置的索引服务。这里所谓的实体指账户、容器、对象,它们都拥有属于自己的不同的Rings。