BOSH on vSphere (micro Bosh)
Recently I spent some time playing with BOSH which is a tool for release engineering, deployment and lifecycle management of large scale distributed services. It is used to manage VMs in AWS and vSphere. The vSphere option seemed to be interesting to me and the idea of having private Cloud Foundry PaaS running locally on private infrastructure was exciting. The BOSH is under heavy development and it’s sometimes difficult to make things work easily even if following various tutorials and blogs and I’m very thankful to the authors.
vSphere Setup
As an infrastructure I created a cluster of 4 hosts ESXi version 5u1 (esxi1, esxi2, esxi3, esxi4) registered in igmlab.net domain (i.e. esxi1.igmlab.net). All of the hosts were powered by four core CPU wih 16GB of RAM and iSCSI shared storage (IET software based) of 512GB. The internal network had following characteristics: IP range: 192.168.2.0/24, GW/DNS: 192.168.2.107. For VMware vCenter Server SUSE based VM appliance was used (verion 5.0.0).
Proper network configuration is crucial for correct deployment. Bosh VMs run as guests in ESXi hosts and they access those hosts directly so both the hosts and guests have to share the same network. This is also the case for vCenter Server.
Micro Bosh
To deploy Bosh you need Bosh. It’s kind of like to get a compiler you need to compile one first. Luckily there’s a special one called “micro Bosh” and it can be installed by Bosh CLI addon called Bosh Deployer. So first things first, let’s start with Bosh CLI. The current version at the time of writing is 0.9.14. Ruby people should not have any problems installing it via gem install bosh_cli
. More detailed instructions are here. The next step is to install Bosh Deployer. For trouble-less installation Ubuntu 10.04.4 LTS Server is suggested. The steps:
$ gem install bosh_cli
$ git clone https://github.com/cloudfoundry/bosh.git
$ cd bosh/deployer
$ bundle install
$ rake install
$ rbenv rehash
$ bosh
usage: bosh [--verbose] [--config|-c <FILE>] [--cache-dir <DIR]
[--force] [--no-color] [--skip-director-checks] [--quiet]
[--non-interactive]
command [<args>]
...
Micro
micro deployment [<name>] Choose micro deployment to work with
micro status Display micro BOSH deployment status
micro deployments Show the list of deployments
micro deploy <stemcell> Deploy a micro BOSH instance to the currently
selected deployment
--update update existing instance
micro delete Delete micro BOSH instance (including
persistent disk)
micro agent <args> Send agent messages
micro apply <spec> Apply spec
Next we need micro bosh deployment manifest. In the manifest the deployment configuration is stored. The defaults for vSphere can be found in the repository and the manifest for micro Bosh deployment looks like this:
We need to create deployments directory to store our deployment manifest files.
$ mkdir -p ~/deployments/micro $ cd ~/deployments/micro $ vim micro_bosh.yml $ ... copy and update the content of bosh_micro.yml file
Micro Bosh Stemcell is a VM template that will be used for our deployment. Deployment manifests define the details that are configured in the VM so that all the network configuration is set properly. It also contains details about the vSphere setup, vCenter connection parameters, resource parameters for VM etc. To get a full list of available Bosh stemcells run:
$ bosh public stemcells +---------------------------------+-------------------------------------------------------+ | Name | Url | +---------------------------------+-------------------------------------------------------+ | bosh-stemcell-0.3.0.tgz | https://blob.cfblob.com/rest/objects/4e4e78bca41e1... | | bosh-stemcell-0.4.4.tgz | https://blob.cfblob.com/rest/objects/4e4e78bca51e1... | | bosh-stemcell-0.4.7.tgz | https://blob.cfblob.com/rest/objects/4e4e78bca21e1... | | bosh-stemcell-0.5.2.tgz | https://blob.cfblob.com/rest/objects/4e4e78bca31e1... | | bosh-stemcell-aws-0.5.1.tgz | https://blob.cfblob.com/rest/objects/4e4e78bca21e1... | | bosh-stemcell-vsphere-0.6.0.tgz | https://blob.cfblob.com/rest/objects/4e4e78bca41e1... | | bosh-stemcell-vsphere-0.6.1.tgz | https://blob.cfblob.com/rest/objects/4e4e78bca31e1... | | micro-bosh-stemcell-0.1.0.tgz | https://blob.cfblob.com/rest/objects/4e4e78bca51e1... | +---------------------------------+-------------------------------------------------------+ To download use 'bosh download public stemcell'.For full url use --full.
At this moment we are interested in micro stemcell (micro-bosh-stemcell-0.1.0.tgz) and we need to download it:
$ mkdir -p ~/stemcells $ cd ~/stemcells $ bosh download public stemcell micro-bosh-stemcell-0.1.0.tgz
As soon as we have required stemcell and manifest we can start the deployment procedure:
$ cd ~/deployments $ bosh micro deployment micro $ bosh micro deploy ~/stemcells/micro-bosh-stemcell-0.1.0.tgz Deploying new micro BOSH instance `micro/micro_bosh.yml' to `micro' (type 'yes' to continue): yes Verifying stemcell... File exists and readable OK Using cached manifest... Stemcell properties OK Stemcell info ------------- Name: bosh-stemcell Version: 0.5.1 Deploy Micro BOSH unpacking stemcell (00:00:26) uploading stemcell (00:06:21) creating VM from sc-d8ed6782-ff50-4e1d-ac47-519b225ba85a (00:09:02) waiting for the agent (00:01:34) create disk (00:00:00) mount disk (00:00:42) stopping agent services (00:00:00) applying micro BOSH spec (00:01:12) starting agent services (00:00:00) waiting for the director (00:00:49) Done 11/11 00:20:41 Deployed `micro/micro_bosh.yml' to `micro', took 00:20:41 to complete
Entire process takes several minutes (~20 minutes in my case):
Now we can target the micro bosh and login with default admin/admin:
$ bosh target 192.168.2.120:25555 $ bosh status Updating director data... done Target micro (http://192.168.2.120:25555) Ver: 0.4 (00000000) UUID a5d6347d-3b66-465f-ae06-2444db70dce3 User admin Deployment not set
You should also be able to ssh to the micro Bosh:
$ ssh root@192.168.2.120 root@192.168.2.120's password: vmware
The password ‘vmware’ is what we provided in our manifest in env:bosh:password. You can also generate hash for custom password:
$ mkpasswd -m sha-512
and use it instead before deploying micro Bosh. And if you think this is all you wanted to do you can delete the deployment:
$ bosh micro delete