Seleccionar página

A lo largo de esta entrada, explicaré como realizar la instalación y el despliegue de OpenNebula en un clúster de computadores real, y como solucione algunos problemas que surgieron durante la instalación. Si no sabes lo que es OpenNebula, puedes visitar mi entrada anterior: ¿Que es OpenNebula?.

Toda la guía aquí descrita se corresponde para la versión 4.14.2 Great A’Tuin de OpenNebula.

Este despliegue lo realicé para una asignatura llamada Gestión y Administración de Redes, que cursé el tercer año en el Grado de Ingeniería Informática. Dicho trabajo se enmarcaba en la parte de administración, puesto que supone aprovisionar un sistema y realizar la instalación de un servicio en una máquina real.

La infraestructura física que utilicé para la instalación de dicho servicio, fue un clúster formado por un front-end y tres nodos de procesamiento. Las características técnicas de dichos computadores son las siguientes:

Front-end:

  • Procesador: Quad-Core AMD Opteron 2374 HE 2,2 GHz
  • Memoria: 32 GB
  • Disco: 409 GB
  • Sistema operativo: Ubuntu 14.04.4 LTS

Nodos de procesamiento:

  • Procesador: Quad-Core AMD Opteron 2376 2,3 GHz
  • Memoria: 16 GB
  • Disco: 270 GB
  • Sistema operativo: Ubuntu 14.04.4 LTS

Los sistemas operativos sobre los que trabajaremos son Ubuntu 14.04 LTS Server instalado tanto el en front-end como en los nodos y utilizaremos el hipervisor KVM en todo el sistema.

1. Instalación del Front-end:

Puesto que las maquinas virtuales trabajan con la virtualización del procesador, debemos de comprobar si esta está habilitada tanto en el front-end, como en los nodos. Para ello ejecutaremos la siguiente instrucción en un terminal:

$ grep -E 'svm|vmx' /proc/cpuinfo

Si no obtenemos ninguna salida, probablemente la extensión de virtualización no esté soportada en el sistema. Una vez comprobado esto, procederemos a instalar los paquetes necesarios. Para ello, agregaremos el repositorio de OpenNebula para la versión de nuestro sistema operativo. Durante la instalación de los paquetes necesitamos privilegios de administrador, por tanto, elevamos privilegios (#):

$ sudo su

Seguidamente agregamos el repositorio con las siguientes instrucciones:

# wget -q -O- http://downloads.opennebula.org/repo/Ubuntu/repo.key | apt-key add -
# echo "deb http://downloads.opennebula.org/repo/4.14/Ubuntu/14.04/ stable opennebula" > /etc/apt/sources.list.d/opennebula.list

He instalamos los paquetes requeridos:

# apt-get update
# apt-get install opennebula opennebula-sunstone nfs-kernel-server

Los paquetes que se instalarán tienen dependencias, por tanto se descargaran otros paquetes como son: opennebula-common, ruby-opennebula, opennebula-node, opennebula-sunstone, opennebula-tools, opennebula-gate, opennebula-flow, libopennebula-java, opennebula y libopennebula-java.

Una vez instalados los paquetes, debemos de habilitar el interfaz gráfico (sunstone) para que sea accesible desde cualquier host, de manera que cualquiera pueda acceder a su interfaz web. Para ello debemos de editar el fichero /etc/one/sunstone-server.conf y cambiar:  :host: 127.0.0.1 por :host: 0.0.0.0.

# nano /etc/one/sunstone-server.conf

Y una vez hecho esto, reiniciar el demonio Sunstone:

# /etc/init.d/opennebula-sunstone restart

Seguidamente debemos de configurar NFS, para poder exportar el directorio /var/lib/one desde el front-end hasta los nodos. Para ello debemos de agregar la siguiente linea en el archivo /etc/exports:

/var/lib/one/ *(rw,sync,no_subtree_check,root_squash)

Con una instrucción como:

# echo "/var/lib/one/ *(rw,sync,no_subtree_check,root_squash)" >> /etc/exports

Y reiniciar el servicio nfs con el comando:

# service nfs-kernel-server restart

Una vez configurado NFS, debemos de configurar las claves SSH para que el front-end pueda acceder a cualquier nodo. Para ello ejecutamos los siguientes comandos pero con privilegios oneadmin, el cual es el encargado de la administración de OpenNebula. Para ello ejecutamos el siguiente comando, estando como administrador:

# su - oneadmin

Una vez logeado como oneadmin, agregamos el snippet a ~/.ssh/config para que no nos pidan las claves de los known_host:

$ cat << EOT > ~/.ssh/config
Host *
StrictHostKeyChecking no
UserKnownHostsFile /dev/null
EOT

Y agregamos permisos de ejecución al archivo:

$ chmod 600 ~/.ssh/config

Y por ultimo volvemos a elevar privilegios como administrador y reiniciamos el demonio Sunstone:

# /etc/init.d/opennebula-sunstone restart

Con esto, darı́amos por concluida la instalación de OpenNebula en el front-end. Para acceder al panel de administración de OpenNebula Sunstone  implemente debemos acceder con el navegador web a la dirección correspondiente a al front-end en el puerto 9869.

Panel principal de OpenNebula

La contraseña por defecto para el usuario oneadmin, se genera automáticamente en el fichero ~/.one/one auth en la cuenta oneadmin. Para obtener la contraseña, simplemente accedemos con el usuario oneadmin, y volcamos el fichero que la contiene:

$ sudo su
# su - oneadmin
$ cat ~/.one/one_auth

Una vez que hemos accedido al panel de control, podemos visualizar resúmenes de la utilización del sistema.

2. Instalación de los nodos:

Los pasos detallados a continuación se realizaran en todos los nodos que queramos agregar a OpenNebula. En el caso que nos ocupa, hemos realizado la instalación en tres nodos, numerados por sus direcciones IP: 192.168.1.11, 192.168.1.12 y 192.168.1.13.

Para poder acceder a dichos nodos, primeramente tenemos que acceder al front-end a través de un terminal ssh, y seguidamente acceder a los nodos a través de ssh nuevamente. Para acceder a dichos nodos desde el front-end, usaremos sus direcciones IP, anteriormente comentadas. Durante la instalación de los paquetes necesitamos privilegios de administrador, por tanto, elevamos privilegios (#):

$ sudo su

Seguidamente agregamos el repositorio de OpenNebula con las siguientes instrucciones:

# wget -q -O- http://downloads.opennebula.org/repo/Ubuntu/repo.key | apt-key add -
# echo "deb http://downloads.opennebula.org/repo/4.14/Ubuntu/14.04/ stable opennebula" > /etc/apt/sources.list.d/opennebula.list

He instalamos los paquetes requeridos:

# apt-get update
# apt-get install opennebula-node nfs-common bridge-utils

Una vez instalados los paquetes, tenemos que configurar el interfaz de red del nodo para que se conecte al bridge. En nuestro caso en particular configuraremos el interfaz de manera estática, puesto que es ası́ como se ha configurado la red. Para ello, primeramente realizaremos una copia del interfaz /etc/network/interfaces en un sitio seguro, y seguidamente la modificamos para que contenga los siguientes datos:

auto lo
iface lo inet loopback

auto br0
iface br0 inet static
address 192.168.1.11
network 192.168.1.0
netmask 255.255.255.0
broadcast 192.168.1.255
gateway 192.168.1.1
bridge_ports eth0
bridge_fd 9
bridge_hello 2
bridge_maxage 12
bridge_stp off

En el apartado address debemos añadir la IP que tiene asignada nuestro nodo, en network la dirección de red, y en gateway la dirección IP correspondiente a la maquina que ejecuta OpenNebula, que en nuestro caso es el front-end (192.168.1.1). Y por ultimo reiniciamos el interfaz de red:

# /etc/init.d/networking restart

Una vez configurado el interfaz de red, configuraremos NFS para que podamos montar el directorio /var/lib/one del front-end. Para ello editamos el fichero /etc/fstab y añadimos la siguiente linea:

192.168.1.1:/var/lib/one/  /var/lib/one/  nfs   soft,intr,rsize=8192,wsize=8192,noauto

Seguidamente montamos el directorio con el comando:

# mount /var/lib/one/

Si el comando falla, puede ser por problemas del firewall. Por ultimo configuraremos Qemu, de manera que el usuario oneadmin puede administrar libvirt:

# cat << EOT > /etc/libvirt/qemu.conf
user = "oneadmin"
group = "oneadmin"
dynamic_ownership = 0
EOT

Finalmente reiniciamos el servicio libvirt:

# service libvirt-bin restart

3. Problemas durante la instalación:

Durante la instalación surgieron una serie de problemas, para los cuales comentaré como surgieron y como hemos podido solventarlos.

3.1 Instalación de paquetes:

El primero de ellos vino dado para la instalación de los paquetes de OpenNebula en los nodos por medio de repositorio, ya que dichos nodos no tenían acceso a internet, y la instalación por medio de paquetes .deb era muy tediosa debido a las dependencias con otros paquetes como Ruby o Java, para los cuales requerían un gran numero de paquetes. Para poder solventar dicho problema, mis compañeros modificaron la tabla ifTable de la máquina tales, de manera que pudiera redirigir el trafico desde los nodos hasta Internet, y viceversa, de manera que pudimos realizar la instalación de los paquetes mediante repositorio sin ningún problema.

3.2 Reinicio de los nodos:

Otro de los problemas que surgió fue que tras agregar los nodos, lo cual explicaremos en el siguiente apartado de despliege de servicios 6, cuando estos se reiniciaban, se perdı́a la comunicación entre el nodo y tales, de tal manera que no podı́an monitorizarse. El problema se debı́a a que el directorio /var/lib/one no se montaba en el nodo al inicio del sistema, por tanto no podı́a acceder a dicho directorio. Para solventar este problema creamos un script .conf, que se ejecuta al inicio del sistema, de manera que ejecutase en el terminal, la instrucción para montar dicho directorio. El script, se localiza en el directorio /etc/init/montar-lib.conf de cada nodo y tiene el siguiente contenido:

# Montamos el directorio /var/lib/one para poder monitorizar el nodo con
# OpenNebula

start on runlevel [2345]

exec mount /var/lib/one

De esta forma solucionamos la caída de los nodos.