openstack架构简介J版(2017/3/21更新)

title : OPENSTACK架构简介

本人是Openstack的菜鸟,这篇文章算是学习笔记吧,读到比较好的博客都会记录在上面,对Openstack了解较浅。文章组成,翻译官方文档,参考众多博客,搬运部分博客,参考《Openstack设计与实现》。Openstack的基础服务基本更完,后面的可选择服务等了解更深后在更。

openstack的发展及历史

openstack是什么?

OpenStack是一个美国国家航空航天局和Rackspace合作研发的云端运算‎软件,以Apache许可证授权,并且是一个自由软件和开放源代码项目。
通俗点来讲,openstack就是一个用python编写的linux软件,openstack是一个开源云平台

openstack能干嘛?

openstack最基础的功能就是产生云主机(vm虚拟机),用这些虚拟机可以做你想做的很多事。例如产生一台windows虚拟机,你可以用它写word文档、上网、qq聊天……它在功能上与物理机几乎没有差别(桌面云);你也可以用它来作为服务器使用,在他上面搭建站点什么的(服务器)

openstack的优点

类似vmware workstation这样的软件不也可以产生虚拟机吗,干嘛搞得这么麻烦。

1.vmware workstation要收费,费用并不低;而且相当有局限性
2.openstack免费并开源,想怎么搞就怎么搞,拓展性强。

干嘛要产生虚拟机呢,直接用物理机不好吗?

1.通常一台物理机或者一群物理机只能实现一个功能,而安装openstack后这群物理机就可以做好多事,可以实现多种功能
2.物理机维护成本高,资源可调度性差,发生故障后补救较为困难,openstack则在这 三方面解决的比较好
……

openstack的历史(参考http://www.ibm.com/developerworks/cn/cloud/library/cl-openstack-overview/)

OpenStack 是由 Rackspace Cloud 和 NASA 在 2010 年发起的,集成了 NASA 的 Nebula 平台的代码与 Rackspace 的 Cloud Files 平台。第一个核心模块被称为 Compute and Object Storage(计算和对象存储),但更常见的是它们的项目名称,即 Nova 和 Swift。
OpenStack 使用了 YYYY.N 表示法,基于发布的年份以及当时发布的主版本来指定其发布。例如,2011 (Bexar) 的第一次发布的版本号为 2011.1,而下一次发布(Cactus)则被标志为 2011.2。次要版本进一步扩展了点表示法(例如,2011.3.1)。
开发人员经常根据代号来指定发行版本,发行版是按字母顺序排列的。Austin 是第一个主发行版,其次是 Bexar、Cactus 、Diablo、Essex、Folsom、Grizzly、Havana、Icehouse、Jonu、Kilo。这些代号是通过 OpenStack 设计峰会上的民众投票选出的,一般使用峰会地点附近的地理实体名称。具体版本变更情况请点击这里

opnstack模块

服务项目名称说明
DashboardHorizon提供了一个基于web的自服务门户,与OpenStack底层服务交互,诸如启动一个实例,分配IP地址以及配置访问控制。
ComputeNova在OpenStack环境中计算实例的生命周期管理。按需响应包括生成、调度、回收虚拟机等操作。
NetworkingNeutron确保为其它OpenStack服务提供网络连接即服务,比如OpenStack计算。为用户提供API定义网络和使用。基于插件的架构其支持众多的网络提供商和技术。
Object StorageSwift通过一个 RESTful,基于HTTP的应用程序接口存储和任意检索的非结构化数据对象。它拥有高容错机制,基于数据复制和可扩展架构。它的实现并像是一个文件服务器需要挂载目录。在此种方式下,它写入对象和文件到多个硬盘中,以确保数据是在集群内跨服务器的多份复制。
Block StorageCinder为运行实例而提供的持久性块存储。它的可插拔驱动架构的功能有助于创建和管理块存储设备。
IdentityKeystone为其他OpenStack服务提供认证和授权服务,为所有的OpenStack服务提供一个端点目录。
ImageGlance存储和检索虚拟机磁盘镜像,OpenStack计算会在实例部署时使用此服务。
TelemetryCeilometer为OpenStack云的计费、基准、扩展性以及统计等目的提供监测和计量。
OrchestrationHeat既可以使用本地HOT模板格式,亦可使用AWS CloudFormation模板格式,来编排多个综合的云应用,通过OpenStack本地REST API或者是CloudFormation相兼容的队列API。
Data processingTrove提供可扩展和稳定的云数据库即服务的功能,可同时支持关系性和非关系性数据库引擎。

概念架构

服务架构

启动一个虚拟机实例会包含很多服务之间的交互。下图展示了一个普通的OpenStack环境的概念架构。

这里写图片描述

网络架构(三节点网络架构)

这里写图片描述

服务布局

这里写图片描述

项目之间通过RESTful API进行通信,项目内部,不同服务进程之间的通信必须经过消息总线。

openstack各服务及组件之间的功能

Identity service (Keystone)

Keystone服务执行以下功能:

1.跟踪用户及其权限。
2.提供一个目录可用服务的API端点。

keystone 各组件概念:

1.用户:使用OpenStack云服务的用户、系统或者服务,身份服务验证用户提交的请求。用户需要登录,然后可能会分配令牌已访问资源。多用户可以直接分配给特定的租户,并且表现就像他们包含在该租户内。
2.认证信息:确认用户身份的数据。比如用户名和密码,用户名和API键,或者由身份服务提供的认证令牌
3.认证:确认用户身份的过程。OpenStack身份服务通过验证用户提供的认证信息确认请求,当认证信息被验证后,OpenStack认证服务发给用户认证令牌,在后续的请求中用户将使用该令牌。
4.令牌:文本形式的字母-数字字符串,使用该字符串访问OpenStack的API和资源。令牌在有限的时间内是有效的,可能在任何时间被取消。
5.租户:分组或隔离资源的容器,租户也用于分组或隔离身份对象。基于服务操作者,租户可能映射为客户、账户、组织或项目
6.服务:一个OpenStack服务,比如Compute(nova),对象存储(Swift),镜像服务(glance)。服务提供了一个或多个端点(endpoint),在端点内用户可以访问资源或者执行操作。
6.API端点:网络可访问的地址,通常是URL地址,通过该地址可以访问服务。如果正在使用扩展的模板,一个端点模板会被创建,该模板表示所有可用服务的模板。
7.角色:定义了执行特定操作的用户权限的集合。在身份服务中,发给用户的令牌包括角色的列表。被用户访问的服务确定如何解释用户拥有的角色和每个角色可以访问的操作和资源。
8.KeyStone客户端:OpenStack身份服务API的命令行接口。比如:运行keystone service-create和keystone endpoint-creat在OpenStack中注册服务。

keystone服务拓扑

1.这里写图片描述

2.这张图有点老,但是基本意思没什么差异这里写图片描述

Image service (Glance)

glance功能

它提供了一个REST API,使您可以查询虚拟机镜像元数据和检索实际的镜像。在简易的对象存储系统,你可以通过镜像服务在不同的地方存储虚拟机镜像。如OpenStack对象存储文件系统。
openstack镜像服务支持在它上面上运行的大量的周期性程序的缓存。通过应答服务可保持集群的可靠性和一致性。其他的定期的进程包括审查、更新和回收。

glance组件

1.glance-api 接收镜像API的调用,例如:镜像的发现,检索和存储
2.glance-registry 存储、处理和恢复镜像的元数据,元数据包含像大小,类型等
安全注意:这是一个glance内部私有服务,仅供glance服务使用,不要给其他用户授权
3.Database 存放镜像元数据,用户是可以依据个人喜好选择数据库的,多数的部署使用MySQL或SQLite。
4.Storage repository for image files 支持多类型的普通文件系统、对象存储、RADOS块设备、HTTP和亚马逊S3.请注意某些仓库只能做只读使用
来自网络
点这儿镜像服务详细介绍镜像服务讲的比较详细

glance支持的常用镜像格式(,参考自某ppt侵删)(面试问点)

  • raw – 非结构化的镜像格式
  • vhd – 一种通用的虚拟机磁盘格式, 可用于Vmware、Xen、Microsoft Virtual PC/Virtual Server/Hyper-V、VirtualBox等
  • vmdk – Vmware的虚拟机磁盘格式, 同样也支持多种Hypervisor
  • vdi – VirtualBox、QEMU等支持的虚拟机磁盘格式
  • qcow2 – 一种支持QEMU并且可以动态扩展的磁盘格式
  • aki – Amazon Kernel 镜像
  • ari – Amazon Ramdisk 镜像
  • ami – Amazon 虚拟机镜像

Compute service (Nova)

compute代号为nova,他根据需求来提供虚拟机,例如虚拟机创建虚拟机热迁移。
先借一张图来说明虚拟机的创建流程
这里写图片描述
简单来讲:客户端通过向keystone发送http请求,得到请求后带着刚刚请求数据请求nova-apinova-api发送RPC(远程过程调用Remote Procedure Call 是一种计算机通信协议,改协议允许运行于一台计算机的程序调用另一台计算机的子程序,而程序员无需额外的为这个交互动作编程)请求给nova-schedulernova-scheduler进行决策,到底把这台虚拟机交给哪台物理机来处理,决定下来之后nova-scheduler向刚刚决定的那台主机的nova-compute服务发送创建请求,然后由nova-compute来进行glanceneutroncinder等资源的调度,进行虚拟机的创建。
注: 高频面试题 这张图出自http://blog.csdn.net/xuriwuyun/article/details/16845601 在复习面试的时候也是看的这个博客,感谢 (这张图时间较早,所以网络还是nova-network)

nova体系结构

如下图
这里写图片描述

Nova主要由API、compute、scheduler、conductor四个核心服务组成,他们内部通过AMQP消息队列进行通信。
API是进入Nova的HTTP接口。Compute和虚拟机管理器交互来运行虚拟机并管理虚拟机的生命周期。Scheduler从可用池中选择最适合的计算节点来创建新的虚拟机实例。Conductor为数据库提供一层安全保障,Scheduler只是读取数据库内容,API择有policy 的保护,因此他们都可以直接操作数据库,但是社区希望涉及数据库的操作都通过Conductor。
Client是指Openstack官方为了简化用户对RESTful API使用而提供的API封装novaclient,或者其他任何使用原始RESTful Nova API实现的客户端,他们负责将用户请求转换为标准的HTTP请求。
—出自《Openstack》

compute功能

Openstack使用nova管理云计算系统,nova是Openstack Iaas的主要部分,nova根据用户请求给用户提供虚拟机服务,例如虚拟机的创建和虚拟机的热迁移等

compute组件

  • nova-api
    接收和响应来自终端用户的api请求,此服务支持Openstack计算服务api,亚马逊EC2 API和一个管理员API,可以强制执行一些策略,也可以启动大量的编排动作,例如运行实例
  • nova-api-metadata
    接受实例的元数据请求,nova-api-metadata通常在安装nova-compute服务的多主机模式下使用
  • nova-compute
    一个持续的守护进程,通过Hypervior的API来创建和销毁虚拟机实例,例如:
    • 支持XenServer/XCPde XenAPI
    • KVM或QEMU的libvirt
    • VMware 的 VMwareAPI
      基本功能:守护进程同意了来自队列的动作请求,转换成一系列系统命令,例如启动一个KVM实例,然后,导数据库中跟新他的状态。
  • nova-scheduler
    虚拟机生成调度器,接收队列创建虚拟机的请求,决定在哪台物理服务器上启动这个虚拟机
  • nova-conductor
    nova-compute与数据库中间的组件,避免了从nova-compute服务直接访问云数据库,nova-conductor模块可以水平拓展,但是不要把它部署在nova-compute的主机节点上。通俗来讲,nova-coductor服务承担了nova-compute服务跟数据库之间的媒介,保障了数据库的安全性。对于nova-scheduler就能直接访问数据库。
  • nova-cert
    为X509证书提供nova-cert服务守护程序,用于生成euca-bundle-image的证书,在EC2 API中使用。
  • nova-network worker守护进程
    nova-compute相似,从队列中接受网络任务,操作网络。指向创建网桥接口或者改变安全组规则。
  • nova-consoleauth
    授权控制台代理所提供的用户令牌,这个服务正常才能使控制台代理工作。
  • nova-novncproxy
    提供一个代理,可以通过VNC访问正在运行的实例,支持浏览器的novnc客户端,一般我们在dashboard上看到的云控制台就是这个服务提供的。
  • nova-spicehtml5proxy
    提供通过SPICE连接正在运行实例的代理,支持浏览器的HTML5客户端,这个是在最近版本新加的。
  • nova-xvpvncproxy
    提供通过VNC访问正在运行实例的代理,支持Openstack特定的java客户端。
  • nova Client
    用于用户作为租户管理员或终端用户提交命令的客户端

Networking service (Neutron)

Openstack网络方面gitbook上有本书原理方面写的很好https://yeasy.gitbooks.io/openstack_understand_neutron/content/intro/ 网络这段大部分搬运自这本书,英语好的话可以直接去看https://www.rdoproject.org/networking/networking-in-too-much-detail/ 这俩个连接都是讲网络架构的
这个链接侧重于网络流量流向 http://www.openstack.cn/?p=478

几张架构图

  • 先看下节点层架构图(图出自google图片)
    openstack架构图
    可以看出这张图上Openstack的三个网络,外网、管理网、数据网,Openstack通过这三个网络实现集群之间和集群内部与外网的通信,以及集群上虚拟机实例的通信。
  • j版及以前几版的网络图(https://yeasy.gitbooks.io/openstack_understand_neutron/content/intro/)

    这个看着相对简单点,内网通过虚拟网络接口接到虚拟网网桥,虚拟网桥跟ovs内网网桥br-int对接通过ovs隧道跟网络节点的网络建立连接,接入网络节点的内网网桥,然后通过DHCP负责响应虚拟机的ip分配请求,有了ip之后就能通过虚拟路由跟ovs外网网桥链接通过外网网桥出内网,进公网。这张图是GRE模式(General Routing Encapsulation 一种通过封装来实现隧道的方式。在openstack中一般是基于L3的gre,即original pkt/GRE/IP/Ethernet)。
    虚拟机与外部通信跟虚拟机之间通信网络图出自(http://docs.ocselected.org/openstack-manuals/kilo/networking-guide/content/under_the_hood_openvswitch.html
  • O版网络原理图
    这里的网络应该是Openstack里面网络相当复杂的地方了,因为Openstack网络有多种模式,与上面的一张图相似

Neutron概述

Network的项目代号为Neutron,用于提供网络连接服务,允许用户创建和连接其他Openstack服务管理的接口设备到网络,插件可以对众多网络设备和软件支持,为Openstack架构和部署提供灵活性。开始Neutron是集成在Nova里面的,是nova-network,后来独立出来叫做Quantum,再后来因为版权冲突改成了Neutron。

Neutron 的设计目标是实现“网络即服务”,为了达到这一目标,在设计上遵循了基
于“软件定义网络”实现网络虚拟化的原则,在实现上充分利用了 Linux 系统上的各
种网络相关的技术

Neutron组件

  • neutron-server
    接受并分发来自API的请求给相应的Openstack网络插件。
  • Openstack网络插件和代理
    他们分别是plugin与agent,作用是插拔端口,创建网络与子网(neutron-provider),提供IP地址(DHCP agent)
    虚拟网络上数据包的处理,都是由plugin agent来完成的,一般选择什么插件。就需要选择相应plugin agent,plugin agent会调用相应的network-provider完成与该网络设备对应的功能,DHCP agent为租户网络提供DHCP服务,L3 agent为虚拟机访问外网提供三层转发服务。

几种Openstack网络模式的简单对比(面试的时候有的公司这个会问

对比图

搬运自https://yeasy.gitbooks.io/openstack_understand_neutron/content/intro/
三个网络架构示意图如下:
三种网络模式架构图

所涉及到的网络技术
  • GRE General Routing Encapsulation,一种通过封装来实现隧道的方式。在openstack中一般是基于L3的gre,即original pkt/GRE/IP/Ethernet
  • Vlan 虚拟 Lan,同一个物理 Lan 下用标签实现隔离,可用标号为1-4094。
  • VXlan 一套利用 UDP 协议作为底层传输协议的 Overlay 实现。一般认为作为 VLan 技术的延伸或替代者。
  • bridge:网桥,Linux中用于表示一个能连接不同网络设备的虚拟设备,linux中传统实现的网桥类似一个hub设备,而ovs管理的网桥一般类似交换机。
  • br-int:bridge-integration,综合网桥,常用于表示实现主要内部网络功能的网桥。
  • br-ex:bridge-external,外部网桥,通常表示负责跟外部网络通信的网桥。
  • VETH:虚拟ethernet接口,通常以pair的方式出现,一端发出的网包,会被另一端接收,可以形成两个网桥之间的通道。
  • qvb:neutron veth, Linux Bridge-side
  • qvo:neutron veth, OVS-side
  • TAP设备:模拟一个二层的网络设备,可以接受和发送二层网包。
  • TUN设备:模拟一个三层的网络设备,可以接受和发送三层网包。
  • dhcp服务:他是通过 dnsmasq 进程( 轻量级服务器,可以提供 dns、dhcp、tftp 等服务) 来实现的,该进程绑定到 dhcp 名字空间中的 br-int 的接口上。可以查看相关的进程。
所涉及到的网络概念

Neutron管理下面的实体:
- 网络:隔离的 L2 域,可以是虚拟、逻辑或交换。
- 子网:隔离的 L3 域,IP 地址块。其中每个机器有一个 IP,同一个子网的主机彼此 L3 可见。
- 端口:网络上虚拟、逻辑或交换端口。 所有这些实体都是虚拟的,拥有自动生成的唯一标示id,支持CRUD功能,并在数据库中跟踪记录状态。

三种网络模式的不同(http://www.aboutyun.com/thread-9666-1-1.html about云的pig2 很早的时候就在做Openstack,Openstack方面的很多资料都有写在blog上;三种网络对比鲜明在https://www.ait24.com/1066.html

各自的特点:

GRE:(GRE跟VXlan http://www.dataguru.cn/thread-527883-1-1.html
  • GRE优点:

    • gre id 可以1600W个范围
    • 没有广播风暴问题
    • 没有mac地址表的过大问题.物理交换机,只需要记入一个eth0的mac地址
    • 3层网络的通信.
  • GRE缺点:
    两个节点需要建隧道.不成熟方案

Vlan:
  • 优点

    • 适合小规模网络布署
    • 大二层广播通讯方式.
    • 可以不需要网络节点
    • 必须和物理网络交换机的vlan id绑定

    • 缺点:

  • vlan id最多只能有4096个
  • 存在2层通讯的广播风暴问题
  • 基于Ip地址的子网划分问题
VXlan(拓展Vlan):

和gre模式的区别,不使用隧道传输.成熟方案
优点:
- 不需要建隧道.使用udp
- 可以方便的安全策略
- 和gre id一样.也有1600W可以使用

Vlan模式下的系统架构跟GRE模式下类似。需要注意的是,在vlan模式下,vlan tag的转换需要在br-int和br-ethx两个网桥上进行相互配合。即br-int负责从int-br-ethX过来的包(带外部vlan)转换为内部vlan,而br-ethx负责从phy-br-ethx过来的包(带内部vlan)转化为外部的vlan。VXLAN 模式下,网络的架构跟 GRE 模式类似,所不同的是,不同节点之间通过 VXLAN 隧道互通,即虚拟化层是采用的 VXLAN 协议。

Dashboard (Horizon)

Dashboard代号为Horizon,他为用户提供了一个Web接口,让用户跟管理员可以通过web来更容易的管理Openstack的各种资源,他是基于Django开发。

Block Storage (Cinder)

Object Storage (Swift)

Orchestration (Heat)

Telemetry (Ceilometer)

Database (Trove)

Data processing service (Sahara)

  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值