開源PaaS方案(三)部署B(yǎng)OSH
BOSH是CloudFoundry提供的用來安裝部署和升級CloudFoundry的自動化工具,可是說是CloudFoundry的一部分??傮w來說,BOSH是Client/Server結(jié)構(gòu), BOSH客戶端稱作BOSH CLI,BOSH服務(wù)器端由BOSH Director,NATS,HealthMonitor等組件組成, 詳見http://docs.cloudfoundry.org/bosh/
完整的BOSH是一個分布式的環(huán)境,本文為了簡化BOSH的安裝,將BOSH所有的組件安裝在一個虛擬機上,BOSH的這種部署方式稱為MicroBOSH。
將描述如果在CentOS環(huán)境下部署B(yǎng)OSH客戶端和在OpenStack環(huán)境上部署MicroBOSH工具。
3.1 安裝ruby環(huán)境
3.1.1 作者使用rbenv來管理ruby,所以安裝rbenv和ruby 環(huán)境 (如果rbenv已經(jīng)安裝完成或者使用rvm可跳過此步)
- # rm -rf $HOME/.rbenv
- # 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
- # source ~/.bash_profile
- # echo 'eval "$(rbenv init -)"' >> ~/.bash_profile
- # source ~/.bash_profile
- # rbenv install 1.9.3-p551
- # rbenv global 1.9.3-p551
3.1.2 安裝bosh客戶端
- rbenv rehash
- gem update --system
- gem install rake
- gem install bosh_cli bosh_cli_plugin_micro --no-ri --no-rdoc
3.1.3 為安置MicroBosh和CloudFoundry配置SecurityGroup
(1) 創(chuàng)建BOSH security group,允許bosh訪問
- # nova secgroup-create bosh "security group for bosh access”
- # nova secgroup-add-rule bosh udp 53 53 0.0.0.0/0
- # nova secgroup-add-rule bosh tcp 4222 4222 0.0.0.0/0
- # nova secgroup-add-rule bosh udp 68 68 0.0.0.0/0
- # nova secgroup-add-rule bosh tcp 25555 25555 0.0.0.0/0
- # nova secgroup-add-group-rule bosh bosh tcp 1 65535
- # nova secgroup-add-rule bosh tcp 6868 6868 0.0.0.0/0
- # nova secgroup-add-rule bosh tcp 53 53 0.0.0.0/0
- # nova secgroup-add-rule bosh tcp 25250 25250 0.0.0.0/0
- # nova secgroup-add-rule bosh tcp 25777 25777 0.0.0.0/0
(2) 創(chuàng)建security group, 允許SSH 訪問
- # nova secgroup-create ssh "security group for ssh access”
- # nova secgroup-add-rule ssh icmp -1 -1 0.0.0.0/0
- # nova secgroup-add-rule ssh tcp 22 22 0.0.0.0/0
- # nova secgroup-add-rule ssh udp 68 68 0.0.0.0/0
(3) 創(chuàng)建Cloudfoundry內(nèi)網(wǎng)security group
- # nova secgroup-create cf-private "cf internal security group"
- # nova secgroup-add-rule cf-private udp 68 68 0.0.0.0/0
- # nova secgroup-add-rule cf-private udp 3456 3456 0.0.0.0/0
- # nova secgroup-add-group-rule cf-private bosh tcp 1 65535
(4) 創(chuàng)建CloudFoundry外網(wǎng)訪問security group
- # nova secgroup-create cf-public "security group for cloudfoundry public access"
- # nova secgroup-add-rule cf-public tcp 443 443 0.0.0.0/0
- # nova secgroup-add-rule cf-public udp 68 68 0.0.0.0/0
- # nova secgroup-add-rule cf-public tcp 80 80 0.0.0.0/0
#p#
3.2 部署MicroBosh
3.2.1 創(chuàng)建microbosh keypair
- # nova keypair-add microbosh > microbosh.pem
- # chmod 400 microbosh.pem
3.2.2 創(chuàng)建工作目錄
- # mkdir -p ~/bosh-workspace/deployments/microbosh
- # cd ~/bosh-workspace/deployments/microbosh
3.2.3 為microbosh創(chuàng)建一個floating ip
- # nova floating-ip-create public
- +--------------+-----------+----------+--------+
- | Ip | Server Id | Fixed Ip | Pool |
- +--------------+-----------+----------+--------+
- | 172.24.4.229 | | - | public |
- +--------------+-----------+----------+--------+
3.2.4 創(chuàng)建并且編輯部署描述文件microbosh.yml
- ---
- name: microbosh-openstack
- logging:
- level: DEBUG
- network:
- type: dynamic #內(nèi)網(wǎng)ip的分配方式
- vip: 172.24.10.132 #外網(wǎng)浮動ip
- resources:
- persistent_disk: 20000
- cloud_properties:
- instance_type: m1.small
- cloud:
- plugin: openstack
- properties:
- openstack:
- auth_url: http://172.24.10.128:5000/v2.0
- username: demo
- api_key: openstack
- tenant: demo
- default_security_groups: [bosh,ssh]
- default_key_name: demokey
- private_key: ~/bosh-workspace/deployments/demokey.pem
- apply_spec:
- properties:
- director:
- max_threads: 2
- hm:
- resurrector_enabled: true
- ntp:
- - time.asia.apple.com
下面簡單介紹一下此部署文件的含義
* network 描述了Openstack中network的屬性
在筆者的Openstack環(huán)境中,網(wǎng)絡(luò)為openstack neutron network,所以在內(nèi)網(wǎng)使用dhcp獲取ip, 因此type為dynamic。cloud_properties中的net_id是可以使用dhcp獲得ip的內(nèi)網(wǎng)地址,此id可以使用neutron net-list得到
- # neutron net-list
- +--------------------------------------+---------+--------------------------------------------------+
- | id | name | subnets |
- +--------------------------------------+---------+--------------------------------------------------+
- | 0fbe7f27-e732-4954-9134-5486d7617727 | public | 110583d9-a905-428a-a494-3c95e4a6bca6 |
- | 9e5a6fd5-fa2e-48da-94ce-f85337bc2451 | private | 052030e6-626a-4a57-b8dc-b8ab239f419d 10.0.0.0/24 |
- +--------------------------------------+---------+--------------------------------------------------+
為了能夠從外網(wǎng)訪問microbosh,我們需要為bosh director指定一個floating ip, bosh會自動把這個ip關(guān)聯(lián)到bosh director
* resource描述了為micro bosh director分配多少資源,instance_type定義了此虛擬機的openstack flavor,persistent_disk定義了為此虛擬機掛接多大的***磁盤
* cloud描述了如何訪問openstack,其中大部分內(nèi)容可以從安裝產(chǎn)生的keystonerc_demo中找到,
- # cat $HOME/keystonerc_demo
- export OS_USERNAME=demo
- export OS_TENANT_NAME=demo
- export OS_PASSWORD=73b3b497ca3a42d1
- export OS_AUTH_URL=http://:35357/v2.0/
- export PS1='[\u@\h \W(keystone_demo)]\$ '
* apply_spec定義了Micro bosh得屬性,這里面我們只需要修改一項,那就是時間服務(wù)器的地址, 例如修改為time.asia.apple.com
#p#
3.2.5 下載microbosh的虛擬機模板(stemcell)
(1) 由于GFW的緣故,把下面這句加到/etc/hosts中
54.231.244.8 s3.amazonaws.com
(2) 創(chuàng)建stemcell目錄
- # mkdir -p ~/bosh-workspace/stemcells
- # cd ~/bosh-workspace/stemcells
(3) 下載micro bosh的stemcell
- # bosh public stemcells | grep -i openstack
- | bosh-stemcell-2427-openstack-kvm-ubuntu.tgz |
- | bosh-stemcell-2624-openstack-kvm-centos.tgz |
- | bosh-stemcell-2624-openstack-kvm-ubuntu-lucid.tgz |
- | bosh-stemcell-2749-openstack-kvm-centos-go_agent.tgz |
- | bosh-stemcell-2749-openstack-kvm-ubuntu-trusty-go_agent.tgz |
- | bosh-stemcell-2652-openstack-kvm-ubuntu-lucid-go_agent.tgz |
- | bosh-stemcell-2719.1-openstack-kvm-centos-go_agent.tgz |
- | bosh-stemcell-2719.1-openstack-kvm-ubuntu-trusty-go_agent.tgz |
- | bosh-stemcell-2719.2-openstack-kvm-centos-go_agent.tgz |
- | bosh-stemcell-2719.2-openstack-kvm-ubuntu-trusty-go_agent.tgz |
- | bosh-stemcell-2719.3-openstack-kvm-ubuntu-trusty-go_agent.tgz |
- # bosh download public stemcell bosh-stemcell-2652-openstack-kvm-ubuntu-lucid-go_agent.tgz
這個stemcell雖然不是***版,但是筆者驗證通過,更新版本的stemcell筆者沒有嘗試
(4) 部署Micro Bosh
*設(shè)置部署描述文件
- # cd ~/bosh-workspace/deployments
- # bosh micro deployment microbosh
* 部署Micro Bosh
# bosh micro deploy ~/bosh-workspace/stemcells/bosh-stemcell-2652-openstack-kvm-ubuntu-lucid-go_agent.tgz 執(zhí)行這一句之后會報錯錯誤信息如下
- `/home/roger/.gem/ruby/gems/fog-aws-0.1.2/lib/fog/aws/auto_scaling.rb:4:in `<class:AutoScaling>': uninitialized constant Fog::AWS::CredentialFetcher (NameError)
- from /home/roger/.gem/ruby/gems/fog-aws-0.1.2/lib/fog/aws/auto_scaling.rb:3:in `<module:AWS>'
- from /home/roger/.gem/ruby/gems/fog-aws-0.1.2/lib/fog/aws/auto_scaling.rb:2:in `<module:Fog>'
- from /home/roger/.gem/ruby/gems/fog-aws-0.1.2/lib/fog/aws/auto_scaling.rb:1:in `<top (required)>'
- from /usr/share/rubygems/rubygems/core_ext/kernel_require.rb:73:in `require'
- from /usr/share/rubygems/rubygems/core_ext/kernel_require.rb:73:in `require'
- from /home/roger/.gem/ruby/gems/fog-1.27.0/lib/fog/aws.rb:2:in `<top (required)>'
- from /usr/share/rubygems/rubygems/core_ext/kernel_require.rb:73:in `require'
- from /usr/share/rubygems/rubygems/core_ext/kernel_require.rb:73:in `require'
- from /home/roger/.gem/ruby/gems/fog-1.27.0/lib/fog.rb:23:in `<top (required)>'
- from /usr/share/rubygems/rubygems/core_ext/kernel_require.rb:73:in `require'
- from /usr/share/rubygems/rubygems/core_ext/kernel_require.rb:73:in `require'
- from /home/roger/.gem/ruby/gems/bosh-registry-1.2922.0/lib/bosh/registry.rb:10:in `<top (required)>'
- from /usr/share/rubygems/rubygems/core_ext/kernel_require.rb:73:in `require'
- from /usr/share/rubygems/rubygems/core_ext/kernel_require.rb:73:in `require'
- from /home/roger/.gem/ruby/gems/bosh-registry-1.2922.0/bin/bosh-registry:3:in `<top (required)>'
- from /home/roger/bin/bosh-registry:23:in `load'
- from /home/roger/bin/bosh-registry:23:in `<main>'
- bosh-registry -c /tmp/d20150414-92091-1rc0vqs/bosh_registry_yml20150414- 92091-9n3izm` failed, exit status=1``
修改
/home/roger/.gem/ruby/gems/fog-aws-0.1.2/lib/fog/aws/auto_scaling.rb在***行之前加上如下語句
require_relative('.') 問題解決
(5) 驗證Micro Bosh
# bosh target
其中的microbosh ip address是預(yù)先申請的floating ip
(6) 使用ssh訪問micro bosh
# ssh -i vcap@