Infraestructura con CoreOS - Parte I

15 October 2014, Por Matias Gianni Durante el último tiempo hemos estado experimentando con nuevas tecnologías en diferentes entornos de trabajo, en un ámbito tan cambiante como es el de las tecnologías de información, innovar en la gestión de infraestructura para lograr trabajos ágiles es de vital importancia. Por esto

Recent Posts

CoreOS

15 October 2014, Por Matias Gianni

Durante el último tiempo hemos estado experimentando con nuevas tecnologías en diferentes entornos de trabajo, en un ámbito tan cambiante como es el de las tecnologías de información, innovar en la gestión de infraestructura para lograr trabajos ágiles es de vital importancia.

Por esto comenzamos a introducirnos en el mundo de CoreOS como una alternativa viable a estos desafíos.

CoreOS es Linux para despliegues masivos, esta es la descripción que nos brinda el sitio oficial de esta tecnología. Y no exagera al proponer esto. CoreOS permite tomar un clúster de sistemas operativos y desde un lugar centralizado manejar el ciclo de vida y despliegue de aplicativos, para esto, CoreOS utiliza 3 tecnologías claves:

  • Docker
  • Fleet
  • etcd

En los próximos artículos de este blog analizaremos estas 3 tecnologías y el ecosistema que ofrecen para correr nuestras aplicaciones.. Por ahora, nos enfocaremos en instanciar una pequeña infraestructura de prueba donde podamos investigar CoreOS con mas detenimiento.

Configurando de un entorno de pruebas

Con el fin de facilitar el armado de nuestro entorno, utilizaremos Vagrant. Vagrant se encarga de aprovisionar maquinas virtuales basándose en un archivo donde se definen los requerimientos de las mismas, la ventaja de este método es que nos permite crear entornos de desarrollo reproducibles y portátiles. Vagrant configurará la maquina virtual de la misma forma cada vez que sea ejecutado.

Como primer paso, deberemos tener vagrant y virtual box instalados en nuestro sistema, pueden descargarlos a través de los siguientes links:

Virtual Box: https://www.virtualbox.org/wiki/Downloads
Vagrant: https://www.vagrantup.com/downloads.html

Una vez instalados y configurados ambos programas, procedemos a conseguir las imágenes que utilizaremos para configurar nuestro entorno de CoreOS. En nuestro caso lo realizamos mediante el repositorio Git oficial de CoreOS:

[mats@lina ~/code/vagrant]# git clone https://github.com/coreos/coreos-vagrant.git  
[mats@lina ~/code/vagrant]# cd coreos-vagrant

Una vez que tenemos los archivos, procederemos a modificarlos para que se ajusten a lo que necesitamos. CoreOS permite modificar la configuración del clúster a ser creado mediante varios archivos de configuración que están disponibles en el repositorio que descargamos:

[mats@lina ~/code/vagrant/coreos-vagrant]# ll  
total 32  
-rw-r--r--  1 mgianni  staff   4.0K Oct  6 10:33 README.md
-rw-r--r--  1 mgianni  staff   3.4K Oct  9 05:38 Vagrantfile
-rw-r--r--  1 mgianni  staff   1.6K Oct  9 05:44 config.rb.sample
-rw-r--r--  1 mgianni  staff   746B Oct  9 05:55 user-data.sample

El primer archivo que modificaremos será config.rb.sample. Vagrant tomara los valores de este archivo cuando este generando las maquinas virtuales de nuestro clúster, con lo cual, lo primero que debemos hacer es renombrar este archivo a config.rb (remover el .sample del nombre)

Estos son los valores que deberemos configurar dentro del archivo, asegurarse de que estos valores están definidos en el archivo:

Cantidad de instancias que queremos levantar en nuestro clúster vía vagrant

 $num_instances=3  

El canal oficial de CoreOS desde donde bajaremos la versión a utilizar en nuestra plataforma

$update_channel='stable'  

Las configuraciones descriptas aquí abajo definirán la capacidad de nuestras maquinas virtuales:

$vb_gui = false  
$vb_memory = 1024
$vb_cpus = 1

Una vez que tenemos el archivo config.rb con los parámetros correctos, procederemos a modificar el siguiente archivo, user-data.sample

Igual que con el archivo anterior, asegurarse de remover la extensión .sample para que cuando se haga el aprovisionamiento de las maquinas virtuales vagrant pueda leerlo.

CoreOS permite configurar valores del clúster al momento de iniciar las instancias, para esto utiliza el sistema de cloud-config, en nuestro caso, podemos proveer esta información a nuestras instancias vía el archivo de configuración user-data. Uno de los parámetros mas importantes que utilizaremos será el discovery url, esto es una URL que nuestra instancia de etcd utilizara para almacenar información sobre nuestro clúster y elegir un líder inicial del clúster de etcd, así como también mantener configuraciones de nuestros aplicativos en pasos posteriores. Para esto deberemos obtener una dirección de discovery desde la siguiente URL: https://discovery.etcd.io/new

Esta URL nos va a dar una nueva dirección que utilizaremos en la configuración de nuestro nuevo clúster. Asegúrense de copiar el token que les provee esa pagina y luego lo agregaremos a la configuración en lugar de . Con esto podremos tener un clúster de etcd configurado.

El archivo de user-data contendrá algo similar a lo siguiente:

# cloud-config

coreos:  
  etcd:
      # generate a new token for each unique clúster from https://discovery.etcd.io/new
      # WARNING: replace each time you 'vagrant destroy'
      discovery: https://discovery.etcd.io/
      addr: $public_ipv4:4001
      peer-addr: $public_ipv4:7001
  fleet:
      public-ip: $public_ipv4
  units:
    - name: etcd.service
      command: start
    - name: fleet.service
      command: start

Reemplazar el valor de por el valor que les fue devuelto anteriormente.

Las opciones de $publicipv4 y $privateipv4 pueden ser configuradas desde el archivo de vagrant y serán utilizadas en nuestro clúster en caso de querer configurarlo con IP’s especificas. Esto lo haremos en un paso posterior.

Una vez realizados estos pasos, estamos en condiciones de levantar nuestra infraestructura de CoreOS, en mi caso en particular, agregue las siguientes líneas al Vagrant file para poder tener una interfaz extra en el sistema operativo que esta en modo bridge, debajo de la siguiente línea:

config.vm.network :private_network, ip: ip  

Agregue el siguiente código:

config.vm.network :public_network, bridge: "en0: Wi-Fi (AirPort)", ip: ipconfig.vm.provider "virtualbox" do |v|  
   v.customize ['modifyvm', :id, '--nicpromisc2', 'allow-all']
end  

Este ultimo paso no es necesario para pruebas dado que Virtual Box configurara las interfaces vía NAT, pero se puede configurar de esta forma también en caso de querer tener una interface bridged.

Una vez esto este listo, procederemos a instanciar nuestras maquinas virtuales con el siguiente comando:

[mats@lina ~/code/vagrant/coreos-vagrant] # vagrant up  
Bringing machine 'core-01' up with 'virtualbox' provider...  
Bringing machine 'core-02' up with 'virtualbox' provider...  
Bringing machine 'core-03' up with 'virtualbox' provider...  
…

Cuando el proceso termine (puede demorar dado que tiene que bajar la imagen base), podremos verificar si nuestras instancias están levantadas con el siguiente comando:

[mats@lina ~/code/vagrant/coreos-vagrant] # vagrant status  
Current machine states:  
core-01                   running (virtualbox)  
core-02                   running (virtualbox)  
core-03                   running (virtual box)  

Por ultimo, para acceder a cualquiera de nuestras maquinas, podremos hacerlo con el siguiente comando:

vagrant ssh core-01 -- -A  

Esto concluye la primera parte de esta entrega, en este capitulo aprendimos lo básico de CoreOS y como levantar un entorno de pruebas que nos permitirá en próximas entregas sacarle el mayor provecho a una infraestructura distribuida utilizando docker y fleet. Por ahora, los dejo con un entorno en el cual pueden probar sus propias imágenes de docker y en caso de romper algo, siempre recuerden que tienen la opción de re armar todo su clúster con un simple:

vagrant destroy ; vagrant up  

Sources: https://coreos.com/

Parte II