In a nutshell: How OpenStack works?

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 Conceptual View

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.
  • “Neutron” 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

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 by Pylons

    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 by Rackspace

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 Neutron). 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.

Compute

Swift – Object Storage
Object Storage by Rackspace

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.

Object Storage Swift

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).
Neutron – Network
  • neutron-server acepta pedidos de la API y los enruta hacia los plugins de Neutron que correspondan.
  • Los plugins y agentes de Neutron 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 neutron-server y los distintos agentes.
  • Posee una base de datos para almacenar el estado de determinados plugins.

Network Neutron

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 Logical View

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.

Comments (52)

  1. Antes que nada una felicitación me gusto la explicación y fue muy concisa, apenas me estoy adentrando en el tema de openstack y me ha sido de utilidad la información, sigue así.

    • ¡Muchas gracias por tus felicitaciones Jesus! Me pone muy contenta saber que la explicación te fue de utilidad. Mucha suerte con tu inicio en OpenStack, y cualquier duda que tengas, no dudes en escribirme .

  2. Excelente y sencilla explicación para un tema que contiene muchos conceptos abstractos.

    Aprovecho para hacer una consulta adicional: en la versión anterior de openstack (Essex) las MV se almacenaban en Nova y ahora lo hacen en Cinder ? Es así ?

    De nuevo, gracias.

    • Hola Nando,

      Desde Folsom se incorporaron Cinder y Quantum/Neutron, delegando la tarea de almacenamiento y administracion de redes respectivamente a estos servicios para aminorar la carga en Nova y mejorar aún más los servicios para las diferentes necesidades.

      La funcionalidad de Cinder se centra solo en el almacenamiento por bloques (es decir, el almacenamiento no volátil) de las VMs. Pero la VM en sí sigue siendo almacenada en la región en la que se encuentra Nova.

      Espero que eso aclare tu duda. Si no, estoy a tu disposición.

      Gracias por pasar y dejar tus comentarios,

      ¡Saludos!

      Victoria

  3. Hola! :)
    Muy buena la explicación, me ha costado mucho adentrarme a openstack.
    Tendrás tutoriales de openstack? me interesa mucho la parte de creación y gestión de MV.
    Aunque también he tenido varios problemas en instalación y dependencias, recomiendas algún SO en concreto?
    Gracias!

    • ¡Hola Pedro!

      Me alegra saber que te sirvió el post :) Es difícil romper el hielo con OpenStack, pero lo bueno es que hay mucho material para poder dar los primeros pasos y después ir aprendiendo sobre temas más puntuales.

      Precisamente no tengo ningún tutorial, yo siempre me guíe por la documentación oficial (la que más me sirvió, http://docs.openstack.org/grizzly/openstack-compute/admin/content/index.html).

      Si lo que más te interesa es la creación y gestión de VMs, te conviene centrarte en buscar documentación sobre Nova (OpenStack Compute). En ese manual que te comenté está muy bien explicado.

      Respecto a SOs, en teoría OpenStack puede establecerse fácilmente en las distribuciones más utilizadas de GNU/Linux, peeeero usualmente hay más desarrollo para Ubuntu (preferiblemente Ubuntu 12.04 LTS), para Fedora 18 o para RHEL. Yo también experimente con ArchLinux pero tiene ciertos inconvenientes (entre otras cosas, debido a la versión de Python que usa OpenStack y la naturaleza bleeding-edge de Arch).

      Si puedo ayudarte en alguna otra cosa no dudes en escribirme :)

      ¡Saludos!

      Victoria

  4. Hola Victoria, me gustó mucho tu artículo.
    He trabajado un poco con OpenStack instalado, pero necesito trabajar con el API. ¿Has trabajado con el API?
    Algún consejo.

    ¡Gracias!

  5. ¡Hola Erick!

    Qué bueno escuchar que te gustó el post :)

    ¿A qué te referís con OpenStack instalado? ¿A interactuar con los componentes a través de Horizon y de los clientes?

    Al estar desarrollando en Horizon experimenté bastante con las APIs. ¿Hay algo especifico en lo que dudes?

    En estas guías vas a poder encontrar todo lo que necesitas para arrancar (y más también) http://docs.openstack.org/api/api-specs.html.

    ¡Saludos!

  6. Muy buena explicación pero me faltó saber qué protocolo usa para la transferencia de imágenes de un nodo con Glance a un nodo computacional (¿utiliza NFS, iSCSI, …?)

    • ¡Hola Diego!

      Glance no es más que una abstracción para el manejo de imágenes, el almacenamiento se realiza a través de otro servicio (usualmente Swift). Suponiendo que uses Swift, la transferencia de imágenes a Nova se realiza con el protocolo iSCSI. Espero que aclare tus dudas, cualquier cosa escribime.

      ¡Saludos!

  7. Pingback: Nubes híbridas | Guerrero Lagos

    • ¡Gracias por tus comentarios Francisco! Si ya lo he instadado (unas cuantas veces), ¿se han encontrado con algún problema? ¡Saludos!

  8. Fantástico, muchísimas felicidades y ánimo para seguir mostrándonos tu conocimiento, ayudas a muchas personas que entrar en el mundo. Gracias por acercar a la comunidad de habla hispana nativa tecnologías opensource.

  9. Cómo se practica la reutilización a través de OpenStack?
    Cómo se resuelven los temas de escalabilidad en OpenStack?
    Cómo apoya OpenStack la disponibilidad de mi infraestructura?
    Cómo se atiende la seguridad en OpenStack?
    De qué forma se establece la flexibilidad en OpenStack?

    • ¡Hola Luis! Intenté contestar lo mejor que pude, agradezco un poco más de contexto para cada una de las preguntas :)

      - Reutilización: Imagino que estás hablando de reutilización de recursos, ¿verdad? ¿a qué te refieres como maneja la reutilización?
      - Escalabilidad: Dependiendo el deployment que realices va a adecuarse a tus necesidades. Aquí hay algunos ejemplos de arquitecturas a seguir según tus necesidades http://docs.openstack.org/arch-design/content/.
      - Disponibilidad: Misma respuesta para escalabilidad. Aquí hay algunos ejemplos de deployments de alta disponibilidad http://docs.openstack.org/high-availability-guide/content/.
      - Seguridad: La infraestructura de OpenStack fue desarrollada para ser segura, por lo que todas las acciones que quieras realizar sobre las diferentes API’s requerirán de una combinación de usuario, constraseña y proyecto (o tenant). Por otro lado, el deployment queda a cargo del operador. En esta guía puedes encontrar diferentes prácticas que harán tu deployment más seguro http://docs.openstack.org/security-guide/content/.
      - Flexibilidad: ¿En qué sentido?

      ¡Saludos!

  10. Muchas gracias por la información con respecto a OpenStack. Estoy incursionando en el tema de cloud coputing y he logrado aclarar muchas dudas con respecto a esta nueva propuesta libre. Un cordial Saludo.

  11. felicidades tu blog es muy bueno. Bueno comentarte que recién estoy empezando a conocer sobre openstack y a implementarlo y me aclaraste muchas dudas Gracias!

  12. Hola buenas noches victoria, tengo muchas dudas de openstack y espero que me puedas aclarar un poco el panorama ya que soy nuevo en el tema, lo escuche y me dio curiosidad por saber de que se trata y por lo que veo es de virtualizaciones, mi pregunta es si openstack puede hacer lo mismo o bueno algo similar a windows server como lo hace con hyper-v. de que un usuario pueda ingresar desde cualquier parte y pueda ejecutar el office y algunos otros programas, espero que me puedas orientar y muchas gracias por tomar un poco de tu tiempo.

  13. Muy bueno el artículo. Estoy comenzando a meterme en el tema, porque estoy con haciendo un trabajo universitario… y ayuda mucho para aclarar este tema.

  14. Hola Victoria!!!! Me sumo al resto de los colegas en cuanto a tu buen trabajo.
    En estos momentos me encuentro desarrollando mi tesis de maestria y he escogido el tema de Cloud para operadores de Telecomunicaciones, referido al futuro de asumir las actuales aplicaciones asociadas al servicio e implementarlas (vIMS, vSBC) sobre las nuevas tendencias (Cloud/Openstack + SDN/NFV).
    Especificamente estoy trabajando en una solucion Openstack+Huawei=Fusionsphere para la implenetacion de mi solucion IaaS.
    Podras aconsejarme en cuanto a guias o patrones? Conoces algo sobre esta unión?
    cualquier opinión suya será muy agradecida.

  15. Una felicitación mas para usted señorita que ha explicado de excelente manera como se compone y funciona este sistema global de openStack. Quisiera decirte que me estoy adentrando en este mundo y tengo un proyecto que iniciara muy pronto, he descubierto tantos temas pero ninguno me ha sido tan útil como tu explicación.
    Si posees mas información avanzada y técnica, me gustaría que la compartieras y pudiéramos intercambiar soluciones e ideas. Nuevamente Felicidades..

  16. Gracias muy buen articulo, me ayudo a entender un poco esta terminologia ya que no sabia de que se trataba
    pero me familiarizo mucho con mi trabajo, aunque ya el tema tiene 3 anos debes tener algo mas de experiencia al respecto, te agradeceria si me puedes recomendar algun material o site en particular..
    Salu2
    J@L

  17. Buen articulo, te da informacion general y concisa de que es OpenStack, por lo menos ya te introudce, tu decides que mas quieres buscar o conocer.

    Gracias!

  18. Pingback: Cloud Computing | Yenifer03’s Weblog

  19. Pingback: Computación en la nube – Título del sitio

Leave a Comment

Puedes usar las siguientes etiquetas y atributos HTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>