一、云计算概念
1、简介
云计算是一种按使用量付费的模式,这种模式提供可用的、便捷的、按需的网络访问
进入可配置的计算资源共享池(资源包括:网络、服务器、存储、计算、应用软件等服务),这些资源能够被快速提供,只需提供很少的管理工作,或只用与服务供应商进行很少的交互
2、特点
1)超大规模
- "云"具有相当的规模,企业私有云一般般拥有数百上千台服务器,能给用户提供前所未有的计算能力
2)虚拟化
- 云计算支持用户在任意位置、使用各种终端获取应用服务
3)高可靠性
- "云"使用了数据多副本容错、计算节点同构可互换等措施来保障服务的高可靠性
- 使用云计算比使用本地计算机可靠
4)通用性
- 云计算不针对特定的应用
- 同一"云"可以同时支撑不同的应用运行
5)高可扩展性
- "云"的规模可以动态伸缩,满足应用和用户规模增长的需要
6)按需服务
- "云"是一个庞大的资源池,你按需购买
- 云可以像自来水、电、煤气那样按量计费
7)极其廉价
- 由于"云"的特殊容错措施,可以采用极其廉价的节点来构成云
- "云"的自动化集中式管理使大量企业无需负担日益高昂的数据中心管理成本
- "云"的通用性使资源的利用率较之传统系统大幅提升,因此用户可以充分享受"云"的低成本优势
- 通常只要花费几百美元、几天时间,就能完成以前需要数万美元、数月时间才能完成的任务
3、三种使用方式
1)公有云
- 公有云就是基础设施完全自己不搭建,只关心怎么使用
- 公有云分为以下几类:
- 传统的电信基础设施运营商,比如中国移动、中国联通、中 国电信等提供的公有云服务
- 一类是政府主导的地方性云计算平台,也就是常说的政府云
- 互联网巨头打造的公有云平台
- 部分IDC运营商
- 还有部分国外的云计算企业
2)私有云
- 私有云就是自己搭建云的环境,设施设备需自己或第三方维护
- 私有云是为一个用户单独使用而构建的,因而在数据安全性以及服务质量上自己可以有效的管控,私有云的基础是首先你要拥有基础设施并可以控制在此设施上部署应用程序的方式
- 私有云可以部署在企业数据中心的防火墙内,核心属性是专有资源,比如我们经常使用且比较典型的私有云有 VMware、OpenStack
3)混合云
- 混合云是将公有云和私有云结合起来使用,也是很多企业的使用方式
- 一般的将核心业务,放在自己的私有云上,次要的放在公有云上
- 但是也会有一些问题:安全性、数据冗余、法律、服务质量方面等
4、服务模型
1)IaaS(基础架构即服务)
- 提供底层 IT 基础设施服务,包括处理能力、存储空间、网络资源等
- 面向对象一般是 IT 管理人员
2)PaaS(平台即服务)
- 把安装好开发环境的系统平台作为一种服务通过互联网提供给用户
- 面向对象一般是开发人员
3)SaaS(软件即服务)
- 直接通过互联网为用户提供软件和应用程序等服务
- 面向对象一般是普通用户
二、OpenStack 概述
1、openstack服务
服务 | 项目名称 | 描述 |
---|---|---|
Compute (计算服务) |
Nova | ①负责实例生命周期的管理,计算资源的单位 ②对 Hypervisor 进行屏蔽,支持多种虚拟化技术(红帽默认为 KVM),且支持横向扩展 |
Network (网络服务) |
Neutron | ①负责虚拟网络的管理,为实例创建网络的拓扑结构 ②是面向租户的网络管理,可以自己定义自己的网络,各个租户之间互不影响 |
Identity (身份认证服务) |
Keystone | ①类似于 LDAP 服务,对用户、租户和角色、服务进行认证与授权 ②且支持多认证机制 |
Dashboard (控制面板服务) |
Horizon | ①提供一个 Web 管理界面 ②与 OpenStack 底层服务进行交互 |
Image Service (镜像服务) |
Glance | ①提供虚拟机镜像模板的注册与管理,将做好的操作系统拷贝为镜像模板,在创建虚拟机时可直接使用 ②可支持多格式的镜像 |
Block Storage (块存储服务) |
Cinder | ①负责为运行实例提供持久的块存储设备,可进行方便的扩展,按需付费 ②支持多种后端存储 |
Object Storage (对象存储服务) |
Swift | ①为 OpenStack 提供基于云的弹性存储 ②支持集群无单点故障 ③对静态文件的存储 |
Telemetry (计量服务) |
Ceilometer | ①用于度量、监控和控制数据资源的集中来源 ②为 OpenStack 用户提供记账途径 |
2、openstack架构
原生架构
1、全局组件(keystone、ceilometer、horizon)
2、核心组件(Nova、swift、cinder、neutron、glance )
3、外部组件(ironic 裸金属服务、trove 数据库管理、heat 可以管理云环境中资源等、sahara 便于创建和管理计算框架集群)
逻辑架构
1、介绍了openstack原生架构的组件
- 这部分就是上面openstack概念架构中表现的内容
2、组件之间如何通信(点到点 )
- 通过API
3、单个项目内部的很多子功能模块怎么交互
- 通过消息代理进行交互
物理架构
根据职能分类
控制节点:管理openstack架构
网络节点:复制各节点之间的通信/交互
计算节点:主要负责承载实例,次要负责具体需求的处理
存储节点:提供存储服务
三、Keystone身份认证服务
1、主要功能
- 身份认证(Authentication) :令牌的发放和校验
- 用户授权(Authorization):授予用户在一个服务中所拥有权限
- 用户管理(Account):管理用户账户
- 服务目录(Service Catalog):提供可用服务的API端点
2、认证流程
如图:user 申请创建虚拟机 每步都需要keystone认证 (镜像、网络)
四、glance镜像服务
1、主要功能
- 查询和获取镜像的元数据和镜像本身
- 注册和上传虚拟机镜像,包括镜像的创建、上传、下载和管理
- 维护镜像信息,包括元数据和镜像本身。
- 支持多种方式存储镜像,包括普通的文件系统、Swift、Amazon S3等
- 对虚拟机实例执行创建快照命令来创建新的镜像,或者备份虚拟机的状态。
2、架构详解
- client:客户端/请求体(可以是openstack命令行、horizon、nova)
- Glance-api:统一的交互入口;负责接收请求、响应请求(镜像查询、获取、存储的调用)
- glance-registry:负责相应和镜像元数据相关的请求;和DB数据库中交互,存储、处理、检索镜像的元数据(镜像大小、类型)
- store backend:Glance 自己并不存储 image。 真正的 image 是存放在 backend 中的。用于将镜像本身的数据存放在后端
下面一排,可以理解成不同格式类型的数据库。
五、Placement资源管理服务
最早在 Newton 版本被引入 openstack/nova repo,以 API 的形式存在,所以也常被称为 Placement API。它参与到 nova-scheduler 选择目标主机的调度流程中,负责跟踪记录 Resource Provider 的 Inventory 和 Usage,并使用不同的 Resource Classes 来划分资源类型,使用不同的 Resource Traits 来标记资源特征。
在2018/11,Placement API 开始了 openstack/nova repo 剥离流程,从 Placement API 蜕变为 OpenStack Placement。虽然现在的 OpenStack Placement 还不算稳定,但毋容置疑,Placement 就是 OpenStack 云平台统一资源管理的未来。
六、Nova计算服务
1、概念
计算服务是openstack最核心的服务之一,负责维护和管理云环境的计算资源,它在openstack项目中代号是nova。
Nova自身并没有提供任何虚拟化能力,它提供计算服务,使用不同的虚拟化驱动来与底层支持的Hypervisor(虚拟机管理器)进行交互。所有的计算实例(虚拟服务器)由Nova进行生命周期的调度管理(启动、挂起、停止、删除等)
Nova需要keystone、glance、neutron、cinder和swift等其他服务的支持,能与这些服务集成,实现如加密磁盘、裸金属计算实例等。
2、Nova系统架构
外部联系
- DB:用于数据存储的sql数据库
- Network:管理IP转发、网桥或虚拟局域网的nova网络组件
- Keystone:安全认证的组件
- Glance & Cinder:负责管理镜像的组件
内部结构
- API:用于接收HTTP请求、转换命令、通过消息队列或HTTP与其他组件通信的nova组件
- Scheduler:用于决定哪台计算节点承载计算实例的nova调度器
- Compute:管理虚拟机管理器与虚拟机之间通信的nova计算组件
- Conductor:处理需要协调(构建虚拟机或调整虚拟机大小)的请求,或处理对象转换
3、nova组件介绍
API----通信接口
API是客户访问nova的http接口,它由nova-api服务实现,nova-api服务接收和响应来自最终用户的计算apI请求,作为openstack对外服务的最主要接口,nova-api提供了一个集中的可以查询所有api的端点
所有对nova的请求都首先由nova-api处理,API提供REST标准调用服务,便于与第三方系统集成
最终用户不会直接改送RESTful API请求,而是通过openstack命令行、dashbord和其他需要跟nova交换的组件来使用这些API
只要跟虚拟机生命周期相关的操作,nova-api都可以响应
nova-api对接收到的HTTP API请求做以下处理:
1)检查客户端传入的参数是否合法有效
2)调用nova其他服务来处理客户端HTTP请求
3)格式化nova其他子服务返回结果并返回给客户端
nova-api是外部访问并使用nova提供的各种服务的唯一途径,也是客户端和nova之间的中间层
Scheduler----调度器
Scheduler可译为调度器,由nova-scheduler服务实现,主要解决的是如何选择在哪个计算节点上启动实例的问题,它可以应用多种规则,如果考虑内存使用率,cpu负载率、cpu架构(Intel/amd)等多种因素,根据一定的算法,确定虚拟机实例能够运行在哪一台计算服务器上,nova-scheduler服务会从队列中接收一个虚拟机实例的请求,通过读取数据库的内容,从可用资源池中选择最合适的计算节点来创建新的虚拟机实例
创建虚拟机实例时,用户会提出资源需求,如cpu、内存、磁盘各需要多少,openstack讲这些需求定义在实例类型中,用户只需指定使用哪个实例类型就可以了
1) nova调度器的类型
- 随机调度器(chance scheduler) :从所有正常运行nova-compute服务的节点中随机选择。
- 过滤器调度器(filter scheduler):根据指定的过滤条件以及权重选择最佳的计算节点,Filter又称为筛选器
- 缓存调度器(caching scheduler):可看作随机调度器的一种特殊类型,在随机调度的基础上将主机资源信息缓存在本地内存中,然后通过后台的定时任务定时从数据库中获取最新的主机资源信息。
2)过滤器
当过滤调度器需要执行调度操作时,会让过滤器对计算节点进行判断,返回True或False。
在配置文件/etc/nova/nova.conf中
- scheduler_available_filters选项用于配置可用过滤器,默认是所有nova自带的过滤器都可以用于过滤作用
- 另外还有一个选项scheduler_ default_ filters用于指定,nova-scheduler服务真正使用的过滤器
3)权重(weight)
- nova-scheduler服务可以使用多个过滤器依次进行过滤。过滤之后的节点再通过计算权重选出能够部署实例的节点。
- 注意:
所有权重位于nova/scheduler/weights目录下。目前默认实现是RAMweighter,根据计算节点空闲的内存量计算权重值,空闲越多,权重越大,实例将被部署到当前空闲内存最多的计算节点上 - openstack源码位置 /usr/lib/python2.7/site-packages
- 权重源码位置 /usr/lib/python2.7site-packages/nova/scheduler/weights
Compute----计算器
定期向OpenStack 报告计算节点的状态
- 每隔一段时间,nova-compute就会报告当前计算节点的资源使用情况和nova-compute服务状态。
- nova-compute是通过Hypervisor的驱动获取这些信息的。
实现虚拟机实例生命周期的管理
- OpenStack对虚拟机实例最主要的操作都是通过nova-compute实现的,如创建、关闭、重启、挂起、恢复、中止、调整大小迁移、快照
以实例创建为例来说明nova-compute的实现过程。
(1)为实例准备资源。
(2)创建实例的镜像文件。
(3)创建实例的XML定义文件。
(4)创建虚拟网络并启动虚拟机
Conductor----管理器
由nova-conductor模块实现,旨在为数据库的访问提供一层安全保障。
Nova-conductor作为nova-compute服务与数据库之间交互的中介,避免了直接访问由nova-compute服务创建对接数据库。
Nova-compute访问数据库的全部操作都改到nova-conductor中,nova-conductor作为对数据库操作的一个代理,而且nova-conductor是部署在控制节点上的
Nova-conductor 有助于提高数据库的访问性能,nova-compute可以创建多个线程使用远程过程调用(RPC)访问nova-conductor。
在一个大规模的openstack部署环境里,管理员可以通过增加nova-conductor的数量来应付月益增长的计算节点对数据库的访问量
PlacementAPI----管理接口
以前对资源的管理全部由计算节点承担,在统计资源使用情况时,只是简单的将所有计算节点的资源情况累加起来,但是系统中还存在外部资源,这些资源由外部系统提供。如ceph、nfs等提供的存储资源等。面对多种多样的资源提供者,管理员需要统一的、简单的管理接口来统计系统中资源使用情况,这个接口就是PlacementAPl。
PlacementAPI由nova-placement-api服务来实现,旨在追踪记录资源提供者的目录和资源使用情况。
被消费的资源类型是按类进行跟踪的。如计算节点类、共享存储池类、IP地址类等。
4、Nova部署架构
Nova经典部署架构
一个控制节点+多个计算节点
Nova负载均衡部署架构
多个控制节点+多个计算节点+独立的数据库(MariaDB、RabbitMQ)
Nova的cell架构
cell产生的原因:
- 当openstack nova集群的规模变大时,数据库和消息队列服务就会出现瓶颈问题。Nova为提高水平扩展及分布式、大规模的部署能力,同时又不增加数据库和消息中间件的复杂度,引入了Cell概念。
- Cell可译为单元。为支持更大规模的部署,openstack将大的nova集群分成小的单元,每个单元都有自己的消息队列和数据库,可以解决规模增大时引起的瓶颈问题。在Cell中,Keystone、Neutron、Cinder、Glance等资源是共享的。
cell架构图
API节点上的数据库
- nova_api数据库中存放全局信息,这些全局数据表是从nova库迁过来的,如flavor (实例模型)、instance groups实例组)、quota (配额)
- nova_ cell0数据库的模式与nova一样,主要用途就是当实例调度失败时,实例的信息不属于任何一个Cell,因而存放到nova_cell0数据库中。
Cells V2的架构
单Cell部署
多Cell部署
5、nova的元数据
元数据作用是通过向虚拟机实例注入元数据信息,实例启动时获得自己的元数据,实例中的cloud-init工具根据元数据完成个性化配置工作。
Openstack将cloud-init定制虚拟机实例配置时获取的元数据信息分成两大类
元数据(metadata)
用户数据(user data)。
元数据指的是结构化数据,以键值对形式注入实例,包括实例自身的一些常用属性
如主机名、网络配置信息(IP地址和安全组)、SSH密钥等。
用户数据是非结构化数据,通过文件或脚本的方式进行注入,支持多种文件格式
如gzip、shell、cloud-init配置文件等, 主要包括一些命令、脚本,比如shell脚本。
Openstack将元数据和用户数据的配置信息注入机制分为两种
一种是配置驱动器机制
另一种是元数据服务机制。