Compute service on Controller node

https://docs.openstack.org/nova/2025.1/install/controller-install-ubuntu.html

The compute service in Openstack is called Nova. It runs on both the controller node(s) and the compute nodes (hypervisors)

Install and configure Nova on controller

Prepare database

sudo mysql
CREATE DATABASE nova_api;
CREATE DATABASE nova;
CREATE DATABASE nova_cell0;

GRANT ALL PRIVILEGES ON nova_api.* TO 'nova'@'localhost' \
  IDENTIFIED BY 'NOVA_DBPASS';
GRANT ALL PRIVILEGES ON nova_api.* TO 'nova'@'%' \
  IDENTIFIED BY 'NOVA_DBPASS';
GRANT ALL PRIVILEGES ON nova.* TO 'nova'@'localhost' \
  IDENTIFIED BY 'NOVA_DBPASS';
GRANT ALL PRIVILEGES ON nova.* TO 'nova'@'%' \
  IDENTIFIED BY 'NOVA_DBPASS';
GRANT ALL PRIVILEGES ON nova_cell0.* TO 'nova'@'localhost' \
  IDENTIFIED BY 'NOVA_DBPASS';
GRANT ALL PRIVILEGES ON nova_cell0.* TO 'nova'@'%' \
  IDENTIFIED BY 'NOVA_DBPASS';

Create service user, role and service

. admin-openrc
openstack user create --domain default --password-prompt nova
openstack role add --project service --user nova admin
openstack service create --name nova --description "OpenStack Compute" compute

Create service endpoints

openstack endpoint create --region <REGION> compute public http://<FQDN>:8774/v2.1
openstack endpoint create --region <REGION> compute admin http://<FQDN>:8774/v2.1
openstack endpoint create --region <REGION> compute internal http://<FQDN>:8774/v2.1

Install packages and configure

sudo apt install nova-api nova-conductor nova-novncproxy nova-scheduler

Edit the config file with the following

/etc/nova/nova.conf

[DEFAULT]
log_dir = /var/log/nova
lock_path = /var/lock/nova
state_path = /var/lib/nova
transport_url = rabbit://openstack:RABBIT_PASS@controller:5672/
my_ip = 10.0.0.11

[api]
auth_strategy = keystone

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

[cinder]

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

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

[keystone_authtoken]
www_authenticate_uri = http://controller:5000/
auth_url = http://controller:5000/
memcached_servers = controller:11211
auth_type = password
project_domain_name = Default
user_domain_name = Default
project_name = service
username = nova
password = NOVA_PASS

[neutron]
auth_url = http://controller:5000
auth_type = password
project_domain_name = Default
user_domain_name = Default
region_name = <REGION>
project_name = service
username = neutron
password = NEUTRON_PASS
service_metadata_proxy = true
metadata_proxy_shared_secret = METADATA_SECRET

[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://controller:5000/v3
username = placement
password = PLACEMENT_PASS

[service_user]
send_service_user_token = true
auth_url = http://controller:5000/identity
auth_strategy = keystone
auth_type = password
project_domain_name = Default
project_name = service
user_domain_name = Default
username = nova
password = NOVA_PASS

[vnc]
enabled = true
server_listen = $my_ip
server_proxyclient_address = $my_ip

[cells]
enable = False

[os_region_name]
openstack =

Note that we also include configuration for the neutron networking service which is not yet installed.

Populate databases

Populate nova-api database

sudo nova-manage api_db sync

Register the cell0 database

sudo nova-manage cell_v2 map_cell0

Create the cell1 cell

sudo nova-manage cell_v2 create_cell --name=cell1 --verbose

Populate nova database

sudo nova-manage db sync

This last command gave an error, this happened when I tried to use a config file with only the provided details above. When I instead used the default config file edited with the details above things worked.. Nova-manage db sync error

Verify nova cell0 and cell1 are registered

sudo nova-manage cell_v2 list_cells

Restart services

Restart services

sudo service nova-api restart
sudo service nova-scheduler restart
sudo service nova-conductor restart
sudo service nova-novncproxy restart

Continue with compute nodes

At this point the controller portion of the Nova service should be good

Update cells database

Run a discovery of new compute hosts

When adding a new compute host we might face that the host is missing as a Hypervisor even though it's connected to and listed as a compute host in the controller

Hypervisor not discovered

The hypervisor list is built from the cells database and needs to be updated when a host is to be added

We could also configure an automatic discovery on a given interval in the /etc/nova/nova.conf file Set the following: ini [scheduler] discover_hosts_in_cells_interval = 300

To run the discovery we'll run the following nova-manage command on the controller

sudo nova-manage cell_v2 discover_hosts --verbose

Run host discovery