OneStack:Ubuntu 12.04 上一键自动部署 OpenStack

前几天 OneStack 项目 的作者 Kayven 在 vpsee.com 上留言谈到了 OneStack,一个国人的 OpenStack 一键安装工具,在 vpsee 的忽悠下 Kayven 终于同意写一篇 OneStack 的介绍性文章,如果大家对手动安装配置 OpenStack 有恐惧的话可以试试这个 OneStack 一键安装工具,类似的项目还有 DevStack.

大家如有问题欢迎参与讨论或联系原作者 Kayven (Hily.Hoo@gmail.com). 以下内容来自 Kayven:

在发表了 OneStack: Ubuntu 12.04 (“Precise”) 一键安装部署云计算平台 OpenStack Essex 这篇文章、公布了 OneStack 这个项目后,受到一些人的关注和邀请,诚惶诚恐,非常感谢大家的支持,下面将对这个项目进行更详细的介绍。

OneStack 的引入

为什么需要 OpenStack?作为众多云计算项目的一个,OpenStack 很火。

一是因为 OpenStack自身的优势、Apache2.0 授权的开源性以及兼容性、灵活性和可扩展性等优点;
二是众多企业和组织的参与开发,尤其是世界领军企业的加入,推动了 OpenStack 的高速成长。

为什么需要 OneStack?类似项目有 DevStack,但是使用 DevStack 有如下问题:

部署过错的可定制性和灵活性不是太好,自己只能选择安装哪些服务,如果中间遇到问题或者自己想调整就比较麻烦;
使用 screen 管理运行 OpenStack,重启服务器需要用 screen 进入,很多人以为有些服务会停止或者希望不使用 screen,于是自己 kill 服务并自己手动开启,容易出各种问题(OpenStack 由很多独立组件和服务组成,注意不要遗漏);
没有提供重启、重置、清空数据库等有用功能,还稍显复杂;
而且,使用 DevStack 后还是不清楚整个部署过程是怎样的,自己不能安装官方安装文档来实验和尝试;
由于组件独立分散,安装过程过于繁琐,可以抽象成通用的项目供大家方便使用;
官方提供了一个比较完善的入门文档,但是,按照这几十页的步骤下来需要做很多无用功,容易漏错而引起很多莫名和头疼的问题;
本项目希望不只是提供实验环境,更可以实际部署使用,可以自己修改配置,按需增加组件和功能,实现一键部署,可扩展、可添加任意计算节点。

为什么需要一键自动部署工具?

很多人首先希望尝试一下 OpenStack,做做实验,弄清楚具体怎么实践。官方文档的一大堆步骤会让人忘而生畏;同时又不想部署好后都不知道到底怎么做的,像 DevStack 这样封装比较难看懂,也就难自己修改。OneStack 能够很好的自动部署,同时又能灵活的实验,对于大部分尝试者是个很好的途径。

为什么使用 Ubuntu 12.04?

OpenStack 官方指定的操作系统是 Ubuntu,当然也可以使用其他的,比如 CentOS,不过安装过程有可能会不同。OpenStack 目前主要是以 Ubuntu 版本 Linux 系统为基础写成的,而且很多测试和文档都是在 Ubuntu 下完成的,所以在 Ubuntu 下部署将会有很多便利。另外,Ubuntu 12.04不仅是LTS(长期支持版本),还可以得到五年的支持,对于开发者是个不错的平台。

OneStack 的项目结构

  • oneStack.sh(一键部署 all-in-one 的 OneStack,最主要文件);
  • addComputeNode.sh(增加计算节点);
  • delStack.sh(只卸载nova、glance、keystone等);
  • delAll.sh(卸载所有安装的组件和工具);
  • resetStack.sh(清空数据库,镜像、网络和实例等);
  • addClient.sh(添加客户端,nova管理等);
  • setup_base.sh(安装基本系统);
  • setup_test.sh(添加镜像和实例);
  • HAStack 目录(OneStack 的高可用性,希望更多人可以提出自己的解决方案)。

OneStack 的安装部署

可以一键自动部署 all-in-one 的 OneStack 实验环境,也可以分步骤部署(下次再讨论分步骤部署)。
一键自动部署最简单,只需要文件 oneStack.sh 把所有服务安装到一个机器。

# wget http://onestack.googlecode.com/files/oneStack.sh && \
chmod +x oneStack.sh && ./oneStack.sh

如果需要更多功能,需要 chechout 整个 svn;当然,安装同样只需要 oneStack.sh
1、安装 Ubuntu Precise (12.04);
2、下载 OneStack 脚本:

# svn checkout http://onestack.googlecode.com/svn/trunk/ onestack-read-only

3、运行 OneStack:

# cd onestack-read-only/ && ./oneStack.sh

注意:其实上面的安装还是需要更改网络配置的(其余可以不改,这个是需要改成你自己的)因为,为了简单,在上面的工具里,所有前期工作都加到了文件 oneStack.sh,比如:

  • root 用户密码设置(刚安装的 Ubuntu 默认不启用这个 root 用户);
  • apt 源的配置,可以设置为国内的 163、ustc 的源等;
  • 网络配置,控制节点是需要外网 ip 的,你需要更改oneStack.sh里面的一些配置:/etc/network/interfaces 里面双网卡的 ip、网关等,在脚本靠前的位置,请查找 interfaces. 参数设置:外网 ip 地址等,这些也都在脚本开头一个块里面。自行检查下面 network/interfaces 的两个网卡设置:
    ## 2、自行检查下面 network/interfaces的两个网卡设置
    + OUT_IP=192.168.139.50 
    + OUT_IP_PRE=192.168.139
    ...
    
  • 选择虚拟机技术,裸机使用 kvm,虚拟机使用 qemu 即可
    ## 选择虚拟技术,裸机使用 kvm,虚拟机里面使用 qemu
    VIRT_TYPE=”qemu”
  • 数据库的安装和配置,为了自动化部署,参数设置里面设置好帐号和密码,后面就不需要交互;## 配置 /etc/nova/nova.conf,这里与控制节点的配置相同!比如ip是控制节点的ip
    MYSQL_PASSWD=${MYSQL_PASSWD:-“cloud1234”}
    NOVA_DB_USERNAME=${NOVA_DB_USERNAME:-“novadbadmin”}
    NOVA_DB_PASSWD=${NOVA_DB_PASSWD:-“cloud1234”}
  • 系统会安装 Ubuntu 12.04 的镜像,并启动一个实例。这个过程中镜像自动从 Ubuntu 官网下载,可以查找 cloud-images 更换地址或者镜像 precise-server-cloudimg-amd64-disk1.img,也可以注释掉这个步骤,直接使用 dashboard 在 web 添加镜像启动实例。这个镜像有700多 MB,对于网速不好的用户,可能需要较长时间,因此可以先下载好镜像,然后把这里的地址改成本地即可。

总结一下需要设置的参数:

  • 设置 root 密码这一步可以删掉,使用 root 执行即可;
  • 可选,如果不需要跳过本步骤
    系统语言设置,可以参考oneStack.sh locale部分,不在此介绍
    设置apt源 /etc/apt/sources.list
  • 设置网络
    /etc/network/interfaces
    可以参考oneStack.sh locale部分
  • 配置参数,除了网络ip,其它可以不变
    ## 数据库
    MYSQL_PASSWD=${MYSQL_PASSWD:-“cloud1234″}
    ## 自行检查下面network/interfaces的两个网卡设置与此处一致
    OUT_IP=”192.168.139.50″
    ## 选择虚拟技术,裸机使用kvm,虚拟机里面使用qemu
    VIRT_TYPE=”qemu”
    ## token, 登录dashboard密码
    ADMIN_TOKEN=”admin”
  • 然后执行./oneStack.sh安装即可。

OneStack 的展望

1、加入高可用性 OpenStack 的部署
详见构建 OpenStack 的高可用性(HA,High Availability)对高可用性OpenStack的讨论。对照 CAP 理论,OpenStack 的分布式对象存储系统 Swift 满足了可用性和分区容忍性,没有保证一致性(可选的),只是实现了最终一致性。对于 Swift 的研究和学习网上很多,我不做介绍。但是,在整个 OpenStack 架构中,要满足高可用性需要进行很多工作来保证。主要是通过分离、冗余技术实现,也就是 nova-api、nova-network、glance 等可以分别在多节点上工作,RabbitMQ 可以工作在主备模式,MySQL 可以使用冗余的高可用集群。这些组合可能有很多问题,有些也需要加入到 OpenStack 项目。

2、加入对 Ubuntu 以外的操作系统(如 CentOS)的支持
个人精力有限,所以没有对 CentOS 等其它版本进行支持,也没有对 Ubuntu11 等版本进行测试。但是大家应该只需要把 OneStack 稍加改动就可以用到这些版本的操作系统。因此,如果有人有改好的,可以拿出来分享,别人也也可以顺便帮你改善和讨论。

3、希望更多的有时间的同行参与
正如上面所说,个人精力有限,业余所做,肯定有诸多不足,而且对其它版本没有添加支持,更主要的,希望对高可用性(HA)这个很关键的要求实现自动化部署,因此希望多提出意见建议、多分享自己的经验和成果,造福别人也提高自己。

评论 (11 Comments)

  1. devstack 目的在于为开发者提供一个开发测试环境,开发者不用将精力放在 部署上面,至于openstack的大规模部署,今后会有改善的,配置文件会集中化。

  2. 其实这样大家还是没有了解openstack,我个人更倾向于,手工一步一步安装,有说明文档,特别是openstack nova 网络配置那边,因为不同的人网络环境不同,但是只要写文档人,能详细说明清楚,大家应该都能根据自己的网络环境去更变,大家真正理解了openstack,应该自己可以根据自己的环境去写安装脚本的。而目前的一键安装会让大家适得其反

  3. 嗯,onestack/devstack 适合一些应用场景,比如在了解 openstack 前想看看 openstack 是啥样子,一键安装方便好奇者快速的搭建一个 demo 出来;一键安装也适合 openstack 开发人员,开发人员没有太多精力和时间装系统一步一步搭建 openstack,一键安装很方便。不过对于 openstack 学习者来说,还是鼓励一步一步安装的,自动化工具隐藏了学习的过程,让人变懒了~

  4. vpsee,大哥,我遇到一个棘手问题了,目前我想搭建这样个环境:
    1) 1个控制节点+1个计算节点
    2)cc 节点是个VPS,单网卡;compute节点是台真实的物理机器
    3)cc 和 compute 在同一个网段(192.168.0.0/24)
    4)创建出来的虚拟机,使用现有局域网的空闲IP

    请教vpsee,我该怎么设置cc 和compute的 网络。谢谢!!

  5. @wopub: 不觉得多apt-get install 几步就可以更理解OpenStack,安装与理解其原理机制是两个不同层次的东西(虽然都重要)。正如项目说明,不希望同行们把过多精力花在OpenStack的安装部署上(以后应该会改进),而是对其机制原理、工程实践、性能调优、应用服务等深入研究探讨。 所以提供这个一键部署的工具,帮助大家快速建立环境实验生产实践。 这个工具只是去掉了重复劳动的过程,看完脚本基本知道自己怎么安装的(当然你可以写成类似的脚本,但是意义呢),更多的是通过文档、社区和实践来学习。 至于“是否让人变懒”这是一个恒久的争论不休的话题。

  6. @wopub
    我没仔细看这个脚本,你可以问原作者啊,上面有联系方式~

  7. 支持作者!

    想请教您一个问题,我用您的脚本安装好系统后,创建卷的时候一直停留在creating状态,不管用命令方式还是用dashboard方式都一样。

    附上我创建卷的命令
    $ dd if=/dev/zero of=/opt/nova-volumes.img bs=1M seek=100000 count=0
    $ losetup -f /opt/nova-volumes.img
    $ losetup -a
    $ vgcreate nova-volumes /dev/loop0
    $ vgdisplay
    $ nova volume-create –display_name “volume1” 5
    $ nova volume-list
    +—-+———-+————–+——+————-+————-+
    | ID | Status | Display Name | Size | Volume Type | Attached to |
    +—-+———-+————–+——+————-+————-+
    | 1 | creating | volume1 | 5 | None | |
    +—-+———-+————–+——+————-+————-+

  8. 支持作者!

    想请教您一个问题,我用您的脚本安装好系统后,创建卷的时候一直停留在creating状态,不管用命令方式还是用dashboard方式都一样。

    附上我创建卷的命令
    $ dd if=/dev/zero of=/opt/nova-volumes.img bs=1M seek=100000 count=0
    $ losetup -f /opt/nova-volumes.img
    $ losetup -a
    $ vgcreate nova-volumes /dev/loop0
    $ vgdisplay

    — Volume group —
    VG Name nova-volumes
    System ID
    Format lvm2
    Metadata Areas 1
    Metadata Sequence No 1
    VG Access read/write
    VG Status resizable
    MAX LV 0
    Cur LV 0
    Open LV 0
    Max PV 0
    Cur PV 1
    Act PV 1
    VG Size 97.65 GiB
    PE Size 4.00 MiB
    Total PE 24999
    Alloc PE / Size 0 / 0
    Free PE / Size 24999 / 97.65 GiB
    VG UUID LfQrbD-yELT-Mf0B-8u9n-r7eI-cadN-za2FcS

    $ nova volume-create –display_name “volume1” 5
    $ nova volume-list
    +–—-+———-—-+———————–+——-—+—————–—-+—————–—-+
    | ID | Status | Display Name | Size | Volume Type | Attached to |
    +——+————–+———————–+——-—+————–——-+———–———-+
    | 1 |creating | volume1 | 5 | None | |
    +——+——-——-+———————–+——-—+———–———-+————–——-+

    后来也安装了iscsitarget和iscsitarget-dkms
    $ apt-get install iscsitarget iscsitarget-dkms
    修改/etc/default/iscsitarget里面 “ISCSITARGET_ENABLE=true”
    $ sudo /etc/init.d/iscsitarget restart

    问题依然没解决!不知道各位有没有遇到这种问题。

  9. 问题解决了!我的步骤:
    DD一个设备
    # dd if=/dev/zero of=/opt/nova-volumes.img bs=1M seek=100000 count=0
    加载一个设备
    # losetup -f /opt/nova-volumes.img

    # losetup -a
    /dev/loop0: [0801]:35127298 (/opt/nova-volumes.img)
    创建一个nova-volume的卷
    # vgcreate nova-volumes /dev/loop0
    No physical volume label read from /dev/loop0
    Physical volume “/dev/loop0” successfully created
    Volume group “nova-volumes” successfully created
    查看卷
    #vgdisplay
    就可以看到创建好的nova-volume。
    # service iscsitarget start
    # service nova-volume restart
    # nova-manage service list
    可以看到nova-volume服务已经启动成功!
    创建一个5G的卷,名字为volume1
    # nova volume-create –display_name “volume1” 5

  10. 虽然是一键部署,但是对于初学者不了解构架,网络的也不能做到一键部署。所以,初学者还是建议一步步安装,搞明白关系了,改一下onestack脚本就可以一键部署了。很方便实验,感谢Kayven,感谢vpsee分享。

  11. 按照您的操作步骤进行了,网卡等都设置了,但最后dashboard中显示 Unable to retrieve image list。 nova list 正常,各service都是笑脸,但就是cloud01没有,没有instances也没有images,能否重新编辑一下您的文章,给初学者一个详细的介绍,谢谢

发表评论