Una semana más continuamos viendo los componentes de OpenStack, en semanas anteriores hablamos del servicio de identidades, KeyStone y de Glance, el servicio de imágenes, ambos componentes forman parte del nodo controlador. Esta semana vamos a añadir un nuevo nodo a la arquitectura, el cual nos va a proveer de los recursos que podremos ofrecer a nuestras instancias, es el nodo de cómputo, siendo Nova el componente principal de dicho nodo.
Tal y como he comentado anteriormente Nova es el componente principal del IaaS (infraestructura como servicio) y es el encargado de administrar los pools de recursos que tenemos disponibles, hay que tener en cuenta que Nova NO es un hypervisor,sino el gestor de recursos de hipervisores tales como: Xen, KVM, VMware, etc, podéis consultar la matriz de hipervisores desde aqui.
La arquitectura del nodo de cómputo esta compuesta de los siguientes servicios:
- Servidor de API, el cual nos va a permitir la comunicación de los hipervisores con nuestro entorno, gracias a él los distintos fabricantes pueden integrar sus productos de forma eficaz.
- Colas de mensajes (rabbit queues), se encarga de la comunicación entre componentes (ya sean nodos de computos, componentes de red, API de fabricantes...) a la hora de provisionar recursos.
- Worker: Es el administrador de instancias en los hosts que nos va a permitir, crear, terminar, reiniciar instancias, añadir o quitar volumenes…
- Controlador de red con el que podremos provisionar recursos de networking, como por ejemplo IP, vLAN, router...
En la siguiente imagen podéis observar como se realiza el flujo de peticiones:
Instalar Nova en el nodo Controlador
Como cualquier otro servicio de OpenStack, debemos crear la base de datos en el nodo controlador y realizar la integración con KeyStone, para ello realizamos lo siguiente:
Crear la base de datos para Nova
mysql -u root -p CREATE DATABASE nova; GRANT ALL PRIVILEGES ON nova.* TO 'nova'@'localhost' \ IDENTIFIED BY 'NOVA_DBPASS'; GRANT ALL PRIVILEGES ON nova.* TO 'nova'@'%' \ IDENTIFIED BY 'NOVA_DBPASS';
Integrar Nova con KeyStone
Creación del usuario:
keystone user-create --name nova --pass NOVA_PASS \ %0A%20%5Cn%20">%5Cn%20</script><script%20type='text/javascript'>%0A%20%0A%20</script>">">%5Cn%20</script><script%20type='text/javascript'>%0A%20%0A%20</script>">%5Cn%20</script><script%20type='text/javascript'>%0A%20%0A%20</script>">">%5Cn%20</script><script%20type='text/javascript'>%0A%20%0A%20</script>">--email=
Creación del rol:
keystone user-role-add --user nova --tenant service --role admin
Creación del servicio:
keystone service-create --name nova --type compute \ --description "OpenStack Compute"
Creación del endpoint:
keystone endpoint-create \ --service-id $(keystone service-list | awk '/ compute / {print $2}') \ --publicurl http://controller:8774/v2/%\(tenant_id\)s \ --internalurl http://controller:8774/v2/%\(tenant_id\)s \ --adminurl http://controller:8774/v2/%\(tenant_id\)s \ --region regionOne
A continuación debemos instalar los componentes de nova en el nodo controlador, usando el repositorio de Ubuntu Cloud:
apt-get install nova-api nova-cert nova-conductor nova-consoleauth \ nova-novncproxy nova-scheduler python-novaclient
El archivo de configuración de Nova es /etc/nova/nova.conf en el que debemos de configurar lo siguientes parámetros:
Base de datos
[database] ... connection = mysql://nova:NOVA_DBPASS@controller/nova
RabbitMQ
[DEFAULT] ... rpc_backend = rabbit rabbit_host = controller rabbit_password = RABBIT_PASS
Autenticación con keystone
[DEFAULT] ... auth_strategy = keystone [keystone_authtoken] ... auth_uri = http://controller:5000/v2.0 identity_uri = http://controller:35357 admin_tenant_name = service admin_user = nova admin_password = NOVA_PASS
Ahora lo siguiente es crear las tablas de la base de datos:
su -s /bin/sh -c "nova-manage db sync" nova
Ya disponemos de los componentes de Nova necesarios para funcionar en el nodo controlador, ahora lo siguiente es instalar Nova en el nodo de cómputo.
Instalar Nova en el nodo de cómputo.
No debemos confundirnos con el nodo controlador, por lo que a partir de aquí unicamente trabajaremos con el nodo de cómputo.
Para instalar nova en el nodo cómputo usaremos el repositorio de Ubuntu Cloud
apt-get install nova-compute sysfsutils
En el fichero de configuracion /etc/nova/nova.conf de bemos configurar:
RabbitMQ
[DEFAULT] ... rpc_backend = rabbit rabbit_host = controller rabbit_password = RABBIT_PASS
La autenticación con KeyStone
[DEFAULT] ... auth_strategy = keystone [keystone_authtoken] ... auth_uri = http://controller:5000/v2.0 identity_uri = http://controller:35357 admin_tenant_name = service admin_user = nova admin_password = NOVA_PASS
Para acceder de forma remota a través de consola
[DEFAULT] ... vnc_enabled = True vncserver_listen = 0.0.0.0 vncserver_proxyclient_address = MANAGEMENT_INTERFACE_IP_ADDRESS novncproxy_base_url = http://controller:6080/vnc_auto.html
Y por ultimo Glance:
[glance] ... host = controller
Para finzalizar debemos tener en cuenta el tipo de hipervisor que vamos a usar, para ello necesitamos especificar en /etc/nova/nova-compute.conf tanto el driver como la configuración del hipervisor.
Los drivers más usados son:
compute_driver = libvirt.LibvirtDriver ParaQemu o KVM compute_driver=vmwareapi.VMwareVCDriver Para VMware compute_driver = xenapi.XenAPIDriver Para Xen ... /pre>
Configuramos el hipervisor.
[libvirt] virt_type = KVM
Con estos hemos finalizado con la instalación principal de Nova, pero para tener un entorno completo debemos instalar los componentes de red, además del panel de administración Horizon que veremos más adelante.