OpenStack -----基础理论篇

前言:

OpenStack是一个开源的云计算管理平台项目,是一系列软件开源项目的组合。由NASA(美国国家航空航天局)和Rackspace合作研发并发起,以Apache许可证(Apache软件基金会发布的一个自由软件许可证)授权的开源代码项目。

OpenStack为私有云和公有云提供可扩展的弹性的云计算服务。项目目标是提供实施简单、可大规模扩展、丰富、标准统一的云计算管理平台

一、云计算概述

1.1 云计算概念
  • 网络资源
  • 存储资源
  • 服务器资源
1.2 云计算服务类型
  • ① IaaS(基础架构即服务)

    用户能从中申请到硬件或虚拟硬件,包括裸机或虚拟机,然后在上边安装操作系统或其他应用程序

    OpenStack就是一种IaaS

  • 应用

    提供底层IT基础设施服务,包括处理能力,存储空间、网络资源

    一般面对对象是IT管理人员

  • ② PaaS(平台即服务)

    用户能从中申请到一个安装了操作系统以及支撑应用程序运行所需要的运行库等软件的物理机或虚拟机,然后在上边安装其他应用程序,但不能修改已经预装好的操作系统和运行环境

  • 应用

    把安装好开发环境的系统平台作为一种服务通过互联网提供给用户

    一般面对对象是开发人员

  • ③ SaaS(软件即服务)

    用户可以通过网络以租赁的方式来使用一些软件,而不是购买,比较常见的模式是提供一组账号密码

  • 应用

    直接通过互联网为用户提供软件和应用程序的服务

    一般面向对象是普通用户
    在这里插入图片描述

二、OpenStack 介绍

1.1 OpenStack概述
  • 一款云计算模型中的一个项目
  • NASA和Rackspace合作研发并发起
  • 以Apache许可证授权的自由软件和开放式源代码项目
  • 旨在为公共及私有云的建设与管理提供软件的开源项目
  • 覆盖了网络、虚拟化、操作系统、服务器等各个方面
1.2 opestack 特性
  • 快速:OpenStack安装部署所需的时间少。
  • 灵活:OpenStack获得的各大厂商的支持,兼容性和适用性强,OpenStack兼容其他公有云,方便用户进行数据迁移。
  • 开源,OpenStack的使用成本相对低廉,还有源源不断的更新(频率为半年)
  • 可扩展性:OpenStack 采用模块化的设计,支持主流发行版本的linux系统,可以通过横向扩展,增加节点、添加资源。

Openstack 项目采用 Apache2 许可, 意味着第三方厂家可以重新发布源代码。行业标准: 众多 IT 领军企业都加入到 OpenStack 项目, 意味着 OpenStack 在未来可能形成云计算行业标准。

1.3 OpenStack 节点类型
1.3.1 控制节点
  • 顾名思义就是OpenStack中实现数据中心控制的节点,管理 OpenStack的所有服务组件,所有组件不管在哪里,都需要在控制节点上完成类似注册的工作

  • 控制节点必须安装三种类型的软件

    • 第一种

      控制接节点上必须安装的是一些相对于 Openstack服务来说的底层的软件,这些底层的软件需要为openstock组件来提供服务,这些软件有DB软件,消息队列软件, Memorycache(高速缓冲存储器)和Etcd(key-value键值对数据库)等

    • 第二种

      除了底层软件之外,控制节点上必须安装三个 OpenStack的核心组件

      Keystone和glance是完整的安装在控制节点上的,Nova安装了一部分,Nova的安装是为了节点上的计算服务

      Glance服务是可以控制节点上剥离的,一般 Glance占用资源小。一般大家都安装在控制节点上的

      控制节点是可以安装 Nova computed的,但是生产环境是不会这么干的

    • 第三种

      除了底层服务软件和核心组件之外,OpenStack还支持其他可选的组件,比如你的集群中有存储接口,那么在 OpenStack上需要安装管理存储节点和对应的服务组件等等,类似核心组件Nova的套路

  • 控制节点包括以下三种服务

  • ① 管理支持服务

    • 管理支持服务包含MySQL和Qpid两个服务

      ① MySQL:数据库作为基础/扩展服务产生的数据存放的地方

      ② Qpid:消息代理(也称消息中间件)为其他各种服务之间提供了统一的消息通信服务

  • ② 基础管理服务

    • 基础管理服务包含以下五个服务

      ① keystone:认证管理服务,提供了其余所有组件的认证信息/令牌的管理,创建,修改等等,使用MySQL作为统一的数据库

      ② glance:镜像管理服务,提供了对虚拟机部署的时候所能提供的镜像的管理,包含镜像的导入,格式,以及制作相应的模板

      ③ Nova:计算管理服务,提供了对计算节点的Nova的管理,使用Nova-API进行通信

      ④ Neutron:网络管理服务,提供了对网络节点的网络拓扑管理,同时提供Neutron在Horizon的管理面板

      ⑤ Horizon:控制台服务,提供了以Web的形式对所有节点的所有服务的管理,通常把该服务称为DashBoard

  • ③ 扩展管理服务

    • 扩展管理服务包含以下五个服务

      ① Cinder:提供管理存储节点的Cinder相关,同时提供Cinder在Horizon中的管理面板

      ② Swift:提供管理存储节点的Swift相关,同时提供Swift在Horizon中的管理面板

      ③ Trove:提供管理数据库节点的Trove相关,同时提供Trove在Horizon中的管理面板

      ④ Heat:提供了基于模板来实现云环境中资源的初始化,依赖关系处理,部署等基本操作,也可以解决自动收缩,负载均衡等高级特性。

      ⑤Centimeter:提供对物理资源以及虚拟资源的监控,并记录这些数据,对该数据进行分析,在一定条件下触发相应动作

控制节点一般来说只需要一个网络端口用于通信/管理各个节点

1.3.2 网络节点
  • 网络节点只有Neutron组件,网络节点上的neutron安装core plugin(核心插件)ML2 和service plugin(服务插件)L3 service,具体的 Service Plugin可以根据需求选择
  • 网络节点包含以下三个网络端口
    • eth0:用于与控制节点进行通信
    • eth1:用于与除了控制节点之外的计算/存储节点之间的通信
    • eth2:用于外部的虚拟机与相应网络之间的通信
1.3.3 计算节点
  • 计算节点包含以下三个服务

    • 基础服务

      ① Nova:提供虚拟机的创建,运行,迁移,快照等各种围绕虚拟机的服务,并提供API与控制节点对接,由控制节点下发任务

      ② Neutron:提供计算节点与网络节点之间的通信服务

    • 扩展服务

      ③ Telmeter:提供计算节点的监控代理,将虚拟机的情况反馈给控制节点,是Centimeter的代理服务

  • 计算机节点包含最少两个网络端口

    • eth0:与控制节点进行通信,受控制节点统一调配
    • eth1:与网络节点,存储节点进行通信
1.3.4 存储节点
  • 安装存储组件的节点,一般包含以下两种服务
    • Cinder:块存储服务,提供相应的块存储,简单来说,就是虚拟出一块磁盘,可以挂载到相应的虚拟机之上,不受文件系统等因素影响,对虚拟机来说,这个操作就像是新加了一块硬盘,可以完成对磁盘的任何操作,包括挂载,卸载,格式化,转换文件系统等等操作,大多应用于虚拟机空间不足的情况下的空间扩容等等
    • Swift:对象存储服务,提供相应的对象存储,简单来说,就是虚拟出一块磁盘空间,可以在这个空间当中存放文件,也仅仅只能存放文件,不能进行格式化,转换文件系统,大多应用于云磁盘/文件
  • 存储节点包含最少两个网络接口
    • eth0:与控制节点进行通信,接收控制节点任务,受控制节点统一调配
    • eth1:与计算/网络节点进行通信,完成控制节点下发的个人任务
1.4 OpenStack架构
  • OpenStack由多种服务组成,每种服务具有独立的命名。在整个OpenStack架构中, Keystone提供认证服务,接收来自用户和服务的认证请求,并对其身份进行认证。
    各个服务之间通过公用的API接口进行交互。大部分服务均包含一个API进程,用于侦听API请求,根据服务的性质选择处理请求或转发请求。服务进程之间的通讯通过消息队列实现,如AMQP。

  • 在部署完成的云系统平台上,用户通过 Dashboard或 RestaRt方式在经 Keystone模块认证授权后,可以执行创建虚拟机服务。通过Nova模块创建虚拟机实例,Nova调用 Glance模块提供的镜像服务,然后调用 Neutron模块提供网络服务。根据需要可以选择给虚拟机増加存储卷,卷功能由 Cinder模块提供服务。整个过程在Ceilometer模块的资源监控下完成。同时 Cinder提供的 Volume和 Glance提供的镜像可以诵讨 Swift对象存储机制讲行保存
    在这里插入图片描述

  • 通过以上解析可以看到 OpenStack 云平台服务的提供主要是依靠 Nova、Glance、Cinder 和 Neutron 四个核心模块完成的,四个辅助模块 Horizen、Ceilometer、Keystone、Swift 提供的访问、监控、权限和对象存储功能。

  • openstack架构(清晰版)
    在这里插入图片描述

  • 名词解释

在这里插入图片描述

1.4 OpenStack核心项目
  • OpenStack常见的8个核心项目/服务
    在这里插入图片描述

三、 重点组件介绍

3.1 各组件关系图

在这里插入图片描述

  • openstack由多种服务组成,每种服务具有独立的命令。在整个openstack架构中,keystone提供认证服务,接收来自用户和服务的认证请求,并对其身份进行认证。

  • 各个服务之间通过公用的API接口进行交互。

  • 大部分服务均包含一个API进程,用于监听API请求,根据服务的性质选择处理请求或者转发请求。

  • 服务进程之间的通讯通过消息队列服务实现,如AMQP

    AMQP:高级消息队列协议,RabbitMQ就是对AMQP的实现

  • 在部署完成的云系统平台上,用户通过Dashboard或RestAPI(用于前后端交互)方式在经Keystone模块认证授权后,可以执行创建虚拟机服务。

  • 通过nova模块创建虚拟机实例,nova调用glance模块提供的镜像服务,然后调用neutron模块提供网络服务。

  • 根据需要可以选择给虚拟机增加存储卷,卷功能由cinder模块提供服务(也可使用ceph 分布式存储提供服务)。

  • 整个过程在ceilometer模块的资源监控下完成。同时cidnder提供的volume和glance提供的镜像可以通过swift对象存储机制进行保存

  • 数据传输就是依靠消息队列

3.1.1 四个核心组件,四个辅助组件
  • 核心组件

    Nova:计算项目于

    glance:镜像服务

    cinder:块存储服务

    neutron:网络服务

  • 辅助模块

    horizen:基于web的管理界面(控制面板)

    ceilometer:计量

    keystone:认证服务

    swift:对象存储

简单的说,openstack Ironic就是一个进行逻辑部署安装的项目

裸机:没有配置操作系的计算机

从裸机到应用还需要进行以下操作

1、硬盘RAID、分区、格式化

2、安装操作系统、驱动程序

3、安装应用程序

Ironic实现的功能,就是可以很方便的指定一台或多台裸机,执行以上的一系列操作,例如部署大数据群集需要同部署多台物理机,就可以使用Ironic来实现

Ironic可以实现硬件基础设施资源的快速交付

3.2 KeyStone认证服务

keystone为所有openstack组件提供认证和访问策略访问,它依赖自身REST(基于idntity API)系统进行工作,主要对(但不限于)Swift(对象存储)、Glance(镜像服务)、Nova(计算服务)等进行认证与授权。实际上,授权通过对动作消息来源者请求的合法性进行鉴定,以下为身份认证服务流程:

PS:先介绍一下idntitiy server功能

  • 身份认证 :令牌的发访和校验

  • 用户授权:授权用户在一个服务中所拥有的权限

  • 用户管理

  • 服务目录:包含可用服务的API point

  • Keystone认证服务中的概念

User(用户):一个People or System or Service 在OpenStack中的数字表示。用于身份认证,也能够通过为登录到Openstack的用户分配令牌环,以此获得访问资源的权限,同一个用户可以背关联到给若干个租户,就像用户可以隶属若干个不同的组。

用户通过认证信息,如密码、API keys等进行验证

Tenant(租户):一个资源或对象的抽象表示,租户可以包含多个用户,不同租户之间相互隔离,根据service运行的需求,租户可以映射为账户、组织、项目或服务

项目(project):是各个服务中的一些可以访问的资源集合,用来分组或隔离资源或身份对象。

不同服务中,项目所涉及的资源也不同。在nova服务中项目可以是云主机,在swift和glance中项目可以是镜像存储,在neutron中项目可以是网络资源。

默认情况下,用户总是被绑定到项目中。

一个项目中可以有多个用户,一个用户可以数据一个或多个项目

Role(角色):可定制化的包含有特定用户权限的权限集合,这些资源包含虚拟机、镜像、存储资源等。同时可以关联到若干个User-Tenant对,来为User-Tenant对赋予权限。

用户既可以被添加到全局的角色,也可以被添加到指定项目内的角色中。

其区别是,全局的角色适用于所有项目中的资源权限,而项目内的角色只适用于某个项目内的资源权限

Token(令牌):用于限定User-Tenant对进行OpenStack API和资源访问的字符串表示。一个令牌会持续一段时间有效,也可以随时撤销。

在keystone中主要是引入令牌机制来保护用户对资源的访问

Credentials(凭证):用于确认用户身份的数据,例如:Username/Password

Authentication(校验):是确定用户身份的过程。

Service(服务):OpenStack service,即OpenStack运行的组件服务

Keystone Client(keystone cli):keystone的命令行工具,可以完成诸如创建用户、角色、服务和端点等大多数得leystone管理功能,是非常常用得CLI接口。

Endpoint(端点):一个可以通过网络来访问和定位某个OpenStack service得地址,通常是一个URL。简单得说,就是入口。

在keystone中包含一个端点模板,这个模板提供了所有已存在的服务的端点信息。

一个端点模板包含一个URL列表,列表中的每个URL都对应一个服务实例的访问地址,并且具有public、private和admin这三种权限。

其中,public类型的端点可以被全局访问,private类型的端点只能被openstack内部服务访问,admin类型的端点只能被管理员访问。

openstack身份认证服务将管理认证、授权以及服务目录整合为一个访问点,同时也是用户需要和openstack’进行交互的第一个服务。

一旦认证通过,终端用户使用其身份访问openstack其他服务。

同样的,其他服务也将利用身份认证服务确认来访者身份是否合法,以及是否具备相应的权限。

此外,openstack身份认证服务可以集成其他的身份认证管理系统,如LDAP等

身份认证服务为其他openstack服务提供验证和授权服务,为所有服务提供终端目录。

此外,提供用户信息但是不在openstack项目中的服务(如LDAP服务)可被整合进先前存在的基础设施中。

为了从身份认证服务中获益,其他的openstack服务需要身份认证服务合作完成某个任务。

当某个openstack服务收到来自用户的请求时,该服务发送请求道身份认证服务,以验证用户是否有相应的权限。

keystone是openstack框架中负责管理身份验证、服务规划和服务令牌功能的模块。

用户访问资源需要验证用户的身份与权限,服务执行操作也需要进行权限检测,这些都需要通过keystone来处理。

keystone类似一个服务总线,或者说是整个openstack框架的注册表,其他服务通过keystone来注册其服务的endpoint,任何服务之间的相互调用,需要经过keystone的身份验证,并获得目标服务的endoint,从而找到目标服务。

3.2.1 keystone工作流程图

在这里插入图片描述

  • ① 用户/API 想创建一个实例,首先会将自己的credentials(资格证书)发给keystone。认证成功后,keystone会颁给用户/API一个临时的令牌(Token)和一个访问服务的Endpoint。 PS:Token没有永久的
  • ② 用户/API 把临时Token提交给keystone,keystone并返回一个Tenant(Project)
  • ③ 用户/API 向keystone发送带有特定租户的凭证,告诉keystone用户/API在哪个项目中,keystone收到请求后,会发送一个项目的token到用户/API PS:第一个Token是来验证用户/API是否有权限与keystone通信,第二个Token是来验证用户/API是否有权限访问我keystone的其它服务。用户/API 拿着token和Endpoint找到可访问服务
  • ④ 服务向keystone进行认证,Token是否合法,它允许访问使用该服务(判断用户/API中role权限)?
  • ⑤ keystone向服务提供额外的信息。用户/API是允许方法服务,这个Token匹配请求,这个Token是用户/API的
  • ⑥ 服务执行用户/API发起的请求,创建实例
  • ⑦ 服务会将状态报告给用户/API。最后返回结果,实例已经创建
3.3 控制台 Dashboard (horizon项目)
  • Dashboard (项目名horizon) 是一个web接口,让云平台管理员以及用户可以管理不同的OpenStack资源和服务
  • Dashboard通过 Apache的mod_uwgis搭建,并通过python模块实现和不同openstack API进行交互,从而实现管理目的
  • Dashboard是一个用以管理、控制OpenStack 服务的web控制面板,通过它可以实现绝大多数OpenStack的管理任务,如实例、镜像、密钥对、卷等。
  • 通过Dashboard,管理员无需记忆繁琐复杂的OpenStack命令,除此意外,用户还可以在控制面版中使用终端或者VNC(虚拟网络控制台) 直接访问实例控制台,Dashboard可以实现以下管理任务:
    • 实例管理:创建、删除实例,查看终端日志,远程连接实例,管理卷等:
    • 访问与安全管理:创建安全组,管理密匙对,设置浮动IP地址等
    • 偏好设定:对虚拟硬件模板可以进行不同程度的偏好设定
    • 镜像管理:导入、编辑或删除镜像;
    • 用户管理:创建用户、管理用户、设置配额、查看服务目录等:
    • 卷管理:管理卷和快照:
    • 对象存储处理:创建、删除容器和对象。
3.4 镜像模块Glance (image镜像服务)
  • 镜像服务允许用户去发现、注册和获取虚拟机镜像。他提供了一个rest api(交互接口),允许查询虚拟机镜像的元数据,并获取一个现存的镜像。
  • 可以将虚拟机镜像存放到各种位置,从简单的文件系统到对象存储系统,如openstack的swift对象存储服务项目,默认是存储在本地文件系统上的。
  • 其实在生产环境中这个模块本身不会存储大量的数据,需要挂载后台存储swift来存放实际的镜像数据。
  • 在openstack环境中,镜像是用于在计算节点生成虚拟机。脱离了镜像服务,就无法创建虚拟机,所以镜像服务是openstack的一个核心服务

PS 元数据:又称中介数据、中继数据,为描述数据的数据,主要描述数据属性的信息,用来支持如指示存储位置、例是数据、资料查找、文件记录等功能。

3.4.1 glance中的主要组件

image因为较小,所以是存放在控制节点上的

glance镜像服务项目主要设计一下组件

  • glance-api
    • glance-api 用于接收镜像API的调用,诸如镜像发现、恢复及存储等,作为一个后台进程,glance-api对外提供rest api接口,响应用户发起的镜像查询,获取和存储的调用
  • glance-registry
    • glance-registry用于存储、处理和恢复镜像的元数据,元数据包括镜像的大小和类型等属性,registry是一个内部服务接口,不建议暴露给普通用户
  • database
    • database用于存放镜像的元数据,可以根据需要选择数据库,如MySQL、SQLite等
  • storage repository for image files
    • 一般情况下,glance并不需要存储任何镜像,而实将镜像存储在后端仓库中,glance支持多种repository,主要包括对象存储Swift、块存储Cinder、VMware的ESX/ESXi 或者vCenter、亚马逊的S3、HTTP可用服务器、Ceph等
3.4.3 镜像格式
  • Glance支持多种镜像格式,包括磁盘格式和容器格式。OpenStack中可用支持多种虚拟化的技术,如KVM,Xen Server、Hyper-V和VMware 等,用户在上传镜像时,需要指定上传镜像文件的格式。除了磁盘格式,在Glance中还有容器的格式。一般在上传镜像时只需要指定容器格式为bare,即为空。因为Glance中并没有真正使用到容器格式,容器格式用来表示虚拟机镜像文件是否包含了元数据,例如OVF格式,一下为glance中常用的几种镜像文件格式

  • RAW

    • RAW是一种没有格式或裸格式的磁盘文件类型,RAW对数据不做任何修饰和处理,直接保存最原始的状态,所以在性能方面非常出色。由于RAW格式保存原始数据,因此更容易和其他镜像格式进行转换
  • QCOW2

    • QCOW2时QCOW的升级版本,其主要特性是磁盘文件大小可以动态按需增长,并且不会占用所有的实际磁盘空间大小,例如创建了100GB的QCOW2格式的磁盘,而实际只保存了2GB的数据,那么将只占用了实际物理磁盘的2G空间,与RAW相比,使用这种格式可以节省磁盘容量
  • VHD

    • VHD是微软公司产品使用的磁盘格式。Virtual PC (微软早期虚拟化产品)和Hyper-V使用的就是VHD格式 VirtualBox也提供了对VHD的支持。如需OpenStack上使用Hyper-V类型的虚拟化,就应上传VHD格式的镜像文件
  • VMDK

    • VMDK是VMware公司产品使用的磁盘格式,目前也是一个开放的通用格式,除了VMware自家产品外,QEM和Vitualbox也提供了对VMDK格式的支持
  • VDI

    • VDI是Oracle公司的 VirtualBox虚拟软件所使用的格式
  • ISO

    • ISO是指一种存档数据文件在光盘上的格式。
  • AKI,ARI,AMI

    • Amazon公司的AWS所使用的镜像格式。
  • 小结

    传输iso镜像时,不要在web界面传,在后台的控制节点传

    登录控制节点,然后在传

    用命令传

    镜像导入 /opt下

    然后用命令传到glance

    不同的虚拟化产品能导出不同格式的镜像,可以通过glance再把这些镜像导到

    openstack上

    glance 默认file存储在系统中的

    生产环境,一般用的数据比较大,存储在指定的Swift对象存储

3.5 计算模块nova
3.5.1 nova组件简介

nova是负责提供计算资源的模块,也是openstack中的核心模块,其主要功能是负责虚拟机实例的生命周期管理、网络管理、存储卷管理、用户管理以及其他相关云平台管理功能

openstack使用计算服务赖托管和管理云计算系统

openstack计算服务是基础设施服务(Iaas)的主要组成部分,模块由python实现

nova起到了承上启下的作用

openstack计算组件请求openstack identity服务进行认证,请求openstack image服务提供磁盘镜像,为openstack dashboard 提供用户和管理员接口。

磁盘镜像访问限制在项目与用户上,配额以每个项目进行设定,例如:每个项目下可以创建多少实例

openstack组件可以在标准硬件上向大规模扩展,并且下载磁盘镜像启动虚拟机实例

3.5.2 openstack-nova服务的主要组件
  • nova-api服务(接口)

    接收和响应来终端用户的计算api请求,对外提供一个与云基础设施交互的接口,也是外部可用于管理基础设施的唯一组件

    此服务支持openstack计算服务API、Amazon EC2(一种web服务) API 以及特殊的管理API,用于接收用户管理操作请求

    管理使用EC2 API通过web services 调用实现,然后API server通过详细队列(message queue)轮流与云基础设施线管的组件通信

  • nova-api-metadata服务

    接收来自虚拟机发出的元数据请求。nova-api-meadata服务一般装在nova-network服务的多主机模式下使用

  • nova-compute服务

    一个持续工作的守护进程, 通过hypervisor的api来创建和销毁虚拟机实例,是一个work进程

    • XenServer/XCP 的XenAPI
    • KVM或QEMU的libvirt
    • VMware的VMwareAPI

    这个过程通常比较复杂,守护进程同意了来自队列的动作请求,转换为一些列的系统命令,如启动一个KVM实例, 然后到数据库中更新他们的状态

  • nova-conductor模块

    nova-condutor模块作用与nova-compute服务与数据库之间,避免了由nova-compute服务对云数据库的直接访问,它可以横向扩展,但是不能将他部署运行在nova-compute服务的主机节点上

  • nova-scheduler服务(调度器)

    接收到一个来自消息队列的创建虚拟机实例请求时,根据配置从计算节点集群中选取最优节点,并将请求转发到该节点;

    最终将虚拟机部署创建在该节点上

    nova-scheduler负责nova主机选择、提供决策功能

    在control下的nova.conf中配置

    • scheduler_dufault_filter 默认的过滤器
    • scheduler_available_filter 可用的过滤器

    nova需要装在两个节点上,即控制节点于计算节点

    启动时开启顺序:控制节点—网络节点—计算节点

    可以动态查看日志消息,来查看服务是否开启:

systemctl restart ceph-mgr.target
systemctl restart ceph-mon.target			mon 监控
systemctl restart ceph-osd.target			osd 分布式存储
  • cpu_allocation_ratio 最高建议设置在6
  • 此处为比例,1:6
  • VNC远程功能模块
3.6 块存储 Cinder
  • 块存储服务(Cinder)提供块存储功能

  • 存储的分配和消耗是由存储驱动器或者多后端配置的驱动决定的,常用的驱动有:

    NAS/SAN

    NFS\ISCSI

    CEPH

  • 其中,ceph在生产环境中使用较多

  • 块存储适合性能敏感性业务场景,例如数据库存储大规模可扩展的文件系统或服务器需要访问到块级的裸设备存储

  • 典型情况下,块服务API和调度器服务运行在控制节点上,取决于使用的驱动。卷服务器可以运行在控制节点、计算节点或单独的存储节点上

  • 块存储服务为openstack中实例提供持久的存储,块存储提供一个基础设施,用于管理卷以及和openstack计算服务交互,为实现提供卷、快照、卷类型等功能。

  • 以实例的角度看,挂载的每个卷都是一块独立的硬盘

  • Cinder提供了从创建卷到删除卷整个生命周期的管理

3.6.1 Cinder块具体功能
  • ① 提供REST API接口,使租户可以查询、管理卷、卷快照及卷类型
  • ② 协调卷的创建请求,合理优化存储资源的分配
  • ③ 通过驱动架构支持多种后端存储方式,包括LVM,NFS,ceph和其他诸如MEC、IBM等商业存储产品和方案
3.6.2 Cinder服务设计到的组件
  • ① Cinder-api
    • Cinder-api用来接收api请求,并将其路由到Cinder-volume执行
  • ② Cinder-Volume
    • Cinder-Volume用来与块存储服务和Cinder-Scheduler进程进行直接交互,它也可以与这些进程通过一个消息队列进行交互。Cinder-Volume服务响应送到块存储服务的读写请求来维持状态,它可以和多种存储提供者在驱动架构下进行交互,当用户请求一个存储资源时,由Cinder-API负责接收请求,Cinder-Scheduler负责调度资源,而真正执行存储任务的是Cinder-Volume
  • ③ Cinder-Scheduler
    • Cinder-Scheduler调度进程会选择最优存储节点来创建卷,其工作机制与Nova-Scheduler类似,当需要创建卷时,Cinder-Scheduler根据存储节点的资源使用情况选择一个最合适的节点来创建卷
  • ④ Cinder-Backup守护进程
    • Cinder-Backup服务提供任何种类备份卷到一个备份存储提供者。就像Cinder-vilume服务,它与多种存储提供者在驱动架构下进行交互
  • ⑤ 消息队列
    • 消息队列的作用是在块存储的进程之间的路由信息。cinder各个子服务器通过消息队列实现进程间通信和相互协作。
    • 以创建卷为例,Cinder的工作流程如下
    • ① 用于向Cinder-API发出创建卷请求
    • ② Cinder-API对请求做一些必要处理后,向消息队列发出一条信息:“让Cinder-Scheduler创建一个卷
    • ③ Cinder-Scheduler从消息队列获取到消息,然后执行调度算法,从若干存储节点中选出节点A
    • ④ Cinder-Scheduler向消息队列发出一条消息:让存储节点A创建一个卷
    • ⑤ 存储节点A的 Cinder-Volume从消息队列中获取到这个消息,然后通过卷提供者的驱动创建卷
3.7 网络模块Neutron
3.7.1 概述
  • OpenStack早期的模块是Nova-Network,而Neutron则是Nova-Network的更新换代的产品,也是目前OpenStack重要组件之一,以下为网络基本概念
  • 网络
    • 类似于实际的物理环境中的网络,OpenStack网络用于连接云主机或路由器。除此之外,还包含子网、网关以及DHCP服务等。OpenStack网络分为内部网络和外部网络,内部网络一般用于连接虚拟机,而外部网络一般用于连接宿主机外面的网络。
  • 子网
    • OpenStack中的子网是一个IP地址段,用于定义实际的IP地址范围。
  • 端口
    • 端口类似于实际网络中的网络接口,用于连接终端设备或另外一个网络。不同的是, OpenStack中端口连接的一般都是虚拟设备接口,如虚拟机的虚拟网卡或者路由器的虚拟接口等。端口还描述了相关的网络配置,例如可以在端口上配置MAC地址和IP地址。
  • 路由器
    • 路由器用于连接 OpenStack的内部网络和外部网络。类似实际路由器功能,支NAT功能,通过绑定浮动IP地址还可以实现地址映射
    • Neutron分别提供了二层(L2)交换和三层(L3)路由抽象的功能,对应于物理网络环境中的交换机和路由器
3.7.2 Linux虚拟网络
  • Neutron中最核心的工作就是对网络的抽象与管理。在OpenStack环境中对网络的抽象主要有以下几种形式

  • ① 虚拟交换机/网桥

    • OpenStack网络中,对于二层交换机有两种抽象方式,一种是通过linux bridge实现;另一种是通过OpenvSwitch实现。在一些早期OpenStack版本中,默认使用的是OpenvSwitch,在O版中,多节点手动安装默认使用的是Linux bridge。从功能上来说OpenvSwitch更加强大, 但是Linux bridge实现比较简单。

    • 虚拟交换机/网桥主要可以实现以下功能

      连接虚拟机

      通过vlan功能隔离虚拟网络

      连接虚拟网络到宿主机外部网络

  • ② OpenvSwitch

    • 类似于Linux bridge,OpenvSwitch也可以实现对二层网络的抽象,对虚拟网络提供分布式交换机功能,它支持各种组网类型,功能全面,支持基本的vlan功能,也支持QOS及NetFlow、sFlow标准的管道接口和协议,从而通过这些接口可以实现VM流量监控的任务

    • 运行在云环境中各种相同虚拟化平台上的多个vSwich实现了分布式架构的虚拟交换机。一个物理服务器上的vSwitch可以透明的与其他服务器上的vSwitch连接通信

    • 虚拟路由器

      OpenStack中的虚拟路由器是对网络设备的一种抽象,实现了租户之间的多网络构建以及内部网络和外部网络之间的通信问题,其实现原理与真实路由器一直,根据路由表转发数据包,同时还支持NAT转换以及浮动IP地址设置

    • namespace

      二层网络通过vlan对租户网络进行隔离,而三层网络是通过namespace进行隔离,每个namespace都有自己独立的网络栈,包括路由表、防火墙规则、网络接口等。

      同时,Neutron为每个namespace提供DHCP和路由服务,所以各个租户之间的网络地址允许重叠,因为它们在不同的namespace中进行抽象

在这里插入图片描述

  • DHCP server

    Neutron提供DHCP服务的组件是DHCPagent,默认通过dnsmasq实现DHCP功能

  • 浮动IP地址

    通常情况下,在搭建openstack网络时,会在虚拟路由器启用SNAT功能。

    这将给openstack网络提高安全性和便利性,具体表现如下:

    • 启动nat功能,openstack内部网络被保护起来
    • 虚拟机向外部网络通信时,以地址转化的方式,更容易让外部路由设备寻路,不需要增加额外的回程路由条路

    所以,当网络启动了NAT功能后,在允许虚拟机访问外部网络的同时,也组织了外部网络访问虚拟机的流量,如ssh管理流量。

    但是可以通过目标地址转换的方式实现外部网络访问内部虚拟机。nat地址映射,配置nat地址映射需要在虚拟路由器外部接口配置相应的外部网络地址池,而这些地址池中的地址就是浮动IP地址。所以浮动IP地址是用来解决外部网络访问虚拟机的问题,如果虚拟机不需要外部网络访问也可以不绑定浮动IP地址

3.7.3 组网模型
  • Neutron提供了多种组网模型供不同的租户搭建各种网络拓扑

  • ① local网络

    • local网络模型特点

      ① 不具备vlan特性,不能对二层网络进行隔离

      ② 同一个local网络的虚拟机实例会连接到相同的虚拟交换机上,instance之间可以通信

      ③ 虚拟交换机没有帮的那个任何物理网卡,无法于宿主机之外的网络通信,也就是无法于自身namespace之外的设备通信

    典型的local网络组网模型图如下

    vm1与vm2连接到linuxbridge 1 ,vm3连接到linux bridge 2

    vm1与vm 2因为连接的是同一个bridge,所以可以互相通信,但是不能与vm3进行通信,因为没有任何linux bridge绑定物理网卡,所以任何虚拟机都不能访问外部网络

在这里插入图片描述

  • ② flat网络

    flat组网模型不支持vlan,属于扁平化的网络模型

    linux bridge直接绑定物理网卡并连接虚拟机,每个flat都会独占一个物理网卡

    该物理网卡不能配置IP地址,所有连接到此网络的虚拟机共享一个私有IP网段。

  • flat组网模型适用应用场景一

    • flat网络直接连接虚拟机和外部网络

      如下图所示,linux bridge 1 连接 vm 1和 vm 2,并绑定物理网卡ens37

      linux bridge 2 连接vm 3 ,并绑定物理网卡 ens38

      vm 1和 vm 2 可以直接相互通信,并通过ens37访问外部网络

      vm 3 通过ens 38 访问外部网络
      在这里插入图片描述

  • flat组网模型适用应用场景二

    • flat网络连接路由器和外部网络

      如下图所示,虚拟机连接vlan类型的网络,通过vlan 对租户进行隔离,对外通过虚拟路由器R1连接虚拟交换机4,并通过迅虚拟交换机4的物理网卡实现对外通讯

      通过vlan隔离的租户被限制在虚拟交换机1-3所在的网络,而虚拟机发起的流量经过路由器转发后不携带任何vlan标签到达虚拟交换机4,最后通过物理网卡访问外部网络

      虚拟交换机4所在的网络就可以被设计为flat网络
      在这里插入图片描述

  • flat网络缺点

    ① 存在单一网络瓶颈

    ② 缺乏可伸缩性

    ③ 缺乏合适的多租户隔离

  • ③ vlan网络

    openstack通过vlan网络解决了都租户之间的网络隔离问题,如下图所示

    以下为图解

    linux bridge 1 和linux bridge 2是属于vlan类型的网络,他们分别属于vlan 101和vlan102

    vm 1 和vm 2 连接到bridge 1

    vm 3 连接到 bridge 2

    linux bridge 1 和 linux bridge 2 分别绑定物理网卡ens37的两个子网卡ens37.101 和ens37.102

    vm 1 和 vm 2 发起的流量在经过ens37.101时,被打上vlan101标签

    vm 3 发起的流量在经过ens 37.102时被打上vlan 102标签,这就要求连接ens37的物理交换机相应的接口必须配置为trunk模式

    如果需要其他vlan网络,可以创建物理网卡新的子接口,同时需要绑定新网络

在这里插入图片描述

  • vlan网络的缺点

    ① vlan 的数量限制:4096个vlan数量不能大规模满足云计算数据中心的需求

    ② 物理网络基础设施的限制:基于IP子网的区域划分限制了需要二层网络连通性的应用负载的部署

    ③ TOR交换机mac表耗尽:虚拟化及节点过多的流量导致更多的mac地址表条目

  • ④ vxlan 网络

  • vxlan网络使用的是隧道技术,是目前openstack广泛使用的网络技术

  • 相比之前的vlan模型,vxlan做了以下改进:

    • 租户数量从4K增加到了16M
    • 租户内部通信可以跨越任意IP网络,支持虚拟机任意迁移
    • 一般来说,每个租户逻辑上都有一个网关实例,IP地址可以在租户间进行复用
    • 能够结合SDN技术对流量进行优化

    vxlan网络在传统的IP网络中传输以太网数据帧

  • Vxlan涉及的基本概念

  • VTEP(vxlan tunnel end point )

    vxlan隧道的端点,用于vxlan报文的封装与解封装。类似于IPsecVPN中的加密点。

    传统的以太网帧在发送vtep端将封装新的vxlan、udp、IP以及以太网头部。

    而接收vtep端将数据解封装。vxlan报文中源IP地址为本节点的vtep地址。

    vxlan报文中目的IP地址为对端节点的vtep地址,一堆vtep地址就对应着一个vxlan隧道

  • VNI(vxlan network identifier)

    用来标识一个vxlan段,在vxlan网络中,通过VNI标识一个租户,类似vlan网络中的vlan ID。

    不同vxlan段的虚拟机之间不能直接在二层相互通信。

    vni由24比特组成,支持多达16M的租户

  • 在vxlan网络中心中,虚拟机之间的通信过程如图所示

  • vtep 1 将来自vm 1的数据帧添加vxlan头部,外部UDP和IP首部

  • vtep 1 通过传统的IP网络将数据发送到vtep2

  • vtep接收到vxlan报文时,拆除外部IP、UDP及vxlan首部,然后内部数据包交给正确的终端vm 2

在这里插入图片描述

总结

本篇博客介绍了openstack基础理论(T版、R版),本篇博客会随着版本推进而持续更新。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章