{"id":36781,"date":"2025-01-23T08:21:03","date_gmt":"2025-01-23T07:21:03","guid":{"rendered":"https:\/\/www.dbi-services.com\/blog\/?p=36781"},"modified":"2025-01-24T09:03:55","modified_gmt":"2025-01-24T08:03:55","slug":"creating-your-private-cloud-using-openstack-5-the-compute-service","status":"publish","type":"post","link":"https:\/\/www.dbi-services.com\/blog\/creating-your-private-cloud-using-openstack-5-the-compute-service\/","title":{"rendered":"Creating your private cloud using OpenStack \u2013 (5) \u2013 The Compute service"},"content":{"rendered":"\n<p>We&#8217;re now coming closer to the final setup of the OpenStack test environment. Again, looking at the <a href=\"https:\/\/www.dbi-services.com\/blog\/creating-your-private-cloud-using-openstack-1-introduction\/\" target=\"_blank\" rel=\"noreferrer noopener\">minimum services<\/a> we need, there are only three of them left:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/docs.openstack.org\/keystone\/latest\/\" target=\"_blank\" rel=\"noreferrer noopener\">Keystone<\/a>: Identity service (done)<\/li>\n\n\n\n<li><a href=\"https:\/\/docs.openstack.org\/glance\/latest\/\" target=\"_blank\" rel=\"noreferrer noopener\">Glance<\/a>: Image service (done)<\/li>\n\n\n\n<li><a href=\"https:\/\/docs.openstack.org\/placement\/latest\/\" target=\"_blank\" rel=\"noreferrer noopener\">Placement<\/a>: Placement service (done)<\/li>\n\n\n\n<li><a href=\"https:\/\/docs.openstack.org\/nova\/latest\/\" target=\"_blank\" rel=\"noreferrer noopener\">Nova<\/a>: Compute service<\/li>\n\n\n\n<li><a href=\"https:\/\/docs.openstack.org\/neutron\/latest\/\" target=\"_blank\" rel=\"noreferrer noopener\">Neutron<\/a>: Network service<\/li>\n\n\n\n<li><a href=\"https:\/\/docs.openstack.org\/horizon\/latest\/\" target=\"_blank\" rel=\"noreferrer noopener\">Horizon<\/a>: The OpenStack dashboard<\/li>\n<\/ul>\n\n\n\n<p>In this post we&#8217;ll continue with the Compute Service, which is called Nova. As a short reminder, if you followed the last posts, this is what we have currently:<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"420\" src=\"https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2025\/01\/ostack10-1-1024x420.png\" alt=\"\" class=\"wp-image-36782\" srcset=\"https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2025\/01\/ostack10-1-1024x420.png 1024w, https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2025\/01\/ostack10-1-300x123.png 300w, https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2025\/01\/ostack10-1-768x315.png 768w, https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2025\/01\/ostack10-1.png 1113w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p>In addition to that, we need something which is actually providing compute resources, and this is <a href=\"https:\/\/docs.openstack.org\/nova\/latest\/\" target=\"_blank\" rel=\"noreferrer noopener\">Nova<\/a>. Nova &#8220;interacts with OpenStack Identity for authentication, OpenStack Placement for resource inventory tracking and selection, OpenStack Image service for disk and server images, and OpenStack Dashboard for the user and administrative interface&#8221;.<\/p>\n\n\n\n<p>Nova, like the Glance and Placement services, needs the database backend so we&#8217;re going to prepare this on the controller node:<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: bash; highlight: [1,3,5,7]; title: ; notranslate\" title=\"\">\n&#x5B;root@controller ~]$ su - postgres -c &quot;psql -c \\&quot;create user nova with login password &#039;admin&#039;\\&quot;&quot;\nCREATE ROLE\n&#x5B;root@controller ~]$ su - postgres -c &quot;psql -c &#039;create database nova_api with owner=nova&#039;&quot;\nCREATE DATABASE\n&#x5B;root@controller ~]$ su - postgres -c &quot;psql -c &#039;create database nova with owner=nova&#039;&quot;\nCREATE DATABASE\n&#x5B;root@controller ~]$ su - postgres -c &quot;psql -c &#039;create database nova_cell0 with owner=nova&#039;&quot;\nCREATE DATABASE\n<\/pre><\/div>\n\n\n<p>Again, we need to create the service credentials and the endpoints for the service:<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: bash; highlight: [1,2,19,20,31,46,61]; title: ; notranslate\" title=\"\">\n&#x5B;root@controller ~]$ . admin-openrc \n&#x5B;root@controller ~]$ openstack user create --domain default --password-prompt nova\nUser Password:\nRepeat User Password:\nNo password was supplied, authentication will fail when a user does not have a password.\n+---------------------+----------------------------------+\n| Field               | Value                            |\n+---------------------+----------------------------------+\n| default_project_id  | None                             |\n| domain_id           | default                          |\n| email               | None                             |\n| enabled             | True                             |\n| id                  | 5f096012f1d74232a55d0bd76faad3e5 |\n| name                | nova                             |\n| description         | None                             |\n| password_expires_at | None                             |\n+---------------------+----------------------------------+\n\n&#x5B;root@controller ~]$ openstack role add --project service --user nova admin\n&#x5B;root@controller ~]$ openstack service create --name nova --description &quot;OpenStack Compute&quot; compute\n+-------------+----------------------------------+\n| Field       | Value                            |\n+-------------+----------------------------------+\n| id          | bcbf978986834cbca430a1a5c7b6d9b3 |\n| name        | nova                             |\n| type        | compute                          |\n| enabled     | True                             |\n| description | OpenStack Compute                |\n+-------------+----------------------------------+\n\n&#x5B;root@controller ~]$ openstack endpoint create --region RegionOne compute public http:\/\/controller:8774\/v2.1\n+--------------+----------------------------------+\n| Field        | Value                            |\n+--------------+----------------------------------+\n| enabled      | True                             |\n| id           | 09cb340bc9014ee69435360e8555a998 |\n| interface    | public                           |\n| region       | RegionOne                        |\n| region_id    | RegionOne                        |\n| service_id   | bcbf978986834cbca430a1a5c7b6d9b3 |\n| service_name | nova                             |\n| service_type | compute                          |\n| url          | http:\/\/controller:8774\/v2.1      |\n+--------------+----------------------------------+\n\n&#x5B;root@controller ~]$ openstack endpoint create --region RegionOne compute internal http:\/\/controller:8774\/v2.1\n+--------------+----------------------------------+\n| Field        | Value                            |\n+--------------+----------------------------------+\n| enabled      | True                             |\n| id           | 7e90b9431c48442d805e43e9af65ef8e |\n| interface    | internal                         |\n| region       | RegionOne                        |\n| region_id    | RegionOne                        |\n| service_id   | bcbf978986834cbca430a1a5c7b6d9b3 |\n| service_name | nova                             |\n| service_type | compute                          |\n| url          | http:\/\/controller:8774\/v2.1      |\n+--------------+----------------------------------+\n\n&#x5B;root@controller ~]$ openstack endpoint create --region RegionOne compute admin http:\/\/controller:8774\/v2.1\n+--------------+----------------------------------+\n| Field        | Value                            |\n+--------------+----------------------------------+\n| enabled      | True                             |\n| id           | a04227f6f4d84011a186d2eda98b0c8b |\n| interface    | admin                            |\n| region       | RegionOne                        |\n| region_id    | RegionOne                        |\n| service_id   | bcbf978986834cbca430a1a5c7b6d9b3 |\n| service_name | nova                             |\n| service_type | compute                          |\n| url          | http:\/\/controller:8774\/v2.1      |\n+--------------+----------------------------------+\n<\/pre><\/div>\n\n\n<p>Having this ready, we can continue to install the required packages on the controller node:<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: bash; highlight: [1]; title: ; notranslate\" title=\"\">\n&#x5B;root@controller ~]$ dnf install openstack-nova-api openstack-nova-conductor openstack-nova-novncproxy openstack-nova-scheduler -y\n<\/pre><\/div>\n\n\n<p>The configuration to do for Nova is bit longer than for the previous services, but nothing special in this simple case: We need the connection to the Message Queue (RabbitMQ), the details of the controller node (same host), the database connection details for Nova itself, the details how to get to the Keystone service, the details for the Placement service, and a few <a href=\"https:\/\/en.wikipedia.org\/wiki\/VNC\" target=\"_blank\" rel=\"noreferrer noopener\">VNC<\/a> related settings:<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: bash; highlight: [1]; title: ; notranslate\" title=\"\">\n&#x5B;root@controller ~]$ egrep -v &quot;^#|^$&quot; \/etc\/nova\/nova.conf\n&#x5B;DEFAULT]\nmy_ip=192.168.122.90\nenabled_apis = osapi_compute,metadata\ntransport_url=rabbit:\/\/openstack:admin@controller:5672\/\n&#x5B;api]\nauth_strategy = keystone\n&#x5B;api_database]\nconnection=postgresql+psycopg2:\/\/nova:admin@localhost\/nova_api\n&#x5B;barbican]\n&#x5B;barbican_service_user]\n&#x5B;cache]\n&#x5B;cinder]\n&#x5B;compute]\n&#x5B;conductor]\n&#x5B;console]\n&#x5B;consoleauth]\n&#x5B;cors]\n&#x5B;cyborg]\n&#x5B;database]\nconnection=postgresql+psycopg2:\/\/nova:admin@localhost\/nova\n&#x5B;devices]\n&#x5B;ephemeral_storage_encryption]\n&#x5B;filter_scheduler]\n&#x5B;glance]\napi_servers = http:\/\/controller:9292\n&#x5B;guestfs]\n&#x5B;healthcheck]\n&#x5B;image_cache]\n&#x5B;ironic]\n&#x5B;key_manager]\n&#x5B;keystone]\n&#x5B;keystone_authtoken]\nwww_authenticate_uri = http:\/\/controller:5000\/\nauth_url = http:\/\/controller:5000\/\nmemcached_servers = controller:11211\nauth_type = password\nproject_domain_name = Default\nuser_domain_name = Default\nproject_name = service\nusername = nova\npassword = admin\n&#x5B;libvirt]\n&#x5B;metrics]\n&#x5B;mks]\n&#x5B;neutron]\n&#x5B;notifications]\n&#x5B;os_vif_linux_bridge]\n&#x5B;os_vif_ovs]\n&#x5B;oslo_concurrency]\n&#x5B;oslo_limit]\n&#x5B;oslo_messaging_amqp]\n&#x5B;oslo_messaging_kafka]\n&#x5B;oslo_messaging_notifications]\n&#x5B;oslo_messaging_rabbit]\n&#x5B;oslo_middleware]\n&#x5B;oslo_policy]\n&#x5B;oslo_reports]\n&#x5B;oslo_versionedobjects]\n&#x5B;pci]\n&#x5B;placement]\nregion_name = RegionOne\nproject_domain_name = Default\nproject_name = service\nauth_type = password\nuser_domain_name = Default\nauth_url = http:\/\/controller:5000\/v3\nusername = placement\npassword = admin\n&#x5B;privsep]\n&#x5B;profiler]\n&#x5B;profiler_jaeger]\n&#x5B;profiler_otlp]\n&#x5B;quota]\n&#x5B;remote_debug]\n&#x5B;scheduler]\n&#x5B;serial_console]\n&#x5B;service_user]\nsend_service_user_token = true\nauth_url = https:\/\/controller\/identity\nauth_strategy = keystone\nauth_type = password\nproject_domain_name = Default\nproject_name = service\nuser_domain_name = Default\nusername = nova\npassword = admin\n&#x5B;spice]\n&#x5B;upgrade_levels]\n&#x5B;vault]\n&#x5B;vendordata_dynamic_auth]\n&#x5B;vmware]\n&#x5B;vnc]\nenabled = true\nserver_listen = $my_ip\nserver_proxyclient_address = $my_ip\n&#x5B;workarounds]\n&#x5B;wsgi]\n&#x5B;zvm]\n<\/pre><\/div>\n\n\n<p>Time to populate the databases for Nova (the following will also create a <a href=\"https:\/\/docs.openstack.org\/nova\/latest\/admin\/cells.html\" target=\"_blank\" rel=\"noreferrer noopener\">Cell<\/a>, which is a concept used by Nova for sharding):<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: bash; highlight: [1,8,9,14,34]; title: ; notranslate\" title=\"\">\n&#x5B;root@controller ~]$ sh -c &quot;nova-manage api_db sync&quot; nova\n2025-01-22 08:42:39.389 7200 INFO alembic.runtime.migration &#x5B;-] Context impl PostgresqlImpl.\n2025-01-22 08:42:39.390 7200 INFO alembic.runtime.migration &#x5B;-] Will assume transactional DDL.\n2025-01-22 08:42:39.397 7200 INFO alembic.runtime.migration &#x5B;-] Running upgrade  -&gt; d67eeaabee36, Initial version\n2025-01-22 08:42:39.670 7200 INFO alembic.runtime.migration &#x5B;-] Running upgrade d67eeaabee36 -&gt; b30f573d3377, Remove unused build_requests columns\n2025-01-22 08:42:39.673 7200 INFO alembic.runtime.migration &#x5B;-] Running upgrade b30f573d3377 -&gt; cdeec0c85668, Drop legacy migrate_version table\n\n&#x5B;root@controller ~]$ sh -c &quot;nova-manage cell_v2 map_cell0&quot; nova\n&#x5B;root@controller ~]$ sh -c &quot;nova-manage cell_v2 create_cell --name=cell1 --verbose&quot; nova\n--transport-url not provided in the command line, using the value &#x5B;DEFAULT]\/transport_url from the configuration file\n--database_connection not provided in the command line, using the value &#x5B;database]\/connection from the configuration file\n804d576e-ac59-4fc5-b83a-018088ea8c11\n\n&#x5B;root@controller ~]$ sh -c &quot;nova-manage db sync&quot; nova\n2025-01-22 08:44:07.177 7262 INFO alembic.runtime.migration &#x5B;None req-69377931-e25d-40d5-afe0-0eadfadd9ed4 - - - - - -] Context impl PostgresqlImpl.\n2025-01-22 08:44:07.178 7262 INFO alembic.runtime.migration &#x5B;None req-69377931-e25d-40d5-afe0-0eadfadd9ed4 - - - - - -] Will assume transactional DDL.\n2025-01-22 08:44:07.192 7262 INFO alembic.runtime.migration &#x5B;None req-69377931-e25d-40d5-afe0-0eadfadd9ed4 - - - - - -] Running upgrade  -&gt; 8f2f1571d55b, Initial version\n2025-01-22 08:44:07.819 7262 INFO alembic.runtime.migration &#x5B;None req-69377931-e25d-40d5-afe0-0eadfadd9ed4 - - - - - -] Running upgrade 8f2f1571d55b -&gt; 16f1fbcab42b, Resolve shadow table diffs\n2025-01-22 08:44:07.821 7262 INFO alembic.runtime.migration &#x5B;None req-69377931-e25d-40d5-afe0-0eadfadd9ed4 - - - - - -] Running upgrade 16f1fbcab42b -&gt; ccb0fa1a2252, Add encryption fields to BlockDeviceMapping\n2025-01-22 08:44:07.823 7262 INFO alembic.runtime.migration &#x5B;None req-69377931-e25d-40d5-afe0-0eadfadd9ed4 - - - - - -] Running upgrade ccb0fa1a2252 -&gt; 960aac0e09ea, de-duplicate_indexes_in_instances__console_auth_tokens\n2025-01-22 08:44:07.824 7262 INFO alembic.runtime.migration &#x5B;None req-69377931-e25d-40d5-afe0-0eadfadd9ed4 - - - - - -] Running upgrade 960aac0e09ea -&gt; 1b91788ec3a6, Drop legacy migrate_version table\n2025-01-22 08:44:07.825 7262 INFO alembic.runtime.migration &#x5B;None req-69377931-e25d-40d5-afe0-0eadfadd9ed4 - - - - - -] Running upgrade 1b91788ec3a6 -&gt; 1acf2c98e646, Add compute_id to instance\n2025-01-22 08:44:07.829 7262 INFO alembic.runtime.migration &#x5B;None req-69377931-e25d-40d5-afe0-0eadfadd9ed4 - - - - - -] Running upgrade 1acf2c98e646 -&gt; 13863f4e1612, create_share_mapping_table\n2025-01-22 08:44:07.855 7262 INFO alembic.runtime.migration &#x5B;None req-69377931-e25d-40d5-afe0-0eadfadd9ed4 - - - - - -] Context impl PostgresqlImpl.\n2025-01-22 08:44:07.856 7262 INFO alembic.runtime.migration &#x5B;None req-69377931-e25d-40d5-afe0-0eadfadd9ed4 - - - - - -] Will assume transactional DDL.\n2025-01-22 08:44:07.867 7262 INFO alembic.runtime.migration &#x5B;None req-69377931-e25d-40d5-afe0-0eadfadd9ed4 - - - - - -] Running upgrade  -&gt; 8f2f1571d55b, Initial version\n2025-01-22 08:44:08.706 7262 INFO alembic.runtime.migration &#x5B;None req-69377931-e25d-40d5-afe0-0eadfadd9ed4 - - - - - -] Running upgrade 8f2f1571d55b -&gt; 16f1fbcab42b, Resolve shadow table diffs\n2025-01-22 08:44:08.707 7262 INFO alembic.runtime.migration &#x5B;None req-69377931-e25d-40d5-afe0-0eadfadd9ed4 - - - - - -] Running upgrade 16f1fbcab42b -&gt; ccb0fa1a2252, Add encryption fields to BlockDeviceMapping\n2025-01-22 08:44:08.709 7262 INFO alembic.runtime.migration &#x5B;None req-69377931-e25d-40d5-afe0-0eadfadd9ed4 - - - - - -] Running upgrade ccb0fa1a2252 -&gt; 960aac0e09ea, de-duplicate_indexes_in_instances__console_auth_tokens\n2025-01-22 08:44:08.710 7262 INFO alembic.runtime.migration &#x5B;None req-69377931-e25d-40d5-afe0-0eadfadd9ed4 - - - - - -] Running upgrade 960aac0e09ea -&gt; 1b91788ec3a6, Drop legacy migrate_version table\n2025-01-22 08:44:08.712 7262 INFO alembic.runtime.migration &#x5B;None req-69377931-e25d-40d5-afe0-0eadfadd9ed4 - - - - - -] Running upgrade 1b91788ec3a6 -&gt; 1acf2c98e646, Add compute_id to instance\n2025-01-22 08:44:08.716 7262 INFO alembic.runtime.migration &#x5B;None req-69377931-e25d-40d5-afe0-0eadfadd9ed4 - - - - - -] Running upgrade 1acf2c98e646 -&gt; 13863f4e1612, create_share_mapping_table\n\n&#x5B;root@controller ~]$ sh -c &quot;nova-manage cell_v2 list_cells&quot; nova\n+-------+--------------------------------------+------------------------------------------+------------------------------------------------------+----------+\n|  Name |                 UUID                 |              Transport URL               |                 Database Connection                  | Disabled |\n+-------+--------------------------------------+------------------------------------------+------------------------------------------------------+----------+\n| cell0 | 00000000-0000-0000-0000-000000000000 |                  none:\/                  | postgresql+psycopg2:\/\/nova:****@localhost\/nova_cell0 |  False   |\n| cell1 | 804d576e-ac59-4fc5-b83a-018088ea8c11 | rabbit:\/\/openstack:****@controller:5672\/ |    postgresql+psycopg2:\/\/nova:****@localhost\/nova    |  False   |\n+-------+--------------------------------------+------------------------------------------+------------------------------------------------------+----------+\n<\/pre><\/div>\n\n\n<p>The final steps on the controller node are to enable and start the services:<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: bash; highlight: [1,2,3,4,5,11,12,13,14,15]; title: ; notranslate\" title=\"\">\n&#x5B;root@controller ~]$ systemctl enable \\\n    openstack-nova-api.service \\\n    openstack-nova-scheduler.service \\\n    openstack-nova-conductor.service \\\n    openstack-nova-novncproxy.service\nCreated symlink \/etc\/systemd\/system\/multi-user.target.wants\/openstack-nova-api.service \u2192 \/usr\/lib\/systemd\/system\/openstack-nova-api.service.\nCreated symlink \/etc\/systemd\/system\/multi-user.target.wants\/openstack-nova-scheduler.service \u2192 \/usr\/lib\/systemd\/system\/openstack-nova-scheduler.service.\nCreated symlink \/etc\/systemd\/system\/multi-user.target.wants\/openstack-nova-conductor.service \u2192 \/usr\/lib\/systemd\/system\/openstack-nova-conductor.service.\nCreated symlink \/etc\/systemd\/system\/multi-user.target.wants\/openstack-nova-novncproxy.service \u2192 \/usr\/lib\/systemd\/system\/openstack-nova-novncproxy.service.\n\n&#x5B;root@controller ~]$ systemctl start \\\n    openstack-nova-api.service \\\n    openstack-nova-scheduler.service \\\n    openstack-nova-conductor.service \\\n    openstack-nova-novncproxy.service\n<\/pre><\/div>\n\n\n<p>As the controller node will not run any compute resources, Nova is the first service which needs to be configured on the compute node(s) as well. In our configuration <a href=\"https:\/\/linux-kvm.org\/page\/Main_Page\" target=\"_blank\" rel=\"noreferrer noopener\">KVM<\/a> will be used to run the virtual machines. Before we start with that, make sure that host running the compute node can use hardware acceleration:<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: bash; highlight: [1]; title: ; notranslate\" title=\"\">\n&#x5B;root@compute ~]$ egrep -c &#039;(vmx|svm)&#039; \/proc\/cpuinfo\n8\n<\/pre><\/div>\n\n\n<p>Check the <a href=\"https:\/\/docs.openstack.org\/nova\/latest\/admin\/configuration\/hypervisor-kvm.html\">documentation<\/a> for additional details. If the output is greater than 0 you should be fine. If it is 0, there is more configuration to do which is not in the scope of this post.<\/p>\n\n\n\n<p>Of course, we need to install the Nova package on the compute node, before we can do anything:<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: bash; title: ; notranslate\" title=\"\">\n&#x5B;root@compute ~]$ dnf install openstack-nova-compute -y\n<\/pre><\/div>\n\n\n<p>The configuration of Nova on the compute node is not much different from the one we&#8217;ve done on the controller node, but we do not need to specify any connection details for the Nova databases. We need, however, to tell Nova how to virtualize by setting the driver and the type of virtualization:<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: bash; highlight: [1]; title: ; notranslate\" title=\"\">\n&#x5B;root@compute ~]$ egrep -v &quot;^#|^$&quot; \/etc\/nova\/nova.conf\n&#x5B;DEFAULT]\ncompute_driver=libvirt.LibvirtDriver\nmy_ip=192.168.122.91\nstate_path=\/var\/lib\/nova\nenabled_apis = osapi_compute,metadata\ntransport_url=rabbit:\/\/openstack:admin@controller\n&#x5B;api]\nauth_strategy = keystone\n&#x5B;api_database]\n&#x5B;barbican]\n&#x5B;barbican_service_user]\n&#x5B;cache]\n&#x5B;cinder]\n&#x5B;compute]\n&#x5B;conductor]\n&#x5B;console]\n&#x5B;consoleauth]\n&#x5B;cors]\n&#x5B;cyborg]\n&#x5B;database]\n&#x5B;devices]\n&#x5B;ephemeral_storage_encryption]\n&#x5B;filter_scheduler]\n&#x5B;glance]\napi_servers = http:\/\/controller:9292\n&#x5B;guestfs]\n&#x5B;healthcheck]\n&#x5B;image_cache]\n&#x5B;ironic]\n&#x5B;key_manager]\n&#x5B;keystone]\n&#x5B;keystone_authtoken]\nwww_authenticate_uri = http:\/\/controller:5000\/\nauth_url = http:\/\/controller:5000\/\nmemcached_servers = controller:11211\nauth_type = password\nproject_domain_name = Default\nuser_domain_name = Default\nproject_name = service\nusername = nova\npassword = admin\n&#x5B;libvirt]\nvirt_type=kvm\n&#x5B;metrics]\n&#x5B;mks]\n&#x5B;neutron]\n&#x5B;notifications]\n&#x5B;os_vif_linux_bridge]\n&#x5B;os_vif_ovs]\n&#x5B;oslo_concurrency]\nlock_path = \/var\/lib\/nova\/tmp\n&#x5B;oslo_limit]\n&#x5B;oslo_messaging_amqp]\n&#x5B;oslo_messaging_kafka]\n&#x5B;oslo_messaging_notifications]\n&#x5B;oslo_messaging_rabbit]\n&#x5B;oslo_middleware]\n&#x5B;oslo_policy]\n&#x5B;oslo_reports]\n&#x5B;oslo_versionedobjects]\n&#x5B;pci]\n&#x5B;placement]\nregion_name = RegionOne\nproject_domain_name = Default\nproject_name = service\nauth_type = password\nuser_domain_name = Default\nauth_url = http:\/\/controller:5000\/v3\nusername = placement\npassword = admin\n&#x5B;privsep]\n&#x5B;profiler]\n&#x5B;profiler_jaeger]\n&#x5B;profiler_otlp]\n&#x5B;quota]\n&#x5B;remote_debug]\n&#x5B;scheduler]\n&#x5B;serial_console]\n&#x5B;service_user]\nsend_service_user_token = true\nauth_url = https:\/\/controller\/identity\nauth_strategy = keystone\nauth_type = password\nproject_domain_name = Default\nproject_name = service\nuser_domain_name = Default\nusername = nova\npassword = admin\n&#x5B;spice]\n&#x5B;upgrade_levels]\n&#x5B;vault]\n&#x5B;vendordata_dynamic_auth]\n&#x5B;vmware]\n&#x5B;vnc]\nenabled = true\nserver_listen = 0.0.0.0\nserver_proxyclient_address = $my_ip\nnovncproxy_base_url = http:\/\/controller:6080\/vnc_auto.html\n&#x5B;workarounds]\n&#x5B;wsgi]\n&#x5B;zvm]\n<\/pre><\/div>\n\n\n<p>As we want to use <a href=\"https:\/\/libvirt.org\/\" target=\"_blank\" rel=\"noreferrer noopener\">libvirt<\/a>, this needs to be installed as well (this was not required on the controller node):<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: bash; title: ; notranslate\" title=\"\">\n&#x5B;root@compute ~]$ dnf install libvirt -y\n<\/pre><\/div>\n\n\n<p>Enable and start the services on the compute node:<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: bash; highlight: [1,8]; title: ; notranslate\" title=\"\">\n&#x5B;root@compute ~]$ systemctl enable libvirtd.service openstack-nova-compute.service\nCreated symlink \/etc\/systemd\/system\/multi-user.target.wants\/libvirtd.service \u2192 \/usr\/lib\/systemd\/system\/libvirtd.service.\nCreated symlink \/etc\/systemd\/system\/sockets.target.wants\/libvirtd.socket \u2192 \/usr\/lib\/systemd\/system\/libvirtd.socket.\nCreated symlink \/etc\/systemd\/system\/sockets.target.wants\/libvirtd-ro.socket \u2192 \/usr\/lib\/systemd\/system\/libvirtd-ro.socket.\nCreated symlink \/etc\/systemd\/system\/sockets.target.wants\/libvirtd-admin.socket \u2192 \/usr\/lib\/systemd\/system\/libvirtd-admin.socket.\nCreated symlink \/etc\/systemd\/system\/multi-user.target.wants\/openstack-nova-compute.service \u2192 \/usr\/lib\/systemd\/system\/openstack-nova-compute.service.\n\n&#x5B;root@compute ~]$ systemctl start libvirtd.service openstack-nova-compute.service\n<\/pre><\/div>\n\n\n<p>Compute nodes need to be attached to a cell (see above), so lets do this on the controller node:<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: bash; highlight: [1,2,9]; title: ; notranslate\" title=\"\">\n&#x5B;root@controller ~]$ . admin-openrc \n&#x5B;root@controller ~]$ openstack compute service list --service nova-compute\n+--------------------------------------+--------------+-----------------------------+------+---------+-------+----------------------------+\n| ID                                   | Binary       | Host                        | Zone | Status  | State | Updated At                 |\n+--------------------------------------+--------------+-----------------------------+------+---------+-------+----------------------------+\n| 3997f0ab-f9b1-4a7a-b635-01d71c805220 | nova-compute | compute.it.dbi-services.com | nova | enabled | up    | 2025-01-22T08:41:19.727723 |\n+--------------------------------------+--------------+-----------------------------+------+---------+-------+----------------------------+\n\n&#x5B;root@controller ~]$ sh -c &quot;nova-manage cell_v2 discover_hosts --verbose&quot; nova\nFound 2 cell mappings.\nSkipping cell0 since it does not contain hosts.\nGetting computes from cell &#039;cell1&#039;: 804d576e-ac59-4fc5-b83a-018088ea8c11\nChecking host mapping for compute host &#039;compute.it.dbi-services.com&#039;: 04bfd9d9-df04-4479-843e-e97457c0ab67\nCreating host mapping for compute host &#039;compute.it.dbi-services.com&#039;: 04bfd9d9-df04-4479-843e-e97457c0ab67\nFound 1 unmapped computes in cell: 804d576e-ac59-4fc5-b83a-018088ea8c11\n<\/pre><\/div>\n\n\n<p>If all is fine, the compute node should show up when we ask for the compute service list:<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: bash; highlight: [1]; title: ; notranslate\" title=\"\">\n&#x5B;root@controller ~]$ openstack compute service list\n+--------------------------------------+----------------+--------------------------------+----------+---------+-------+----------------------------+\n| ID                                   | Binary         | Host                           | Zone     | Status  | State | Updated At                 |\n+--------------------------------------+----------------+--------------------------------+----------+---------+-------+----------------------------+\n| 3997f0ab-f9b1-4a7a-b635-01d71c805220 | nova-compute   | compute.it.dbi-services.com    | nova     | enabled | up    | 2025-01-22T08:43:49.725537 |\n| 29cc3084-1066-4a1f-b9f6-6f0c2187d6b5 | nova-scheduler | controller.it.dbi-services.com | internal | enabled | up    | 2025-01-22T08:43:51.402825 |\n| aea131c6-96b6-466f-802e-58018c931ec1 | nova-conductor | controller.it.dbi-services.com | internal | enabled | up    | 2025-01-22T08:43:51.702004 |\n+--------------------------------------+----------------+--------------------------------+----------+---------+-------+----------------------------+\n<\/pre><\/div>\n\n\n<p>Nova should show up in the catalog:<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: csharp; highlight: [1]; title: ; notranslate\" title=\"\">\n&#x5B;root@controller ~]$ openstack catalog list\n+-----------+-----------+-----------------------------------------+\n| Name      | Type      | Endpoints                               |\n+-----------+-----------+-----------------------------------------+\n| keystone  | identity  | RegionOne                               |\n|           |           |   public: http:\/\/controller:5000\/v3\/    |\n|           |           | RegionOne                               |\n|           |           |   internal: http:\/\/controller:5000\/v3\/  |\n|           |           | RegionOne                               |\n|           |           |   admin: http:\/\/controller:5000\/v3\/     |\n|           |           |                                         |\n| glance    | image     | RegionOne                               |\n|           |           |   public: http:\/\/controller:9292        |\n|           |           | RegionOne                               |\n|           |           |   internal: http:\/\/controller:9292      |\n|           |           | RegionOne                               |\n|           |           |   admin: http:\/\/controller:9292         |\n|           |           |                                         |\n| placement | placement | RegionOne                               |\n|           |           |   public: http:\/\/controller:8778        |\n|           |           | RegionOne                               |\n|           |           |   internal: http:\/\/controller:8778      |\n|           |           | RegionOne                               |\n|           |           |   admin: http:\/\/controller:8778         |\n|           |           |                                         |\n| nova      | compute   | RegionOne                               |\n|           |           |   public: http:\/\/controller:8774\/v2.1   |\n|           |           | RegionOne                               |\n|           |           |   internal: http:\/\/controller:8774\/v2.1 |\n|           |           | RegionOne                               |\n|           |           |   admin: http:\/\/controller:8774\/v2.1    |\n|           |           |                                         |\n| glance    | image     |                                         |\n| glance    | image     |                                         |\n| glance    | image     |                                         |\n+-----------+-----------+-----------------------------------------+\n<\/pre><\/div>\n\n\n<p>Once more (<a href=\"https:\/\/www.dbi-services.com\/blog\/creating-your-private-cloud-using-openstack-4-the-image-and-placement-services\/\" target=\"_blank\" rel=\"noreferrer noopener\">see last post<\/a>), very the image service (Glance):<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: bash; highlight: [1]; title: ; notranslate\" title=\"\">\n&#x5B;root@controller ~]$ openstack image list\n+--------------------------------------+--------+--------+\n| ID                                   | Name   | Status |\n+--------------------------------------+--------+--------+\n| 150fd48b-8ed4-4170-ad98-213d9eddcba0 | cirros | active |\n+--------------------------------------+--------+--------+\n<\/pre><\/div>\n\n\n<p>&#8230; and finally check that the cells and placement API are working properly:<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: bash; highlight: [1]; title: ; notranslate\" title=\"\">\n&#x5B;root@controller ~]$ nova-status upgrade check\n+-------------------------------------------+\n| Upgrade Check Results                     |\n+-------------------------------------------+\n| Check: Cells v2                           |\n| Result: Success                           |\n| Details: None                             |\n+-------------------------------------------+\n| Check: Placement API                      |\n| Result: Success                           |\n| Details: None                             |\n+-------------------------------------------+\n| Check: Cinder API                         |\n| Result: Success                           |\n| Details: None                             |\n+-------------------------------------------+\n| Check: Policy File JSON to YAML Migration |\n| Result: Success                           |\n| Details: None                             |\n+-------------------------------------------+\n| Check: Older than N-1 computes            |\n| Result: Success                           |\n| Details: None                             |\n+-------------------------------------------+\n| Check: hw_machine_type unset              |\n| Result: Success                           |\n| Details: None                             |\n+-------------------------------------------+\n| Check: Service User Token Configuration   |\n| Result: Success                           |\n| Details: None                             |\n+-------------------------------------------+\n<\/pre><\/div>\n\n\n<p>That&#8217;s it for configuring Nova on the controller and the compute nodes and this leaves us with the following setup:<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"408\" src=\"https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2025\/01\/ostack11-1024x408.png\" alt=\"\" class=\"wp-image-36795\" srcset=\"https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2025\/01\/ostack11-1024x408.png 1024w, https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2025\/01\/ostack11-300x120.png 300w, https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2025\/01\/ostack11-768x306.png 768w, https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2025\/01\/ostack11.png 1362w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p>As you can see, this is getting more and more complex as there are many pieces which make up our final OpenStack deployment. <a href=\"https:\/\/www.dbi-services.com\/blog\/creating-your-private-cloud-using-openstack-6-the-networking-service\/\" target=\"_blank\" rel=\"noreferrer noopener\">In the next post we&#8217;ll create and configure the Network Service (Neutron)<\/a>.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>We&#8217;re now coming closer to the final setup of the OpenStack test environment. Again, looking at the minimum services we need, there are only three of them left: In this post we&#8217;ll continue with the Compute Service, which is called Nova. As a short reminder, if you followed the last posts, this is what we [&hellip;]<\/p>\n","protected":false},"author":29,"featured_media":0,"comment_status":"open","ping_status":"","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"footnotes":""},"categories":[955,1320,83],"tags":[135,73,957,2602],"type_dbi":[],"class_list":["post-36781","post","type-post","status-publish","format-standard","hentry","category-cloud","category-devops","category-postgresql","tag-cloud","tag-linux","tag-openstack","tag-postgresql-2"],"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v27.2 (Yoast SEO v27.4) - https:\/\/yoast.com\/product\/yoast-seo-premium-wordpress\/ -->\n<title>Creating your private cloud using OpenStack \u2013 (5) \u2013 The Compute service - dbi Blog<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.dbi-services.com\/blog\/creating-your-private-cloud-using-openstack-5-the-compute-service\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Creating your private cloud using OpenStack \u2013 (5) \u2013 The Compute service\" \/>\n<meta property=\"og:description\" content=\"We&#8217;re now coming closer to the final setup of the OpenStack test environment. Again, looking at the minimum services we need, there are only three of them left: In this post we&#8217;ll continue with the Compute Service, which is called Nova. As a short reminder, if you followed the last posts, this is what we [&hellip;]\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.dbi-services.com\/blog\/creating-your-private-cloud-using-openstack-5-the-compute-service\/\" \/>\n<meta property=\"og:site_name\" content=\"dbi Blog\" \/>\n<meta property=\"article:published_time\" content=\"2025-01-23T07:21:03+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2025-01-24T08:03:55+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2025\/01\/ostack10-1.png\" \/>\n\t<meta property=\"og:image:width\" content=\"1113\" \/>\n\t<meta property=\"og:image:height\" content=\"457\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"author\" content=\"Daniel Westermann\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@westermanndanie\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Daniel Westermann\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"14 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/creating-your-private-cloud-using-openstack-5-the-compute-service\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/creating-your-private-cloud-using-openstack-5-the-compute-service\\\/\"},\"author\":{\"name\":\"Daniel Westermann\",\"@id\":\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/#\\\/schema\\\/person\\\/8d08e9bd996a89bd75c0286cbabf3c66\"},\"headline\":\"Creating your private cloud using OpenStack \u2013 (5) \u2013 The Compute service\",\"datePublished\":\"2025-01-23T07:21:03+00:00\",\"dateModified\":\"2025-01-24T08:03:55+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/creating-your-private-cloud-using-openstack-5-the-compute-service\\\/\"},\"wordCount\":608,\"commentCount\":0,\"image\":{\"@id\":\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/creating-your-private-cloud-using-openstack-5-the-compute-service\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/wp-content\\\/uploads\\\/sites\\\/2\\\/2025\\\/01\\\/ostack10-1-1024x420.png\",\"keywords\":[\"Cloud\",\"Linux\",\"openstack\",\"postgresql\"],\"articleSection\":[\"Cloud\",\"DevOps\",\"PostgreSQL\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/creating-your-private-cloud-using-openstack-5-the-compute-service\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/creating-your-private-cloud-using-openstack-5-the-compute-service\\\/\",\"url\":\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/creating-your-private-cloud-using-openstack-5-the-compute-service\\\/\",\"name\":\"Creating your private cloud using OpenStack \u2013 (5) \u2013 The Compute service - dbi Blog\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/creating-your-private-cloud-using-openstack-5-the-compute-service\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/creating-your-private-cloud-using-openstack-5-the-compute-service\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/wp-content\\\/uploads\\\/sites\\\/2\\\/2025\\\/01\\\/ostack10-1-1024x420.png\",\"datePublished\":\"2025-01-23T07:21:03+00:00\",\"dateModified\":\"2025-01-24T08:03:55+00:00\",\"author\":{\"@id\":\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/#\\\/schema\\\/person\\\/8d08e9bd996a89bd75c0286cbabf3c66\"},\"breadcrumb\":{\"@id\":\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/creating-your-private-cloud-using-openstack-5-the-compute-service\\\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/creating-your-private-cloud-using-openstack-5-the-compute-service\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/creating-your-private-cloud-using-openstack-5-the-compute-service\\\/#primaryimage\",\"url\":\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/wp-content\\\/uploads\\\/sites\\\/2\\\/2025\\\/01\\\/ostack10-1.png\",\"contentUrl\":\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/wp-content\\\/uploads\\\/sites\\\/2\\\/2025\\\/01\\\/ostack10-1.png\",\"width\":1113,\"height\":457},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/creating-your-private-cloud-using-openstack-5-the-compute-service\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Accueil\",\"item\":\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Creating your private cloud using OpenStack \u2013 (5) \u2013 The Compute service\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/#website\",\"url\":\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/\",\"name\":\"dbi Blog\",\"description\":\"\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/#\\\/schema\\\/person\\\/8d08e9bd996a89bd75c0286cbabf3c66\",\"name\":\"Daniel Westermann\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/31350ceeecb1dd8986339a29bf040d4cd3cd087d410deccd8f55234466d6c317?s=96&d=mm&r=g\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/31350ceeecb1dd8986339a29bf040d4cd3cd087d410deccd8f55234466d6c317?s=96&d=mm&r=g\",\"contentUrl\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/31350ceeecb1dd8986339a29bf040d4cd3cd087d410deccd8f55234466d6c317?s=96&d=mm&r=g\",\"caption\":\"Daniel Westermann\"},\"description\":\"Daniel Westermann is Principal Consultant and Technology Leader Open Infrastructure at dbi services. He has more than 15 years of experience in management, engineering and optimization of databases and infrastructures, especially on Oracle and PostgreSQL. Since the beginning of his career, he has specialized in Oracle Technologies and is Oracle Certified Professional 12c and Oracle Certified Expert RAC\\\/GridInfra. Over time, Daniel has become increasingly interested in open source technologies, becoming \u201cTechnology Leader Open Infrastructure\u201d and PostgreSQL expert. \u00a0Based on community or EnterpriseDB tools, he develops and installs complex high available solutions with PostgreSQL. He is also a certified PostgreSQL Plus 9.0 Professional and a Postgres Advanced Server 9.4 Professional. He is a regular speaker at PostgreSQL conferences in Switzerland and Europe. Today Daniel is also supporting our customers on AWS services such as AWS RDS, database migrations into the cloud, EC2 and automated infrastructure management with AWS SSM (System Manager). He is a certified AWS Solutions Architect Professional. Prior to dbi services, Daniel was Management System Engineer at LC SYSTEMS-Engineering AG in Basel. Before that, he worked as Oracle Developper &amp;\u00a0Project Manager at Delta Energy Solutions AG in Basel (today Powel AG). Daniel holds a diploma in Business Informatics (DHBW, Germany). His branch-related experience mainly covers the pharma industry, the financial sector, energy, lottery and telecommunications.\",\"sameAs\":[\"https:\\\/\\\/x.com\\\/westermanndanie\"],\"url\":\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/author\\\/daniel-westermann\\\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Creating your private cloud using OpenStack \u2013 (5) \u2013 The Compute service - dbi Blog","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.dbi-services.com\/blog\/creating-your-private-cloud-using-openstack-5-the-compute-service\/","og_locale":"en_US","og_type":"article","og_title":"Creating your private cloud using OpenStack \u2013 (5) \u2013 The Compute service","og_description":"We&#8217;re now coming closer to the final setup of the OpenStack test environment. Again, looking at the minimum services we need, there are only three of them left: In this post we&#8217;ll continue with the Compute Service, which is called Nova. As a short reminder, if you followed the last posts, this is what we [&hellip;]","og_url":"https:\/\/www.dbi-services.com\/blog\/creating-your-private-cloud-using-openstack-5-the-compute-service\/","og_site_name":"dbi Blog","article_published_time":"2025-01-23T07:21:03+00:00","article_modified_time":"2025-01-24T08:03:55+00:00","og_image":[{"width":1113,"height":457,"url":"https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2025\/01\/ostack10-1.png","type":"image\/png"}],"author":"Daniel Westermann","twitter_card":"summary_large_image","twitter_creator":"@westermanndanie","twitter_misc":{"Written by":"Daniel Westermann","Est. reading time":"14 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.dbi-services.com\/blog\/creating-your-private-cloud-using-openstack-5-the-compute-service\/#article","isPartOf":{"@id":"https:\/\/www.dbi-services.com\/blog\/creating-your-private-cloud-using-openstack-5-the-compute-service\/"},"author":{"name":"Daniel Westermann","@id":"https:\/\/www.dbi-services.com\/blog\/#\/schema\/person\/8d08e9bd996a89bd75c0286cbabf3c66"},"headline":"Creating your private cloud using OpenStack \u2013 (5) \u2013 The Compute service","datePublished":"2025-01-23T07:21:03+00:00","dateModified":"2025-01-24T08:03:55+00:00","mainEntityOfPage":{"@id":"https:\/\/www.dbi-services.com\/blog\/creating-your-private-cloud-using-openstack-5-the-compute-service\/"},"wordCount":608,"commentCount":0,"image":{"@id":"https:\/\/www.dbi-services.com\/blog\/creating-your-private-cloud-using-openstack-5-the-compute-service\/#primaryimage"},"thumbnailUrl":"https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2025\/01\/ostack10-1-1024x420.png","keywords":["Cloud","Linux","openstack","postgresql"],"articleSection":["Cloud","DevOps","PostgreSQL"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.dbi-services.com\/blog\/creating-your-private-cloud-using-openstack-5-the-compute-service\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.dbi-services.com\/blog\/creating-your-private-cloud-using-openstack-5-the-compute-service\/","url":"https:\/\/www.dbi-services.com\/blog\/creating-your-private-cloud-using-openstack-5-the-compute-service\/","name":"Creating your private cloud using OpenStack \u2013 (5) \u2013 The Compute service - dbi Blog","isPartOf":{"@id":"https:\/\/www.dbi-services.com\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.dbi-services.com\/blog\/creating-your-private-cloud-using-openstack-5-the-compute-service\/#primaryimage"},"image":{"@id":"https:\/\/www.dbi-services.com\/blog\/creating-your-private-cloud-using-openstack-5-the-compute-service\/#primaryimage"},"thumbnailUrl":"https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2025\/01\/ostack10-1-1024x420.png","datePublished":"2025-01-23T07:21:03+00:00","dateModified":"2025-01-24T08:03:55+00:00","author":{"@id":"https:\/\/www.dbi-services.com\/blog\/#\/schema\/person\/8d08e9bd996a89bd75c0286cbabf3c66"},"breadcrumb":{"@id":"https:\/\/www.dbi-services.com\/blog\/creating-your-private-cloud-using-openstack-5-the-compute-service\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.dbi-services.com\/blog\/creating-your-private-cloud-using-openstack-5-the-compute-service\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.dbi-services.com\/blog\/creating-your-private-cloud-using-openstack-5-the-compute-service\/#primaryimage","url":"https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2025\/01\/ostack10-1.png","contentUrl":"https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2025\/01\/ostack10-1.png","width":1113,"height":457},{"@type":"BreadcrumbList","@id":"https:\/\/www.dbi-services.com\/blog\/creating-your-private-cloud-using-openstack-5-the-compute-service\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Accueil","item":"https:\/\/www.dbi-services.com\/blog\/"},{"@type":"ListItem","position":2,"name":"Creating your private cloud using OpenStack \u2013 (5) \u2013 The Compute service"}]},{"@type":"WebSite","@id":"https:\/\/www.dbi-services.com\/blog\/#website","url":"https:\/\/www.dbi-services.com\/blog\/","name":"dbi Blog","description":"","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.dbi-services.com\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Person","@id":"https:\/\/www.dbi-services.com\/blog\/#\/schema\/person\/8d08e9bd996a89bd75c0286cbabf3c66","name":"Daniel Westermann","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/secure.gravatar.com\/avatar\/31350ceeecb1dd8986339a29bf040d4cd3cd087d410deccd8f55234466d6c317?s=96&d=mm&r=g","url":"https:\/\/secure.gravatar.com\/avatar\/31350ceeecb1dd8986339a29bf040d4cd3cd087d410deccd8f55234466d6c317?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/31350ceeecb1dd8986339a29bf040d4cd3cd087d410deccd8f55234466d6c317?s=96&d=mm&r=g","caption":"Daniel Westermann"},"description":"Daniel Westermann is Principal Consultant and Technology Leader Open Infrastructure at dbi services. He has more than 15 years of experience in management, engineering and optimization of databases and infrastructures, especially on Oracle and PostgreSQL. Since the beginning of his career, he has specialized in Oracle Technologies and is Oracle Certified Professional 12c and Oracle Certified Expert RAC\/GridInfra. Over time, Daniel has become increasingly interested in open source technologies, becoming \u201cTechnology Leader Open Infrastructure\u201d and PostgreSQL expert. \u00a0Based on community or EnterpriseDB tools, he develops and installs complex high available solutions with PostgreSQL. He is also a certified PostgreSQL Plus 9.0 Professional and a Postgres Advanced Server 9.4 Professional. He is a regular speaker at PostgreSQL conferences in Switzerland and Europe. Today Daniel is also supporting our customers on AWS services such as AWS RDS, database migrations into the cloud, EC2 and automated infrastructure management with AWS SSM (System Manager). He is a certified AWS Solutions Architect Professional. Prior to dbi services, Daniel was Management System Engineer at LC SYSTEMS-Engineering AG in Basel. Before that, he worked as Oracle Developper &amp;\u00a0Project Manager at Delta Energy Solutions AG in Basel (today Powel AG). Daniel holds a diploma in Business Informatics (DHBW, Germany). His branch-related experience mainly covers the pharma industry, the financial sector, energy, lottery and telecommunications.","sameAs":["https:\/\/x.com\/westermanndanie"],"url":"https:\/\/www.dbi-services.com\/blog\/author\/daniel-westermann\/"}]}},"_links":{"self":[{"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/posts\/36781","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/users\/29"}],"replies":[{"embeddable":true,"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/comments?post=36781"}],"version-history":[{"count":15,"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/posts\/36781\/revisions"}],"predecessor-version":[{"id":36858,"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/posts\/36781\/revisions\/36858"}],"wp:attachment":[{"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/media?parent=36781"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/categories?post=36781"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/tags?post=36781"},{"taxonomy":"type","embeddable":true,"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/type_dbi?post=36781"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}