参考资料:

OpenStack入门科普,看这一篇就够啦!:https://zhuanlan.zhihu.com/p/35598437

不懂OpenStack?看这篇就够了!:https://zhuanlan.zhihu.com/p/151323403

为何OpenStack在国内这么受欢迎?:https://zhuanlan.zhihu.com/p/52696122

《OpenStack 实战指南》黄凯 毛伟杰 顾骏杰著

一 OpenStack 概述

OpenStack 是当今最流行的开源云平台管理项目,可以控制整个数据中心计算、存储和网络资源的大型资源池。从它的名字可以看出它大致的含义,Open 顾名思义为开源软件,开放式的设计理念、开放式的开发模式、开放式的社区,Stack 意为堆,可以理解为云计算是靠每一块小瓦砾堆砌而成,也就是说 OpenStack 并不是单独的一个软件,它由多个组件一起协作完成某些具体工作。OpenStack 本身就是一个巨大的开源软件集合,集各种开源软件之大成,是公有云和私有云领域开发的两种旧解决方案的综合。

二 OpenStack 的优劣势

OpenStack 的优势:

  • 快速:OpenStack 安装部署所需要的时间很少,而时间就是价值。
  • 灵活:OpenStack 获得了各大领导厂商的广泛支持,解除了厂商绑定,并且兼容性和适用性极强,具有可扩展性及很好的弹性,可定制化 IaaS,使用起来非常方便可靠。
  • 便宜:作为开源项目,OpenStack 的使用成本相对低廉,还能获得源源不断的更新,因为开源社区在为项目贡献活力。

OpenStack 的劣势:

  • 入手难、学习曲线较高,在对整体把握不足的情况下,很难快速上手。
  • 偏底层,需要根据实际应用场景进行二次开发。
  • 现阶段的厂商支持较弱,商业设备的 OpenStack 驱动相对不够全面。

三 OpenStack 硬件组成

OpenStack 的硬件组成:

  • 控制节点(Controller Node):主要负责对整个云平台所有节点的管理和控制,包括虚拟机创建时节点的选择,网络和存储资源的分配等。里面包含着核心组件有 Keystone、Glance、Swift 等
  • 计算节点(Compute Node):负责对虚拟机的运行提供硬件支持。
  • 网络节点(Network Node):主要负责对网络通信功能的控制管理。包括各节点直接的通信、虚拟机之间的通信以及云平台与外网的通信等。
  • 存储节点:则负责对虚拟机存储资源的管理,通常包括块存储和对象存储。

四 OpenStack 设计原则

OpenStack 的设计原则如下:

  • 可扩展性和伸缩性是设计 OpenStack 的主要目标。
  • 任何影响可扩展性和伸缩性的特性必须是可选的。
  • 一切应该是异步的(如果做不到异步,可参考第二条)。
  • 所有必需的组件必须可水平扩展。
  • 始终使用无共享架构或者分片架构(如果不能实现,可参考第二条)。
  • 一切都是分布式的(尤其应该将业务逻辑与业务状态放在一起)。
  • 接收最终一致性,并在适当条件下使用。
  • 测试一切(需要测试已经提交的代码,如果用户需要,将会帮助用户测试)。

五 OpenStack 的组件

OpenStack 的组件主要包括身份认证(代号 Keystone)、计算(代号 Nova),网络管理(代号 Neutron)、块存储(代号 Cinder)、对象存储(代号 Swift)、镜像服务(代号 Glance)和 UI 服务(代号 Horizon)以及其他多种可选组件。

5.1 OpenStack 组件分类

组件按照服务类型的不同可以分为如下四类:

  • 基础服务:实现 OpenStack 基本功能所需部署的,提供基础功能的组件。

    • Horizon:UI 服务(Dashboard as a Service),web 方式管理云平台,建云主机,分配网络,配安全组,加云盘,用户可以通过它对 OpenStack 状态进行查看和管理。
    • Nova:计算服务(Compute as a Service),负责响应虚拟机创建的请求、调度、销毁云主机,OpenStack 云实例生命期所需的各种动作都将由 Nova 进行处理和支撑,它负责管理整个云的计算资源、网络、授权及测度。
    • Neutron:网络服务(Networking as a Service),实现 SDN(软件定义网络),提供一整套 API,用户可以基于该 API 实现自己定义专属网络,不同厂商可以基于此 API 提供自己的产品实现。
    OpenStack 基础服务OpenStack 组件名称描述
    DashboardHorizon以 web 形式界面提供用户界面与 openstack 各个组件实现交互,例如创建虚拟机,创建虚拟硬盘等等
    ComputeNova负责 openstack 平台上所有计算实例(虚拟机)的生命周期的管理,例如虚拟机的创建,销毁和配置更改等,可以支持多种类型的虚拟化解决方案。
    NetworkingNeutron管理整个 openstack 环境中的虚拟网络,例如创建网络,虚拟路由器,虚拟防火墙等等,是一个纯原生的 SDN 解决方案。
  • 存储服务:顾名思义,就是与数据存储相关的部件。OpenStack 支持多种数据存储方式。包括对象存储、块存储、共享文件等等。

    • Swift:对象存储服务(Object Storage as a Service),REST 风格的接口和扁平的数据组织结构。
    • Cinder:块存储服务(Block Storage as a Service),提供持久化块存储,即为云主机提供附加云盘。
    • Manila:文件共享服务
    OpenStack 存储服务OpenStack 组件名称描述
    Object StorageSwift负责为整个 openstack 平台的计算示例提供对象存储服务,例如实例镜像即可存放于对象存储中。
    Block StorageCinder负责为整个 openstack 平台的计算示例提供块存储服务,即我们通常时候用到的磁盘设备,可以支持 tvm 或者磁阵等多种后端存储类型,可以支持 IPSAN 或着 FCSAN 等不同的存储网络协议。
    Shared FilesystemManila负责为整个 openstack 平台的计算示例提供共享文件系统服务,例如 NFS 等需要多个实例同时访问的分布式存储系统。
  • 共享服务:包括为其他组件提供公共服务的组件。

    • Keystone:认证服务(Identity as a Service),为访问 OpenStack 各组件提供认证和授权功能。
    • Glance:镜像服务(Image as a Service),为云主机安装操作系统提供不同的镜像选择。
    • Ceilometer:计费服务,收集云平台资源使用数据,用来计费性能监控。
    OpenStack 共享服务OpenStack 组件名称描述
    Identity ServiceKeystone为 openstack 平台提供认证和授权服务,openstack 中各个组件的互相访问均需要通过 openstack 授权。
    Image ServiceGlance为 openstack 平台的计算实存储和提供虚拟机镜像,在创建新的虚拟机实例的时候会用到这个服务。
    TelemetryCeilometer为整个 openstack 云平台提供监控,计景,计费,统计等功能。
  • 后台服务:平台需要的服务支撑,对用户是透明的。

    • MariaDB:数据库服务(DataBase as a Service),进行数据持久化
    • RabbitMQ:消息队列服务(Message Queue as a Service),辅助通信
    • Memcached
    OpenStack 后台服务OpenStack 组件名称描述
    SQL DatabaseMariadbOpenstack 整个平台的后台核心数据库,存储所有组件的相关配置以及元数据信息。
    Message QueueRabbitMQOpenstack 使用消息列队来协调各个服务组件之间的操作和状态信息。
    CacheMemcachedOpenstack 使用 Memcached 来为 Keystone 认证服务提供 tokens 的缓存。

5.2 OpenStack 组件共同点

OpenStack 组件项目有如下一些共同点:

  • OpenStack 项目组件由多个子组件组成,子组件有各自的模块。
  • 所有 OpenStack 组件都是用 Python 编写的。
  • 最终用户可以通过 Web 界面(Horizon)、命令行来使用组件服务或直接调用每个组件的 API。
  • 每个组件都通过同一个认证源(Keystone)。
  • 每个项目都有具有优良设计的公共 API,API 基于 RESTful,同时支持 JSON 和 XML,通过公共的 REST API 可以实现各个组件间的交互。
  • 每个项目都可以单独部署,对外提供服务,也可以在一起协同完成某项工作。
  • 每个项目都会选举 PTL(Project Technical Leader)。
  • 每个项目都有单独的开发人员和设计团队。
  • 每个项目都有单独的数据库和隔离的持久层。
  • 每个项目都有各自的后端驱动,所有的驱动都可以以 plugin 方式加载。
  • 每个项目都有各自的 client 项目,如 Nova 有 nova-client 作为其命令行调用 RESTful 的实现。
  • 大部分组件通过 Message Queue 来实现组件内部交互(官方推荐使用 RabbitMQ)。
  • 所有组件都用 DataBase 来存放数据信息(官方推荐使用 MariaDB,MariaDB 为 MySQL 的分支)。
  • OpenStack 的守护进程大多由 WSGI 中间件来实现(Paste),OpenStack 中广泛使用 paste.ini 为其配置文件。

5.3 OpenStack 组件特点

OpenStack 组件特点:

  • 分布式:OpenStack 可以分开部署在多个服务器上,通过网络联通,它是建立在网络之上的软件系统,正是因为这种软件的特性,所以其具有高度的内聚性和透明性。
  • 无状态:当前的请求不依赖于之前请求状态,各个请求都相对独立,可扩展性强。
  • RESTful(Representational State Transfer,具象状态传输风格):是指满足 REST 约束和风格的程序设计,OpenStack 对外接口都是 RESTful 风格。
  • RPC(Remote Procedure Call Protocol,远程过程调用协议):OpenStack 内部通信机制大量使用 RPC,RPC 使得开发包括网络分布式多程序在内的应用程序更加容易。
  • Plugin(插件式设计):把扩展功能从框架中剥离出来,降低了框架的复杂度,让框架更容易实现,扩展功能与框架以―种很松的方式耦合,两者在保持接口不变的情况下,可以独立变化和发布。

六 OpenStack 体系架构

OpenStack 是由一系列具有 RESTful 接口的 Web 服务所实现的,是一系列组件服务集合。它是一个构建云环境的工具集,所有的 OpenStack 组件都可以单独部署,而组件中的模块也可以单独部署。OpenStack 领先的分布式架构,可以让部署人员以类似搭积木的方式,按需求选取所需要的组件,灵活地构建云环境。

OpenStack 项目并不是单一的服务,其含有子组件,子组件内由模块来实现各自的功能。通过消息队列和数据库,各个组件可以相互调用,互相通信。这样的消息传递方式解耦了组件、项目间的依赖关系,所以才能灵活地满足我们实际环境的需要,组合出适合我们的架构。
在这里插入图片描述
在这里插入图片描述

Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐