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)中。
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