Openstack (Máquinas Virtuales)

Openstack es un software de virtualización, distribuido de manera libre y ampliamente utilizado en la industria. La versión desplegada en Nightingale es Openstack Queens.

A través de Openstack se pueden crear máquinas virtuales accesibles desde, a priori, la red cableada de DeustoTech. Estas máquinas son máquinas virtuales al uso, en las que el acceso se podrá realizar a través de SSH o VNC. Actualmente, las imágenes desplegadas en Openstack son las siguientes:

  • Centos 6.6

  • Centos 7

  • Debian 8

  • Debian 9

  • Fedora Atomic

  • Ubuntu 14.04

  • Ubuntu 16.04

  • Ubuntu 18.04

  • Ubuntu 20.04

  • Windows 10

  • Windows 10 education

  • Windows Server 2016

Nota

Al ser Windows un SO propietario, no se dará soporte a su uso, quedando las cuestiones de rendimiento y similares a cargo del usuario.

Nota

En el caso de necesitar desplegar una imagen de un SO que no está presente, puedes contactar con la persona responsable de ello (ver Contacto).

A continuación, se explica cómo funciona el almacenamiento de las VMs en Openstack, ya que es un aspecto importante a tener en cuenta.

Cuestiones de almacenamiento

En el Openstack desplegado en Nightingale existen tres tipos de almacenamiento:

  • Disco de arranque (boot): en este disco duro se despliega la imagen del SO y se instala el software necesario para uso de la VM. Este disco siempre será SSD.

  • Disco efímero: este es un disco SSD que se puede desplegar junto con la VM. Está vinculado única y exclusivamente a la VM en su fase de creación.

  • Volumen de datos: disco HDD que se puede conectar a una VM. Este disco se puede entender como un dispositivo de almacenamiento externo, pudiendo desconectarlo de una máquina para posteriormente conectarlo a otra diferente, etc. De los tres tipos de disco ofrecidos por OpenStack, es el único persistente.

Cuando hablamos de persistencia nos referimos a que los volúmenes de datos son los únicos que sobreviven al ciclo de vida de la VM. Cuando eliminamos una VM, tanto el disco de arranque como el disco efímero son destruídos. Sin embargo, el volumen de datos persiste, por lo que lo podremos conectar a una VM creada posteriormente.

Advertencia

Por todo esto, es importante que todos aquellos datos que queramos persistir se encuentren almacenados en un volumen de datos.

Backups

Antes de empezar a utilizar la VM, es importante tener en clara la cuestión de los backups. En Nightingale se hacen backups periódicos de los volúmenes de datos en AWS S3. No se hacen backups periódicos del disco de arranque ni del disco efímero, porque esto supondría tener que hacer backup de toda la VM, SO y software incluido, lo cual no tiene sentido. Los backups se establecen de manera manual, aunque actualmente se sigue la siguiente política de retención:

  • Backup diario de los últimos 7 días.

  • Backup semanal de las últimas 4 semanas.

  • Backup mensual de los últimos 12 meses.

  • Backup anual de los últimos 10 años.

En el caso de que los datos a respaldar fuesen muy voluminosos o su variación y criticidad no fuese grande, se podrían modificar estas políticas de retención.

Los backups no se configuran de manera automática al crear el volumen de datos, por lo que es necesario contactar con la persona responsable (ver Contacto).

Backup de VMs completas

A pesar de que no se realicen backups periódicos de las VMs al completo existe la posibilidad de hacer backups puntuales de los VMs a través de las snapshots. Una snapshot crea una imagen con el estado actual de la VM, incluyendo el disco de arranque, que, posteriormente, se respaldaría en AWS S3. La idea tras estas snapshot es, al tener ya la máquina con todo el software instalado, solicitar a la persona al cargo que realice la snapshot, para poder recuperarla en el futuro si hiciese falta. La imagen creada al realizar la snapshot se puede descargar y mover a otros motores de virtualización, como VMWare o VirtualBox.

Como se puede observar, no existe ahora mismo una manera directa de hacer backup del disco efímero de una VM. Por este motivo, recomendamos utilizar herramientas como rsync y cron para copiar los datos desde el disco efímero a un volumen de datos.

Networking

Openstack funciona a través de redes virtuales. Esto nos permite crear la topología de red que necesitemos, incluyendo todas las subredes y routers que queramos. En nightingale, existen dos redes predefinidas.

  • Red provider: esta red es la red externa, a través de la cual las VMs reciben conectividad externa. Una VM no puede estar conectada directamente a esta red.

  • Red default: es una red interna a la cual se puede conectar cualquier VM. A su vez, esta red default está conectada con la red provider a través de un router para disponer de conectividad externa.

Al igual que existe la red default, podemos crear tantas redes internas como necesitemos. Por ejemplo, si en el seno de un proyecto vamos a desplegar varias máquinas virtuales, puede que nos convenga crear su propia red y subred, para que compartan espacio de IPs, y todas las VMs puedan verse entre ellas. Es importante remarcar esto último, ya que, por defecto, las VMs tienen todos los puertos de entrada cerrados. Esto se gestiona a través de los grupos de seguridad, que veremos a continuación.

Grupos de seguridad

Los grupos de seguridad (security groups) gestionan el acceso a través de la red de las VMs. Por defecto, las VMs tendrán todos los puertos de salida abiertos y todos los de entrada cerrados. A través de los grupos de seguridad, se pueden establecer qué puertos y protocolos tendrá abiertos una VM. Estos grupos de seguridad permiten establecer máscaras de subred para determinar los orígenes a través de los cuales se puede acceder a un puerto determinado, siendo 0.0.0.0/0 la máscara que permite el acceso desde cualquier lugar.

Esto es interesante cuando se utilizan redes internas. Por ejemplo, podemos crear una red interna, con una subred con la máscara 192.168.14.0/24, por lo que las máquinas conectadas a esta red tendrán asignadas IPs entre los rangos 192.168.14.0 y 192.168.14.255. Podremos crear un grupo de seguridad que, por ejemplo, exponga todos los puertos de entrada de estas máquinas para aquellos orígenes que cumplan con la máscara 192.168.14.0/24, por lo que las máquinas tendrían total acceso entre ellas, pero no lo tendrían permitido desde fuera de esta red.

A continuación, podríamos crear otro grupo de seguridad, al que perteneciese solamente una de ellas, que expusiese los puertos 80 y 443 a todos los orígenes, haciendo de proxy.

Nota

Aunque Openstack permita crear topologías de red hasta donde nos llegue la imaginación, el uso más corriente es tener una única VM conectada a la red default.

IPs flotantes

Las IPs flotantes (floating IPs) son las IPs a través de las cuales se puede acceder a una VM desde el exterior, entendiendo el exterior todo acceso desde fuera del propio Openstack. Toda VM puede tener 0 o más IPs flotantes. Estas IPs se reservan, y pueden mantenerse incluso después de que la máquina sea destruida, para asignarlas a otra máquina diferente. Es la IP que tendremos que utilizar para acceder a la VM.

Acceso a la VM

Nota

En este apartado sólo se cubren aspectos relativos a máquinas Linux, quedando los detalles de acceso a las máquinas Windows a cargo de sus usuarios.

El acceso por defecto a las VMs se realiza a través de SSH, utilizando el sistema de claves público-privadas para la autenticación. Openstack permite importar nuestras claves públicas en el caso de que ya las tengamos creadas con anterioridad, o generar pares de claves público-privadas nuevos. Es muy importante conservar la clave privada a buen recaudo, ya que será nuestro principal método de acceso a la VM.

Advertencia

En caso de perder la clave privada, habrá que realizar una snapshot de la VM y volver a recrearla, indicando una nueva clave en su creación.

El usuario de la VM será el nombre de la distribución de Linux, escrito en minúscula. Por ejemplo, para las distribuciones Ubuntu, el usuario será ubuntu, para CentOS será centos y para Debian será debian. Por lo tanto, para acceder una VM basada en Ubuntu, tendremos que ejecutar el siguiente comando:

$ ssh -i <clave-pública> ubuntu@<IP-flotante>

Nota

El usuario por defecto dispone de privilegios de superusuario.

Acceso remoto a la VM

Nota

Recuerda que en principio, la VM solamente puede ser accedida desde la red cableada de DeustoTech.

Si deseas acceder a la VM desde fuera de la red cableada de DeustoTech, existen dos posibilidades:

  • Acceso a través de la VPN: se realizará una GP al Servicio Informático indicando la IP de la VM (IP flotante), los puertos a los que se desea acceder, y los usuarios @deusto.es que necesitan disponer de dicho acceso.

  • Acceso público: si se desea proporcionar acceso público a la VM (a un servidor web, p. ej.), se tendrá que realizar una GP al SI indicando la IP de la VM (IP flotante), un dominio con la forma <miproyecto>.deustotech.eu y el puerto o puertos a los que se desea acceder. Desde el SI tienen la política de no conceder acceso público a través de SSH a ninguna VM o máquina física alojada en la Universidad.

Nota

Si necesitas desplegar servicios que tengan que ser accesibles publicamente desde la Web, te recomendamos encarecidamente que despliegues tu aplicación utilizando Contenedores Docker (Kubernetes). Incluso, si necesitas lanzar trabajos de Machine Learning, Data Analytics o similares, te recomendamos que eches un vistazo a ………..

Sabores

La configuración de CPU, disco duro y memoria RAM utilizada para crear una VM se denomina sabor (flavor). Ahora mismo, están definidos los siguientes sabores:

+----------------------+--------+------+-------+
| Name                 |    RAM | Disk | VCPUs |
+----------------------+--------+------+-------+
| f1-micro             |   1024 |   10 |     1 |
| f1-nano              |    512 |   10 |     1 |
| f1-tiny              |   2048 |   10 |     1 |
| n1-highcpu-16-100    |  16384 |  100 |    16 |
| n1-highcpu-16-25     |  16384 |   25 |    16 |
| n1-highcpu-16-50     |  16384 |   50 |    16 |
| n1-highcpu-2-100     |   2048 |  100 |     2 |
| n1-highcpu-2-25      |   2048 |   25 |     2 |
| n1-highcpu-2-50      |   2048 |   50 |     2 |
| n1-highcpu-32-100    |  32768 |  100 |    32 |
| n1-highcpu-32-25     |  32768 |   25 |    32 |
| n1-highcpu-32-50     |  32768 |   50 |    32 |
| n1-highcpu-4-100     |   4096 |  100 |     4 |
| n1-highcpu-4-25      |   4096 |   25 |     4 |
| n1-highcpu-4-50      |   4096 |   50 |     4 |
| n1-highcpu-8-100     |   8192 |  100 |     8 |
| n1-highcpu-8-25      |   8192 |   25 |     8 |
| n1-highcpu-8-50      |   8192 |   50 |     8 |
| n1-highmem-16-100    | 106496 |  100 |    16 |
| n1-highmem-16-25     | 106496 |   25 |    16 |
| n1-highmem-16-50     | 106496 |   50 |    16 |
| n1-highmem-2-100     |  13312 |  100 |     2 |
| n1-highmem-2-25      |  13312 |   25 |     2 |
| n1-highmem-2-50      |  13312 |   50 |     2 |
| n1-highmem-4-100     |  26624 |  100 |     4 |
| n1-highmem-4-25      |  26624 |   25 |     4 |
| n1-highmem-4-50      |  26624 |   50 |     4 |
| n1-highmem-8-100     |  53248 |  100 |     8 |
| n1-highmem-8-25      |  53248 |   25 |     8 |
| n1-highmem-8-50      |  53248 |   50 |     8 |
| n1-standard-1-100    |   4096 |  100 |     1 |
| n1-standard-1-25     |   4096 |   25 |     1 |
| n1-standard-1-50     |   4096 |   50 |     1 |
| n1-standard-16-100   |  61440 |  100 |    16 |
| n1-standard-16-25    |  61440 |   25 |    16 |
| n1-standard-16-50    |  61440 |   50 |    16 |
| n1-standard-2-100    |   8192 |  100 |     2 |
| n1-standard-2-25     |   8192 |   25 |     2 |
| n1-standard-2-4-100  |   4096 |  100 |     2 |
| n1-standard-2-4-25   |   4096 |   25 |     2 |
| n1-standard-2-4-50   |   4096 |   50 |     2 |
| n1-standard-2-50     |   8192 |   50 |     2 |
| n1-standard-32-100   | 122880 |  100 |    32 |
| n1-standard-32-25    | 122880 |   25 |    32 |
| n1-standard-32-50    | 122880 |   50 |    32 |
| n1-standard-4-100    |  16384 |  100 |     4 |
| n1-standard-4-12-100 |  12288 |  100 |     4 |
| n1-standard-4-12-25  |  12288 |   25 |     4 |
| n1-standard-4-12-50  |  12288 |   50 |     4 |
| n1-standard-4-25     |  16384 |   25 |     4 |
| n1-standard-4-50     |  16384 |   50 |     4 |
| n1-standard-8-100    |  30720 |  100 |     8 |
| n1-standard-8-16-100 |  16384 |  100 |     8 |
| n1-standard-8-16-25  |  16384 |   25 |     8 |
| n1-standard-8-16-50  |  16384 |   50 |     8 |
| n1-standard-8-25     |  30720 |   25 |     8 |
| n1-standard-8-50     |  30720 |   50 |     8 |
| n1-standard-8-64-100 |  65536 |  100 |     8 |
| n1-standard-8-64-25  |  65536 |   25 |     8 |
| n1-standard-8-64-50  |  65536 |   50 |     8 |
| n1.standard.1        |   1024 |    4 |     1 |
+----------------------+--------+------+-------+

El tamaño de disco duro que se indica es del disco de arranque. Se han establecido todos los sabores con tamaños para el disco de arranque de 25, 50 y 100 GB, ya que creemos que son suficientes para instalar el SO y el software necesario.

Ninguno de los sabores incluye disco efímero, ya que las necesidades de cada VM son muy distintas. En el caso de necesitar disco efímero, se podrá solicitar la creación de un sabor específico. De la misma manera, si se necesitan características que no estén cubiertas por estos sabores, se podrá solicitar la creación de uno nuevo.

Solicitud de una VM

Si necesitas una VM, puedes solicitarla poniéndote en contacto con la persona responsable, e indicando:

  • Sabor requerido.

  • Sistema Operativo.

  • Puertos a abrir.

  • Tamaño del volumen de datos (si fuese necesario).

  • Otros requisitos (redes, etc.)

Puedes consultar los datos de contacto en el apartado Contacto.