Con la aparición de OpenStack Kilo, han sido más los fabricantes de soluciones de almacenamiento, que han liberado drivers para su uso a través de Cinder, tal y como podemos comprobar en la matriz de compatibilidad. Uno de los fabricantes que ha estado trabajando desde versiones tempranas de OpenStack, ha sido Nexenta, en concreto desde Essex. Hoy vamos a ver NexentaStor, una plataforma de Software definido como almacenamiento, la cual voy a usar para simular almacenamiento por bloque para mi entorno de OpenStack.
NexentaStor tiene dos versiones, una Enterprise y otra Community, siendo esta última más que suficiente para usarla en un laboratorio de VMware, OpenStack, etc. Hoy os voy a explicar cómo usar el driver de Nexenta con Cinder, el servicio de almacenamiento por bloques de OpenStack permitiendome hacer uso de Storage as a service.
Lo primero de todo, va a ser necesario crear un volumen en la interfaz de administración de Nexenta, si observáis la siguiente imagen, el que he creado se llama StackVol01 y tiene 200gb.
Cómo configurar Nexenta driver con Cinder
Para configurar el driver, es necesario localizar el nodo en el que tenemos instalado Cinder y acceder por SSH, en mi caso tengo un entorno multi nodo creado con la distribución Mirantis, por lo que tengo que acceder a una consula SSHH de Fuel y saltar al nodo de almacenamiento, una vez dentro tenemos que editar el fichero /etc/cinder/cinder.conf para configurar y habilitar el driver:
[Default]
...
enabled_backends=nexentaiscsi-1
[nexentaiscsi-1] volume_driver=cinder.volume.drivers.nexenta.iscsi.NexentaISCSIDriver volume_backend_name=NEXENTA01 nexenta_rest_port=8457 nexenta_host=192.168.1.75 nexenta_user=admin nexenta_password=TU_PASSWORD nexenta_volume=StackVol01
Los datos que tenemos que aportar a la configuración nosotros son:
- volume_backend_name -> Es el nombre con el que vamos a identificar la creación de volúmenes desde Horizon.
- nexenta_rest_port -> Puerto por el que accedemos a la interfaz de Nexenta, por defecto 8457.
- nexenta_host -> Ip o URL de acceso a Nexenta.
- nexenta_user -> Usuario con permisos para crear, eliminar y modificar zvols.
- nexenta_volume -> El nombre del volumen que hemos creado anteriormente.
Ahora una vez configurado el driver, debemos reiniciar Cinder, para ello ejecutaremos lo siguiente:
service cinder restart
En el log de Cinder podemos comprobar que se iniciado el driver, para ello ejecutamos:
tail -f /var/log/cinder-all-log May 29 18:50:59 node-5 cinder-volume Child caught SIGTERM, exiting May 29 18:50:59 node-5 cinder-volume Caught SIGTERM, stopping children May 29 18:50:59 node-5 cinder-volume Waiting on 1 children to exit May 29 18:50:59 node-5 cinder-volume Child 19177 exited with status 1 May 29 18:50:59 node-5 cinder-volume Starting 1 workers May 29 18:50:59 node-5 cinder-volume Started child 19343 May 29 18:50:59 node-5 cinder-volume Starting cinder-volume node (version 2014.2) May 29 18:50:59 node-5 cinder-volume Starting volume driver NexentaISCSIDriver (1.2.1) May 29 18:51:00 node-5 cinder-volume Updating volume status
Con esto ya tenemos configurado el driver de Nexenta y podemos hacer uso de Storage as a Service desde nuestra nube de OpenStack.
Cómo crear volúmenes en OpenStack desde Horizon
Desde Horizon, el panel de administración web de OpenStack, vamos a ver cómo crear volúmenes y que estos se generen directamente en nuestro entorno de Nexenta, para comprobar que el driver esta inicializado correctamente, debemos irnos a Admin -> System -> System Information -> Block Storage Service y en el listado nos debe aparecer el nombre del nodo y el backend configurado, sería algo así: nodo@nombre_backend_configurado.
Ahora que hemos comprobado que nuestro entorno detecta la configuración de Nexenta, lo primero que tenemos que realizar es crear un volume type para indicarle a OpenStack cuando creemos un volumen donde ha de crearlo, para ello nos vamos a Admin -> System -> Volumes -> Volume types y pulsamos en Create Volume Type, el nombre que debemos usar es el que añadimos anteriormente en la cinfiguración de cinder como volume_backend_name, en mi caso NEXENTA01.
Con esto ya podemos crear volúmenes en nuestro proyecto e indicar el backend configurado, en nuestro caso con Nexenta, para ello nos dirigimos a Project -> Volumes -> Create Volumes y rellenamos los datos deseados para crear el volumen, eligiendo en type NEXENTA01 de esta forma le estamos indicando a OpenStack que el volumen debe crearo en el entorno que hemos montado con Nexenta.
Si tenemos abierta aun la consola, en el log de Cinder podemos ver como se crea el volumen.
tail -f /var/log/cinder-all.log May 29 20:44:44 node-5 cinder-volume Updating volume status May 29 20:45:30 node-5 cinder-volume Updating volume status May 29 20:45:30 node-5 cinder-volume Updating volume replication status. May 29 20:46:01 node-5 cinder-volume Volume 5dbb7347-b944-4463-ac0c-5614b2900783: being created as raw with specification: {'status': u'creating', 'volume_size': 150, 'volume_name': u'volume-5dbb7347-b944-4463-ac0c-5614b2900783'} May 29 20:46:03 node-5 cinder-volume Volume volume-5dbb7347-b944-4463-ac0c-5614b2900783 (5dbb7347-b944-4463-ac0c-5614b2900783): created successfully
Ahora si accedemos al portal de aminitración web de nuestro entorno de Nexenta, podemos observar como el volumen ha sido creado, para ello debemos dirigirnos a SCSI Target -> Zvols -> View y nos aparecerá el listado de volumenes que vayamos creando, en la siguiente imagen podemos observar el volumen creado anteriormente de 150GB.
Cómo habéis visto configurar el driver de un sistema de almacenamiento con Cinder es bastante sencillo, de esta forma podemos configurar las cabinas de almacenamiento que usemos en nuestro entorno de OpenStack, revisando la matriz de compatibilidad que nombramos anteriormente, espero que os haya sido de utilidad.