Como instalar OpenStack en CentOS 7 usando PackStack de RDO Project

Para los que no conocen, RDO Project es una propuesta consolidada que permite desplegar OpenStack para proporcionar una infraestructura como servicio (IaaS) en un único nodo con todos sus componentes necesarios en las distribuciones basadas en Red Hat Enterprise Linux tales como CentOS y Fedora.

PackStack es la utilidad creada por los desarrolladores de esta comunidad que con ayuda de Puppet y Python nos permite hacer la instalación basada en pruebas de conceptos de todos los componentes que conforman OpenStack.

PackStack permite el despliegue en un único nodo o en múltiples nodos, por lo que en este sencillo tutorial, utilizaremos el método único nodo en un bare metal server con las siguientes especificaciones a nivel de hardware:

Procesador Core i7 de 3.40GH, 16 GB de RAM, 2 TB de Disco Duro, 1Gbps de conexión.

Los requerimientos recomendados se pueden encontrar en el quickstart de la documentación oficial de RDO Project. Usaremos como sistema operativo base la ultima versión de CentOS 7, y previo a la instalación deberemos ajustar lo siguiente:

Desactivar los servicios de Firewalld y Network Manager:

Es necesario desactivar los servicios de para Firewalld y Network Manager de la siguiente manera:

# systemctl disable firewalld
# systemctl stop firewalld
# systemctl disable NetworkManager
# systemctl stop NetworkManager

Luego de lo anterior es necesario, habilitar el servicio Network:

# systemctl enable network
# systemctl start network

Desactivar SELinux:

También y por comodidad podemos deshabilitar SELinux, que lo pueden hacer siguiendo el siguiente enlace.

 

Instalando PackStack.

Realizados los anteriores cambios, procederemos a instalar PackStack, que para el caso de CentOS 7, la referencia a los repositorios se encuentran en los repositorios Extras para CentOS 7, por lo que en la línea de comandos ejecutaremos lo siguiente:

# yum install -y centos-release-openstack-mitaka && yum update -y

Ahora si, instalados los repositorio, instalamos la utilidad PackStack:

# yum install -y openstack-packstack

Aun no tenemos instalado OpenStack con todos sus componentes, por lo que nuevamente en la línea de comandos ejecutamos la utilidad de PackStack con los siguientes parámetros adicionales:

# packstack --allinone --provision-demo=n --os-neutron-ovs-bridge-mappings=extnet:br-ex --os-neutron-ovs-bridge-interfaces=br-ex:enp2s0 --os-neutron-ml2-type-drivers=vxlan,flat

Los parámetros adicionales los explico a continuación:

--provision-demo=n : descartamos que la instalación nos incluya los cuentas demo.

--os-neutron-ovs-bridge-mappings=extnet:br-ex : con Neutron le indicamos que creemos una bridge mappings llamada br-ex y que permitirá el trafico desde la red física.

--os-neutron-ovs-bridge-interfaces=br-ex:enp2s0 : con Neutron creamos una bridge interface unida a la br-ex, es importante cambiar enp2s0 por la interfaces de su host, en muchos casos es eth0, lo pueden ver escribiendo ifconfig en la línea de comandos.

--os-neutron-ml2-type-drivers=vxlan,flat : le indicamos los tipos de driver a utilizar del plugin Modular Layer 2 que nos permitirá crear redes virtuales.

Terminada la instalación, la utilidad PackStack generara dos archivos que se encuentran en el directorio /root, uno llamado keystonerc_admin donde contiene los datos seteados como variables de entornos de usuarios para OpenStack asi como la url a la api, y otro archivo llamado packstack-answers-20160705-215928.txt en su caso con la fecha de ejecución de la utilidad, este archivo contiene todos los valores de configuración seteados en la instalacion y que luego podremos usar en posteriores instalaciones con PackStack.

También en la salida que genera la utilidad en la línea de comandos, encontraremos a url con la que podremos acceder a Horizon o al dashboard de OpenStack en mi caso y como el host esta utilizando la IP 192.168.100.250 la url es http://192.168.100.250/dashboard/, recuerden que en el archivo keystonerc_admin se encuentran los datos para acceder a Horizon, y que normalmente el usuario es admin junto al password que es un hash generado por la utilidad. Es importante resaltar que para poder ejecutar cualquier comando relacionado con los componentes de OpenStack como por ejemplo Neutron, Nova, deberemos cargar como variables de entorno las variables seteadas en el archivo keystonerc_admin por lo que antes de ejecutar cualquier comando relacionado con OpenStack, cargaremos las variables de entorno ejecutando lo siguiente:

$ source keystonerc_admin

El archivo keystonerc_admin contiene lo siguiente:

unset OS_SERVICE_TOKEN
export OS_USERNAME=admin
export OS_PASSWORD=xxxxxxx
export OS_AUTH_URL=http://192.168.100.250:5000/v2.0
export PS1='[\[email protected]\h \W(keystone_admin)]\$ '
export OS_TENANT_NAME=admin
export OS_REGION_NAME=RegionOne

 

Configurando Neutron con una red existente.

Luego de la instalación y comprobado que tenemos acceso a Horizon, comenzaremos a configurar Neutron en una red existente para que las instancias creadas en Nova, tengan acceso a Internet y en este caso desde la Red de Área Local, nos permitirá poder acceder a las instancias desde el bloque de direcciones IP de la LAN. Para este tutorial asignaremos el bloque de direcciones IP 172.16.1.0/24 para la red privada y para las instancias creadas en Nova y la uniremos a la red existente que se encuentra en el bloque de direcciones IP 192.168.100.0/24.

A continuación procederemos a configurar la red externa que proveerá de acceso a Internet a las instancias creadas usando IP flotantes, para ello debemos realizar lo siguiente en la línea de comandos, ejecutaremos:

# neutron net-create ext-net --shared --router:external=True

Luego, tendremos que crear la subnet que sera asociada a la red externa:

$ neutron subnet-create ext-net --name ext-subnet --allocation-pool start=192.168.100.200,end=192.168.100.240 --disable-dhcp --gateway 192.168.100.1 192.168.100.0/24

En el parámetro start=192.168.100.200,end=192.168.100.240 le indicamos que las IP flotantes serán asignadas desde las direcciones IP 192.168.100.200 hasta la 192.168.100.240.

Siguiente, crearemos la red privada, el bloque de direcciones IP seteadas serán asignadas a cada instancia que creemos con Nova, asi pues, el bloque de IP que usaremos es 172.16.1.0/24, por lo que realizaremos lo siguiente:

$ neutron net-create int-net

Después de haber creado la red privada, crearemos la subnet que sera asociada a la red privada:

$ neutron subnet-create int-net --name int-subnet --dns-nameserver 8.8.8.8 --gateway 172.16.1.1 172.16.1.0/24

Verificamos que las redes han sido creadas correctamente ejecutando: neutron net-list y para las sub redes, ejecutamos: neutron subnet-list .

Luego de creadas las redes y subredes, crearemos el enrutador del proveedor:

$ neutron router-create router_virtual

Luego, agregamos la red privada al enrutador:

$ neutron router-interface-add router_virtual int-subnet

Por ultimo agregamos la red externa como Gateway:

$ neutron router-gateway-set router_virtual ext-net

Comprobamos que se ha creado exitosamente ejecutando: neutron router-list

Expandiendo el volumen de almacenamiento.

El software para almacenamiento de volúmenes en OpenStack proporciona un servicio para crear y administrar almacenamiento por bloque persistente de volúmenes conocido como Cinder y que esta basado en LVM (Logical Volume Manager). Por defecto, durante la instalación con PackStack, crea el tamaño del espacio de almacenamiento del grupo de volumen que esta seteado en el archivo packstack-answers-20160705-215928.txt:

CONFIG_CINDER_VOLUMES_SIZE=20G

Los 20 GB asignados no son para nada suficientes al momento de crear múltiples instancias con, por ejemplo, 30 GB de espacio en disco o tener múltiples volúmenes de 20 GB para una sola instancia en Nova, por lo tanto, vamos a aumentar ese valor. Lo siguiente que tendremos que hacer es comprobar ejecutando vgdisplay cinder-volumes y verificar que esta creado el grupo cinder-volumes con el espacio seteado, el output mostraría lo siguiente:

... 
  VG Size               20.60 GiB
  PE Size               4.00 MiB
  Total PE              5273
  Alloc PE / Size       0 / 0   
  Free  PE / Size       5273 / 20.60 GiB
...

En este caso, y como no tenemos creadas instancias en Nova, ampliaremos el almacenamiento por bloque persistente a 800 GB de espacio. Primero deberemos ubicar el dispositivo loop que esta montada utilizando el archivo ubicado en /var/lib/cinder/cinder-volumes :

$losetup -a              
/dev/loop0: [2050]:25427972 (/srv/loopback-device/swiftloopback)
/dev/loop1: [2050]:59377776 (/var/lib/cinder/cinder-volumes)

Luego de identificado el dispositivo loop ( /dev/loop1 ) para Cinder, procedemos a desmontarlo, ejecutando lo siguiente:

$losetup -d /dev/loop1
$fuser -c /dev/loop1
$fuser -f /dev/loop1

Ampliamos a 800 GB el espacio de almacenamiento de los volúmenes con la siguiente ejecución de comandos, posterior a ello, volvemos a montar el dispositivo /dev/loop1  :

$ truncate --size 800G /var/lib/cinder/cinder-volumes
$ losetup -fv /var/lib/cinder/cinder-volumes

Por ultimo, ampliamos el espacio de almacenamiento del volumen en LVM, ejecutando lo siguiente:

$pvresize /dev/loop1

Volvemos a verificar ejecutando en la línea de comandos: vgdisplay cinder-volumes , lo que nos mostrara lo siguiente:

...
  VG Size               800.00 GiB
  PE Size               4.00 MiB
  Total PE              204799
  Alloc PE / Size       0 / 0   
  Free  PE / Size       204799 / 800.00 GiB
...

 

Descargar y almacenar imágenes con Glance.

Al momento de crear las instancias con Nova, tendremos que descargar las imágenes y subirlas al servicio de imágenes Glance de OpenStack. En mi caso subiré dos imágenes, CentOS 7 y Fedora 24, para ello descargamos en un directorio temporal, en mi caso usare el directorio /root , las siguientes imágenes:

$ wget -c http://cloud.centos.org/centos/7/images/CentOS-7-x86_64-GenericCloud-1606.qcow2
$ wget -c https://download.fedoraproject.org/pub/fedora/linux/releases/24/CloudImages/x86_64/images/Fedora-Cloud-Base-24-1.2.x86_64.qcow2

Las imágenes para CentOS 7 x86_64 las pueden encontrar aca , y para Fedora 24 x86_64 las pueden descargar de aca.

Descargadas las imágenes, las subiremos a Glance, ejecutando lo siguiente, para CentOS 7:

$ glance image-create --name='CentOS7 x86_64' --disk-format=qcow2 --container-format=bare --visibility=public --file=/root/CentOS-7-x86_64-GenericCloud-1606.qcow2 --progress

Y para Fedora 24, ejecutamos:

$ glance image-create --name='Fedora 24 x86_64' --disk-format=qcow2 --container-format=bare --visibility=public --file=/root/Fedora-Cloud-Base-24-1.2.x86_64.qcow2 --progress

Podremos verificar y listar las imágenes publicadas en Glance, ejecutando: glance image-list .

 

Algunos consejos adicionales.

Recuerden que antes de lanzar una instancia deberán crear las Key Pairs en Horizon, esto lo pueden hacer en el dashboard, Project > Compute > Access & Security > Key Pair.

Al momento de lanzar un instancia, desde Horizon, cuando se esta configurando, es importante que en la solapa Network tan solo seleccionen las redes: int-net / int-subnet , no la ext-net / ext-subnet . Luego de creada, agregaran la IP Flotante a la instancia creada.

Tienen que crear las IP Flotantes, esto lo hacen desde Horizon, Project > Compute > Access & Security > Floatings IP.

Deberán aplicar reglas para el puerto 22 (SSH) esto lo hacen agregandolo en Horizon, Project > Compute > Access & Security > Security Groups en el enlace default > Manage Rules , para que se pueden conectar desde su computador hacia la instancia creada e n Nova con la IP Flotante asignada.