Cloud Foundry (CF)
CloundFoundry (CF) is one of the many PaaS available out there that aims to empower developers to build their applications (e.g. web) without caring about infrastructure details. The PaaS handles the deployment, scaling and management of the apps in the cloud data center, thus boosting the developer productivity.CF has many advantages over other PaaS solutions as it is open source, it has a fast growing community and many big cloud actors are involved in the development and spreading it adoption. It also can be run anywhere even on a laptop and this what this post is about. So keep reading..
Terminology
- Bosh is an open-source platform that helps deploying/managing systems on cloud infrastructures (AWS, OpenStack/CloudStack, vSphere, vCloud, ect).
- Bosh Lite is a lightweight version of Bosh that can be used to deploy systems locally by using Vagrant instead of cloud infrastructure (e.g. AWS) and Linux Containers (Warden project) for to run your system instead of VMs.- Stemcell is a template VM that will be used by Bosh to create VMs and deploy them to the cloud. I contains essentially an OS (e.g. CentOS) and a Bosh Agent in order to be controlled.
1. Install Git
$ sudo apt-get install git2. Install VirtualBox
$ sudo echo "deb http://download.virtualbox.org/virtualbox/debian precise contrib" >> /etc/apt/sources.list
or create a new .list file as described in this thread.
$ wget -q http://download.virtualbox.org/virtualbox/debian/oracle_vbox.asc -O- | sudo apt-key add -
$ sudo apt-get update
$ sudo apt-get install virtualbox-4.3
$ sudo apt-get install dkms
$ VBoxManage --version
4.3.10_Ubuntur93012
3. Install Vagrant (the known version to work with bosh-lite is 1.6.3 - link)
$ wget https://dl.bintray.com/mitchellh/vagrant/vagrant_1.6.3_x86_64.deb
$ sudo dpkg -i vagrant_1.6.3_x86_64.deb
$ vagrant --version
Vagrant 1.6.3
Check if vagrant is correctly working with the installed virtual box
$ vagrant init hashicorp/precise32
$ vagrant up
4. Install Ruby(using RVM) + RubyGems + Bundler
4.1. Install rvm
$ curl -sSL https://rvm.io/mpapis.asc | gpg --import -
$ curl -sSL https://get.rvm.io | bash -s stable
$ source /home/{username}/.rvm/scripts/rvm
$ rvm --version
4.2. Install latest ruby version
$ rvm install 1.9.3-p551
$ ruby -v
ruby 1.9.3p551 (2014-11-13 revision 48407) [x86_64-linux]
5. Install Bosh CLI (check the prerequisites for the target OS here)
- Note that Bosh CLI is not suppored on windows - github issue
$ sudo apt-get install build-essential libxml2-dev libsqlite3-dev libxslt1-dev libpq-dev libmysqlclient-dev
$ gem install bosh_cli
6. Install Bosh-Lite
$ git clone https://github.com/cloudfoundry/bosh-lite
$ cd bosh-lite
$ vagrant up --provider=virtualbox
In case the following message is seen The guest machine entered an invalid state while waiting for it to boot, then:
- check if virtualisation (Intel VT-x / AMD-V for 32bits or Intel EPT / AMD RVI for 64bits) is enabled on target system here. If not then enable it from the BIOS, for ESXi check link1 and link2 and add vhv.enable = "TRUE" to the vm configuration file (i.e. vmx) and make sure the VM is of version 9.
- You may also have to check if USB 2.0 controller is enabled, if it is then disable it.
$ cd ..
$ bosh target 192.168.50.4 lite
$ bosh login
Your username: admin
Enter password: *****
Logged in as `admin'
Setup a route between the laptop and the VMs running inside Bosh Lite
$ cd bosh-lite
$ ./bin/add-route
7. Deploy Cloud Foundry
Install spiff
$ brew tap xoebus/homebrew-cloudfoundry
$ brew install spiff
$ spiff
To install spiff on linux systems check this issue.Upload latest stemcell
$ wget http://bosh-jenkins-artifacts.s3.amazonaws.com/bosh-stemcell/warden/latest-bosh-stemcell-warden.tgz
$ bosh upload stemcell latest-bosh-stemcell-warden.tgz
Check the stemcells
$ bosh stemcells
Upload latest CF release
$ git clone https://github.com/cloudfoundry/cf-release
$ export CF_RELEASE_DIR=$PWD/cf-release/
$ bosh upload release cf-release/releases/cf-XXX.yml
Deploy CF releases
$ cd bosh-lite/
$ ./bin/provision_cf
$ bosh target # check the target director
$ bosh vms # check the installed VMs on the cloud
Manually (to be continued)
Generate a configuration file manifests/cf-manifest.yml
$ mkdir -p go
$ export GOPATH=~/go
$ cd bosh-lite
$ ./bin/make_manifest_spiff
Deploy release
$ bosh deploy
Install CF CLI
Play with CF
$ cf api --skip-ssl-validation https://api.10.244.0.34.xip.io
$ cf login
$ cf create-org ORG_NAME
$ cf orgs
$ cf target -o ORG_NAME
$ cf create-space SPACE_NAME
$ cf target -o ORG_NAME -s SPACE_NAME
To access the VM from the LAN (i.e. another machine):
- Install an HTTP Proxy (e.g. squid3),
- Configure CF HTTP_PROXY environment variable, and
- Configure the proxy:
acl local_network src 192.168.2.0/24
http_access allow local_network
Stopping CF
Shooting down bosh-lite VM can be surprisingly tricky. May better stop the VM with:
- vagrant suspend to save current state for next start up, or
- vagrant halt, then next time to start CF use vagrant up followed by bosh cck (documentation).
Troubleshooting
$ bosh ssh # then choose the job to access (password: admin)
bosh_something@something:~$ sudo /var/vcap/bosh/bin/monit summary
Find the Bosh Lite IP address
$ cd bosh-lite/
$ vagrant ssh
vagrant@agent-id-bosh-0:~$ ifconfig
vagrant@agent-id-bosh-0:~$ exit
Complete installation script can be found here.
Resources
- Installing latest versions for virtualbox and vagrant - link
- Installing ruby with rvm - link.
- DIY PaaS (CF v1) running DEA link1, stagging applications link2.
- Deploying CF Playground (a kind of web admin interface) - link
- Installing CF on vagrant - link video
- Installing BOSH lite - github repo, tutorial
- Deploying CF using BOSH lite - github repo, demo
- http://altoros.github.io/2013/using-bosh-lite/
- Installing a new hard drive - link
- xip.io a free internet service providing DNS wildcard - link
- Troubleshooting with Bosh CLI - official doc, app health, monit summary
- Remotely debug a CF application - link
- CloudFoundry manifest.yml generator - link