天天看點

windows下用BOSH lite方式在單個VM中安裝Cloud Foundry2.x

windows下用BOSH lite方式在單個VM中安裝Cloud Foundry2.x

前言

Cloud Foundry組織的官方文檔提供了一種方式,BOSH Lite,可以在單個VM上部署Cloud Foundry 2.x的環境。然而該文檔高度濃縮,基本沒有解釋,而且文檔是基于Linux主控端來說明的。而我用的是windows環境,按照該文檔操作折騰了無數遍,終于對這種方式有了較深的了解。記錄和分享如下,給對CF有興趣的朋友一些參考。

環境需求:記憶體8G以上;可連接配接internet。相信這個配置很多朋友可能實作了。

術語:

- virtualbox:虛拟化系統,支援win、linux、MacOS。

- vagrant:基于Ruby的工具,用于建立和部署虛拟化開發環境。它使用Oracle的開源VirtualBox虛拟化系統,使用Chef建立自動化虛拟環境。它用模闆+配置來建立vbox虛機。

- bosh:大規模部署工具,分為server和client

- boshlite:一個設定好了的bosh server。在vagrant虛拟機裡,

- warden:linux中的一種容器型虛機。本文中的方法用warden在同一個linux中隔離CF的各元件

- git:版本工具

- stemcell:嵌入了BOSH Agent的VM模闆。BOSH Lite使用Warden CPI,是以需要Warden Stemcell。

Cloud Foundry組織的官方文檔是用一台linux主控端作為bosh client,在其上建立bosh server虛拟機,然後部署CF到這個bosh server虛機中。部署完後,boshlite(作為bosh server)是一個虛拟機,裡面用warden方式建立了CF的各元件。

官方方式原理:

- 用vagrant建立一個virtualBox虛拟機,包含了bosh server

- 通過bosh client,連接配接bosh server,将CF代碼等上傳到bosh server虛拟機

- 通過這些代碼和配置,在bosh server虛拟機中部署用warden隔離的CF元件

我平常的工作電腦是windows,本來想直接在windows下進行部署操作的,過程中得到以下結論:

- 用vagrant建立virtualbox的基礎CF虛拟的步驟,經測試在windows下是沒有問題的

- bosh client部署過程中有一些問題,到後面步驟執行不下去。主要是ruby腳本的執行問題(本來是按linux寫的)

- 部署過程中有大量需要聯機下載下傳的步驟,由于網絡問題,且很容易中斷。這部分對了解CF的架構沒什麼大幫助,但花費了大量時間。

轉換思路:

- 用windows下的vagrant建立bosh server的虛拟機,把bosh client也部署到這個虛機中,用這個bosh client再操作後續步驟

- 其它操作與官方文檔相似

- 能離線安裝的部分都預先下載下傳下來,部署時可以加快速度

實驗環境:windows7 64bit,8G以上記憶體

一定要64bit,32bit沒測試,不知道。說是在windows裡安裝,其實隻是用到windows下的virtualbox和vagrant。最終效果是在windows上有一個CF的虛拟機。VirtualBox支援win、linux、MacOS,是以以下大部分步驟在其它OS上應該也是可行的。

一、在windows指令下操作

- 安裝virtualbox

Virtualbox [ https://www.virtualbox.org/wiki/Downloads]

安裝好就行,不需要手工建虛機。這個就不說了,要了解的話網上有很多資料。

- install vagrant

Vagrant [ http://www.vagrantup.com/downloads.html]

圖形化安裝,也沒什麼好說的。

- 配置Vagrantfile,啟動bosh lite (server)虛拟機

c:\> cd d:\

d:\> mkdir vagrant

d:\> cd vagrant

這個檔案在boshlite的源碼中,我已經把它拿出來了,并作了修改。在d:\vagrant下建立這個檔案。

###
VM_MEMORY = ENV.fetch("VM_MEMORY", 4*1024).to_i
VM_CORES = ENV.fetch("VM_CORES", 4).to_i
BOX_VERSION = 217

Vagrant.configure('2') do |config|

  config.vm.hostname='bosh-lite'
  config.vm.box = "boshlite-ubuntu1204-build#{BOX_VERSION}"
  config.vm.network :private_network, ip: '192.168.50.4'

  config.vm.provider :virtualbox do |v, override|
    #override.vm.box_url = "http://bosh-lite-build-artifacts.s3.amazonaws.com/bosh-lite/#{BOX_VERSION}/boshlite-virtualbox-ubuntu1204.box"
    override.vm.box_url = "file:///c:/temp/boshlite-virtualbox-ubuntu1204.box"
    v.customize ["modifyvm", :id, "--memory", VM_MEMORY]
    v.customize ["modifyvm", :id, "--cpus", VM_CORES]
  end

end
###
           

其中vagrant的虛機模闆最好預先下載下傳(boshlite-virtualbox-ubuntu1204.box)。不下載下傳的話,vagrant up時從網際網路安裝,特别慢。

下載下傳位址:http://bosh-lite-build-artifacts.s3.amazonaws.com/bosh-lite/#{BOX_VERSION}/boshlite-virtualbox-ubuntu1204.box

我用的是217版本,是以是http://bosh-lite-build-artifacts.s3.amazonaws.com/bosh-lite/217/boshlite-virtualbox-ubuntu1204.box。如果要用最新版本,從boshlite的源碼檔案中檢視版本号。懶人可以到這裡下載下傳217版本。

以上的Vagrantfile檔案中假設下載下傳檔案放在c:\temp\boshlite-virtualbox-ubuntu1204.box

d:\> vagrant up

最後有報錯也無所謂,後面可以正常運作。

如果需要操作vagrant:

vagrant halt(停止虛拟機,注意要在Vagrantfile檔案所有在目錄下執行)

vagrant destroy(删除虛拟機,注意要在Vagrantfile檔案所有在目錄下執行。預設删除default,會有提示)

vagrant up(啟動虛拟機)

- 添加路由,目的是從windows中通路CF元件時,通過這台bosh server作用路由(因為CF元件在這個bosh server中)。windows裡執行下一句:

route add 10.244.0.0/19 192.168.50.4

二、在vagrant建立的linux中操作

這個boshlite的虛拟機中有很多package已經安裝了,例如ruby、git,是以用它做bosh client可以減少很多步驟。

- ssh登入,127.0.0.1:2222(或192.168.50.4:22),使用者名/密碼為vagrant/vagrant。ssh工具就不說明了,自己去找SecureCRT或Putty。

- 改apt的source.list,改為國内源(改了之後會快很多)

修改源位址:

$ sudo cp /etc/apt/sources.list /etc/apt/sources.list.bak

$ sudo vi /etc/apt/sources.list

:%s/us.arch/cn.arch/g

:wq

$ sudo apt-get update

大概有90個左右get任務。

- 安裝bundler

$ sudo env PATH=$PATH gem install bundler

- 下載下傳bosh-lite

$ cd

$ mkdir workspace

$ cd workspace

方式1:(速度還可以,推薦)

$ git clone https://github.com/cloudfoundry/bosh-lite

方式2:(用我下載下傳的:到這裡下載下傳bosh-lite.tar)

$ tar xvf /vagrant/bosh-lite.tar

注意:linux裡/vagrant目錄實際就是windows下的d:\vagrant目錄,這是vagrant在啟動虛拟機時建立的一個共享。将需要用到的已下載下傳檔案放在d:\vagrant下,可以省去sftp到linux裡的步驟和空間。以下凡是使用/vagrant/xxx的地方,都假設xxx已經放在了d:\vagrant目錄下。另外必須用vagrant up啟動,才有這個共享,在linux裡reboot不行,需注意。

然後

$ cd bosh-lite

$ bundle

可能有一些warning,可忽略。根據網絡情況,可能會花一些時間

重新開機一下虛機,bosh會放到路徑中(在windows裡用vagrant halt,然後再vagrant up)。原因是什麼還未搞清楚,反正重新開機一下時間不長。

- 用bosh上傳stemcell

$ bosh target 192.168.50.4

admin/admin

以下的latest-bosh-stemcell-warden.tgz檔案我已下載下傳, 到這裡下載下傳。(或可從http://bosh-jenkins-gems-warden.s3.amazonaws.com/stemcells/latest-bosh-stemcell-warden.tgz獲得,新,但不保證可順利使用)

$ bosh upload stemcell /vagrant/latest-bosh-stemcell-warden.tgz

- 安裝spiff

$ sudo apt-get install golang

$ cd ~

$ export GOPATH=~/go

$ export PATH=$PATH:$GOPATH/bin

方式1:(比較慢)

$ go get github.com/vito/spiff

如果中間斷了,再運作報錯的話,rm -r ~/go/src,再運作

方式2:(檔案我已下好:下載下傳go.tar)

$ tar xvf /vagrant/go.tar

- 部署cloud foundry

$ cd ~

$ cd workspace

方式1:(很慢,可能會中斷)

$ git clone https://github.com/cloudfoundry/cf-release

$ cd cf-release

$ ./update

$ git checkout v169

$ bosh create release releases/cf-169.yml  #有了cf-169.tgz,這句就不用了

$ bosh upload release releases/cf-169.tgz

方式2:(以下的檔案我已做好:下載下傳cf-release.tar,下載下傳cf-169.tgz)

$ cd ~/workspace

$ tar xvf /vagrant/cf-release.tar

$ bosh upload release /vagrant/cf-169.tgz

然後

$ cd ~/workspace/bosh-lite

$ ./scripts/make_manifest_spiff

$ bosh deploy

部署花費比較長時間,如果虛機是在SSD硬碟上的,如果CPU比較強,速度會比較快。

-驗證:

$ bosh vms

....

+------------------------------------+---------+---------------+--------------+

| Job/index                          | State   | Resource Pool | IPs          |

+------------------------------------+---------+---------------+--------------+

| api_z1/0                           | running | large_z1      | 10.244.0.138 |

| etcd_leader_z1/0             | running | medium_z1     | 10.244.0.38  |

| ha_proxy_z1/0                 | running | router_z1     | 10.244.0.34  |

| hm9000_z1/0                  | running | medium_z1     | 10.244.0.142 |

| loggregator_trafficcontroller_z1/0 | running | small_z1      | 10.244.0.10  |

| loggregator_z1/0                   | running | medium_z1     | 10.244.0.14  |

| login_z1/0                         | running | medium_z1     | 10.244.0.134 |

| 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 |

+------------------------------------+---------+---------------+--------------+

如果顯示以上内容,恭喜你,安裝成功了!

如果有問題,可以先重新開機系統看看:

$ sudo reboot

VM重新開機後用bosh vms檢視元件情況。各虛機啟動可能比較慢,可以不斷地用bosh vms檢視狀态。

經過多次實驗,如果順利的話,2個小時可以完成一個單VM下的Cloud Foundry環境。有興趣的話,可以把bosh server和CF分開,以及把CF的各元件分開,這樣可以分布式部署,更好地了解Cloud Foundry部署過程。

繼續閱讀