1.你是如何学习openstack的?
2.你对openstack的组件了解多少?
3.你认为openstack该如何学习?
一直想写关于openstack的方面的内容,今天终于整理完成。算是完成一桩心事,内容整合来自:
是在
零基础学习openstack【初级篇】基础上的一个继续:
初级篇,我们主要是有这么一个概念,openstack的组成
openstack由哪些部分来组成:
- Identity(代号为“Keystone”)
- Dashboard(代号为“Horizon”)
- Image Service(代号为“Glance”)
- Network(代号为“Quantum”)
- Object Storage(代号为“Swift”)
- Block Storage(代号为“Cinder”)
及它们的初步认识,这篇,我们将深入这些概念,及对openstack的进一步的认识。
我们初级篇中,知道了如何部署集群,如何使用集群,但是遇到了很多的问题,
- 什么是floating ip?
- 什么是管理网络?
- 为什么会获取不到ip?
- 为什么网络会不通?
- 为什么虚拟机ping通,外网ping不同?
- 出现问题了,会看日志了,可是还是找不出问题的原因?
复制代码
这些都困扰着我们。
那么我们为什么会产生这些问题,并且遇到这些问题,还解决不了,到处求救,可是并非每次都那么幸运。
我们的学习方法,通常有两个极端:
1.先看书
2.不管三七二十一,先动手在说。
看书
看书是没有错的,但是切勿较真,因为很多书并不像《春秋》、《大学》、《易经》,那么值得推敲,现在的你看的更多的是一种框架,一本书籍,如果能够保证98%以上都是正确的,就已经很不错了。但是个人认为看书总比不看书要好一些,毕竟花费了作者大量时间和精力去整理。
再回来,我们在看书的时候,有时候,并不能一次就能把书看透,使劲也是没用的,因为水平在那。所以建议看书的时候,先整体了解,有了初步概念和自己的理解,然后动手实践。
实践
有些同学,注重实践,因为实践才能获取知识,其实这个没有错,但是我们经常会遇到问题,并且不知该如何解决。比如在大数据、云技术中,搭建hadoop集群,openstack集群,调试的信息,都在日志中了,我们也知道看日志,但是眼睁睁看日志,却还是不知道问题出现在什么问题。这时候你该怎么做?
有三种办法?
1.在qq群求助
这种效果一般不怎么好
2.在论坛社区发帖
论坛发帖一般也不怎么靠谱,当然除了about云以外,about云对于发的帖子都会及时的回答。当我们遇到问题,解决问题的时候,我们就需要考虑,我们是否该看书了
3.回头看书
回头看书,这时候看书,你的收获很大,而且还会对以前的知识有一个重新理解和定义。
平时积累(爱好)
在看书和实践的过程中,其实还有更重要的一点,就是我们平时积累,这是任何学习方法都无法比拟的。没有比爱好更重要的。因为爱好所以琢磨,因为琢磨,所以有深度。
about云也会为云技术、大数据爱好者,提供每日一读,网站和群(90371779、322273151)每天都会有相关内容
about云每日一读汇总
以上方法是针对学习云技术、大数据,当然同样适合其它IT技术。
同时这里推荐一篇很不错的文章
想学大数据、云技术、IT人、大学生必读的一篇文章:如何快速掌握一门技术
云计算、openstack的理解
首先我们还是来说说,什么是openstack,什么是云计算。
引用百度:
云计算是一种通过网络以服务的方式提供动态可伸缩的虚拟化的资源的计算模式。
举个例子,你要做个网站,希望有一台独立的服务器,以前你可能得自行购买一台服务器并托管在IDC机房,不仅得花很多钱买服务器,而且每年要花很多钱托管(当然你也可以租一台服务器)。而现在,你可以在云计算服务商那里租一台同样由你掌握的“服务器”,你一样可以对它格式化,安装自己喜欢的操作系统和软件,但它并不是一台物理上的服务器,而且云计算平台上为你提供的一台虚拟机。
因此,云计算是由一系列可以动态升级和被虚拟化的资源组成,这些资源被所有云计算的用户共享并且可以方便地通过网络访问,用户无需掌握云计算的技术,只需要按照个人或者团体的需要租赁云计算的资源。
如果你真想了解,可以从虚拟机入手。简单讲,虚拟机是云计算的基础。
云计算的特点:
云计算拥有以下特点:
- · 虚拟化和自动化
- · 服务器,存储介质,网络等资源都可以随时替换
- · 所有的资源都由云端统一管理
- · 高度的伸缩性以满足业务需求
- · 集中于将服务传递给业务
引用:云计算是什么
上边便是云计算的解释,但是我们仍旧感觉很模糊。
那么我们从openstack的角度来理解,说到openstack我们必须说一下,openstack的发展,openstack的初期,nova是主要的组件,但是由于不断的扩展,所以逐渐的从nova中分离出来。
比如:
网络组件nova-network
发展如下:
nova network->Quantum->Neutron
Openstack在2010年正式发布它的第一个版本Austin的时候,
nova-network作为它的核心组件被包含其中原先网络有nova network来承担,后来逐渐分离出来,改名为Quantum.
Quantum是随Openstack的Folsom版本正式发布的,其实它已经作为试用组件包含在之前的Essex版本中。在Grizzly里功能得到了增强。
为什么引入Quantum?答案非常简单,Quantum功能更强大,满足更多需求。
Neutron
因为商标侵权的原因,Openstack在Havana版本上将Quantum更名为Neutron,所以Neutron并不是什么新的东西。在Havana版里,Neutron也只增加和增强了少数功能。
更详细信息参考
OpenStack网络组件Neutron的研究
nova-volume组件
Essex将nove的卷管理api独立化后,Folsom终于将卷管理服务抽离成了Cinder;Cinder管理所有的块存储设备,块设备可以挂接在虚机的实例中,然后虚机里的guest系统可以像操作本地卷一样操作块存储设备;
Cinder需要处理的主要问题应该是接入各种块设备,如本地磁盘、LVM或各大广商提供的设备如EMC、NetApp、HP、HuaWei,还有如Vmware提供的虚拟块设备等。
从上面我们认识,nova为openstck的重要组件,而nova中nova-compute则可以创建虚拟机。它也是云计算的核心。
所谓的云计算,从技术角度来讲,其实就是能够灵活的创建和删除虚拟机。
你或许会有很多的疑问或则不相信,为什么创建和删除个虚拟机就被称之为云计算,我们创建和删除虚拟机这不是很平常的一件事情吗?openstack为什么会如此的火热。
到这里,让我们在来看看什么是云计算,或许有更进一步的认识。
引用百度:
云计算是一种通过网络以服务的方式提供动态可伸缩的虚拟化的资源的计算模式。
举个例子,你要做个网站,希望有一台独立的服务器,以前你可能得自行购买一台服务器并托管在IDC机房,不仅得花很多钱买服务器,而且每年要花很多钱托管(当然你也可以租一台服务器)。而现在,你可以在云计算服务商那里租一台同样由你掌握的“服务器”,你一样可以对它格式化,安装自己喜欢的操作系统和软件,但它并不是一台物理上的服务器,而且云计算平台上为你提供的一台虚拟机。
因此,云计算是由一系列可以动态升级和被虚拟化的资源组成,这些资源被所有云计算的用户共享并且可以方便地通过网络访问,用户无需掌握云计算的技术,只需要按照个人或者团体的需要租赁云计算的资源。
如果你真想了解,可以从虚拟机入手。简单讲,虚拟机是云计算的基础。
- · 虚拟化和自动化
- · 服务器,存储介质,网络等资源都可以随时替换
- · 所有的资源都由云端统一管理
- · 高度的伸缩性以满足业务需求
- · 集中于将服务传递给业务
了解openstack
当我们想学习大数据、云技术的时候,部署往往是我们的第一步,这样能够对openstack有一个直观的认识,比如那个文件需要修改,部署完成后该如何使用,详细参考:
openstack零基础入门:OpenStack Grizzly安装指导(1)
openstack零基础入门:OpenStack Grizzly安装指导(2)
更多内容参考
零基础学习openstack【初级篇】
当然上面部署是一套openstack的部署,如果想单个部署,网上资料也还是不少的。
openstack开发
1.环境搭建
对于openstack开发,开发环境还是比较重要的,有了开发环境,我们可以阅读源码,同样可以修改里面的环境。那么我们该如何搭建开发环境。
比较可靠的方法,可以参考
about云课程5:配置Linux中的eclipse环境,导入openstack keystone源码
当然网上流行了比较多就是使用dev来搭建开发环境,由于各种原因,使用dev搭建过程中,可能会遇到比较多的问题,参考
使用DevStack安装和配置OpenStack开发环境
基于DevStack的Openstack folsom版开发环境搭建(1-2)
基于davstack搭建openstack folsom开发环境(3-4)
2. 源码架构
当我们拿到源码的时候,我们如果直接每个文件查看源码,这个难度是相当大的,首先我们需要搞清楚源码
python工程
一般有
setup文件
setup.cfg配置文件
tox.nin测试文件
bin目录
keystone-all
keystone-manager
当项目启动时,keystone-all为项目总入口
openstack各组件
我们了解了云计算,在我们技术人眼里,其实根本不是什么云计算,就是创建个虚拟机,而openstack就能完成这件事情。云计算之所以这么称呼当然有它的道理,当然咱们只关心技术,所以咱们需要对openstack有一个深度的认识。
对于英语比较好的同学,学习可以直接访问官网,详细参考:
官方地址:https://github.com/openstack
孵化项目:https://github.com/stackforge
首先我们需要对各个组件有一个认识,包括从原理、内部结构、部署、源码等角度。
1.了解认识Nova
这个是最核心的,Nova最开始的时候,可以说是一套虚拟化管理程序,还可以管理网络和存储。不过从Essex版本后,Nova开始做减法,和网络相关的内容,包括安全组,交给Neutron负责,存储相关的交给Cinder负责。调度有关的内容,会交给新的项目Marconi。
以前还有一个nova common,这其实是各个组件都使用相同的东西,现在也专门成立一个项目:oslo,已经是核心项目。
未来Nova对各种Hyperv的支持是有差异的,KVM和XEN,基本是最好的。微软的Hyper-V算是很不错,微软投入再研发。计算节点,不直接查询数据库,而是通过rpc的方式,据说这是一大进步。
Nova的稳定性,其实取决于libvirt,qemu,希望未来可以能更加稳定。功能现在其实已经不是大问题。
那么我们再来了解一下nova。
nova是一个很复杂的组件,而且内容很多。
认识nova
nova可以说是一套虚拟化管理程序,为什么这么说,因为nova可以创建、删除虚拟机、重启虚拟机等,openstack的之所以能够搭建云平台,也是因为它能够创建虚拟机,其它的组件,比如Neutron则是为了让虚拟机之间、虚拟机与外网之间能够互通,Cinder则是为了增加虚拟机的存储空间。可见nova在openstack中作用是非常大的。
更多内容,可以参考下面内容。
nova结构
nova是云主机控制器。它包含了很多组件,API服务器(nova-api),计算服务器(nova-compute),网络控制器(nova-network),调度器(nova-schedule),卷控制器(nova-volume),消息队列以及DashBoard。
至于nova的发展,上文我们已经介绍。
对于nova各个组件的作用,及它们之间是如何通信的,详细
可以参考:
Nova 各个组件介绍以及功能分析(逻辑架构,运行架构,开发架构以及数据库)
http://www.aboutyun.com/thread-10069-1-1.html
nova命令行:
我们认识nova和了解了nova,那么nova具体该如何使用,如何删除虚拟机、添加虚拟机、启动虚拟机等,参考下面帖子。
openstack nova用户管理
http://www.aboutyun.com/thread-8717-1-1.html
openstack nova 命令行指令大全
http://www.aboutyun.com/thread-6373-1-1.html
nova源码及开发
对于nova有了一定的认识,如果我们对nova二次开发
1.我们首先搭建开发环境
2.然后阅读源码修改源码
至于开发环境的搭建参考上文openstack开发,源码的阅读,这里有一些帖子供大家参考.对于内容,有的是对源码的整体认识,及虚拟机启动源码分析,更多的内容,相信能从标题可以看到。
OpenStack Nova源码结构解析
http://www.aboutyun.com/thread-10105-1-1.html
1.处理虚拟机磁盘镜像由哪个文件来完成?
2.调度器中的主机权重在哪个文件中?
3./nova/scheduler/host_manager.py文件的作用是什么?
OpenStack基于Libvirt的虚拟化平台调度实现----Nova虚拟机动态迁移源码分析
http://www.aboutyun.com/thread-10108-1-1.html
1.实现虚拟机动态迁移主要实现的语句是什么?
2.方法_update实现了哪方面的内容?
3.live_migration方法的作用是什么?
NOVA源码分析——NOVA中的RabbitMQ解析
http://www.aboutyun.com/thread-10107-1-1.html
1.终端用户(DevOps、Developers和其他OpenStack组件)如何与openstack系统互动?
2.Nova守护进程之间如何执行API请求?
3.RabbitMQ是什么?
4.构成AMQP的三个关键要素,那么它们之间是如何工作的呢?
OpenStack Nova-cell服务的源码解析(1)
http://www.aboutyun.com/thread-10104-1-1.html
1.nova-cell服务的具体实现包含哪些流程?
2.哪个类定义了当路由信息到特定的cell上时,需要调用的方法?
3.schedule_run_instance实现了什么?
OpenStack Nova-cell服务的源码解析(2)
http://www.aboutyun.com/thread-10103-1-1.html
OpenStack Nova-scheduler组件的源码解析(1)
http://www.aboutyun.com/thread-10102-1-1.html
1.哪个文件实现了基于随即选取主机节点的方式的调度器?
2./nova/scheduler/manager.py文件作用是什么?
3./nova/scheduler/filters/affinity_filter.py定义了那四个过滤器?
OpenStack Nova-scheduler组件的源码解析(2)
http://www.aboutyun.com/thread-10121-1-1.html
1.host_state.update_from_compute_node(compute)这条语句实现了什么功能?
2.哪一个函数循环实现了为每一个实例获取合适的主机后,返回选择的主机列表?
3._schedule实现有哪三步?
OpenStack基于Libvirt的虚拟化平台调度实现----Nova虚拟机启动源码实现(1)
http://www.aboutyun.com/thread-10100-1-1.html
1.Nova-Compute中Libvirt默认调用的底层虚拟化平台是什么?
2.Libvirt是什么?
3.Libvirt哪些底层虚拟化平台?
4.一台虚拟机随着用户需求的改变可能会经历哪些状态?
5.哪个方法实现了确定来宾系统的磁盘映射信息?
OpenStack基于Libvirt的虚拟化平台调度实现----Nova虚拟机启动源码实现(2)
http://www.aboutyun.com/thread-10111-1-1.html
1.类Image下的方法cache实现了什么功能?
2.哪个方法实现下载镜像文件?
3.方法download由那两部分组成?
OpenStack基于Libvirt的虚拟化平台调度实现----Nova虚拟机动态迁移源码分析
http://www.aboutyun.com/thread-10108-1-1.html
OpenStack基于Libvirt的虚拟化平台调度实现----Nova虚拟机启动源码实现(3)
http://www.aboutyun.com/thread-10110-1-1.html
1.哪个方法实现了获取元数据?
2.对文件注入代码了解多少?
3.哪个方法实现向磁盘镜像注入不同的文件信息?
OpenStack基于Libvirt的虚拟化平台调度实现----Nova虚拟机启动源码实现(4)
http://www.aboutyun.com/thread-10109-1-1.html
1._create_domain_and_network你认为完成了什么?
2.inst_path = libvirt_utils.get_instance_path(instance)语句的作用是什么?
3.domain.createWithFlags(launch_flags)实现什么功能?
openstack nova 源码分析1-setup脚本
http://www.aboutyun.com/thread-10090-1-1.html
openstack nova 源码分析2之nova-api,nova-compute
http://www.aboutyun.com/thread-10091-1-1.html
openstack nova 源码分析3-nova目录下的service.py、driver.py
http://www.aboutyun.com/thread-10092-1-1.html
1.nova下的service.py的源码主要完成什么任务?
2.driver.py位于哪个目录下?
openstack nova 源码分析4-1 -nova/virt/libvirt目录下的connection.py
http://www.aboutyun.com/thread-10094-1-1.html
openstack nova 源码分析4-2 -nova/virt/libvirt目录下的connection.py
http://www.aboutyun.com/thread-10095-1-1.html
2.了解认识keystone
这是提供身份认证和授权的组件。任何系统,身份认证和授权,其实都比较复杂。尤其Openstack 那么庞大的项目,每个组件都需要使用统一认证和授权。
认识keystone
我们或许知道keystone是用来身份验证的,但是它是如何身份验证的,很多人或许不太清楚。上面的图示,当用户进行操作的时候,用户首先发送用户名和密码给Keystone,(这里的用户名和密码,则是我们配置的环境变量,)然后获取token,token是什么?我们称之为令牌,有了这个令牌在请求资源,那么就畅通无阻了,我们为什么需要令牌,用户名和密码不也一样吗?如果作为一名程序员,我们都知道两个字段的对比与一个字段的对比在性能上是不一样的,何况是云计算组件之间通信是非常频繁的,所以个人认为了身份验证方便,所以产生了令牌(token)。
令牌的作用是什么,为什么需要令牌,我们就需要仔细看上图了。
比如
下图用户请求创建虚拟机,截图如下,然后nova最后经过上图中操作,最后操作成功
我们将上图简化
用户带着token到Nova去请求虚拟机,nova这时候需要验证这个token是否有效,自己无法判断,所以必须去keystone去验证,由于keystone记录了由它产生的token,所以对照一下,就能知道是否有效,如果有效,返回nova验证成功。这时候nova经过一系列的操作,创建虚拟机,最后创建成功。
keystone包含的概念
1. User
User即用户,他们代表可以通过keystone进行访问的人或程序。Users通过认证信息(credentials,如密码、API Keys等)进行验证。
2. Tenant
Tenant即租户,它是各个服务中的一些可以访问的资源集合。例如,在Nova中一个tenant可以是一些机器,在Swift和Glance中一个tenant可以是一些镜像存储,在Quantum中一个tenant可以是一些网络资源。Users默认的总是绑定到某些tenant上。
3. Role
Role即角色,Roles代表一组用户可以访问的资源权限,例如Nova中的虚拟机、Glance中的镜像。Users可以被添加到任意一个全局的 或 租户内的角色中。在全局的role中,用户的role权限作用于所有的租户,即可以对所有的租户执行role规定的权限;在租户内的role中,用户仅能在当前租户内执行role规定的权限。
4. Service
Service即服务,如Nova、Glance、Swift。根据前三个概念(User,Tenant和Role)一个服务可以确认当前用户是否具有访问其资源的权限。但是当一个user尝试着访问其租户内的service时,他必须知道这个service是否存在以及如何访问这个service,这里通常使用一些不同的名称表示不同的服务。在上文中谈到的Role,实际上也是可以绑定到某个service的。例如,当swift需要一个管理员权限的访问进行对象创建时,对于相同的role我们并不一定也需要对nova进行管理员权限的访问。为了实现这个目标,我们应该创建两个独立的管理员role,一个绑定到swift,另一个绑定到nova,从而实现对swift进行管理员权限访问不会影响到Nova或其他服务。
5. Endpoint
Endpoint,翻译为“端点”,我们可以理解它是一个服务暴露出来的访问点,如果需要访问一个服务,则必须知道他的endpoint。因此,在keystone中包含一个endpoint模板(endpoint template,在安装keystone的时候我们可以在conf文件夹下看到这个文件),这个模板提供了所有存在的服务endpoints信息。一个endpoint template包含一个URLs列表,列表中的每个URL都对应一个服务实例的访问地址,并且具有public、private和admin这三种权限。public url可以被全局访问(如http://compute.example.com),private url只能被局域网访问(如http://compute.example.local),admin url被从常规的访问中分离。
很多人觉得比较难以,更多可以参考
openstack中tenant的作用到底是什么
keystone命令
keystone都有哪些操作,keystone可以创建租户、角色、用户,详细参考openstack之role篇
keystone源码
源码的阅读,如果感兴趣,可以自己有一个理解,然后与作者进行对比,这样才会对自己的思想有所提高,也算是与作者的思想交流。当然作者也会有错的,所以通过彼此的角,这样达到提高的目的
[openstack][G版]keystone源码记录
http://www.aboutyun.com/thread-10136-1-1.html
1.在G版中密码和token两个验证方法由哪个文件来实现?
2.WSGImiddleware在keystone应用中的作用是什么?
Openstack之keystone源代码分析1--WSGI接口流程分析
http://www.aboutyun.com/thread-10137-1-1.html
1.keystone是怎么通过WSGI接口访问其中的服务的?
2.你认为add_routes作用是什么?
Openstack之keystone源代码分析2--Controller->Manager->Driver
http://www.aboutyun.com/thread-10138-1-1.html
1.Driver在那个配置文件中可配置?
2.Manager怎么调用conf下面配置的或者默认的driver的?
Openstack源代码分析之keystone服务(keystone-all)
http://www.aboutyun.com/thread-10139-1-1.html
1.keystone-all.py的作用是什么?
2.Python应用程序使用WSGI(Web Server Gateway Interface)协议来做什么?
3.了解认识Neutron
Neutron是OpenStack核心项目之一,提供云计算环境下的虚拟网络功能。Neutron的功能日益强大,并在Horizon面板中已经集成该模块。作为Neutron的核心开发者之一,个人觉得Neutron完全代替Nova Network模块作为云计算网络管理中心是必然趋势。要使用好OpenStack,了解Neutron概念及其相应操作就显得格外重要。
Neutron对于开发人员为什么难以理解:
初学者很难理解Neutron,这是因为网络不在是实实在在的网线、路由等,都是通过命令来实现的。
例如使用openvswitch创建网桥
- brctl addbr qbr02
复制代码
在比如添加路由router01
- ip netns add router01
复制代码
这些都是虚拟化的,也就是说在虚拟机之间,也就是在云中,网络都是虚拟化,所以我们才会觉得难以理解。
同样对于一些概念也比较模糊,比如
固定IP
私有IP地址,用于租户实例间通信浮动IP
公共IP地址,用于实例与外部或Internet的通信特别是浮动IP 很多不太理解,一个网卡如果赋予的ip能够与外部Internet通信,那么它就是浮动ip。
公共IP地址不一定是Internet上可路由的地址,也可以是站点内部或局域网的地址
私有地址和公共地址的关系以及必要的路由由nova-network来处理,实例不必考虑此问题。
在我们有了一定的理解,在回头看进行一些,我们又会对openstack有一个新的认识。
下面我们从基础开始认识Neutron
Neutron基本概念
网络
在普通人的眼里,网络就是网线和供网线插入的端口,一个盒子会提供这些端口。对于网络工程师来说,网络的盒子指的是交换机和路由器。所以在物理世界中,网络可以简单地被认为包括网线,交换机和路由器。当然,除了物理设备,我们还有软的物件:IP地址,交换机和路由器的配置和管理软件以及各种网络协议。要管理好一个物理网络需要非常深的网络专业知识和经验。
Neutron网络目的是(为OpenStack云更灵活地)划分物理网络,在多租户环境下提供给每个租户独立的网络环境。另外,Neutron提供API来实现这种目标。Neutron中“网络”是一个可以被用户创建的对象,如果要和物理环境下的概念映射的话,这个对象相当于一个巨大的交换机,可以拥有无限多个动态可创建和销毁的虚拟端口。
端口
在物理网络环境中,端口是用于连接设备进入网络的地方。Neutron中的端口起着类似的功能,它是路由器和虚拟机挂接网络的着附点。
路由器
和物理环境下的路由器类似,Neutron中的路由器也是一个路由选择和转发部件。只不过在Neutron中,它是可以创建和销毁的软部件。
子网
简单地说,子网是由一组IP地址组成的地址池。不同子网间的通信需要路由器的支持,这个Neutron和物理网络下是一致的。Neutron中子网隶属于网络。
为什么引入Quantum?
答案非常简单,Quantum功能更强大,满足更多需求。下面列几条主要功能。
- 提供面向租户的API,以便控制2层网络和管理IP地址
- 支持插件式网络组件,像Open vSwitch,Cisco,Linux Bridge,Nicira NVP等等
- 支持位于不同的2层网络的IP地址重叠
- 支持基本的3层转发和多路由器
- 支持隧道技术(Tunneling)
- 支持3层代理和DHCP代理的多节点部署,增强了扩展性和可靠性
- 提供负载均衡API (试用版本)
Neutron主要有以下几部分组成。
Neutron Server: 这一部分包含守护进程neutron-server和各种插件neutron-*-plugin,它们既可以安装在控制节点也可以安装在网络节点。neutron-server提供API接口,并把对API的调用请求传给已经配置好的插件进行后续处理。插件需要访问数据库来维护各种配置数据和对应关系,例如路由器、网络、子网、端口、浮动IP、安全组等等。
插件代理 (Plugin Agent): 虚拟网络上的数据包的处理则是由这些插件代理来完成的。名字为neutron-*-agent。在每个计算节点和网络节点上运行。一般来说你选择了什么插件,就需要选择相应的代理。代理与Neutron Server及其插件的交互就通过消息队列来支持。
DHCP代理(DHCP Agent): 名字为neutron-dhcp-agent,为各个租户网络提供DHCP服务,部署在网络节点上,各个插件也是使用这一个代理。
3层代理 (L3 Agent): 名字为neutron-l3-agent, 为客户机访问外部网络提供3层转发服务。也部署在网络节点上。
下面这张图取自官网,很好的反映了Neutron内部各部分之间的关系。(SDN服务在这里是额外的外部功能,可以暂时略过。)
上面简单的介绍,下面内容可以参考:
openstack---Neutron网络入门
openstack网络,外部网络、内部网络、管理网络作用介绍
开发人员必读openstack网络基础2:交换机、路由器、DHCP
开发人员必读openstack网络基础3: iptables详解
开发人员必读openstack网络基础4:Dnsmasq、网络混杂模式
开发人员必读openstack网络基础5:网络叠加模式VLAN、VxLAN、GRE
开发人员必读openstack网络基础6:什么是Tap/Tun、网桥
开发人员必读openstack网络基础7:到底什么是Open vSwitch
源码分析参考
Neutron分析(1)——neutron-server启动过程分析
openstack Neutron分析(2)—— neutron-l3-agent
openstack Neutron分析(3)—— neutron-dhcp-agent源码分析
openstack Neutron分析(4)—— neutron-l3-agent中的iptables
openstack Neutron分析(5)-- neutron openvswitch agent
OpenStack Neutron DVR L2 Agent的初步解析 (一)
OpenStack J版 Neutron-server服务加载与启动源码分析(一)
OpenStack J版 Neutron-server服务加载与启动源码分析(二)
Openstack Neutron-server服务加载与启动源码分析(三)
4.了解Swift
这是对象存储的组件。对于大部分用户来说,swift不是必须的。你只有存储数量到一定级别,而且是非结构化数据才有这样的需求。很多人都问一个相同的问题:是否可以把虚拟机的存储放在swift上。简单回答:不行。你需要搞明白对象存储是干啥,擅长那些地方,那些是不行的。
swift是Openstack所有组件了最成熟的,可以在线升级版本,各种版本可以混合在一起,也就是说,1.75版本的swift可以和1.48的在一个群集里.这个是很难得的.
swift 是什么及在openstack的作用
OpenStackObject Storage (Swift) 是开源的,用来创建可扩展的、冗余的、对象存储(引擎)。 swift使用标准化的服务器存储 PB 级可用数据。但它并不是文件系统 (file system) ,实时的数据存储系统(real-timedata storage system) 。 swift 看起来更像是一个长期的存储系统 (long term storage system) ,为了获得、调用、更新一些静态的永久性的数据。比如说,适合存储一些类型的数据:虚拟机镜像,图片存储,邮件存储,文档的备份。没有“单点”或者主控结点 (master point of control) , swift看起来具有更强的扩展性、冗余和持久性。
swift结构
Swift 组件包括:
- 代理服务(Proxy Server):对外提供对象服务 API,会根据环的信息来查找服务地址并转发用户请求至相应的账户、容器或者对象服务;由于采用无状态的 REST 请求协议,可以进行横向扩展来均衡负载。
- 认证服务(Authentication Server):验证访问用户的身份信息,并获得一个对象访问令牌(Token),在一定的时间内会一直有效;验证访问令牌的有效性并缓存下来直至过期时间。
- 缓存服务(Cache Server):缓存的内容包括对象服务令牌,账户和容器的存在信息,但不会缓存对象本身的数据;缓存服务可采用 Memcached 集群,Swift 会使用一致性散列算法来分配缓存地址。
- 账户服务(Account Server):提供账户元数据和统计信息,并维护所含容器列表的服务,每个账户的信息被存储在一个 SQLite 数据库中。
- 容器服务(Container Server):提供容器元数据和统计信息,并维护所含对象列表的服务,每个容器的信息也存储在一个 SQLite 数据库中。
- 对象服务(Object Server):提供对象元数据和内容服务,每个对象的内容会以文件的形式存储在文件系统中,元数据会作为文件属性来存储,建议采用支持扩展属性的 XFS 文件系统。
- 复制服务(Replicator):会检测本地分区副本和远程副本是否一致,具体是通过对比散列文件和高级水印来完成,发现不一致时会采用推式(Push)更新远程副本,例如对象复制服务会使用远程文件拷贝工具 rsync 来同步;另外一个任务是确保被标记删除的对象从文件系统中移除。
- 更新服务(Updater):当对象由于高负载的原因而无法立即更新时,任务将会被序列化到在本地文件系统中进行排队,以便服务恢复后进行异步更新;例如成功创建对象后容器服务器没有及时更新对象列表,这个时候容器的更新操作就会进入排队中,更新服务会在系统恢复正常后扫描队列并进行相应的更新处理。
- 审计服务(Auditor):检查对象,容器和账户的完整性,如果发现比特级的错误,文件将被隔离,并复制其他的副本以覆盖本地损坏的副本;其他类型的错误会被记录到日志中。
- 账户清理服务(Account Reaper):移除被标记为删除的账户,删除其所包含的所有容器和对象。
上面只是简单的介绍,或许并不能让你真正明白什么是swift,如果感兴趣可以了解更多内容
openstack入门之swift基础二:三种存储类型比较-文件、块、对象存储
openstack入门之swift基础三:swift能干什么,不能干什么及相关概念
Ubuntu 12.04 OpenStack Swift单节点部署指导
Object Storage (Swift)和Block Storage (Cinder)有什么区别?
hadoop中HDFS与opesntack的swift有何不同
Swift源码想开发和了解原理的途径之一
Swift源码分析
Swift源码分析----swift-object-auditor(1)
Swift源码分析----swift-object-auditor(2)
Swift源码分析----swift-container-auditor
Swift源码分析----swift-account-auditor
Swift源码分析----swift-account-audit(1)
Swift源码分析----swift-account-audit(2)
OpenStack Swift源码分析(1)----swift服务启动源码分析之一
OpenStack Swift源码分析(2)----swift服务启动源码分析之二
OpenStack Swift源码分析(3)----swift服务启动源码分析之三
OpenStack Swift源码分析(4)----swift-ring-builder源代码解析之一
OpenStack Swift源码分析(5)----swift-ring-builder源代码解析之二
Swift源码分析----swift-object-updater
Swift源码分析----swift-object-info
Swift源码分析----swift-object-replicator(1)
Swift源码分析----swift-object-replicator(2)
Swift源码分析----swift-proxy实现请求req的转发
Swift源码分析----swift-container-info
Swift源码分析----swift-proxy与swift-account
Swift源码分析----swift-account-reaper(1)
Swift源码分析----swift-account-reaper(2)
Swift源码分析----swift-proxy与swift-container
Swift源码分析----swift-account-replicator
Swift源码分析----swift-container-replicator
Swift源码分析----swift-proxy与swift-object
Swift源码分析----swift-container-updater
5.了解Cinder
这是存储管理的组件。一直以来,很多人都很纠结AWS的EBS的实现。Openstack也终于推出了自己的存储管理组件。
Cinder存储管理主要是指虚拟机的存储管理。目前支持开源和商业化产品。开源的sheepdog,Ceph等。商业存储的支持,目前IBM是最积极的。未来如果商业存储厂商都支持Cinder,对Openstack的商业化还是非常有利的。
对于企业来说,使用分布式作为虚拟机的存储,并不能真正节省成本,维护一套分布式存储,成本还是很高的。目前虚拟机的各种高可用,备份的问题,其实都可以把问题交给商业存储厂商来解决。
我们知道Openstack从Folsom开始使用Cinder替换原来的Nova-Volume服务,为Openstack云平台提供块存储服务。
cinder架构如下:
Cinder服务
- API service:负责接受和处理Rest请求,并将请求放入RabbitMQ队列。Cinder提供Volume API V2, 我没有找到格式很好的在线文档,大体可以参见Openstack block storage API V1
- Scheduler service: 处理任务队列的任务,并根据预定策略选择合适的Volume Service节点来执行任务。目前版本的cinder仅仅提供了一个Simple Scheduler, 该调度器选择卷数量最少的一个活跃节点来创建卷。
- Volume service: 该服务运行在存储节点上,管理存储空间。每个存储节点都有一个Volume Service,若干个这样的存储节点联合起来可以构成一个存储资源池。为了支持不同类型和型号的存储,当前版本的Cinder为Volume Service如下drivers。当然在Cinder的blueprints当中还有一些其它的drivers,以后的版本可能会添加进来。
- 本地存储:LVM, Sheepdog
- 网络存储: NFS, RBD (RADOS)
- IBM: XIV, Storwize V7000, SVC storage systems
- Netapp: NFS存储;ISCSI存储则需要OnCommand 5.0和Data ONTAP 7-mode storage systems with installed iSCSI licenses
- EMC: VNX, VMAX/VMAXe
- Solidfire: Solidfire cluster
cinder还有更多内容
1.Cinder有哪些服务?
2.Cinder有哪些部署命令?
3.Cinder在IT环境中的主要有哪些问题?
详细参考:
Openstack之Cinder介绍
更多内容参考
OpenStack IceHouse版cinder模块新增加功能
OpenStack-Icehouse(nova-network)多节点块存储服务Cinder部署
Openstack Cinder安装向导:在Unitestack的UOS下测试
OpenStack Cinder 与 Ceph 使用进阶篇(基于 Icehouse 版本)
cinder中删除僵尸卷(error_deleting )的方法
当然如果想了解源码,同样附上源码:
源码分析:
Openstack Cinder中建立volume过程的源码解析(1)
Openstack Cinder中建立volume过程的源码解析(2)
Openstack Cinder中建立volume过程的源码解析(3)
Openstack Cinder中建立volume过程的源码解析(4)----以及taskflow相关解析
Openstack Cinder中建立volume过程的源码解析(5)----以及taskflow相关解析
Openstack Cinder中建立volume过程的源码解析(6)----以及taskflow相关解析
Openstack Cinder中建立volume过程的源码解析(7)----以及taskflow相关解析
Openstack Cinder中建立volume过程的源码解析(8)
Openstack Cinder中建立volume过程的源码解析(9)
OpenStack Cinder服务启动过程中的资源加载和扩展源码解析之一
Paste Deployment简介以及cinder-api-paste.ini的解析(1)
6.了解Glance
Glance比较简单,是一个虚机镜像的存储。向前端nova(或者是安装了Glance-client的其他虚拟管理平台)提供镜像服务,包括存储,查询和检索。这个模块本身不存储大量的数据,需要挂载后台存储(Swift,S3。。。)来存放实际的镜像数据。
OpenStack镜像服务器是一套虚拟机镜像发现、注册、检索系统,我们可以将镜像存储到以下任意一种存储中:
- 本地文件系统(默认)
- OpenStack对象存储
- S3直接存储
- S3对象存储(作为S3访问的中间渠道)
- HTTP(只读)
功能及特点
提供镜像相关服务
Glance构件
- Glance控制器
- Glance注册器
从上面我们看出glance是可以存储的,但是其重心是管理镜像,存储则由比如swift、S3等来完成。如果感觉还有疑惑,参考:
让你真正明白cinder与swift、glance的区别
我们知道了glance能干什么,那么我们该如何使用,glance命令该如何使用,api该如何使用,详细参考openstack之glance篇
更多参考:
翻译:Openstack镜像服务(glance)用法的高级例子
建立高可用OpenStack云系列--建立HA Openstack云(五):安装Glance
同样附上
源码分析
Glance源码架构分析(一)
7.了解Horizon
严格意义来说,Horizon不会为Openstack 增加一个功能,他更多的是一个演示,demo。不过对于很多用户来说,了解Openstack基本都是从Horizon,dashboard开始。从这个角度来看,他在Openstack各个项目里,显得非常重要。
Horizon的开发者,应该是最累的。需要和各个项目打交道。每个项目的功能很多都是需要通过Dashboard来展现。
大家需要注意的是:Horizon只是使用了Openstack部分API功能,很多功能,你可以根据你的需求去实现。
OpenStack管理的Web接口----Horizon
Horizon是一个用以管理、控制OpenStack服务的Web控制面板,它可以管理实例、镜像、创建密匙对,对实例添加卷、操作Swift容器等。除此之外,用户还可以在控制面板中使用终端(console)或VNC直接访问实例。
总之,Horizon具有如下一些特点:
- 实例管理:创建、终止实例,查看终端日志,VNC连接,添加卷等
- 访问与安全管理:创建安全群组,管理密匙对,设置浮动IP等
- 偏好设定:对虚拟硬件模板可以进行不同偏好设定
- 镜像管理:编辑或删除镜像
- 查看服务目录
- 管理用户、配额及项目用途
- 用户管理:创建用户等
- 卷管理:创建卷和快照
- 对象存储处理:创建、删除容器和对象
- 为项目下载环境变量
上面如果作为初学者,可能还是感觉两个字“模糊”,好吧,其实Horizon可以理解为openstack界面,我们既可以通过界面操作openstack,也可以通过shell的方式操作openstack。但是界面在前些版本中还不够完善,很多操作通过命令行的方式更方便些。不过Horizon目前功能在不断的完善。
Horizon无须过多的介绍,因为当我们安装完毕之后,我们自然能够看到界面。
那么该如何使用它,比如创建项目、用户创建网络,详细参考
测试OpenStack Icehouse Horizon —— 创建项目、用户创建网络
更多内容:
Openstack Horizon Icehouse Blueprint简介
openstack dasboard使用的是什么语言,如何搭建开发环境,如何本地化(汉化)
OpenStack Dashboard二次开发--简明教程如何设置OpenStack Horizon开发环境 Part 2
8.Ceilometer
这是实现监控和计量的组件。这应该算是Grizzly的孵化项目。对他的了解其实很少。在Grizzly版本里,你应该可以在Dashboard里看到这个组件。
监控和计费一直是一个难题,尤其用户希望知道cpu和内存的使用情况。看看他如何解决这个问题。到时候看看同事如何调用api来解决监控和计量的问题。解决计量,计费就简单的。
http://wiki.openstack.org/Ceilometer
这个组件目前大家讨论的不多,但是可能会后期发力,因为云平台搭建之后,我们该如何计费,这是个问题,所以有些同学云平台该怎么计费
请问楼主,云主机根据不同配置进行计费的功能是用什么软件实现的?有开源的软件吗?
那么研究下这个这个组件就可以了,我们对它有了了解,那么
Ceilometer如何部署
参考
部署Ceilometer到已有环境中
Ceilometer的概念,
可参考:
OpenStack监控项目Ceilometer的一些术语
Ceilometer API说明参考
OpenStack监控测量服务Ceilometer安装及 API说明
其它
OpenStack里数据采集(监控数据、计费数据)基础设施--Ceilometer
关于源码:
云计算计费:Ceilometer的alarm模块代码分析
OpenStack Ceilometer Collector代码解读
9.了解Heat
这个项目是要解决虚拟机的软件部署的问题。你的虚拟机创建好,os准备好,你还需要做很多配置才能使用,如何能实现把所有繁琐的操作简化呢?亚马逊上有一个专门的工具:AWS cloudformation。目前Openstack上,希望通过Heat来实现类似的功能。
关于这个项目,还是有很多争议。不过这个项目是Redhat发起。他们的功力是不容置疑,等Openstack成熟后,这个项目的重要性就会体现出来。
http://wiki.openstack.org/Heat
真的要实现弹性扩展,自动部署,都是需要指望这个。
上面整体介绍,下面我们介绍
什么是Heat
Heat是一套业务流程平台,旨在帮助用户更轻松地配置以OpenStack为基础的云体系。利用Heat应用程序,开发人员能够在程序中使用模板以实现资源的自动化部署。Heat能够启动应用、创建虚拟机并自动处理整个流程。它还拥有出色的跨平台兼容性,能够与Amazon Web Services业务流程平台CloudFormation相对接——这意味着用户完全可以将AWS模板引入OpenStack环境当中。
为什么是产生Heat
Openstack 对应于云计算的概念,是实现了IaaS(Infrastructure as a Service),即基础设施即服务,提供对云的基础设施运行环境的管理。有了基础设施就可以在其上部署和运行相关的应用,如web群集,paas,数据库等等相关的服务和应用。对于这些软件运行环境的构建需要进行相关的部署过程,当然部署的过程可以手工的完成,但是面对于快速构建应用的普遍需求来说,手工部署并不能满足要求,并且云环境下的群集部署对于普通的非专业的用户来说是很困难的,所以就需要实现一种自动化的通过简单定义和配置就能实现部署的云部署方式。Heat项目就是提供了一种通过模版定义的协同部署方式,实现云基础设施软件运行环境的自动化部署。
上面我们对Heat有了初步的认识,那么Heat如何安装部署、命令如何使用等
更多内容:
openstack(G版、icehouse版本)中Heat介绍
在OpenStack中通过Heat来使用Docker Containers
OpenStack Heat 模板学习一 之hello world
OpenStack Heat模板学习二 之LBaaS(负载均衡即服务)
对于下面组件,目前研究的人不多,简单了解即可
10.Lbaas
Load Balancer as a Service(LBaaS),负载均衡即服务,是OpenStack在其网络组件Neutron中提供的一种将负载均衡器/软件/设备纳入到Neutron体系中的框架,纳入到Neutron中的负载均衡以服务的形态供用户使用。用户可以在OpenStack中自行创建负载均衡器,进行相关配置,并对自己在OpenStack上的instance进行负载均衡。此功能类似于AWS和阿里云中为用户提供的负载均衡服务。
SEnginx目前实现了对OpenStack LBaaS的支持,可以为OpenStack中的instance提供负载均衡服务,这是通过提供了一个LBaaS的driver来实现的,具体使用方法详见:https://github.com/NeusoftSecurity/SEnginx-LBaaS-Driver
目前SEnginx只支持OpenStack的Havana版本(2013.10)
11.oslo
这个项目其实就是把所有组件需要用到相同的东西,集中起来,以前叫nova common,估计感觉不贴切,现在单独成立一个项目。日后大家开发新的组件,估计都需要用到oslo。
其资料不多,相关内容:
OpenStack配置解析库——oslo.config
12.Moniker
这是实现dns功能的组件。其实如果你用过AWS,你就知道这个功能是必不可少。新浪目前的已经加上了这个功能,每个虚拟机,都会自动有一个dns记录。
https://github.com/stackforge/moniker
估计集成到Dashboard里,还是需要等待一段时间啊。目前该项目开发还是非常积极。
13.marconi
此项目用于解决openstack 消息队列的扩展问题。据说这是Rackspce推出的项目,就是为了解决他们生产中遇到消息队列的问题。
附上openstack资源:
希望对大家的学习有帮助
OpenStack Installation Guide for Ubuntu中文翻译版
http://www.aboutyun.com/thread-9218-1-2.html
openstack installation Guide for red hat Enterprise Linux,CentOS, and Fedora
http://www.aboutyun.com/thread-9324-1-2.html
openstack operations Guide英文书籍
http://www.aboutyun.com/thread-9326-1-2.html
openstack各种文档下载
http://www.aboutyun.com/thread-8797-1-2.html
OpenStack身份服务API资料
http://www.aboutyun.com/thread-8699-1-2.html
各个版本Linux系统安装部署openstack icehouse在线英文文档汇总及下载
http://www.aboutyun.com/thread-9417-1-2.html
Swift自编精品教程
http://www.aboutyun.com/thread-9325-1-2.html
2014中国系统架构师大会:视频CDN技术分享
http://www.aboutyun.com/thread-9327-1-2.html
OpenStack Get_介绍及基础概念
http://www.aboutyun.com/thread-9706-1-1.html
openstack开发python教程
http://www.aboutyun.com/thread-9388-1-1.html
Neutron防火墙
http://www.aboutyun.com/thread-9381-1-1.html
盛大云平台架构设计和实现
http://www.aboutyun.com/thread-5568-1-1.html
openstack最新版--- juno版最新官网文档
http://www.aboutyun.com/thread-9423-1-1.html
运维社区-openstack源码安装资源分享
http://www.aboutyun.com/thread-5566-1-1.html
《OpenStack Juno版》资源分享
http://www.aboutyun.com/thread-9888-1-1.html
openstack-ice-house云环境构建
http://www.aboutyun.com/thread-9323-1-1.html
系统讲解 Openvswtich (138页)ppt分享
http://www.aboutyun.com/thread-9839-1-1.html
Zabbix中文使用手册分享
http://www.aboutyun.com/thread-10059-1-1.html
Openstack入门基础知识51页ppt【推荐】
http://www.aboutyun.com/thread-10057-1-1.html
OpenStack-Icehouse版 多节点部署资源
http://www.aboutyun.com/thread-8999-1-1.html
cloudstack介绍及开发环境设置(windows、centos)文档分享
http://www.aboutyun.com/thread-8283-1-1.html
OpenStack企业应用之路
http://www.aboutyun.com/thread-8975-1-1.html
openstack实践pdf分享
http://www.aboutyun.com/thread-10056-1-1.html
华为云计算解决方案
http://www.aboutyun.com/thread-8978-1-1.html
openstack juno版发布文档汇总:各个版本安装、API、配置使用、管理员英文文档
http://www.aboutyun.com/thread-9568-1-1.html
openstack redhat 两小时安装部署
http://www.aboutyun.com/thread-9365-1-1.html
openstack实践、HA、商业模式探讨、新浪应用文档下载
http://www.aboutyun.com/thread-8419-1-2.html
swift安装及开发调试环境及Apple Swift编程语言入门教程
http://www.aboutyun.com/thread-8613-1-2.html
原创:基于Ubuntu上OpenStack IceHouse版详细安装资源分享(中文翻译)
http://www.aboutyun.com/thread-9102-1-2.html
OpenStack 资源分享
http://www.aboutyun.com/thread-9209-1-2.html
基于openstack的docker开发
http://www.aboutyun.com/thread-9186-1-4.html
openstack icehouse 部署视频
http://www.aboutyun.com/thread-8723-1-4.html
云里雾里云计算
http://www.aboutyun.com/thread-8201-1-1.html
openstack开发,Python系列最全文档书籍下载
http://www.aboutyun.com/thread-7853-1-1.html
台湾辅仁大学--Python视频分享
http://www.aboutyun.com/thread-8173-1-1.html
老外python视频30讲、python100例、python100习题等系列汇总
http://www.aboutyun.com/thread-8095-1-1.html
openstack相关文档分享
http://www.aboutyun.com/thread-6741-1-1.html
混合云管理平台CloudForms简介
http://www.aboutyun.com/thread-8008-1-1.html
在Debian上部署OpenStack官方文档翻译1
http://www.aboutyun.com/thread-7255-1-1.html
在Debian上部署OpenStack官方文档翻译2
http://www.aboutyun.com/thread-7665-1-1.html
在Debian上部署OpenStack官方文档翻译3
http://www.aboutyun.com/thread-7961-1-1.html
OpenStack开发之Python资料大全汇总
http://www.aboutyun.com/thread-7950-1-1.html
下面是其资源汇总:
6、openstack开发,Python系列最全文档书籍下载
OpenStack Icehouse 版本官方安装教程-英文版
http://www.aboutyun.com/thread-7617-1-1.html
openstack-H版Centos6.4下安装单网卡安装
http://www.aboutyun.com/thread-7426-1-1.html
CloudComputing相关英文文档
http://www.aboutyun.com/thread-7096-1-1.html
openstack安装英文版openstack-install-guide-ubuntu12_04-apt-trunk
http://www.aboutyun.com/thread-7052-1-1.html
openstack入门、建设公有云、私有云、商业模式、云存储等系列文档下载
http://www.aboutyun.com/thread-8199-1-1.html
OpenStack在Ubuntu12.04X64系统上的安装
在CentOS 6.x通过RPM包安装OpenStack多节点环境文档下载
更多大数据、openstack、云平台资料:
about云汇总帖:包括资源,指导,文档,视频等
http://www.aboutyun.com/thread-7178-1-1.html
about云资源汇总V1.2:包括hadoop,openstack,nosql,虚拟化
http://www.aboutyun.com/thread-5928-1-1.html
about云资源汇总指引V1.3:包括hadoop,openstack,nosql,虚拟化
http://www.aboutyun.com/thread-6150-1-1.html
about云资源汇总指引V1.4:包括hadoop,openstack,nosql,虚拟化
http://www.aboutyun.com/thread-6730-1-1.html
about云资源汇总指引V1.5:包括hadoop,openstack,storm,spark等视频文档书籍汇总
http://www.aboutyun.com/thread-8203-1-1.html
about云资源汇总指引V1.6:包括hadoop,openstack,storm,spark等视频文档书籍汇总
http://www.aboutyun.com/thread-10302-1-1.html