Chinaunix首页 | 论坛 | 博客
  • 博客访问: 797161
  • 博文数量: 247
  • 博客积分: 166
  • 博客等级: 入伍新兵
  • 技术积分: 2199
  • 用 户 组: 普通用户
  • 注册时间: 2012-11-15 16:10
文章分类

全部博文(247)

文章存档

2017年(1)

2015年(63)

2014年(80)

2013年(94)

2012年(9)

分类: 云计算

2013-04-01 11:43:55

导言
CloudFoundry(下文简称CF)是业界首个开源的PaaS平台,专为简化云时代应用程序的端到端开发、部署和运行而构建。 CF将在多种框架中构建的不同种类的应用服务和应用程序精心编排在一起,并在不同的云基础架构(IaaS)中自动部署应用程序及其基础架构。
实际工作中,如何将目前各个服务以及关联组件独立、分散运维的现状,变更为统一可伸缩的云组织架构,实现快速地部署和扩展,一直是我的一个想法。CloudFoundry的出现无疑提供了一些解决方案和思路。现在,我就来谈一谈如何用CF自带的网络安装脚本,搭建单节点私有云平台环境。


环境
Linux ubuntu-server-1004 2.6.32-38 i686
$USER=work
Virtual Box 4.1.22
可接入Internet或者apt更新源
虚拟机RAM至少1G


虚拟机环境准备
因为虚拟机创建和管理非常方便,因此实践CF最好先准备一个干净的虚拟机环境。官方推荐使用ubuntu-server-1004 lts 64bit版,本文中使用32bit版,也可以实现安装。ubuntu安装方法在下不表。

题外话:创建本地隧道(端口转发)
Vm ready后,为方便用网络终端操作系统,需要额外安装ssh服务。
  1. sudo apt-get install openssh-server
virtual-box的vm settings->network->port forwarding,在host port里填入任意端口(8222),在guest por填入22
在host os里用终端连接软件(securecrt),新建连接,主机名:127.0.0.1 端口:8222
这样就能够完成网络终端使用VM了。
这一步完毕后,推荐保存一下VM Snap Shot,便不时之需。


运行网络安装脚本
cf官方提供的安装方法是直接用进程替换的方式执行:
  1. sudo apt-get install curl
  2. bash < <(curl -s -k -B https://raw.github.com/cloudfoundry/vcap/master/dev_setup/bin/vcap_dev_setup)
这样不适合安装方法的研究,下载下来再执行:
  1. wget https://raw.github.com/cloudfoundry/vcap/master/dev_setup/bin/vcap_dev_setup
  2. sh vcap_dev_setup    #安装过程中,会出现多次sudo和确认y
网络安装脚本解读
该脚本其实做了cf需要使用的关联组件的安装(ruby,rubygem,chef)等,并最后调用che正式安装cf。
  1. 解析安装选项;
  2. apt-get update;
  3. 安装wget用于后续下载,并测试网络连接性能;
  4. apt-get install ruby ruby-dev libopenssl-ruby rdoc ri irb build-essential ssl-cert ,安装ruby、ruby组件等prerequisites
  5. 下载rubygems并安装;
  6. gem安装chef,而chef用于正式安装;
  7. gem安装blobstore_client;
  8. gem安装rake;
  9. apt-get install git-core;
  10. git检出vcap的工作空间(cf源码);
  11. 调用chefsolo_launch.rb运行chef,chef根据配置正式开始安装cf。
至于chef执行安装的细节,需要另行细细研究。


安装完成
整个安装过程耗时约3-4小时(视网络连接和服务器性能),并且容易受到网络中断(被墙)和其他隐藏因素导致终止,请先看下本文的“已知问题”。再重新执行vcap_dev_setup脚本,或重新执行$CLOUDFOUNDRY_HOME/vcap/dev_setup/lib/chefsolo_launch.rb $ARGS,直到完成为止。如果脚本回显"Successful",证明安装成功。若不加选项安装,在/home/work/cloudfoundry下已有完备的单节点云平台实例,等待启动。


CF启停
vcap_dev把cloudfoundry的各个组件(cloud_controller,stager,dea,router和其他services)启动。启动脚本是$CLOUDFOUNDRY_HOME/vcap/dev_setup/bin/vcap_dev,还等什么,赶快启动试用一下:
  1. /home/work/cloudfoundry/vcap/dev_setup/bin/vcap_dev start|stop|restart
若出现"cloud_controller :  STOPPED"且紧跟着如下报错可以忽略,此时cc模块已经启动成功。vcap_dev restart重启多次也可以解决这个问题。
  1. Rails Error: Unable to access log file. Please ensure that exists and is chmod 0666. The log level has been raised to WARN and the output directed to STDERR until the problem is fixed.

安装验证
  1. . /home/work/.cloudfoundry_deployment_local #读入cf的环境
  2. vmc target api.vcap.me  #target操作,指定一个云
  3. vmc register --email my@my.com #在私有云上注册账户
  4. vmc login --email foo@bar.com --password password #登录,在新版cf上已经改变认证语句,基本形式不变
  5. vmc info #查看info

  6. #output
  7. VMware's Cloud Application Platform
    For support visit
    Target:   (v0.999)
    Client:   v0.3.23
    User:     oceanswimmer7@gmail.com
    Usage:    Memory   (256.0M of 2.0G total)
              Services (0 of 16 total)
              Apps     (1 of 20 total)
注:操作cf一定需要一个账户,因此先做一遍register私有云本地账户。


部署一个简单应用到云
vmc客户端的详细操作将在下一篇详细介绍。
  1. mkdir -p /home/work/app/sample #建立部署目录

  2. cat > sample.rb #建立一个简单rb服务
  3. require 'rubygems'
  4. require 'sinatra'

  5. get '/' do
  6.   host = ENV['VCAP_APP_HOST']
  7.   port = ENV['VCAP_APP_PORT']
  8.   "

    XXXXX Hello from the Cloud! via: #{host}:#{port}

    "

  9. end

  10. get '/env' do
  11.   res = ''
  12.   ENV.each do |k, v|
  13.     res << "#{k}: #{v}
    "

  14.   end
  15.   res
  16. end
  17. ^D

  18. vmc push sample --instances 3 --mem 64M --url sample.vcap.me -n #推送程序到云上
  19. vmc apps #列出所有服务的状态
  20. #
  21. +-------------+----+---------+----------------+----------+
  22. | Application | #  | Health  | URLS           | Services |
  23. +-------------+----+---------+----------------+----------+
  24. | sample      | 2  | RUNNING | sample.vcap.me |          |
  25. +-------------+----+---------+----------------+----------+
用“虚拟机环境准备”的方法建立hostos:80<->guestos:80的转发策略,浏览器内访问:sample.vcap.me,尝试刷新多次,可以看到id的变化(对应3个实例),访问sample.vcap.me/env查看cgi的环境变量。


已知的问题
我在1004和1204上都装了一次,1004按照上述方式可以满足安装。
1204下:存在其他缺少包的问题,在安装cf前,请先安装如下包,并制定gcc到gcc-4.4
  1. sudo apt-get install ruby-ncurses  libncurses-ruby libncurses5 libncurses5-dev libncursesw5
  2. sudo apt-get -y install libcurl4-openssl-dev=7.22.0-3ubuntu4
  3. sudo apt-get install libssl0.9.8
  4. sudo gem install multi_json -v "1.3.6"
  5. sudo /home/work/cloudfoundry/.deployments/devbox/deploy/rubies/ruby-1.9.2-p180/bin/gem install multi_json -v "1.3.6"
  6. sudo /home/work/cloudfoundry/.deployments/devbox/deploy/rubies/ruby-1.9.2-p180/bin/gem install multi_json -v "1.4.0"
  7. sudo apt-get install libwxgtk2.8-dev
  8. sudo apt-get install libglfw-dev
  9. sudo apt-get -q -y install libmagickwand-dev=8:6.6.9.7-5ubuntu3.2
  10. sudo apt-get install unixodbc
  11. sudo apt-get install unixodbc-dev
  12. sudo apt-get install gcc-4.4
  13. sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-4.4 50 #指定gcc
之后执行安装脚本,可以满足基本需求。


实测
按照如上方法可以完成cf的安装,实测中由于网络原因安装失败N次,启动cf时也不能保证每次所有模块启动成功。so far, so good.


结论
cf的安装不难,对于用户来说就单一个脚本,执行过程中,会频繁退出(由于网络原因),执行稳定性有待提高。
从支持的os看,截止目前,cloudfoundry官方发布的还只能支持ubuntu-server的安装,对于生产环境大部分使用rhel或者其他主流unix系统的,只能逐步摸索chef执行安装的原理过程,缺乏一定简单可依赖的源码安装方法,不得不说cf的移植性阻碍了cf在实际生产环境中的使用和部署进程。

今后,有空可以研究一下chef执行安装的过程。


参考资料
http://cndocs.cloudfoundry.com/deploy/dev_setup-Single-Node.html
阅读(1820) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~