陈沙克

Jan 132013
 

朋友老抱怨,gmail里的广告很多。我很奇怪,我自己的gmail邮件,没显示任何的广告。当时没搞明白是啥原因导致的。

今天尝试在Chrome访问gmail,发现真的不少广告。突然明白,原来是我的火狐的广告拦截插件生效的原因。那也就在Chrome上装一个,验证一下。

Adblock plus, 火狐和Chrome都有这个插件,装好就马上可以使用。这样gmail看起来就比较舒服。

一点问题都没有。看来这个插件,真的让google比较受伤。不过难得的是google对这个插件没任何的动作。

Jan 112013
 

Openstack的Dashboard项目Horizon,其实做的很不错。其实如果你熟悉他的代码,对他进行一下简单修改,可以实现很多你需要的功能。很多时候,并不需要做太大的改动。

很多人都是根据Openstack的dashboard来判断有什么功能,其实Dashboard只是Openstack的部分功能,很多你需求的功能,可能很简单就可以实现,基本没啥代码量。当你读Openstack的代码,你带着下面这些需求去看,估计效果更好。如果你实现了下面这些功能,至少说明你已经开始熟悉Openstack。需要记住一点就是下面的功能,全部都是通过调用API实现。

下面的这些功能,你就可以拿来练手。我大概估算一下工作量,如果一个python程序员,从熟悉Openstack开始,加上大家交流,我估计3个月,应该就可以基本搞定下面的功能。这基本都是基于Openstack的Horizon来修改。以下的内容,我公司的开发人员,基本都已经玩了一遍。

大概是3,4百行的代码修改量。

1:虚拟机自动获得Floating IP

当你创建虚拟机的时候,默认是获得一个fix ip,公网的IP,需要手工获得。如何能实现自动获得IP呢?其实nova默认就有这个功能,你只需要在nova.conf 文件加上一个参数就可以实现。现在Grizzly,也在努力实现这个功能。这个功能在HPcloud上已经实现。我同事已经验证了这个功能。这个其实不需要增加一行代码。

2:默认安全组的改进

这个其实是让很多新手比较困惑的地方。默认的安全组是没任何规则,不允许访问。是否可以默认加上ssh和允许ping的规则呢? HPcloud,默认的每个新的用户,都是打开22端口和允许ping。实现这个其实也不难,找对相应的文件的位置,修改就可以,通过调用API来实现。

3:安全组添加UI改进

现在安全组添加完一条规则,马上就关闭页面,如果添加多条规则,很不方便。这个其实是考验你的web水平。现在Grizzly已经决定改进这个地方。这个实现起来,应该是很简单的。

https://blueprints.launchpad.net/horizon/+spec/security-group-rules

4:把虚拟机创建在指定的物理服务器

如果你是管理员,你是可以通过命令行,指定虚拟机在那台物理服务器上创建。如果你希望在Dashboard里实现那么你需要做不少工作。首先你需要把所有的服务器列出来,你才能去选择。需要实现通过API的方式,把你zone里的服务器列出来,产生一个列表,让用户选择。当你把服务器列出来后,后面就简单了,你只需要把参数传过去就可以。

当你机器数量比较少的时候,这样玩是没问题的。而且用户也习惯这种方式。

5:虚拟机关机

默认虚拟机是不能关机的,这其实也是运营模式决定的。不过其实nova 的api是提供虚拟机关机的功能。你只需要调用API接口就可以实现。

6:变更虚拟机配置 Resize

这也是经常提到的问题。为了统一的管理,其实一般都是几个固定的配置,你可以根据你的要求,对配置进行变更。是否支持运行状态下变更配置,这其实基本是由Hyper-V决定。vmware是可以支持cpu,硬盘,网卡,内存的在线添加。对于KVM来说,就只能支持磁盘和网卡。

变更配置,在Openstack里是Resize, 他是要调整虚拟机的硬盘,内存和cpu。对于nova来说,Resize还是比较复杂的,出于运维,管理和成本的考虑,Resize,会对虚拟机进行一个迁移,这样你还需要处理网络的问题。

目前nova是提供了这个功能,不过要很好实现,目前还是很麻烦。最简单的方式就是本地resize,这样你至少就不需要考虑网络。这个我同事基本已经实现了,本地实现resize。

关于Resize,sina修复了两个bug,这个可以看看,https://www.openstack.org/blog/2012/10/how-sina-contributes-to-openstack/

7:热迁移

其实以前大家都认为热迁移的实现,都是需要有共享存储,其实现在各个虚拟化引擎,都已经实现不需要共享存储,也可以实现热迁移。据专家说:KVM下实现热迁移,比Xen好很多。

Nova目前是支持热迁移了,无论是有共享存储还是本地存储。如果是本地存储,为了减少网络的传输压力,如果你的image是qcow2的格式,你可以利用这个特性。至少在演示的时候很酷,本地存储,一下子就迁移过去。

目前这种迁移,其实都是手工去触发。你需要把虚拟机迁移到那台机器上。其实这种操作,也就适合小规模的环境或者是在维护的时候。

在vmware的世界里,热迁移叫VMotion,不过据朋友介绍,当你的虚拟机内存达到16G的时候,你其实就很难迁移,可能是几个小时都无法迁移过去。这其实更多的是一个玩具。

8:冷迁移

这个其实也简单。本地存储,共享存储,都是可以实现。nova都提供相应的API,你只需要在Web实现就可以。不过这种迁移,如何实现对现有的系统影响更少。这是一个问题,尤其是硬盘的IO上。

对于迁移,无论是冷迁移,热迁移,Resize,其实网络和volume都是麻烦的事情,尤其在quantum的网络里。目前这个应该是要花费大量的时间。

9:虚拟机设置root密码

默认nova是采用密钥登陆。这肯定是一个方向。不过用户的习惯,有时候很难改变。他可能更加希望可以创建虚拟机的时候设置密码。

其实nova默认也是提供这个功能。你可以设置虚拟机的root的密码。也可以随机生成密码。你需要做的是如何告诉用户,随机密码是什么。

linux的ssh登陆,密码和密钥,你只能二选一,所以你做image的时候,需要进行设置。

10:集成监控Nagios

Openstack缺乏监控,如何加上监控,集成在Dashboard里?这个应该比想象中简单。因为Horizon默认就考虑到这个。你看一下代码就可以实现。你的模板需要默认启用snmp,这样你的虚拟机都可以监控。考验的就是你对Nagios熟悉。这种方式,在企业内部使用,应该是非常方便的。

Intel的一个Openstack修改版本,已经实现了这个功能。效果其实很不错。

11:多Region实现

当你的环境下有几个环境,或者有Xen和KVM,如何用一个Dashbaord来管理。现在新浪的搞的Stacklab就是类似的方式实现的。

其实这个也很简单,不需要配置任何东西,只需要配置一下就可以。如果如果你希望多个环境使用统一的用户验证,估计需要调整一下。这个是不需要修改代码。

12:用户修改密码

目前用户是没法修改自己的密码,只有管理员可以修改自己的密码。这个功能其实是一定要加上的。实现起来应该不难。目前管理员是可以重设用户的密码,就说明已经有接口,看一下如何实现就可以。需要你了解一下keystone的接口。

13:批量创建虚拟机时候的计算机名字

如果你使用qcow2 镜像格式,批量创建虚拟机是一件比较爽的事情。唯一的问题就是创建出来的虚拟机的命令都是一样。希望可以实现在你指定的计算机名字后面加上数字来区别。邮件列表里有老外提问,不过没有解决。Hpcloud不允许客户自己定义计算机名,是随机生成。

这个同事已经实现。不过只是linux的虚拟机。windows的虚拟机,如果解决呢?现在看来还是有可能实现的。慢慢研究。

13:snapshot备份改进

目前Dashboard里是提供的snapshot的功能。如果你采用qcow2的格式,那么他实际的过程是把base部分和增量部分合并,保存到glance里。这里面是无法实现增量的备份。

一直以来,用户都需要通过快照的方式实现备份,由于虚拟机比较大,所以必须实现增量。

新浪目前已经在实现如何增量备份虚拟机。正在把代码加入Grizzly中 ,这个贡献可真不小啊。https://blueprints.launchpad.net/cinder/+spec/local-storage-volume

非常值得期待。

14: 修改调度

如果才能最大化利用资源,充分利用机器的所有的cpu和内存。我们需要修改它的调度。

假设我有两组机器,1组是新机器,1组是旧机器。我希望实现配置1的虚拟机,都是在新组机器创建,配置2的虚拟机都是在旧的那组机器创建。我如何修改调度去实现这个需求。

目前这个需求实现还是比较困难。正在想办法。

经过学习,好像未来的Grizzly版本,已经解决了这个问题:http://www.cloudcomp.ch/2013/02/how-do-you-organise-your-openstack-deployment/

Dec 252012
 

经常有朋友让我介绍Openstack,我就干脆写一篇Openstack的组件介绍,也算是总结一下。马上2012年就要结束了,也是到该总结的时候。去年现在的Openstack,其实官方的Keystone和Horizon还没法很好的一起工作。

我个人的理解:下面的组件全部工作良好,那么基本的一个IAAS就算比较完整,这些功能都是目前Rackspace和linode都有的。

目前官方认同的孵化项目,都会放到 https://github.com/stackforge

大家可以通过wiki的变化,了解项目目前的情况:http://wiki.openstack.org/RecentChanges

如果大家希望详细了解项目进度,可以阅读他们每次开会的纪要,包括各种问题的讨论,非常有意思:http://eavesdrop.openstack.org/meetings/

如果希望快速了解,可以直接看这个http://eavesdrop.openstack.org/meetings/project/ 所有的项目大概进度都会在这里讨论。

Nova

这个是最核心的,Nova最开始的时候,可以说是一套虚拟化管理程序,还可以管理网络和存储。不过从Essex版本后,Nova开始做减法,和网络相关的内容,包括安全组,交给Quantum负责,存储相关的交给Cinder负责。调度有关的内容,会交给新的项目Marconi

以前还有一个nova common,这其实是各个组件都使用相同的东西,现在也专门成立一个项目:oslo,已经是核心项目。

未来Nova对各种Hyperv的支持是有差异的,KVM和XEN,基本是最好的。微软的Hyper-V算是很不错,微软投入再研发。刚才朋友还专门提到一点:就是未来计算节点,不直接查询数据库,而是通过rpc的方式,据说这是一大进步。

Nova的稳定性,其实取决于libvirt,qemu,希望未来可以能更加稳定。功能现在其实已经不是大问题。

keystone

这是提供身份认证和授权的组件。任何系统,身份认证和授权,其实都比较复杂。尤其Openstack 那么庞大的项目,每个组件都需要使用统一认证和授权。

目前keystone 要做的东西其实还是很多。没法基于角色的授权,web管理用户等。当然你如果希望实现使用动态令牌认证,多因素认证,LDAP集成,这都是未来版本需要实现的功能,这些功能都已经在计划中。

目前好像要实现keystone的高可用,还是比较困难,这个就让社区慢慢解决吧。大规模部署,这也会是瓶颈。

Glance

这是镜像管理。功能其实相对比较简单。不过Glance后端的存储的支持,其实一直到Folsom的版本,Glance对swift的支持,才算是比较完善。

目前Glance的镜像存储,支持本地存储,NFS,swift,sheepdog和Ceph,基本是够用了。

目前Glance的最大需求就是多个数据中心的镜像管理,如何复制,不过这个功能已经基本实现。还有就是租户私有的image管理,这些目前功能都已经实现。

个人感觉:Glance后续基本就是一个bug修复,稳定的阶段。

Quantum

这是网络管理的组件,也是重头戏,Openstack的未来,基本都要靠quantum。上面介绍nova的时候,说过网络相关的内容,都会交给Quantum。不过Quantum的开发进度不是太如人意。Flosom规划实现功能,到Grizzly才实现。未来nova network的代码清理,估计到H版本都不见得可以实现。

Quantum 后端可以是商业产品或者开源。开源产品支持Openvswitch,和linux bridge。网络设备厂商都在积极参与,让他们的产品支持Quantum,目前思科,锐捷已经实现支持。

比较悲观的估计:quantum要完全满足生产的需求,例如带宽限制,mutilhost等功能,很可能需要等到2014年的I版本,真的考验耐心。

如果你关注Quantum的话,就会发现目前还是在起步阶段,无论是bug还是功能,都是非常多。

Cinder

这是存储管理的组件。一直以来,很多人都很纠结AWS的EBS的实现。Openstack也终于推出了自己的存储管理组件。

Cinder存储管理主要是指虚拟机的存储管理。目前支持开源和商业化产品。开源的sheepdog,Ceph等。商业存储的支持,目前IBM是最积极的。未来如果商业存储厂商都支持Cinder,对Openstack的商业化还是非常有利的。

对于企业来说,使用分布式作为虚拟机的存储,并不能真正节省成本,维护一套分布式存储,成本还是很高的。目前虚拟机的各种高可用,备份的问题,其实都可以把问题交给商业存储厂商来解决。

Lbaas

这是实现负载均衡的项目。现在linode,Rackspace,都提供了负载均衡的服务,有了这个服务,你才有可能实现所谓的弹性扩展。这个组件是Mirantis公司和思科合作开发的。目前这个项目集成在Quantum里,不过基本算是一个独立的组件。

Lbaas后端可以是各种商业产品和开源产品。F5,Ngnix,Haproxy,LVS

为了发布的Grizzly,你应该有机会在Dashboard里设置虚拟机的负载均衡。

Horizon

严格意义来说,Horizon不会为Openstack 增加一个功能,他更多的是一个演示,demo。不过对于很多用户来说,了解Openstack基本都是从Horizon,dashboard开始。从这个角度来看,他在Openstack各个项目里,显得非常重要。

Horizon的开发者,应该是最累的。需要和各个项目打角度。每个项目的功能很多都是需要通过Dashboard来展现。

大家需要注意的是:Horizon只是使用了Openstack部分API功能,很多功能,你可以根据你的需求去实现。

Swift

这是对象存储的组件。对于大部分用户来说,swift不是必须的。你只有存储数量到一定级别,而且是非结构化数据才有这样的需求。很多人都问一个相同的问题:是否可以把虚拟机的存储放在swift上。简单回答:不行。你需要搞明白对象存储是干啥,擅长那些地方,那些是不行的。

swift是Openstack所有组件了最成熟的,可以在线升级版本,各种版本可以混合在一起,也就是说,1.75版本的swift可以和1.48的在一个群集里.这个是很难得的.

oslo

这个项目其实就是把所有组件需要用到相同的东西,集中起来,以前叫nova common,估计感觉不贴切,现在单独成立一个项目。日后大家开发新的组件,估计都需要用到oslo。

Ceilometer

这是实现监控和计量的组件。这应该算是Grizzly的孵化项目。对他的了解其实很少。在Grizzly版本里,你应该可以在Dashboard里看到这个组件。

监控和计费一直是一个难题,尤其用户希望知道cpu和内存的使用情况。看看他如何解决这个问题。到时候看看同事如何调用api来解决监控和计量的问题。解决计量,计费就简单的。

http://wiki.openstack.org/Ceilometer

Heat

这个项目是要解决虚拟机的软件部署的问题。你的虚拟机创建好,os准备好,你还需要做很多配置才能使用,如何能实现把所有繁琐的操作简化呢?亚马逊上有一个专门的工具:AWS cloudformation。目前Openstack上,希望通过Heat来实现类似的功能。

关于这个项目,还是有很多争议。不过这个项目是Redhat发起。他们的功力是不容置疑,等Openstack成熟后,这个项目的重要性就会体现出来。

http://wiki.openstack.org/Heat 

真的要实现弹性扩展,自动部署,都是需要指望这个。目前Heat已经成为孵化项目

下面的项目,基本都还是在讨论阶段,不过成为孵化项目的可能性很大。

Moniker

这是实现dns功能的组件。其实如果你用过AWS,你就知道这个功能是必不可少。新浪目前的已经加上了这个功能,每个虚拟机,都会自动有一个dns记录。

https://github.com/stackforge/moniker

估计集成到Dashboard里,还是需要等待一段时间啊。目前该项目开发还是非常积极。

marconi

此项目用于解决openstack 消息队列的扩展问题。据说这是Rackspce推出的项目,就是为了解决他们生产中遇到消息队列的问题。

Marconi – Message Bus for OpenStack