Apr 232014
 

上周Icehouse就已经发布,Redhat还没正式宣布Icehouse的包发布,不过也已经基本准备好,我就动手安装一下,这个和Havana版本,还是有点区别。

  1. 消息队列默认已经改成Rabbitmq
  2. 使用ML2插件,代替ovs和linux bridge插件,应答文件需要调整(在I版本,你还是可以使用ovs插件,不过到下一个版本,代码就会移掉,所以提前了解ML2插件)

目前packstack的包,更新比较慢,所以我这次直接采用源码来装,这样省事很多。

这个例子,是单节点,对于RDO来说,多节点,并没有太多的区别。

2014年4月24日:目前我安装完后进行测试,发现很多问题,无法创建项目和创建虚拟机。

设置源

RDO需要使用epel源和RDO源,另外由于epel上的puppet版本太旧,所以需要增加puppet的源,Foreman的源,其实我们是用不上。

需要注意的一点就是,如果你是多节点的安装,那么你确保你的其他节点的epel源设置正确就可以,默认packstack不会设置其他节点的epel源。

我试验环境有内网的源,其实是不需要这个的。这个rpm包装完,你会发现 /etc/yum.repos.d/ 目录下多几个文件。

yum install -y http://rdo.fedorapeople.org/openstack-icehouse/rdo-release-icehouse.rpm

网卡配置

默认我使用eth0作为公网,eth1,作为虚拟机通讯,

cat /etc/sysconfig/network-scripts/ifcfg-eth0
DEVICE=eth0
ONBOOT=yes
HWADDR=00:E0:81:D8:43:BE
TYPE=Ethernet
BOOTPROTO=none
IPADDR=172.28.1.10
NETMASK=255.255.0.0
DNS1=172.28.0.1

eth1,是一个虚拟机通讯的网络,所以你设置一个专用的私有IP地址段就可以,这个是GRE网络需要的

cat /etc/sysconfig/network-scripts/ifcfg-eth1
DEVICE=eth1
ONBOOT=yes
HWADDR=00:E0:81:D8:43:BF
TYPE=Ethernet
BOOTPROTO=none
IPADDR=10.1.1.10
NETMASK=255.255.255.0
DNS1=172.28.0.1

 

安装packstack

这是是通过源码,所以速度比较慢,不过可以保证最新的版本,bug已经修复。

yum install -y python-netaddr python-setuptools git
git clone git://github.com/stackforge/packstack
cd packstack
python setup.py install_puppet_modules
./bin/packstack --gen-answer-file=node10.txt

 

修改应答文件

默认的应答文件有点变化,所以需要调整一下

CONFIG_HEAT_INSTALL=y
CONFIG_KEYSTONE_ADMIN_PW=admin
#CONFIG_NEUTRON_L2_PLUGIN=openvswitch
CONFIG_NEUTRON_L2_PLUGIN=ml2
CONFIG_NEUTRON_ML2_TYPE_DRIVERS=gre
CONFIG_NEUTRON_ML2_TENANT_NETWORK_TYPES=gre
CONFIG_NEUTRON_ML2_TUNNEL_ID_RANGES=100:1000
CONFIG_NEUTRON_OVS_TENANT_NETWORK_TYPE=gre
CONFIG_NEUTRON_OVS_TUNNEL_RANGES=100:1000
CONFIG_NEUTRON_OVS_TUNNEL_IF=eth1

#########
CONFIG_HEAT_CLOUDWATCH_INSTALL=y
CONFIG_HEAT_CFN_INSTALL=y

在我的实际的环境中,我还做下面的调整

CONFIG_SSH_KEY=/root/.ssh/authorized_keys
CONFIG_NTP_SERVERS=172.28.0.1
CONFIG_PROVISION_DEMO=n
CONFIG_CINDER_VOLUMES_CREATE=n

做这些调整的目的

  • 使用密钥,可以免除输入密码,这样方便多节点部署
  • 让所有的机器同步时间,避免不必要的麻烦
  • 不创建demo用户,这样可以避免很多误解
  • 用文件模拟cinder volume,性能很差,我的机器里已经有一个lvm 卷 cinder-volumes, 所以不需要文件模拟

运行packstack

这就是安装

./bin/packstack --answer-file=node10.txt

参考文档

https://bugzilla.redhat.com/show_bug.cgi?id=1068962

https://bugzilla.redhat.com/show_bug.cgi?id=1066519

Apr 222014
 

应该是在2010年的时候,虚拟机的磁盘大小是由虚拟机的模板决定,这个就比较痛苦,如果你希望提供多种磁盘格式,那么你就需要搞多个镜像。

还有一种做法,就是固定磁盘大小,操作系统是20G,你可以通过增加磁盘,不能调整硬盘大小。硬盘调整是有风险的,很有可能造成数据丢失。

不过当时在国外,linode和Rackspace,都已经实现磁盘的大小是根据创建的时候选择的硬盘大小。那么这个如何实现的呢。

可以猜测到,肯定是虚拟机启动后,运行的磁盘调整的工具,实现分区扩大,具体如何实现,我们就无从知道。

Openstack上,实现了这个功能,虚拟机的大小是由Flovor来决定,那么我就好好研究一下,这个分区调整是如何实现的。

对于linux的虚拟机镜像的分区,大家有不同的看法。目前我看到的反馈就是

  1. 不需要swap分区
  2. lvm分区没太多意义
  3. 就一个 根分区 / 就可以

要想实现分区扩大,其实需要做的工作是很多的,大家会发现,自己做的镜像,分区是无法调整的。而Ubuntu官方的镜像是可以调整的。而且如果你是多个分区,那么他的扩大的分区,其实是根分区。

所以镜像的制作:http://www.chenshake.com/about-openstack-centos-mirror/ 对于centos,我们就需要自己把linux rootfs resize装上才行。

目前Openstack的Dashboard提供磁盘扩大两个选择,一个是自动resize,一个是自己通过fdisk来设置分区。详细可以看Rackspace文档 http://www.rackspace.com/knowledge_center/article/using-automatic-and-manual-disk-partitioning-on-cloud-servers

让同事研究了一下resize的原理

1. gunzip -c /boot/initramfs-2.6.32-220.el6.x86_64.img |cpio -i –make-directories
             这是一个虚拟的root文件系统。

2. 检查虚拟的root文件系统是否安装growpart,sfdisk ,e2fsck ,resize2fs ,sed ,awk ,partx ,
             如果没有安装,将当前文件系统中的相应工具拷贝到虚拟的文件系统,涉及到库的拷贝

3.修改虚拟文件系统下的init文件:
             sed -i -e ‘/^export PATH=.*/r /root/linux-rootfs-resize/distro/centos-6/mod’ -e //N init
             # 读取/root/linux-rootfs-resize/distro/centos-6/mod文件的内容,插入到init文件中,插入的位置为^export PATH=.*行的上边
             sed -i ‘/^source_all pre-mount/i growroot’ init
             # 在文件init上插入’growroot’,插入的位置为^source_all pre-mount行的上边

4. find ./ | cpio -H newc -o > /tmp/initrd.cpio
             gzip -c /tmp/initrd.cpio > initramfs-2.6.32-220.el6.x86_64.img-mod   #重新打包,从新命名,增加’-mod’

  5.grubby -o /boot/grub/grub.conf –grub –copy-default –add-kernel=/boot/vmlinuz-2.6.32-220.el6.x86_64-mod ‘–title=CentOS release 6.2 (Final) 2.6.32-220.el6.x86_64 mod’ –initrd=/boot/initramfs-2.6.32-220.el6.x86_64.img-mod –make-default
            # 修改grub.conf,使用新生成的initramfs-2.6.32-220.el6.x86_64.img-mod
 
6.镜像启动时,由grub引导到initrd,也就是我们新制作的initramfs-2.6.32-220.el6.x86_64.img-mod,执行用户空间的第一个进程init,此刻涉及到我们上面修改的init文件,上边我们插入了一个函数:
             
                 growroot()
                {
                       root_part=$(echo ${root} |sed “s/block://”)
                       root_dev=$(readlink ${root_part}| sed “s/[^a-z]//g”)
                       part_num=$(readlink ${root_part}| sed “s/[^0-9]//g”)
                       growpart -v /dev/${root_dev} ${part_num}
                       if [ $? -eq 0 ]; then
                           partx -a /dev/${root_dev}
                           e2fsck -f /dev/${root_dev}${part_num}
                           resize2fs -p /dev/${root_dev}${part_num}
                       fi
                 }
                调用这个函数,就会对root分区resize:  growpart -v /dev/vda 3
                                                                 partx -a /dev/vda
                                                                 e2fsck -f /dev/vda3
                                                                 resize2fs -p /dev/vda3

Apr 042014
 

这是我的第一辆车,其实还是非常有感情的。其实我都不好意思告诉别人,我是学汽车维修的,从大学毕业,就一直希望有一辆自己的车,这样开起来就很放心。这个想法,整整过了15年才实现。

也该做一个总结,福瑞迪已经开了两年,那么很多结论应该也比较中肯。

很多人据说可以通过试驾,或者查看各种评测报告来选车,其实我是不太相信这样的说法。试驾那几公里,估计也啥都感觉不出来,一辆车,好和坏,真的是需要长时间才能评估出来。

经过2年的使用,我的感觉就是韩系的车做的质量其实已经是很不错,如果你是第一次买车,或者只是用来代步,那么我认为是非常合适的。

Continue reading »

Apr 022014
 

目前Redhat的RDO,packstack的bug还是很多,rpm包的更新比较慢,所以你遇到的bug,很可能在trunk里已经更新,所以,你可以直接用packstack的源码来安装。

设置源

我的实验环境,其实已经配置后源。

yum install -y http://rdo.fedorapeople.org/openstack-icehouse/rdo-release-icehouse.rpm

安装packstack

yum install -y python-netaddr python-setuptools git
git clone git://github.com/stackforge/packstack
cd packstack
python setup.py install_puppet_modules
./bin/packstack --gen-answer-file=node12.txt

剩下的就是设置应答文件

Mar 202014
 

Openstack的Icehouse,4月17日发布,目前Horizon的所有Blueprint都已经发布。Icehouse,对于Horizon来说,大概完成了70%的工作量,很多重要的功能,都需要等待下一个版本去实现,如果全部都实现,其实还是非常酷的。

Openstack目前已经有10个项目,要对每个项目深入了解,其实都是需要花费大量的时间和精力,Horizon项目是比较简单,也是我最关注的,我整理一下。也希望国内的朋友一起努力,把其他项目的Blueprint都整理一下,方便大家对Openstack的新版本的理解。

基本把所有的Bueprint (BP)都过了一遍,应该算是看懂一大半以上吧。

BP看起来比较闷,就先八卦一下。

我特别喜欢蒋清野这句话:开放源代码作为一种新的商业模式,并不比传统的闭源模式具有更高的道德水准。同理,在道德层面上对不同的开放源代码实践进行评判也是不合适的。

目前Horizon项目是Redhat和HP在主导。以前HPcloud,自己开发了一个Dashboard,目前已经放弃,专用Horizon来对外提供服务。Redhat自己的Openstack版本,Dashboard也不会自己开发,会使用Horizon。所以他们两家投入大量的力气来修改Horizon。Redhat为了让Horizon的UI符合Redhat企业软件的需求,也就投入大量人手去改善Horizon的UI。

 

Router Rules Support for Horizon

这个功能看上去很酷,租户可以设置自己的路由器规则,不过我在router没有找到任何地方可以设置。详细看了一下Blueprint,原来这个功能,是需要Neutron BigSwitch plugin。你用ovs是没戏。

现在Openstack上很多功能,都是厂商增加的,很大程度都会和硬件捆绑。

Add support for public container

这是swift相关的功能,当你创建一个容器的时候,你可以设置他的用户的访问权限ACL。这个功能,其实Rackspace和AWS都是有,尤其AWS上的ACL控制,功能是非常强悍的。

swift

Support for Live Migration

这个功能比较酷,国内关心这个的,实在太多。以前Dashboard里提供的迁移,其实是冷迁移,现在已经可以热迁移,不过我还没测试。

Openstack上现在的本地存储是支持,冷迁移和热迁移,只是如果是本地存储,迁移很慢而已。演示是比较酷的。

Snap1

 

Allow users to create pseudo directories independent from object upload

这也是swift的功能,其实你在dashboard里看到swift上的文件夹,都是假的,对象存储是没有目录的概念。

Horizon reusable charts

Dashboard要看的比较好看,就需要有各种的图来显示相关数据。这里提供了柱状图和饼图。以后大家要创建图,就可以直接使用。

Horizon项目为了让所有的代码都符合License,付出很大的代价,凡是不满足License要求的都不用。

Inline editing for DataTables

如果我们希望编辑一些属性,我们需要点击edit的按钮,跳出一个页面进行编辑,这个显得有点不太友好。有些情况下,可以直接在显示的页面里,直接进行编辑。

Snap3

 

Introduce AngularJS as Frontend Javascript Framework

以前Horizon对输入的数据是不进行前端的校验,经常造成提交后报错。最典型的一个案例,就是如果你的falvor小于你的镜像要求,那么就会出错,如何在前端去避免这个错误呢。

引入这个Blueprint后,前端就可以做的更加丰富,用户体验更好。不过目前页面里,还没很好使用这个功能,希望下一个版本,能全部实现。

Implement RBAC support for volume

RBAC,基于角色的访问控制(Role-Based Access Control),这个功能,对于一个租户下,多个用户,进行权限划分,就非常重要。

假设A用户是管理员,b用户只有查看的权限,C用户可以创建虚拟机,维护自己的虚拟机。这些企业比较需要的功能,都需要RBAC来实现。甚至某个用户只能看网络,存储。

所以Openstack所有的组件都需要RBAC,这样才算比较完善,目前只有几个组件支持,后续的完善需要到J版本。如果你想相信了解这块,可以去Rackspace看看,他们已经在Web端实现。

Automate style checking for javascript files

这个应该是和JS的代码要求。写代码和Js的朋友可以深入研究一下。

Introduce a plugin architecture for Horizon

引入插件的机制,让别的项目可以利用使用这个机制,扩展Dashboard。日后Openstack的其他项目,估计都会通过插件的方式,添加到Horizon里。

现在比较流行所谓的APP Store,我想比较类似,如果你启用某个插件,就会具备某个功能。

DataTable with support for Django Formset

这应该也是让表格的数据显示更加友好,和上面可以直接编辑表格数据比较类似。

Wizard UI for workflow modal dialog

这个功能很酷,引入的向导和工作流。例如虚拟机创建流程和网络创建过程。

Snap4

这是一个很好的开始。虚拟机的创建流程需要到J版本,才能实现。

Remove the underscore library from Horizon

这个应该是代码清理,说明真的很多人真的在干活啊。

Hyper-V RDP console access

Dashboard里,你可以通过console访问linux的虚拟机,如果是windows的虚拟机,那么以前是没啥办法的,如果这个windows的虚拟机的RDP端口没有打开,那你就彻底没戏。

通过这个,你可以通过console访问到虚拟机,基本啥都可以做,类似你坐在机器前面,接显示器在干活。

Add cinder ‘extend’ volume functionality support

现在卷,已经可以扩大,这个功能,已经在Dashboard里实现。

Snap5

Allow tables to be filtered based on criteria

当你虚拟机多了时候,页面如何显示和搜索,就是一个问题。增加了一个过滤条件,可以基于project来搜索。

Snap6

这里其实还有点小问题,无法搜索全部。让同事提交一个bug。

Create a volume as a copy of a volume

这个倒是很好理解,看图

Snap7

 

Enhance UX of Navigation

这个Blueprint,非常大,是Redhat主导,让Dashboard的风格,更加符合企业的使用习惯。

Snap8

看起来非常爽,至少我是这样的感觉。

Extend the plugin-based config for Panel

这个功能我和同事验证了一遍,以后对Dashboard做减法,就更加方便。什么是Panel?

Snap11

1级菜单:project,admin,setting

二级,admin下的:system Panel和Identity Panel

3级:就是system panel下的菜单。你可以通过配置,让这些菜单是否显示。

/opt/stack/horizon/openstack_dashboard/enabled

里面提供了一个例子

cp _60_admin_remove_panel.py.example _60_admin_remove_panel.py

重启apache,就会发现System info的那个菜单没有了。

 

Implement RBAC support for image

镜像服务的RBAC,和RBAC的功能,都是HP提交的。

Modals and supporting different screen sizes

现在的显示器分辨率大家差异还是不小。以前的做法就用大家最常用的1366×768来设计页面,那么在大显示器显示,效果并不太好。

这个功能我的理解是根据显示器分辨率来显示,改善显示的效果。不同分辨率效果图

Checks min requirements before trying to launch an instance

以前用户登录后创建虚拟机失败,很大一部分原因就是选择Flavor和镜像要求不一致,硬盘或者内存不满足需求。

如何解决这个问题呢?那就是你上传镜像的时候,设置好最小内存和最小磁盘,同时在创建虚拟机的流程里,加上各种判断。

Snap12

填写完这两个参数,你就会发现虚拟机创建流程,当你选择image以后,Flavor会调整,并且小于需求的Flavor无法选择。

Snap13

Preset the “Devize size” field in the “Launch Instance” form with the min_disk properties

看图就明白,这其实是对上面的BP一个完善

Snap17

 

Provide an interface for managing host aggregates and availability zones

把以前需要命令配置的在Dashboard里实现,这些都是管理员设置的。

Snap15

 

Support Cinder v2 in Horizon

Dashboard是根据keystone的endpoint来决定使用api的版本的。Horizon支持Cinder的最先版本的API。

Support different kinds of pie charts

支持不同的饼图,

Write selenium tests for Horizon running in a Devstack

这个就和测试,devstack有关。

Allow user to view daily usage report

以前只能管理员看到全部的使用情况,用户可以看到自己每天的使用情况,就是也有一个Overview的页面

Heat Stack Update Action

就是创建完的heat 的stack,现在可以update。

Integration of the testing library Jasmine

这个和测试有关,AngularJS相关的测试,比较有学问,没搞懂。

‘Update’ options for Neutron VPNaaS Horizon Support

VPN服务相关。可以对创建的vpn进行修改。

Add disk config option support

虚拟机创建的过程中,默认会根据你选择的Flavor,把虚拟机的硬盘的根分区调整到最大。不过有些用户并不希望这样,他们希望自己手工区分区。

假设一个镜像他的磁盘是20G,那么他选择一个40G的flavor,选择手动分区,那么你创建完的虚拟机,磁盘是20G,你需要手工的方式把剩下的磁盘20G,进行分区,添加到系统里。

Snap16

 

Create metadata only object without a file

这个和swift有关

Flavor Extra Specs key templates

经常有人问:如何限制虚拟机的磁盘IO和网络带宽,方法很多,不过最简单的就是通过Flavor。

Snap18

你可以设置某个flavor的cpu,网络速度和磁盘IO。这个功能,大家要好好测试。

Modify object object

swift有关,可以update 对象的信息。

Test coverage improvement and refactoring

代码清理工作

Enhance layout of headers (page title) in all views

前端的,就是让左边的导航,可以收缩起来,更加方便。

 

Django 1.6 support

现在最新的Django,应该是1.7,J版本,就会升级。Horizon项目更新还是很及时的。基本保证所有的组件都是最新的。

Decrypt and display VM generated password

这其实是windows镜像的功能,把虚拟机创建随机生成的密码,可以进行加密。这个做法和AWS是一样的。

Add an environment file to Stack creation/update

Snap19

Heat Fix Status Column

感觉着更多是一个bug fix。

Feb 202014
 

在Openstack上,如果你想实现迁移,resize,你都需要配置这个,就是让所有的计算节点,用nova的账号,使用密钥互相访问。

以前我的办法比较土,手工操作也很累,http://www.chenshake.com/of-work-installing-your-rdo/

所以我必须想一个办法来解决这个问题。我需要解决

  1. 我可以用密钥,无密码访问所有的计算节点
  2. 我可以批量复制文件夹到远程的计算节点上
  3. 运行远程的脚本,完成所有的设置

Continue reading »