初步了解 OpenStack 云计算开源框架

参考资料:

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 组件名称 描述
    Dashboard Horizon 以 web 形式界面提供用户界面与 openstack 各个组件实现交互,例如创建虚拟机,创建虚拟硬盘等等
    Compute Nova 负责 openstack 平台上所有计算实例(虚拟机)的生命周期的管理,例如虚拟机的创建,销毁和配置更改等,可以支持多种类型的虚拟化解决方案。
    Networking Neutron 管理整个 openstack 环境中的虚拟网络,例如创建网络,虚拟路由器,虚拟防火墙等等,是一个纯原生的 SDN 解决方案。
  • 存储服务:顾名思义,就是与数据存储相关的部件。OpenStack 支持多种数据存储方式。包括对象存储、块存储、共享文件等等。

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

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

    • MariaDB:数据库服务(DataBase as a Service),进行数据持久化
    • RabbitMQ:消息队列服务(Message Queue as a Service),辅助通信
    • Memcached
    OpenStack 后台服务 OpenStack 组件名称 描述
    SQL Database Mariadb Openstack 整个平台的后台核心数据库,存储所有组件的相关配置以及元数据信息。
    Message Queue RabbitMQ Openstack 使用消息列队来协调各个服务组件之间的操作和状态信息。
    Cache Memcached Openstack 使用 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 项目并不是单一的服务,其含有子组件,子组件内由模块来实现各自的功能。通过消息队列和数据库,各个组件可以相互调用,互相通信。这样的消息传递方式解耦了组件、项目间的依赖关系,所以才能灵活地满足我们实际环境的需要,组合出适合我们的架构。
在这里插入图片描述
在这里插入图片描述