网络知识 娱乐 OpenStack简述

OpenStack简述

概述

本文是关于OpenStack概念和重点组件的简单介绍,它主要面向的是初级用户。希望能对刚刚接触OpenStack 的小伙伴带来一些帮助。废话不多说,请抓好扶手,现在发车!
在这里插入图片描述
OpenStack最初是由美国云计算公司Rackspace和美国国家航空航天公NASA共同发起的软件开源项目,其中Rackspace贡献了swift对象存储子项目,NASA贡献nova 子项目。当然经过这么多年的发展,OpenStack 已经从最初的两个子项目发展到现在的十多个子项目。因此说,OpenStack不是某一个软件开源项目,而是一系列软件开源项目的组合。并且这些软件开源项目之间是松耦合的关系,可以独立的安装、启动和停止。只有在必要的时候进行通讯。这样做的好处是扩展性比较好,安全性高,不会存在单点故障。缺点就是安装和配置比较复杂。
概述

OpenStack 是基础设施资源的系统管理平台。用户通过它可以以按需易扩展的方式获取它所需的资源。它使我们能够以更集中的方式有效的管理cpu、内存、磁盘等资源。


主要功能组件

下图是一个IaaS管理平台的参考模型,主要功能分成五个不同的层次。这五个不同的层次,从上到下分别是表示层、逻辑控制层和资源管理层同时还有纵向的集成层和管理层。该模型中包含了十六个不同的功能模块。
IaaS参考模型
 资源管理的三个基础的功能模块,分别是计算资源管理模块、存储资源管理模块和网络资源管理模块。
 逻辑控制层包含的管理平台的很多基础功能服务,分别是编排服务调度服务策略、服务镜像注册服务以及日志服务。
 最上层的表示层是跟客户交互的两种不同的功能模块,分别是a p i 模块和u i 模块。
 集成层中包含着两个不同的子模块,分别是计费模块和身份认证模块。
 管理层中也有两个不同的子模块,分别是管理a p i 和monitoring。

OpenStack 作为一个IaaS管理平台,它是怎么实现这个参考模型中所有的这些功能模块的?比如说它的很多子项目是怎么样跟这些功能对应起来的?

1)Horizon - UI服务: 该子项目在OpenStack 中是提供u i 服务的,它对应到这个参考模型中的user dashboard 和customer portal 这两个功能模块。user dashboard 提供给云下的服务,给运维用户用的;custom portal 是给云上用户用的,它的用户主要是a p p 的一些owner。horizon 提供了这两个模块的所有功能。
2)Keystone - 身份服务: 在OpenStack中是负责身份认证的,它对应到这个参考模型中的Identity身份认证模块。
2)Nova - 计算服务: 这个模块本身比较复杂,那么对应到参考模型中的计算api调度服务策略服务和计算管理模块以及部分的管理api,都是由nova 这个子项目提供的。
3)Glance - 镜像服务: 这个子项目提供了镜像注册和镜像api功能。
4)Cinder/Swift - 存储服务: Cinder和swift 是OpenStack 的存储服务子项目,二者分别为OpenStack 提供了块存储和网络对象存储,对应的参考模型中就是存储管理模块volume。
5)Neutron - 网络服务: Neutron网络服务模块对应的参考模型中的网络资源管理模块。
6)Heat - 编排组织服务: 对应的参考模型中的就是编排服务模块。
7)Ceilometer - 监控计量服务: 这个子项目在OpenStack 中负责的是监控和计量服务,对应到参考模型中计量服务模块和monitoring 这两个不同的子模块。


重点组件介绍

     1) Horizon - UI服务

首先看一下horizon,它是OpenStack 的u i 模块,主要负责为OpenStack 用户提供u i 服务,也就是我们通常所说的管理控制台。它负责将用户在管理控制台上的所有操作转换为对于后台a p i 的调用。它的主要用户包含两种,分别是云管理员和普通的云用户这两种不同的用户对u i 的需求是不同的。因此当用户登录进horizon管理控制台之后,不同的用户看到的界面是不同的,其中云关联它主要负责对整个云平台的运营,以及对资源的管理和分配。

horizon

云管理员登录进horizon 之后,它看到的是dashboard 页面,也就是云平台整体运行情况以及不同的资源分配情况。

普通的终端用户来说,它的主要的工作是在自己的配额范围内对资源进行使用和操作,那他登录进horizon 之后,看到的就是customer portal。在这个portal 上它负责对自己的所拥有的资源进行操作和调整,包括VM的启动,停止配置的变更等等。


     2) Keystone - 身份服务

OpenStack 的第二个核心组件Keystone,也就是身份服务模块,它负责OpenStack 中的身份认证和权限控制。可以这样讲:在OpenStack 中,基本上所有的用户操作都需要直接或间接的依赖于Keystone模块,需要通过这个模块进行访问的控制。因此,在OpenStack 中Keystone是一个控制的核心。

keystone 除了对用户的身份进行认证之外,还需要对用户的访问请求进行控制。访问的对就是service,也就是服务。在OpenStack 中所有的组件,比如nova glance、swift 等等,都需要对外暴露成为服务。OpenStack中所有的服务都需要在keystone上进行注册,才能够被keystone进行控制。
在这里插入图片描述

除此之外,还有endpoint概念,一个endpoint其实就是一个服务的访问点,就相当于一个服务的访问地址。所有的用户对OpenStack上的service 进行访问的时候,都需要通过这个访问地址进行访问。那打个比方,那如果说。KeyStone相当于一个中介,service 其实就是中介手上的房源。每一个房屋资源endpoint,就相当于这个房子的一个地址。用户需要从这个房屋中介中拿到这个房屋的地址,才能对这个房屋的资源进行使用。除了地址之外,还有一个比较重要的概念就是token,它是访问资源的令牌,相当于我们现实生活中的钥匙。用户只有拿到钥匙,才能对资源进行访问。不过,这个钥匙具有时效性的,可能在一段时间的有效,过了这一段时间就自动失效了。你需要重新去换取新的钥匙。

keystone 可以为了我们提供哪些服务呢?

首先是身份验证的服务,也就是对用户的身份进行验证。比如说用户输入用户名和密码,或者提供a p i k,这个服务就去验证用户到底是不是一个合法的用户。
第二个服务是token 服务,一旦确认用户是一个合法的用户,那么就会为这个用户颁发令牌,用户通过这个令牌对其它的服务进行访问。在访问这些服务的时候,用户提供硬盘,token 服务还会对这些令牌。进行身份的验证,以确定这个令牌是不是合法的。
第三个服务是注册表的服务,之前讲到每一个OpenStack 的服务都需要在KeyStone上进行注册,这些服务其实就是注册到cat log 这个服务上面。
第四个就是policy 服务,它其实是一个基于规则的身份验证引擎,也就是它决定着每一个用户到底有哪些访问控制的权限。


     3) Nova - 计算服务

nova组件也是OpenStack 的核心服务之一,它的主要功能包括以下三个方面。

1)实例的生命周期管理,包括实例的创建、删除、启动停止等机器实例。说起实例,大家可能首先想到的就是虚拟机。除此之外,实际还包含其它各种不同的形式,比如裸机,或者continue、docker 等,这些都是实例的不同的表现形式。但目前运用的最广泛的依然是虚拟机。
2)计算资源的管理,当计算资源比较充足的时候用户可能需要不了那么多的资源,那么我就可以退还一部分,这也是云计算它的核心思想。
3)对外提供rest 风格的a p i,openstack有时需要把外部各种各样的不同的组件去调用a p i,包括它自身的一些组件,也包括提供给第三方服务的一些。
nova
nova 组件主要由三个不同的功能模块组成,它们分别是nova computer、nova api和nova schedule

nova api位于表示层,它主要负责接收外部的rest 请求。
nova scheduler 位于逻辑控制层,它主要负责居中调停。选择用哪个主机来创建vm。那么如果computer 它就负责虚拟机的创建以及资源分配等等。
nova computer 本身并不提供任何的虚拟化功能,但是它却支持不同的虚拟机形式。这三个功能组件共同完成nova 的主要功能,但是它们之间并不是直接访问的,而是通过消息中间件进行消息的传递。当一个请求发送来的时候,首先发送到nova api上,nova api将这个通知发送到消息中间件,再由消息中间件将这个消息发送到schedule,schedule 作为一个调度的中枢,它主要负责根据不同的算法去选择相应的host。选择好这个host 之后,这个最终的结果会不会发送到消息中间件上面来,再由消息中间件发送给nova computer,由nova computer 去创建,总体的过程就是这样。


     4)Glance - 镜像服务

glance组件是一个相对来说比较简单的组件,其主要功能就是提供虚拟镜像的存储、查询和检索服务。我们通过nova去创建升级的时候,就必须通过glance获取相应的镜像。然后再根据这个镜像去创建虚拟机,glance本身它又是依赖于存储服务和数据库服务的,其中存储服务主要用于存储镜像本身,数据库服务则用于存储跟镜像相关的各种原始数据。
在这里插入图片描述
不管是web请求,还是Command Line的请求,首先都是要发送到表示层的glance api上面,然后通过这个表示层的控件,将这些请求进行解析,然后根据请求相应的信息再到glance religious 群里面去查询相应的信息。

比如说我要一个什么样的操作系统,然后找一个什么样的版本相应的镜像。那么根据这些请求信息,glance strength 到数据库里面进行查询,查询到的结果是一个存储的位置,拿到这个位置之后,我们就可以到相应的存储服务里面去获取相应的镜像了。


     5)Swift - 对象存储服务

接下来我们来看一下第五个核心组件swift ,它也是对象存储服务组件。和nova 一样,swift 也是OpenStack 最早开发的两个基础核心服务之一。它的主要功能是对外提供高可用的分布式对象存储服务,主要特点是无限可扩展,并且没有单点故障。即:使用switch 的时候,你不必担心你存储的对象会意外丢失。因为它本身就提供的高可用的功能,而任何一点发生问题的时候,不会影响对象的存储,因为它还有其它的备份。

任何的对象都可以被描述成为某一个账户下面的某一个container,也就是容器。里面的某一个对象,只要采取相应的方式进行描述,就可以存储到swift 在里面。它可以通过不同的接口进行调用,包括https、objectApi和s3接口存取。
在这里插入图片描述

上图就是它的一个主要的原理图,它的所有的请求都是通过proxy 进行处理的。通过这个proxy到合适的account下面去找相应的containe中的某一个object 进行存取服务。同时,它会针对不同的object 进行动态的复制,那么从而保证当某一个对象的信息丢失的时候,能够从其它的地方找回来,这个就是分布式高可用的对象存储物。


     6)Cinder - 块存储服务

跟swift对象存储服务相对的,Cinder是块存储服务组件,它的主要功能是管理所有的块存储设备。

在存储服务对象方面,存储服务主要是存取分布式的对象,意味着你从任何的地方都可以发起请求去存储你的对象。
在这里插入图片描述

相应的,块存储服务它是本地的,它只能挂靠在VM上面进行使用。当一个请求发来的时候,首先还是发送到Cinder本身的api上面。这个api模块负责对发送来的请求进行处理,处理后的结果并不直接发送给standard 的其它组件,而是要通过消息中间件进行传递。通过消息中间件,所有的请求首先被发送到cinder-schedule上面,也就是说Cinder本身的调度器,通过调度器再决定到哪里去申请块存储服务,并且要创建一个vm挂靠在这个vm上面。

对Cinder的具体的存储模块进行管理都是通过生产volume 这个组件来进行生命周期的管理的,它可以对各种各样不同的跨存储设备进行处理,包括创建、删除啊等等各种操作。


     7)Neutron - 网络服务

Neutron网络服务组件,它的主要功能是为云计算环境提供虚拟网络功能。它为每个不同的租户建立独立的网络环境,这一点在多租户环境下非常重要。
在这里插入图片描述

Neutron提供三种不同的网络模式,分别是Flat模式、Flat DHCP模式和VLAN模式。其中前两种就是比较典型的网桥模式。那么所不同的是flat 模式,基本上所有的配置都需要手工去配置。Flat DHCP模式在网关处都起了一个DHCP进程,可以辅助用户进行网络配置。VLAN模式只为每一个不同的租户分别设置了不同的虚拟子网,在这个虚拟子网中,用户可以有自己的私有的IP。用户需要的时候,可以在所有的IP中进行选择,分配给不同的虚拟器。


组件之间的关系与交互

     1) 组件关系

以上介绍了OpenStack的几个重要的核心组件。接下来我们来看一下这些核心组件之间的关系是怎么样的,以及组件之间是如何通信交互的。

首先看一下Horizon 这个面板组件,因为这个面板组件是一个非常重要的表示层组件,基本上所有的用户都会通过horizon发送到其它的模块。因此这个面板组件它跟其它各种各样的模块都发生关联。除此之外就是keystone这个模块,这个模块是一个集成层的模块。因此,它也跟各种各样的组件都会发生关联,基本上所有的其它的组件都需要通过keystone这个认证组件进行认证。如果认证不通过,基本上所有的任务都不会得到应答。

在这里插入图片描述

其它各种核心组件,包括计算组件、镜像服务组件、对象存储组件、跨存储组件和网络组件,这些组件它都是围绕着虚拟机这个载体来进行的。包括我们所有的计算资源,也都是通过虚拟机来体现的。网络也都是为虚拟机提供网络连接的那么块存储服务,它主要是为虚拟机提供卷。对象存储服务它不会直接跟续集发生关联。但是镜像组件是给虚拟机发生关联的,它为虚拟机提供镜像,而镜像服务组件又会依赖于对象存储组件。因此所有的这些组件通过这些不同的关联关系有机地形成了一个整体。