Componentes de OpenStack

Alberto Molina Coballes / @alberto_molina y José Domingo Muñoz Rodríguez / @Pledin_JD

Theme by reveal.js

Componentes de OpenStack

  • Proyecto grande y modular
  • Los módulos tienen muchas características comunes para poder integrarse fácilmente.
    • Escritos en Python
    • Algunos de ellos utilizan AMQP para el intercambio de mensajes
    • Incluyen una API RESTful para la comunicación entre componentes o externa (p. ej. clientes)
    • Autenticación basada en tokens gestionada a través del componente Keystone
    • Base de datos propia e independiente

Conceptos previos (I)

  • Token de autenticación: OpenStack utiliza Autenticación basada en tokens. Un token es una cadena aleatoria que se obtiene tras autenticarse en un sistema (con nombre de usuario y contraseña, p. ej.) y que permite al usuario utilizar recursos de forma segura sin volver a autenticarse.
  • Imagen: Imagen de sistema operativo preconfigurado que se utiliza como base para crear instancias. Dentro del cloud habrá diferentes imágenes para cada tipo de instacia que se quiera utilizar.
  • Instancia: Instancia de una imagen que se crea a demanda del usuario en uno de los nodos del cloud.

Conceptos previos (II)

  • IP fija: Direccion IP con la que se crean una instancia en una red y que se utiliza para comunicacion interna. La dirección IP fija no cambia durante la vida de la instancia.
  • IP flotante: Direccion IP asociada a una instancia en un momento dado para poder acceder a ella desde fuera. Una IP flotante puede asignarse a otra instancia diferente cuando se estime oportuno.
  • Grupo de seguridad: Reglas de cortafuegos que controlan el acceso a las instancias.
  • Par de claves ssh: Par de claves RSA pública/privada utilizadas para acceder por ssh a las instancias desde fuera del cloud.
  • Endpoint: URL completa para la utilización de una determinada API. Pueden definirse URLs diferentes para las API pública, interna y de administración.

OpenStack Identity Service (Keystone)

  • Directorio centralizado que almacena información de:
    • Usuarios
    • Proyectos (tenants)
    • Roles
    • Servicios y sus endpoints
  • Información almacenada en SGBDR o LDAP
  • Primer componente a instalar

OpenStack Image Service (Glance)

  • Gestiona las plantillas de imágenes de los sistemas
  • Gestiona las instantáneas de las instancias
  • Puede utilizar diversos formatos:
    • raw
    • qcow2 (Qemu/KVM)
    • vhd (Hyper-V)
    • ami (Amazon)
    • vdi (VirtualBox)
    • vmdk (VMware)

OpenStack Compute (Nova)

  • Componente principal de OpenStack
  • Gestiona las instancias de imágenes, dónde deben ejecutarse y el acceso mediante consola
  • Soporta diferentes hipervisores (recomendados KVM o Xen):
    • KVM/QEMU
    • Xen
    • Hyper-V
    • VMware ESXi
    • LXC
    • Docker
  • Permite incluso el aprovisionamiento de máquinas físicas mediante Baremetal/Ironic

OpenStack Object Storage (Swift)

  • Componente importante de OpenStack, pero independiente del resto
  • Sistema de almacenamiento redundante y escalable
  • El almacenamiento de objetos permite el almacenamiento masivo de datos no estructurados de forma bastante económica
  • Hoy en día ampliamente utilizado por aplicaciones web
  • Swift incluye su propia API y otra compatible con Amazon S3
  • Normalmente es utilizado por Glance para almacenar imágenes

OpenStack Block Storage (Cinder)

  • Los volúmenes son dispositivos de bloques que se crean de forma independiente de la instancia y pueden asociarse y desasociarse de ella cuando se precise
  • Cinder es equivalente al componente Amazon EBS
  • Los volúmenes se crean en el nodo de almacenamiento (por defecto con LVM) y se conectan a la instancia que se desee mediante algún protocolo de redes de almacenamiento (iSCSI es el más utilizado)
  • Cinder incluye controladores para gran cantidad de dispositivos de almacenamiento del mercado
  • Cuando nova termina una instancia borra todo el almacenamiento local asociado a ella, pero no los volúmenes, por lo que estos reciben el nombre de almacenamiento permanente.
  • Podemos pensar en los volúmenes como discos externos que se conectan o desconectan de las instancias, aunque se trate de un mecanismo completamente diferente

OpenStack Networking (Neutron)

  • Componente encargado de la configuración de redes virtuales
  • El nombre original de neutron era quantum, pero se tuvo que cambiar por problemas de copyright
  • Neutron incluye un buen número de complementos: OpenvSwitch, Cisco, Nicira, etc.
  • Neutron gestiona múltiples redes de forma independiente gracias al uso de linux network namespaces que permite que múltiples routers virtuales compartan un dispositivo de red físico
  • Neutron también se encarga de la gestión de los grupos de seguridad y de las IPs flotantes

OpenStack Dashboard (Horizon)

  • Panel de control web de OpenStack desarrollado en Django
  • No incluye toda la funcionalidad de la API de cada componente, pero sí los métodos más utilizados

Ejemplo de uso

Creación y acceso a una instancia

  • El usuario se autentica en Keystone y obtiene un token de sesión y la lista de los endpoints de los servicios
  • Solicita a glance las imágenes disponibles
  • Solicita a neutron las redes disponibles
  • Solicita a nova que arranque una instancia de una de las imágenes disponibles, en una de las redes y que inyecte posteriormente su clave ssh pública.
  • Solicita una IP flotante a neutron y la asocia a la IP fija de la instancia creada
  • Accede por ssh a la instancia utilizando la clave privada correspondiente

Componentes de Nova

  • nova-api: Encargado de aceptar las peticiones de los usuarios o del resto de componentes de OpenStack mediante una API RESTful
  • nova-scheduler: Encargado de planificar la ejecución de las instancias en los diferentes nodos del cloud
  • nova-compute: Encargado de ejecutar una instancia sobre un hipervisor
  • nova-console: Encargado de proporcionar consola de acceso a las instancias
  • nova-network: Antiguo componente encargado de la configuración de las redes. Sustituido por neutron
  • nova-volume: Antiguo componente encargado de la gestión de los volúmenes. Sustituido por cinder