使用 DevStack 快速搭建 OpenStack 实验环境

安装 OpenStack 对新手来说是个痛苦的过程,尤其是 OpenStack 和它依赖的一些组件在快速发展中,经常出现这个版本 keystone 对不上那个版本 dashboard 类似的情况。如果只是想看看 OpenStack 的话,使用 DevStack 是个不错的办法。DevStack 实际上是个 shell 脚本,可以用来快速搭建 OpenStack 的运行和开发环境,特别适合 OpenStack 开发者下载最新的 OpenStack 代码后迅速在自己的笔记本上搭建一个开发环境出来。正如 DevStack 官方所强调的,devstack 不适合用在生产环境。

Can I use DevStack for production?
A: No. We mean it. Really. DevStack makes some implementation choices that are not appropriate for production deployments. We warned you!

维护一个支持多 Linux 发行版的脚本需要很多工作,为了保持简单,DevStack 目前只支持 Ubuntu 11.10 发行版。使用 devstack 脚本很简单,安装 git,然后下载 devstack 代码到本地,运行 stack.sh 脚本依次设定 MySQL, RabbitMQ, OpenStack Dashboard 和 Keystone 的密码,密码输入后 stack.sh 脚本会自动开始安装必要的软件包和库并下载最新的 OpenStack 及其组件代码,整个过程自动完成无需干预:

$ sudo apt-get install git

$ git clone git://github.com/openstack-dev/devstack.git
$ cd devstack/
$ ./stack.sh 

################################################################################
ENTER A PASSWORD TO USE FOR MYSQL.
################################################################################
This value will be written to your localrc file so you don't have to enter it 
again.  Use only alphanumeric characters.
If you leave this blank, a random default value will be used.
Enter a password now:
...

horizon is now available at http://192.168.2.240/
keystone is serving at http://192.168.2.240:5000/v2.0/
examples on using novaclient command line is in exercise.sh
the default users are: admin and demo
the password: vpsee
This is your host ip: 192.168.2.240
stack.sh completed in 684 seconds.
$

如果对默认的 tty.tgz 镜像不满意,想用 ubuntu 11.10 镜像的话编辑 stack.sh 脚本,在 for image_url in ${IMAGE_URLS//,/ }; do 一行上面加入 IMAGE_URLS=http://uec-images.ubuntu.com/oneiric/current/oneiric-server-cloudimg-amd64.tar.gz 这行,然后重新运行 stack.sh 脚本:

$ vi stack.sh
...
    IMAGE_URLS=http://uec-images.ubuntu.com/oneiric/current/oneiric-server-cloudimg-amd64.tar.gz
    for image_url in ${IMAGE_URLS//,/ }; do
        # Downloads the image (uec ami+aki style), then extracts it.
        IMAGE_FNAME=`basename "$image_url"`
        if [ ! -f $FILES/$IMAGE_FNAME ]; then
            wget -c $image_url -O $FILES/$IMAGE_FNAME
        fi

        KERNEL=""
        RAMDISK=""
...

$ ./stack.sh 

还有一点值得注意的地方,如果想使用现有的网络,比如安装 devstack 的这台服务器地址是 192.168.2.240,想让所有运行在上面的 instance 的地址为 192.168.2.241-192.168.2.247 的话,需要修改 stack.sh 里面的 TEST_FLOATING_RANGE,然后重新运行 stack.sh 脚本:

$ vi stack.sh
...
#TEST_FLOATING_RANGE=${TEST_FLOATING_RANGE:-192.168.253.0/29}
TEST_FLOATING_RANGE=${TEST_FLOATING_RANGE:-192.168.2.240/29}
...

$ ./stack.sh

DevStack 安装结束后打开浏览器访问 http://192.168.2.240/ 就可以看到 OpenStack Dashboard 界面,用户名是 admin,密码是刚才设定的密码,输入正确后就会进入 Dashboard,最新的 OpenStack Dashboard 已经有了很大改善,可以创建或导入 keypairs,启动或终止 instance,分配和注射 IP 给 instance,创建和分配 volume 等,还可以添加和管理用户等。界面如下:

openstack-dashboard

评论 (40 Comments)

  1. 不错啊。
    创建一个 localrc 文件来修改他的默认设置,这样比较简单一点。

  2. 怎么在dashboard中实现cloud-publish-tarball命令,找不着这选项

  3. 注射ip给instance报错 http 500 怎么回事

  4. 请问安装完了,浏览器打不开Dashboard是什么原因啊?

  5. @陈沙克
    我觉得直接运行 stack.sh 会简单一些啊,屏幕会提示设置密码,然后会在 devstack 下面生成一个 localrc. 如果第一次安装 openstack 和 devstack 的话直接用 localrc 可能不知道 localrc 里面的格式应该怎么写,应该写哪些参数之类的问题⋯⋯

  6. @zhou
    dashboard 里面没有这个选项(以后可能会有),目前只能在命令行下用 /usr/bin/cloud-publish-tarball

  7. 請問在Login dashboard 時 “Error: Unable to communicate with identity service: [Errno 111] Connection refused. (HTTP 400)”是怎麼回事?

  8. 已解決,謝謝。

  9. 为什么我的DEVstack不能创建keypairs?
    我的安装方法好像跟你一样

  10. devstack挺好的,只是中国的网络,下载依赖包都花了不少时间

  11. @vpsee
    遇到和三楼一样的问题,注册ip报错
    Error: Error associating Floating IP: Associate floating ip failed (HTTP 500)
    分配的地址倒是没问题,就是映射到实例时报错。

  12. @vpsee
    按照以上步骤,装好了以后登陆hostip,提示HTTP 500错误。
    命令行模式一开始也用不了,后面执行了几下source好了。但是登陆dashboard依旧http 500 报错~~

  13. @K.T.Cheang
    我出这个问题
    Error: Unable to fetch volumes: n/a (HTTP 404)

  14. @vpsee
    我也出现了这个问题,求解答
    Error: Error associating Floating IP: Associate floating ip failed (HTTP 500)

  15. K.T.Cheang:你是怎么解决Error: Unable to communicate with identity service: [Errno 111] Connection refused. (HTTP 400)的问题的?

  16. @vpsee
    请问下我装好devstack后,登陆bashboard运行一个实例,实例运行成功了,vnc连接但是我不知道初始的test login和password是多少。。。我上传的是和一样的11.10的镜像文件,请指教下,谢谢。

  17. @dev
    用户名是 ubuntu,采用 ssh key 的方式登陆,因为 openstack 运行实例后会把 public key 注射到 ubuntu 实例里,所以需要 private key 登陆。

  18. @vpsee
    启动的instances分配得到的floating ip是172.24.xx.xx,这不是保留ip么,我是在另外一台xp的机器上运行dashboard的,能连上这个ip么?难道必须在装devstack的机器上才能连上这个instances么,服务器是server版本,没安装图形界面,没法登陆dashboard,必须安装来测试么?求指教。

  19. @dev
    dashboard 是 web 界面,任何浏览器访问 devstack 所在服务器 IP 都可以访问 dashboard,登陆 dashboard 后创建 instance,然后绑定一个外部 IP 给这个 instance,然后外部可以通过 ssh 的方式登陆 instance,也可以在 dashboard 上通过 novnc 访问 instance.

  20. @ffb
    在終端運行stack.sh就好了

  21. mark

  22. 请问那个devstack的脚本如何改成默认xen为虚拟环境?

  23. @breakwind
    devstack/tools/xen 下面有相关工具和文档。

  24. stack脚本中对默认镜像文件进行了调整,然后执行此脚本,执行过程中使用glance上传镜像出错。
    详细如下:
    ++ glance add –silent-upload -A bcfce83df4d443c39616144e9968ddf2 name=oneiric-server-cloudimg-i386-kernel is_public=true container_format=aki disk_format=aki
    + RVAL=’Failed to add image. Got error:
    The request returned 503 Service Unavilable. This generally occurs on service overload or other transient outage.
    Note: Your image metadata may still be in the registry, but the image’\”s status will likely be ‘\”killed’\”.’

    求此问题的解决方法。
    先谢过!

  25. 我安装时出现python can’t open file ‘setup.py’ [error2] 是啥原因那?

  26. @vpsee
    您好,我看了那个tools下的xen的说明文档,里面只说到了xensever
    求教,这样的话,普通的xen是否能够支持?

  27. @breakwind
    理论上普通的 Xen 可以用,但是 OpenStack 官方不支持也不推荐。
    OpenStack 推荐通过 OpenStack XenAPI 连接 XCP 或 XenServer,不推荐直接通过 libvirt 访问 Xen 的方式。

  28. DevStack使用screen模拟,重启后会有问题。

    而一步一步的安装OpenStack会有很多问题,过程太繁琐了,稍不注意就出现各种问题。
    现在可以试试OneStack,Ubuntu上一键部署OpenStack,项目地址为http://onestack.googlecode.com

    文章http://blog.csdn.net/hilyoo/article/details/7696169对这个一键部署云计算工具有介绍。
    这个工具可以安装、重置、卸载、重新安装OpenStack,方便大家,不喜欢折腾的朋友可以试用。

  29. Installed /opt/stack/horizon
    Processing dependencies for horizon==2013.1
    Searching for pytz
    Reading http://pypi.python.org/simple/pytz/
    Reading http://pytz.sourceforge.net
    Download error: timed out — Some packages may not be found!
    Reading http://pytz.sourceforge.net
    Download error: timed out — Some packages may not be found!
    Reading http://pytz.sourceforge.net
    Download error: timed out — Some packages may not be found!
    Reading http://pytz.sourceforge.net
    Download error: timed out — Some packages may not be found!
    Reading http://pytz.sourceforge.net
    Download error: timed out — Some packages may not be found!
    Reading http://pytz.sourceforge.net
    Download error: timed out — Some packages may not be found!
    Reading http://pytz.sourceforge.net

    can you help me , thank you.

  30. @openstack–learner

    你可能是用代理安装devstack的吧,我用代理安装的时候就报了这些错,不用代理后很顺利就安装好了。

  31. @tao
    出现这个问题,应该是devstack正在安装的那个组件还没有下载完成,devstack默认目录好像是在/opt/stack/,你可以进去看看,下面会有很多组件,nova,glance,keystone都在下面,再看报错的那个组件的目录是否为空,例如,如果现在正在安装nova,报错,那么就去nova目录下看,为空的话要重新下载。

  32. @vpsee

    亲,需要帮助啊。devstack安装完后,可以创建虚拟机,但是一直无法ping通,用vnc进虚拟机看到其没有获取到IP地址,设置使用DHCP方式的,跟踪了虚拟机的日志,其DHClient一直在发DHCPDISCOVER消息,然后又跟踪了计算节点的日志,发先其有收到虚拟机的DHCPDISCOVER消息,并且回复了DHCPOffer消息,提供的IP也是正确的。就是不知道出了什么原因,导致DHCP过程无法继续进行,求助啊!!

  33. 请问: 用代理安装运行stack.sh,我的TEST_FLOATING_RANGE要写我的机器地址还是代理的地址?

  34. 请问:kvm虚拟机中用代理运行stack.sh Error:Service horizon is not running会是什么原因?

  35. 执行git clone git://github.com/openstack-dev/devstack.git命令时出现could not create work tree dir ‘devstack’.:????问题是什么原因怎么解决

  36. 在openstack dashboard中创建虚拟机成功,但提示错误:
    Unable to fetch volumes: n/a (HTTP 404)
    这是什么问题。急啊!

  37. 请问,我用devstack安装完成OpenStack之后,上传镜像,新建云主机成功,但是控制台一直报错:Failed to connect to server(code:1006),该怎么解决呢?

  38. @rainbow
    是不是虚拟机可以运行,但是在控制台无法连接到 Console?貌似是 noVNC 问题,OpenStack (nova-novncproxy) 通过 noVNC 连接虚拟机 Console. 先检查 noVNC 是否安装,是否运行正常,服务器上的 VNC 相关端口是否被防火墙屏蔽,看看日志是否能找到启示。noVNC 有问题不是一句话可以说清楚的,先看看《使用 noVNC 开发 Web 虚拟机控制台》了解一下 noVNC 基本工作原理,再看看相关日志。

  39. @rainbow
    我碰到过,windows下可以远程访问镜像,但是控制台下不能访问。可能是你安装时IP有问题,devstack在安装时,检测不到你的IP所有使用了一个内部IP。在local.conf文件中加上一句HOST_IP=XXX就可以了。

  40. 你好,我在安装devstack的时候,进行到swift安装时,报如下错误:

    local swift_project_test1
    2016-10-22 15:49:11.269 | ++lib/swift:create_swift_accounts:643 get_or_create_project swiftprojecttest1 default
    2016-10-22 15:49:11.281 | ++functions-common:get_or_create_project:822 local project_id
    2016-10-22 15:49:11.289 | +++functions-common:get_or_create_project:830 openstack project create swiftprojecttest1 –domain=default –or-show -f value -c id
    2016-10-22 15:49:12.598 | Bad Request (HTTP 400)
    2016-10-22 15:49:12.651 | ++functions-common:get_or_create_project:828 project_id=
    2016-10-22 15:49:12.656 | ++functions-common:get_or_create_project:829 echo
    2016-10-22 15:49:12.666 | +lib/swift:create_swift_accounts:643 swift_project_test1=
    2016-10-22 15:49:12.683 | +lib/swift:create_swift_accounts:644 die_if_not_set 644 swift_project_test1 ‘Failure creating swift_project_test1’
    2016-10-22 15:49:12.692 | +functions-common:die_if_not_set:204 local exitcode=0
    2016-10-22 15:49:12.721 | [Call Trace]
    2016-10-22 15:49:12.721 | ./stack.sh:1071:create_swift_accounts
    2016-10-22 15:49:12.721 | /home/devstack/lib/swift:644:die_if_not_set
    2016-10-22 15:49:12.721 | /home/devstack/functions-common:211:die
    2016-10-22 15:49:12.727 | [ERROR] /home/devstack/functions-common:644 Failure creating swift_project_test1
    2016-10-22 15:49:13.742 | Error on exit

    不知该如何入手,有什么好的建议吗?

发表评论