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