En esta guía, configuraremos un nodo de cómputo (por ejemplo, compute01) para que sea capaz de ejecutar instancias mediante Nova. Utilizaremos QEMU/KVM siempre que el hardware lo permita; en caso contrario, dejaremos configurado QEMU puro.

Antes de comenzar, asegúrate de cumplir los siguientes requisitos:

  • Haber añadido el nombre y la IP del nodo controlador al archivo /etc/hosts del nodo de cómputo.
  • Disponer de las credenciales administrativas (admin-openrc) y acceso al servidor de bases de datos.

Instalación y configuración de los componentes (en el nodo de cómputo)

Instalaremos el paquete principal del servicio de cómputo en el nodo:

vagrant@compute01:~$ sudo apt install nova-compute -y

Editaremos el archivo /etc/nova/nova.conf para definir las cadenas de conexión a las bases de datos situadas en el controlador:

[database]
connection = mysql+pymysql://nova:NOVA_DBPASS@controller01/nova

[api_database]
connection = mysql+pymysql://nova:NOVA_DBPASS@controller01/nova_api

Configuraremos la conexión con RabbitMQ (sustituye RABBIT_PASS por tu contraseña) y otras opciones predeterminadas:

[DEFAULT]
transport_url = rabbit://openstack:RABBIT_PASS@controller01

Configuraremos las credenciales del servicio (usuario nova) para que el nodo pueda autenticarse contra Keystone:

[service_user]
send_service_user_token = true
auth_url = http://controller01:5000/v3/
auth_type = password
project_domain_name = Default
project_name = service
user_domain_name = Default
username = nova
password = NOVA_PASS

Definiremos la IP de gestión del nodo en el parámetro my_ip (sustituye IP_GESTION_NODO_COMPUTO por la IP correspondiente; en mi ejemplo es 10.0.0.3):

[DEFAULT]
my_ip = IP_GESTION_NODO_COMPUTO

Configuraremos el apartado VNC para que el proxy utilice la IP del controlador y el servidor escuche en todas las interfaces:

[vnc]
enabled = true
server_listen = 0.0.0.0
server_proxyclient_address = $my_ip
novncproxy_base_url = http://controller01:6080/vnc_auto.html

Conectaremos Nova con Glance y definiremos la ruta de bloqueo (lock_path):

[glance]
api_servers = http://controller01:9292

[oslo_concurrency]
lock_path = /var/lib/nova/tmp

[placement]
region_name = RegionOne
project_domain_name = Default
project_name = service
auth_type = password
user_domain_name = Default
auth_url = http://controller01:5000/v3
username = placement
password = PLACEMENT_PASS

En la sección de autenticación con Keystone, configuraremos el token middleware (sustituye <NOVA_PASSWORD> si es necesario:

[keystone_authtoken]
www_authenticate_uri = http://controller01:5000/
auth_url = http://controller01:5000/
memcached_servers = controller01:11211
auth_type = password
project_domain_name = Default
user_domain_name = Default
project_name = service
username = nova
password = <NOVA_PASSWORD>
identity_api_version = 3

Finalizar instalación (en el nodo de cómputo)

Verificaremos si el nodo soporta virtualización por hardware y, en caso negativo, forzaremos el uso de QEMU:

egrep -c '(vmx|svm)' /proc/cpuinfo

Si el resultado es 0, estableceremos virt_type=qemu en el archivo /etc/nova/nova-compute.conf:

[libvirt]
virt_type = qemu

Reiniciaremos el servicio nova-compute para aplicar la nueva configuración:

vagrant@compute01:~$ sudo service nova-compute restart

Añadir el nodo de cómputo a la base de datos de celdas (ejecutar en el controlador)

Cargaremos las credenciales de administrador en el nodo controlador y buscaremos los hosts que no hayan sido mapeados:

vagrant@controller01:~$ source admin-openrc 

Verificaremos si el controlador detecta nodos de cómputo pendientes de añadir:

vagrant@controller01:~$ sudo su -s /bin/sh -c "nova-manage cell_v2 discover_hosts --verbose" nova
Found 2 cell mappings.
Skipping cell0 since it does not contain hosts.
Getting computes from cell 'cell1': 29e1ed74-59fa-43e3-9651-999d592a2cdf
Checking host mapping for compute host 'compute01': d83ec732-f31c-4358-9326-610b9e660974
Creating host mapping for compute host 'compute01': d83ec732-f31c-4358-9326-610b9e660974
Found 1 unmapped computes in cell: 29e1ed74-59fa-43e3-9651-999d592a2cdf

Verificaremos que el nodo aparezca correctamente como el servicio nova-compute:

vagrant@controller01:~$ openstack compute service list --service nova-compute
+--------------------------+--------------+-----------+------+---------+-------+---------------------------+
| ID                       | Binary       | Host      | Zone | Status  | State | Updated At                |
+--------------------------+--------------+-----------+------+---------+-------+---------------------------+
| a6dda039-f310-4b5b-ae5e- | nova-compute | compute01 | nova | enabled | up    | 2025-11-                  |
| 606a4d89592a             |              |           |      |         |       | 02T19:51:01.000000        |
+--------------------------+--------------+-----------+------+---------+-------+---------------------------+

Nota: cada vez que añadas un nuevo nodo, deberás ejecutar discover_hosts en el controlador o, alternativamente, habilitar la detección periódica añadiendo lo siguiente en /etc/nova/nova.conf:

[scheduler]
discover_hosts_in_cells_interval = 300