Victoria Martínez de la

Cruz

En pocas palabras: ¿Cómo
funciona OpenStack?

En pocas palabras: ¿Cómo funciona
OpenStack?
Querer explicar qué es y cómo funciona OpenStack en un artículo corto es
una idea muy poco realista, sin embargo voy a hacer el intento de dejar
por escrito una breve descripción de los componentes presentes en un
entorno estándar y la forma en la que estos se comunican para dar vida a
lo que conocemos como nube.

¿Qué es OpenStack?
OpenStack es una solución de cloud computing del tipo IaaS de código
abierto.

Su misión es proveer una solución flexible tanto para nubes públicas
como privadas, sean estas de cualquier tamaño, y para esto se
consideran dos requerimientos básicos: las nubes deben ser simples de
implementar y masivamente escalables.

Para cumplir con estos principios OpenStack está divido en diferentes
componentes que trabajan en conjunto. Esta integración es lograda a
través de interfaces de programación de aplicaciones – APIs – que cada
servicio ofrece y consume.

Gracias a estas APIs, los servicios pueden comunicarse entre ellos y
además se posibilita que un servicio sea reemplazado por otro de
similares características siempre que se respete la forma de
comunicación. Es decir, OpenStack es extensible y se ajusta a las
necesidades de quien desee implementarlo.
Su estructura
Las relaciones entre los servicios en OpenStack puede verse
conceptualmente como sigue

OpenStack Folsom Conceptual View – por Ken Pepple

Esta es una vista simplificada de la arquitectura, asumiendo que se
utilizan todos los servicios en la configuración más estándar. Tampoco
ilustra como los consumidores de la nube pueden interactuar con ella.

Los siguientes componentes pueden visualizarse en la gráfica

“Horizon” Dashboard provee una interfaz a los usuarios finales y al
administrador a los otros servicios. Es el servicio en el que
actualmente me encuentro trabajando ;)
“Nova” Compute recupera imágenes y metadatos asociados, y
transforma los pedidos de los usuarios en máquinas virtuales.
“Quantum” Network provee redes virtuales como servicio entre
dispositivos administrados por otros servicios de OpenStack, como
puede ser una máquina virtual de Nova. Permite a los usuarios
crear sus propias redes y luego vincularlas con los dispositivos que
deseen.
“Cinder” Block Storage provee almacenamiento persistente a las VMs
alojadas en la nube.
“Glance” Image provee un catálogo y un repositorio para las
imágenes.
“Swift” Object Store provee almacenamiento de objetos. Esto no es un
sistema de archivos, es más bien como un contenedor en el que se
pueden almacenar archivos y recuperarlos luego.
“Keystone” Identity provee autenticación y autorización para todos los
servicios de OpenStack, y también un catálogo de estos servicios de
una nube en particular.
OpenStack Software Diagram – por OpenStack

Datos generales: componentes principales de
cada servicio
Horizon – Dashboard

Es una aplicación web Django, un web framework para
perfeccionistas ;) Todos aquellos que esten familiarizados con este
framework encontrarán el código de Horizon muy fácil de
comprender.
Se encuentra implementado a través de mod_wsgi en Apache.
mod_wsgi implementa un modulo de Apache simple de usar capaz
de alojar cualquier aplicación desarrollada en Python que soporte la
interfaz WSGI.
Web Server Gateway Interface WSGI es una especificación para que
servidores de aplicaciones y servidores web se comuniquen con
aplicaciones web.

WSGI middleware – por Pylons

El código se encuentra divido en módulos reutilizables con la lógica,
interacción con las APIs, y la presentación, para facilitar la
personalización en diferentes sitios.
También posee una pequeña base de datos, por defecto SQLite3,
para algunas opciones, pero la mayoría de los datos son provistos
por los otros servicios.
Horizon es una implementación del Dashboard, no el Dashboard en
sí mismo. Pueden hacerse distintas implementaciones que se
ajusten a las necesidades del usuario.

Nova – Compute
Openstack Compute – por Rackspace

El cliente nova-api acepta y responde a las llamadas del usuario
final.
La virtualización es administrada por nova-compute. Crea/finaliza
las instancias de VMs a través de la API del hipervisor utilizado.
El almacenamiento es controlado por nova-volume (ahora
reemplazado por Cinder). Administra la creación, vinculación y
desvinculación de volúmenes de almacenamiento persistente a
instancias.
Las redes son gestionadas por nova-network (ahora reemplazado
por Quantum). Acepta tareas relacionadas a redes y las ejecuta.
La planificación es realizada por nova-schedule. Toma los pedidos
de VMs de la cola y determina dónde debería ejecutarse.
La cola, por defecto RabbitMQ, es el nodo central para el pasaje de
mensajes entre daemons.
También dispone de una base de datos que almacena la mayoría de
los datos de estado de compilación y ejecución.
nova-consoleauth, nova-novncproxy, nova-console permiten a
los usuarios acceder a las instancias virtuales a través de un proxy.
Al crear una instancia deberán seleccionar entre las opciones de
configuraciones de recursos virtuales disponibles, llamadas flavors.
Luego, pueden agregarse recursos como volúmenes de
almacenamiento persistente y direcciones IP públicas.

Swift – Object Storage
OpenStack Object Storage – por Rackspace

Antes de hablar sobre los componentes de Swift…

¿Qué es un objeto?

Esta noción es fundamental para entender este servicio puesto que la
administración de objetos es su principal objetivo.

Un objeto es una entidad que contiene información, pero a diferencia de
los archivos con los que usualmente trabajamos, los objetos no son
organizados en una jerarquía.

Cada objeto existe en el mismo nivel en un espacio de direcciones
llamado pool de almacenamiento. Un objeto no puede ser almacenado
dentro de otro objeto.

Tanto los archivos como los objetos tienen metadatos asociados a los
datos que contienen, pero los objetos son caracterizados por tener
metadatos extendidos. Cada objeto tiene asignado un identificador único
que permite a un servidor o usuario final recuperarlo sin necesidad de
conocer la ubicación física de la información. Esto es muy útil para
automatizar y racionalizar almacenamiento de datos en entornos de
cloud computing.

Usualmente se compara el almacenamiento de objetos con el
estacionamiento en un restaurant. Cuando un cliente solicita este
servicio, intercambia las llaves de su auto por un recibo. El cliente no
conoce dónde será estacionado su auto o cuántas veces el encargado
moverá su auto mientras el cena. En esta analogía, el identificador único
de los objetos está representado por el recibo.

Volviendo a Swift, podemos mencionar

El servidor proxy se encarga de aceptar los pedidos entrantes, como
archivos para subir, modificaciones a los metadatos o creación de
contenedores; también provee archivos y un listado de los
contenedores.
El servidor de cuentas maneja las cuentas asociadas con el servicio.
El servidor de contenedores realiza un mapeo de los contenedores,
carpetas, dentro del servicio.
El servidor de objectos administra los objectos, archivos.
También se corren servicios de replicación, para proveer
consistencia y disponibilidad a través del cluster, auditoría y
actualización.

Glance – Image Store

En este caso también…

¿Qué es una imagen?

Una imagen es un archivo único que contiene los contenidos y la
estructura completa de un medio de almacenamiento. Es una copia
idéntica de un sistema de archivos.

Las imágenes son utilizadas frecuentemente como medio de distribución
para sistemas operativos e instancias (un momento de ejecución
determinado) de los mismos. Estos últimos son típicamente llamados
snapshots.

Dicho de otro modo, los snapshots son instancias en ejecución que
pueden ser obtenidas creando una nueva imagen basada en el estado
actual del disco de una instancia en particular.

Dentro de Glance encontraremos,

glance-api acepta los pedidos para la búsqueda, obtención y
almacenamiento de imágenes.
El registro de almacenamiento glance-registry procesa y recupera
los metadatos de las imágenes.
Posee una base de datos para los metadatos de las imágenes.
También se corren servicios de replicación, para proveer
consistencia y disponibilidad a través del cluster, auditoría y
actualización.

Keystone – Identity

keystone se encarga tanto de manejar los pedidos de la API así
como también provee un único punto de integración para las
políticas de OpenStack, catálogos de los servicios, token y
autenticación.
Cada función de Keystone tiene un backend vinculable que permite
diferentes formas de usar el servicio. Se brinda soporte para los
backends estándares como LDAP o SQL, y KVS (Key-Value Stores).

Quantum – Network
quantum-server acepta pedidos de la API y los enruta hacia los
plugins de Quantum que correspondan.
Los plugins y agentes de Quantum son los encargados de realizar
las tareas, como enchufar/desenchufar puertos, crear redes y
subredes y direccionamiento de IPs.
También dispone de una cola para enrutar información entre el
quantum-server y los distintos agentes.
Posee una base de datos para almacenar el estado de determinados
plugins.

Cinder – Block Storage

La API de Cinder permite la manipulación de volúmenes, tipos de
volúmenes y snapshots. cinder-api acepta los pedidos y los enruta
a cinder-volume para ser procesados.
cinder-volume reacciona leyendo o escribiendo a la base de datos
que mantiene el estado, interactúa con otros procesos (como el
cinder-scheduler) a través de la cola de mensajes y directamente
actua sobre el almacenamiento proveyendo hardware o software.
cinder-scheduler selecciona el nodo para el almacenamiento por
bloques óptimo para la creación de un volumen sobre el.
La cola de mensajes enruta información entre los procesos de
Cinder.
Una base de datos almacena el estado de los volúmenes.

Todos estos componentes y la forma en la que se relacionan pueden
verse en su configuración más simple en el siguiente gŕafico

OpenStack Folsom Logical View – por Ken Pepple

Probablemente quieran abrir la imagen en otra pestaña… ¡son
demasiadas relaciones! Y como les dije, es una visión simplificada.
Estoy muy segura de que muchas cosas quedaron pendientes – soy
consciente de que la descripción de Keystone es bastante pobre, ¡ya la
voy a mejorar! -, pero espero por lo menos haber preparado el terreno
para los próximos artículos, más específicos y con más cuestiones
técnicas.

Via | OpenStack Manuals, Rackspace, TechTarget y Techrepublic

Las imágenes que no tienen leyenda son de OpenStack.