Cómo instalar Cloud Foundry en local (Ubuntu)

¿Qué es Cloud Foundry?

CloudFoundry (CF) es la propuesta de VMWare para la creación de un entorno PaaS (plataforma como servicio) sobre un entorno IaaS (infraestructura como servicio). Está basado en software abierto y se está convirtiendo en el estándar en la industria para soluciones PaaS. Una de las grandes ventajas que ofrece CF es que es una solución opensource y multi-nube.

Para probar el funcionamiento de CF podremos utilizar alguna de las cuentas gratuitas de prueba que ofrecen los proveedores como por ejemplo la prueba de 60 días de Pivotal PWS. En nuestro caso hemos optado por crear una instancia local en nuestro entorno de trabajo basado en Ubuntu.

 

Requisitos

La instalación en local la vamos a realizar en un entorno de escritorio con Ubuntu utilizando Vagrant y Virtualbox. Se requiere una gran cantidad de RAM para levantar el entorno de CF, si a esto le sumamos que la máquina la vamos a utilizar también como entorno de desarrollo recomiendo utilizar 16 GB de RAM y un disco SSD para no morir en el intento.

La configuración de mi equipo en el que he realizado la instalación:

  • i7-4790K CPU @ 4.00GHz
  • 16 GB RAM
  • 120 GB SSD
  • Ubuntu 15.10

 

Instalando software necesario

Para crear la VM con la instancia local de CF necesitaremos tener instalado las últimas versiones disponibles de Vagrant, Virtualbox, Ruby y Go.

Para instalar vagrant, virtualbox y ruby bastará con ejecutar los siguientes comandos:

$ sudo apt-get install virtualbox
$ sudo apt-get install vagrant
$ sudo apt-get install ruby-full

Para realizar la instalación de go tendremos que añadir una PPA en nuestro sistema:

$ sudo add-apt-repository ppa:ubuntu-lxc/lxd-stable
$ sudo apt-get update
$ sudo apt-get install golang

Si todo ha ido bien ya tenemos todo el software necesario, podemos comprobar las versiones instaladas con los siguientes comandos:

$ vboxmanage --version
5.0.14_Ubuntur105127
$ vagrant --version
Vagrant 1.7.4
$ ruby --version
ruby 2.1.5p273 (2014-11-13) [x86_64-linux-gnu]
$ go version
go version go1.6 linux/amd64

 

Instalando BOSH Lite

BOSH Lite nos permite la creación de un entorno de desarrollo local para BOSH utilizando contenedores Warden en máquinas Vagrant. A continuación vamos a explicar los pasos de instalación utilizando Vagrant y Virtualbox, para otras configuraciones podéis seguir el README disponible en el repositorio de BOSH Lite.
Instalamos BOSH CLI

# Instalando prerequisitos
$ sudo apt-get install build-essential ruby ruby-dev libxml2-dev libsqlite3-dev libxslt1-dev libpq-dev libmysqlclient-dev zlib1g-dev
# Instalando gema bosh_cli
$ sudo gem install bosh_cli --no-ri --no-rdoc

Clonamos el repositorio BOSH Lite

$ mkdir -p ~/workspace
$ cd ~/workspace
$ git clone https://github.com/cloudfoundry/bosh-lite

Creamos la VM que contendrá la instancia de Cloud Foundry utilizando Vagrant. La primera vez Vagrant utilizará el fichero de configuración existente en el repositorio bosh-lite para crear la instancia. Para ello ejecutamos los siguientes comandos.

$ cd ~/workspace/bosh-lite
$ vagrant up --provider=virtualbox

 

Ahora que tenemos instalada la herramienta de línea de comandos BOSH CLI configuramos BOSH seleccionando como destino la máquina que acabamos de instanciar.

$ bosh target 192.168.50.4 lite
Target set to `Bosh Lite Director'
Your username: admin
Enter password: 
Logged in as `admin'

Configuramos la tabla de enrutamiento

$ sudo bin/add-route
+ old_ips=10.244.0.0/19
+ ips=10.244.0.0/16
+ gw=192.168.50.4
+ echo 'Adding the following route entry to your local route table to enable direct container access: 10.244.0.0/16 via 192.168.50.4. Your sudo password may be required.'
++ uname
+ '[' Linux = Darwin ']'
++ uname
+ '[' Linux = Linux ']'
+ type route
+ sudo route del -net 10.244.0.0/19 gw 192.168.50.4
SIOCDELRT: No existe el proceso
+ sudo route add -net 10.244.0.0/16 gw 192.168.50.4

 

Instalando herramientas para despliegue Cloud Foundry

Antes de poder desplegar Cloud Foundry necesitaremos instalar varias herramientas en nuestro sistema: spdiff y godep. Estas herramientas serán utilizadas por el script de despliegue automático de CF.

Instalando spdiff

$ mkdir ~/bin 
$ cd ~/bin 
$ wget https://github.com/cloudfoundry-incubator/spiff/releases/download/v1.0.7/spiff_linux_amd64.zip 
$ unzip spiff_linux_amd64.zip
$ rm spiff_linux_amd64.zip
# añadimos el directorio bin al path 
$ export PATH="$PATH:$HOME/bin" 
$ echo 'export PATH="$PATH:$HOME/bin"' >> ~/.profile

Instalando godep

$ mkdir $HOME/workspace/go
$ export GOPATH=$HOME/workspace/go
$ echo 'GOPATH=$HOME/workspace/go"' >> ~/.profile
$ export PATH=$PATH:$GOPATH/bin
$ echo 'PATH=$PATH:$GOPATH/bin' >> ~/.profile
$ go get github.com/tools/godep

Ya que estamos instalando herramientas, aprovechamos para instalar las CF CLI tools

$ cd ~/bin
$ curl -L "https://cli.run.pivotal.io/stable?release=linux64-binary&source=github" | tar -zx
$ cf -v
cf version 6.16.1+924508c-2016-02-26

 

Desplegando Cloud Foundry

En este punto tenemos todo preparado y listo para el despliegue de CF en nuestra máquina virtual. Podemos seguir las instrucciones de instalación en la página oficial, aunque en nuestro caso vamos a utilizar el script de instalación incluido en el repositorio cf-release. Este proceso puede tardar bastante, en mi caso fueron 17 minutos.

$ cd ~/workspace
$ git clone https://github.com/cloudfoundry/cf-release.git
$ cd ~/workspace/bosh-lite
$ ./bin/provision_cf
..............
Deployed `cf-warden' to `Bosh Lite Director'
Deploy completed.
Make sure you invoke bin/add-route to be able to access your deployment at
https://login.bosh-lite.com

Ya tenemos instalado nuestro sistema CF en local, podemos probar que todo ha ido bien mostrando el estado de todas las máquinas que componen la plataforma de CF con el comando bosh vms.

$ bosh vms
Acting as user 'admin' on 'Bosh Lite Director'
Deployment `cf-warden'

Director task 4

Task 4 done

+---------------------------------------------------------------------------+---------+-----+-----------+--------------+
| VM                                                                        | State   | AZ  | VM Type   | IPs          |
+---------------------------------------------------------------------------+---------+-----+-----------+--------------+
| api_z1/0 (16276c0c-e04e-4f7c-9b87-63befd2a8092)                           | running | n/a | large_z1  | 10.244.0.138 |
| blobstore_z1/0 (795376e9-9c63-4d6c-8ad3-63db5d6ebe39)                     | running | n/a | medium_z1 | 10.244.0.130 |
| consul_z1/0 (076fe93b-c8c4-4afe-b8cc-bb44179c2c88)                        | running | n/a | small_z1  | 10.244.0.54  |
| doppler_z1/0 (0fd0fcdd-f8f4-482d-bc6c-edb89f0457b0)                       | running | n/a | medium_z1 | 10.244.0.146 |
| etcd_z1/0 (f831c7be-5332-4eb0-a919-48769e369462)                          | running | n/a | medium_z1 | 10.244.0.42  |
| ha_proxy_z1/0 (3443d111-3de9-45da-a1c8-75bf7620b17d)                      | running | n/a | router_z1 | 10.244.0.34  |
| hm9000_z1/0 (56df7e19-93cd-45ff-a1c2-227666165ceb)                        | running | n/a | medium_z1 | 10.244.0.142 |
| loggregator_trafficcontroller_z1/0 (86ba7bad-cae1-41cc-930b-82f8b2d94886) | running | n/a | small_z1  | 10.244.0.150 |
| nats_z1/0 (da17e1c6-9eb8-4e3e-b9ea-7ddd320b1c98)                          | running | n/a | medium_z1 | 10.244.0.6   |
| postgres_z1/0 (05fad25a-62ef-4875-90c4-e8a62017f7d4)                      | running | n/a | medium_z1 | 10.244.0.30  |
| router_z1/0 (acc7625e-2405-4667-a0b2-2c60089c7178)                        | running | n/a | router_z1 | 10.244.0.22  |
| runner_z1/0 (a455e873-a4fd-46b3-bd9e-d74bcfb92c1e)                        | running | n/a | runner_z1 | 10.244.0.26  |
| uaa_z1/0 (3b4d91c8-a790-4281-92d2-ce98b7c7a059)                           | running | n/a | medium_z1 | 10.244.0.134 |
+---------------------------------------------------------------------------+---------+-----+-----------+--------------+

 

Importante

Una nota importante, si paramos/reiniciamos la máquina virtual tendremos problemas a la hora de volverla a arrancar ya que las máquinas que component los servicios de Cloud Foundry no arrancarán fácilmente. Para evitar estos problemas la mejor opción es utilizar el comando vagrant suspend para pausar la máquina virtual y vagrant resume para volverla a arrancar.

$ cd ~/workspace/bosh-lite
$ vagrant suspend
$ vagrant resume

En el caso de que se nos olvide pausar la máquina virtual podemos ejecutar el comando bosh cck para intentar recuperar la instancia de CF.

 
Con esto ya tenemos instalada una instancia de CF en nuestro equipo. En próximas entradas explicaré como configurar y desplegar una aplicación en nuestro entorno Cloud Foundry local.
Recursos:

 

Sobre el autor

Apasionado de las tecnologías, entusiasta del desarrollo de software. Especializado en Java EE. Cofundador de www.logrosxbox.com.