Pivotal Web Service主管工程师 产品经理 吴疆

一提起云计算服务,大家头脑中一般都会想到在一个机器轰鸣的数据中心,一个个机架排列在一起,一台台服务器在紧张的工作着,似乎搭建云计算环境都需要许多台强大的服务器。但是事实上,无论是提供IaaS服务的OpenStack,还是提供PaaS服务的CloudFoundry,都可以安装在一台计算机上,甚至可以只安装在一台虚拟机上。

0. 为什么需要单机版的云平台

无论是IaaS还是PaaS,云平台的主要设计目标都是抽象化和虚拟化系统资源,以达到为多个客户提供按需分配的计算资源。因此,我们的印象中,云平台应该是一个强大的包含许多系统资源的平台。那么,我们为什么需要单机片的云平台?

第一,单机版的云平台安装部署简单,方便爱好者学习和研究。在学习和评估云平台的过程中,我们一般不需要一个集群版的Openstack或者Cloud Foundry。 我们都希望能够用最快的速度和最少的资源搭建一个云平台,然后马上开始测试盒验证功能。

第二,单机版云平台可以用来云应用的开发和测试。在开发云应用的过程中,如果每次修改都要把应用部署到远程的云平台,一是速度较慢,二是不方便调试。因此一个部署在本地的包含最小功能机的云平台非常适合在开发阶段开发调试云应用。

因此,作为开源的PaaS平台,Cloud Foundry提供了多个单机版部署方案,包括bosh-lite, lattice, micropcf.

本文描述的就是使用Bosh-lite项目搭建单机版的CloudFoundry学习环境

1. Bosh-lite简介

Bosh是由Cloud Foundry基金会开发的一款用来部署和升级Cloud Foundry和Cloud Foundry的云平台配置管理工具,详见http://bosh.io. 顾名思义,Bosh-lite是精简版的bosh,由CloudFoundry团队开发的一个可以在一个虚拟机上部署bosh+CloudFoundry的开源项目,主要目的是帮助开发人员搭建CloudFoundry的本地开发环境,也可以帮助CloudFoundry爱好者来学习CloudFundry。

Bosh-lite目前支持仅MAC OS X和Linux系统。Bosh-lite使用Vagrant管理虚拟机,所以目前只支持VirtualBox和VMWare Fusion (MAC OS X)虚拟机平台。

如下图所示,Bosh客户端CLI运行在宿主机(HOST OS)上,通过Bosh CLI,我们可以把Bosh和Cloud Foundry的各个component部署在VirtualBox的虚拟机上,Bosh和CloudFoundry的各个Component,例如UAA,Router等,都是运行在Garden容器(Garden Container)中。

wKioL1cPVkjDUSu7AAGZc53s8eI708.jpg

2. 环境准备

笔者采用的事Cent OS 7.2作为宿主机的操作系统,VirtualBox为虚拟机平台

2.1 安装以来的软件包

# rpm -Uvh http://mirror.pnl.gov/epel/7/x86_64/e/epel-release-7-5.noarch.rpm
# yum install -y vim git screen kernel* libX11 qt SDL SDL-devel libxml2-devel \
               libvpx libpng libXt libXmu libxslt libxslt-devel openssl \ 
               openssl-devel libXcursor libXinerama qt qt-devel wget gcc unzip ntpdate net-tools

2.2 安装Ruby环境

笔者使用rbenv来安装和管理ruby

# git clone git://github.com/sstephenson/rbenv.git $HOME/.rbenv
# git clone https://github.com/sstephenson/ruby-build.git $HOME/.rbenv/plugins/ruby-build
# echo 'export PATH="$HOME/.rbenv/bin:$PATH"' >> ~/.bash_profile
# echo 'eval "$(rbenv init -)"' >> ~/.bash_profile
# source ~/.bash_profile
# rbenv install 2.3.0

# rbenv global 2.1.3
# gem install bundle
# gem install nokogiri — --use-system-libraries

2.3安装Vagrant

# wget https://releases.hashicorp.com/vagrant/1.8.1/vagrant_1.8.1_x86_64.rpm
# rpm -Uvh vagrant_1.8.1_x86_64.rpm

验证vagrant

# vagrant --version
Vagrant 1.8.1

2.4 安装VirtualBox

# wget http://download.virtualbox.org/virtualbox/5.0.16/VirtualBox-5.0-5.0.16_105871_el7-1.x86_64.rpm
# #安装virtualbox时需要linux kernel的源代码,设置KERN_DIR环境变量指示kernel源代码路径
# export KERN_DIR=/usr/src/kernels/<your kernel dir>
# rpm -Uvh VirtualBox-5.0-5.0.16_105871_el7-1.x86_64.rpm

验证virtualbox是否安装成功

# VBoxManage --version
5.0.16r105871

3. 准备bosh-lite环境

3.1 安装Bosh CLI

# gem install bosh_cli

3.2 安装manifest merge工具

Spiff是Cloud Foundry基金会开发的一款涌来合并bosh部署文件的工具,详见https://github.com/cloudfoundry-incubator/spiff

# wget 
# unzip spiff_linux_amd64.zip -d /usr/bin

3.3 Checkout bosh-lite和cf-release

# #bosh-lite和cf-release这两个代码库必须放在同一级目录下
# mkdir ~/workspace
# git clone https://github.com/cloudfoundry/cf-release

3.4 启动VirtualBox虚拟机

# cd ~/workspace/bosh-lite
# vagrant up --provider=virtualbox
# #启动成功后可以运行下面的命令去查看虚拟机的状态
# vagrant global-status
id       name    provider   state   directory
------------------------------------------------------------------------
0e3f85a  default virtualbox running /root/workspace/bosh-lite

The above shows information about all known Vagrant environments
on this machine. This data is cached and may not be completely
up-to-date. To interact with any of the machines, you can go to
that directory and run Vagrant, or you can use the ID directly
with Vagrant commands from any directory. For example:
"vagrant destroy 1a2b3c4d"


启动后的bosh-lite虚拟机配置了两块网卡,一块用来连接CloudFoundry网络,使用10.244.0.0/19;一块用来和宿主机通信,使用IP 192.168.50.4, 因此在宿主机需要添加访问CloudFoundry网络的路由

# route add -net 10.244.0.0/19 gw 192.168.50.4
# #如果配置了HTTP或者HTTPS的代理,请先运行下面这条命令


至此,一个超微型的bosh环境-bosh-lite环境准备完毕。

4. 部署CloudFoundry

4.1 生成CloudFoundry部署描述文件

部署cloud Foundry首先需要选择一个域名,例如 xyz.com, 而且需要把*.xyz.com都解析为同一个IP地址, 为了方便大家使用bosh-lite, Cloud Foundry提供了一个默认的域名,bosh-lite.com, 并且统一解析为10.244.0.34

# ping 
PING  (10.244.0.34): 56 data bytes
Request timeout for icmp_seq 0
Request timeout for icmp_seq 1
^C
---  ping statistics ---
3 packets transmitted, 0 packets received, 100.0% packet loss

# ping xyz.bosh-lite.com
PING xyz.bosh-lite.com (10.244.0.34): 56 data bytes
Request timeout for icmp_seq 0
Request timeout for icmp_seq 1
^C
--- xyz.bosh-lite.com ping statistics ---
3 packets transmitted, 0 packets received, 100.0% packet loss

生成部署描述文件 (deployment manifest)

# cd ~/workspace/cf-release
# # 下载所有的子模块(submodule)
#  ./scripts/update
# # 生成部署描述文件
# ./scripts/generate-bosh-lite-dev-manifest

4.2 上传Stemcell

Stemcell是bosh中的一个独特的概念,类似于虚拟机镜像,部署Cloud Foundry之前需要使用bosh上传相应平台的stemcell。所有的stemcell都可以在http://bosh.io/stemcells找到

# wget bosh target 192.168.50.4 lite
# bosh upload stemcell

4.3 上传Cloud foundry Release

Release也是bosh中的一个重要概念,是所有的需要部署的文件(包括二进制和配置文件)的集合。Cloud Foundry的release 文件也可以从http://bosh.io/releases/github.com/cloudfoundry/cf-release?all=1下载

# wget 
# bosh upload release cf-release-234.tgz

4.4 部署Cloud Foundry

# bosh deploy

5. 验证Cloud Foundry部署

# bosh vms  
Deployment `cf-warden'  
  
Director task 9  
  
Task 9 done  
  
+------------------------------------+---------+---------------+--------------+  
| Job/index                          | State   | Resource Pool | IPs          |  
+------------------------------------+---------+---------------+--------------+  
| api_z1/0                           | running | large_z1      | 10.244.0.134 |  
| etcd_z1/0                          | running | medium_z1     | 10.244.0.42  |  
| ha_proxy_z1/0                      | running | router_z1     | 10.244.0.34  |  
| hm9000_z1/0                        | running | medium_z1     | 10.244.0.138 |  
| loggregator_trafficcontroller_z1/0 | running | small_z1      | 10.244.0.146 |  
| loggregator_z1/0                   | running | medium_z1     | 10.244.0.142 |  
| nats_z1/0                          | running | medium_z1     | 10.244.0.6   |  
| postgres_z1/0                      | running | medium_z1     | 10.244.0.30  |  
| router_z1/0                        | running | router_z1     | 10.244.0.22  |  
| runner_z1/0                        | running | runner_z1     | 10.244.0.26  |  
| uaa_z1/0                           | running | medium_z1     | 10.244.0.130 |  
+------------------------------------+---------+---------------+--------------+  
  
VMs total: 11