Difference between revisions of "Ironic/NovaBaremetalIronicMigration"
(→Ensure service start-up) |
Julia Kreger (talk | contribs) (→Migration from Nova Baremetal to Ironic) |
||
(23 intermediate revisions by 5 users not shown) | |||
Line 1: | Line 1: | ||
− | == | + | == Historical Documentation == |
− | + | This Wiki page is historical documentation from the early days for the Ironic Project. For the latest documentation, please see https://docs.openstack.org/ironic. | |
− | == | + | == Migration from Nova Baremetal to Ironic == |
− | This section | + | The purpose of this wiki is to provide an understanding of the migration process from Nova's "baremetal" driver to its "ironic" driver. First is a list of assumptions we took to write this document and the physical requirements for the migration to successfully complete. Then a description of the migration steps is provided. |
+ | |||
+ | Note that Nova's baremetal driver will be removed in Kilo. | ||
+ | |||
+ | === Assumptions and Requirements === | ||
+ | |||
+ | This section describes assumptions made about the operating environment in which the migration can be performed, and is a reflection of the environment used in the continuous upgrade testing that will be performed on the Juno stable branch. A migration may be possible under other circumstances as well. | ||
* Only a "sideways" migration within the Juno release is supported. In other words: | * Only a "sideways" migration within the Juno release is supported. In other words: | ||
** migrating from Juno "baremetal" to Juno "ironic" is supported, but: | ** migrating from Juno "baremetal" to Juno "ironic" is supported, but: | ||
** migrating from Icehouse "baremetal" to Juno "ironic" is '''not''' supported. | ** migrating from Icehouse "baremetal" to Juno "ironic" is '''not''' supported. | ||
− | * Migrating live instances between virt drivers in Nova is not tested, and | + | * This only handles migrations for Nova baremetal's IPMI and VirtualPowerManager power managers/drivers (not Pdu, IBootManager). |
− | ** That being said, | + | * Migrating live instances between virt drivers in Nova is not tested as part of the upstream CI testing (grenade), and therefore is not recommended. |
+ | ** That being said, instances left running during the migration are expected to function properly after. | ||
* Upgrading from Icehouse "baremetal" to Juno "baremetal" is not tested upstream, but we are not aware of any bugs affecting this upgrade. | * Upgrading from Icehouse "baremetal" to Juno "baremetal" is not tested upstream, but we are not aware of any bugs affecting this upgrade. | ||
− | === | + | === Migration Steps === |
This section outlines the recommended approach for an operator to perform a sideways migration from the Juno release of Nova "baremetal" driver to the Juno release of the Nova "ironic" driver. | This section outlines the recommended approach for an operator to perform a sideways migration from the Juno release of Nova "baremetal" driver to the Juno release of the Nova "ironic" driver. | ||
− | + | Please note that the examples provided may differ slightly from your environment. | |
− | + | ||
− | + | ===== Install Ironic ===== | |
− | + | Install Ironic by following the steps described in these two sections of Ironic's [http://docs.openstack.org/developer/ironic/deploy/install-guide.html install guide]: | |
− | + | # [http://docs.openstack.org/developer/ironic/deploy/install-guide.html#install-and-configure-prerequisites Install and Configure Prerequisites] | |
− | + | # [http://docs.openstack.org/developer/ironic/deploy/install-guide.html#configure-the-bare-metal-service Configure the Bare Metal Service]. Do not start the Ironic services (the last step) just yet. | |
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | ==== | + | ===== Prepare the "deploy-ironic" kernel and initrd for use with the driver===== |
− | + | These instructions are for the PXE driver. If you plan to use another driver, prepare the appropriate image(s) for that driver instead. | |
− | + | ||
− | + | Use [https://github.com/openstack/diskimage-builder diskimage-builder] to create the Ironic deploy kernel and RAM disk. For example, the following will create the kernel and RAM disk in deploy-ironic.kernel and deploy-ironic.initramfs files respectively: | |
− | Use | ||
diskimage-builder/bin/ramdisk-image-create -a $NODE_ARCH $NODE_DIST deploy-ironic -o deploy-ironic $DIB_ELEMENTS | diskimage-builder/bin/ramdisk-image-create -a $NODE_ARCH $NODE_DIST deploy-ironic -o deploy-ironic $DIB_ELEMENTS | ||
− | |||
− | |||
− | |||
− | |||
− | |||
+ | Load the Ironic deploy kernel and RAM disk built above into Glance. For example: | ||
+ | dkid=$(glance image-create --name "deploy-ironic-kernel" --public --disk-format aki --file deploy-ironic.kernel | awk ' / id / {print $4}') | ||
+ | drid=$(glance image-create --name "deploy-ironic-ramdisk" --public --disk-format ari --file deploy-ironic.initramfs | awk ' / id / {print $4}') | ||
+ | |||
+ | ===== Begin maintenance period===== | ||
+ | In order to prevent users from accessing Nova, begin your maintenance period. The maintenance will end when the migration is completed. | ||
+ | |||
+ | ===== Stop Ironic's and Nova's services ===== | ||
+ | If Ironic services are running, stop them: | ||
+ | sudo service ironic-api stop | ||
+ | sudo service ironic-conductor stop | ||
+ | |||
+ | If Nova services are running, stop the compute and scheduler services: | ||
sudo service nova-compute stop | sudo service nova-compute stop | ||
sudo service nova-scheduler stop | sudo service nova-scheduler stop | ||
− | ===== | + | |
− | + | ===== Update nova-compute configuration to use Ironic===== | |
− | + | # Follow steps 1 and 2 of [http://docs.openstack.org/developer/ironic/deploy/install-guide.html#configure-compute-service-to-use-the-bare-metal-service Configure Compute Service to use the Bare Metal Service] to change some settings and add an [ironic] section | |
− | + | # Remove the entire [baremetal] section | |
− | + | ||
− | + | ===== Update Nova baremetal's flavor metadata===== | |
− | + | Update the Nova "baremetal" flavor metadata to reference the deploy-ironic kernel and RAM disk loaded into Glance. For example: | |
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | ===== Update flavor ===== | ||
− | Update the Nova flavor to reference the deploy-ironic kernel and | ||
nova flavor-key baremetal set "baremetal:deploy_kernel_id"="$dkid" | nova flavor-key baremetal set "baremetal:deploy_kernel_id"="$dkid" | ||
nova flavor-key baremetal set "baremetal:deploy_ramdisk_id"="$drid" | nova flavor-key baremetal set "baremetal:deploy_ramdisk_id"="$drid" | ||
− | ===== Run | + | |
− | ironic-nova-bm-migrate | + | ===== Run the [https://github.com/openstack/ironic/blob/master/ironic/migrate_nova/migrate_db.py migrate_db] script===== |
+ | The ironic-nova-bm-migrate script will migrate Nova baremetal node and interface | ||
+ | information and associated driver configuration from the Nova database to the Ironic database. | ||
+ | It only supports migrating from the IPMI and VirtualPowerManager power drivers. | ||
+ | |||
+ | ironic-nova-bm-migrate --nova-bm-db $database_connection_url_nova_bm \ | ||
--ironic-db $database_connection_url_ironic \ | --ironic-db $database_connection_url_ironic \ | ||
--node-arch x86_64 \ | --node-arch x86_64 \ | ||
Line 90: | Line 74: | ||
===== Start Ironic services ===== | ===== Start Ironic services ===== | ||
+ | (Re)start the Ironic services via: | ||
sudo service ironic-api start | sudo service ironic-api start | ||
sudo service ironic-conductor start | sudo service ironic-conductor start | ||
− | ===== Ensure | + | |
− | Before running the | + | ===== Ensure Ironic services start-up ===== |
+ | Before running the "ironic" commands below, be sure that the required OS_* environment variables are set / sourced. (More information is available at [http://docs.openstack.org/developer/python-ironicclient/cli.html ironic Command-Line Interface]). | ||
ironic driver-list | ironic driver-list | ||
− | + | should produce output like this sample: | |
+--------------+--------+ | +--------------+--------+ | ||
| name | hosts | | | name | hosts | | ||
Line 102: | Line 88: | ||
| pxe_ssh | ubuntu | | | pxe_ssh | ubuntu | | ||
+--------------+--------+ | +--------------+--------+ | ||
− | ; Note that the above list may not match your | + | ; Note that the above list may not match your output exactly; it depends on the drivers you've enabled. If this is the first time starting the Ironic services, it is advisable to check the Ironic logs for errors. |
− | Then run a node list to ensure that the nodes have migrated correctly | + | Then run a "node-list" to ensure that the nodes have migrated correctly: |
ironic node-list | ironic node-list | ||
This should produce a list such as: | This should produce a list such as: | ||
Line 113: | Line 99: | ||
| 77024bdb-a360-419f-a0b5-bc18a97571c1 | None | power off | None | False | | | 77024bdb-a360-419f-a0b5-bc18a97571c1 | None | power off | None | False | | ||
+--------------------------------------+---------------+-------------+-----------------+-------------+ | +--------------------------------------+---------------+-------------+-----------------+-------------+ | ||
− | Inspect each node in detail with the node-show command: | + | Inspect each node in detail with the node-show command. The migration script populated the node's uuid, instance_uuid, created_at, updated_at, power_state, driver, and driver_info, instance_info, and properties from its Nova baremetal node: |
− | ironic node-show | + | ironic node-show 36f24e67-aaec-41ba-ba20-509bdd548974 |
+------------------------+-------------------------------------------------------------------------+ | +------------------------+-------------------------------------------------------------------------+ | ||
Line 127: | Line 113: | ||
| | u'ssh_address': u'192.168.122.1', u'ssh_key_contents': u'-----BEGIN RSA | | | | u'ssh_address': u'192.168.122.1', u'ssh_key_contents': u'-----BEGIN RSA | | ||
| | PRIVATE KEY----- | | | | PRIVATE KEY----- | | ||
− | | | <SSH KEY REMOVED | + | | | <SSH KEY REMOVED> | |
| | -----END RSA PRIVATE KEY-----'} | | | | -----END RSA PRIVATE KEY-----'} | | ||
| extra | {} | | | extra | {} | | ||
Line 144: | Line 130: | ||
+------------------------+-------------------------------------------------------------------------+ | +------------------------+-------------------------------------------------------------------------+ | ||
− | ===== | + | ===== (Re)start Nova's compute and scheduler services===== |
sudo service nova-compute start | sudo service nova-compute start | ||
sudo service nova-scheduler start | sudo service nova-scheduler start | ||
+ | |||
+ | ===== Inspect Nova hypervisor details to ensure proper configuration ===== | ||
+ | |||
+ | In addition to checking log files for obvious errors during startup, you may inspect the hypervisor details of nova-compute nodes to ensure they are properly registered and reporting correct resources from Ironic: | ||
+ | nova hypervisor-list | ||
+ | +----+--------------------------------------+ | ||
+ | | ID | Hypervisor hostname | | ||
+ | +----+--------------------------------------+ | ||
+ | | 1 | a6c3b50d-049b-4878-b92f-91e13ac855e2 | | ||
+ | +----+--------------------------------------+ | ||
+ | |||
+ | nova hypervisor-show 1 | ||
+ | +-------------------------+--------------------------------------+ | ||
+ | | Property | Value | | ||
+ | +-------------------------+--------------------------------------+ | ||
+ | | cpu_info | baremetal cpu | | ||
+ | | current_workload | 0 | | ||
+ | | disk_available_least | - | | ||
+ | | free_disk_gb | 0 | | ||
+ | | free_ram_mb | 0 | | ||
+ | | host_ip | 192.0.2.1 | | ||
+ | | hypervisor_hostname | a6c3b50d-049b-4878-b92f-91e13ac855e2 | | ||
+ | | hypervisor_type | ironic | | ||
+ | | hypervisor_version | 1 | | ||
+ | | id | 1 | | ||
+ | | local_gb | 40 | | ||
+ | | local_gb_used | 40 | | ||
+ | | memory_mb | 4096 | | ||
+ | | memory_mb_used | 4096 | | ||
+ | | running_vms | 1 | | ||
+ | | service_disabled_reason | - | | ||
+ | | service_host | nova-compute | | ||
+ | | service_id | 5 | | ||
+ | | state | up | | ||
+ | | status | enabled | | ||
+ | | vcpus | 1 | | ||
+ | | vcpus_used | 1 | | ||
+ | +-------------------------+--------------------------------------+ | ||
+ | |||
+ | ===== End maintenance period===== | ||
+ | You are done! | ||
+ | |||
+ | == Nova Baremetal CLI Commands == | ||
+ | After migrating to Ironic, some of the Nova baremetal commands will continue to work. This table lists the baremetal commands, whether or not they will continue to work, and their corresponding Ironic commands. It is advisable to use the Ironic commands corresponding to the supported baremetal commands. | ||
+ | |||
+ | {| class="wikitable" | ||
+ | |- | ||
+ | ! Nova baremetal command !! supported after migration !! corresponding Ironic command | ||
+ | |- | ||
+ | | baremetal-interface-add || no || port-create | ||
+ | |- | ||
+ | | baremetal-interface-list || no || port-list | ||
+ | |- | ||
+ | | baremetal-interface-remove || no || port-delete | ||
+ | |- | ||
+ | | baremetal-node-create || no || node-create | ||
+ | |- | ||
+ | | baremetal-node-delete || no || node-delete | ||
+ | |- | ||
+ | | baremetal-node-list || yes || node-list | ||
+ | |- | ||
+ | | baremetal-node-show || yes || node-show | ||
+ | |} | ||
+ | == References == | ||
+ | * Diskimage-builder: https://github.com/openstack/diskimage-builder | ||
+ | * Ironic: https://wiki.openstack.org/wiki/Ironic | ||
+ | ** install guide: http://docs.openstack.org/developer/ironic/deploy/install-guide.html | ||
+ | ** CLI: http://docs.openstack.org/developer/python-ironicclient/cli.html | ||
+ | * Nova Baremetal: https://wiki.openstack.org/wiki/Baremetal |
Latest revision as of 00:38, 1 May 2021
Contents
- 1 Historical Documentation
- 2 Migration from Nova Baremetal to Ironic
- 2.1 Assumptions and Requirements
- 2.2 Migration Steps
- 2.2.1 Install Ironic
- 2.2.2 Prepare the "deploy-ironic" kernel and initrd for use with the driver
- 2.2.3 Begin maintenance period
- 2.2.4 Stop Ironic's and Nova's services
- 2.2.5 Update nova-compute configuration to use Ironic
- 2.2.6 Update Nova baremetal's flavor metadata
- 2.2.7 Run the migrate_db script
- 2.2.8 Start Ironic services
- 2.2.9 Ensure Ironic services start-up
- 2.2.10 (Re)start Nova's compute and scheduler services
- 2.2.11 Inspect Nova hypervisor details to ensure proper configuration
- 2.2.12 End maintenance period
- 3 Nova Baremetal CLI Commands
- 4 References
Historical Documentation
This Wiki page is historical documentation from the early days for the Ironic Project. For the latest documentation, please see https://docs.openstack.org/ironic.
Migration from Nova Baremetal to Ironic
The purpose of this wiki is to provide an understanding of the migration process from Nova's "baremetal" driver to its "ironic" driver. First is a list of assumptions we took to write this document and the physical requirements for the migration to successfully complete. Then a description of the migration steps is provided.
Note that Nova's baremetal driver will be removed in Kilo.
Assumptions and Requirements
This section describes assumptions made about the operating environment in which the migration can be performed, and is a reflection of the environment used in the continuous upgrade testing that will be performed on the Juno stable branch. A migration may be possible under other circumstances as well.
- Only a "sideways" migration within the Juno release is supported. In other words:
- migrating from Juno "baremetal" to Juno "ironic" is supported, but:
- migrating from Icehouse "baremetal" to Juno "ironic" is not supported.
- This only handles migrations for Nova baremetal's IPMI and VirtualPowerManager power managers/drivers (not Pdu, IBootManager).
- Migrating live instances between virt drivers in Nova is not tested as part of the upstream CI testing (grenade), and therefore is not recommended.
- That being said, instances left running during the migration are expected to function properly after.
- Upgrading from Icehouse "baremetal" to Juno "baremetal" is not tested upstream, but we are not aware of any bugs affecting this upgrade.
Migration Steps
This section outlines the recommended approach for an operator to perform a sideways migration from the Juno release of Nova "baremetal" driver to the Juno release of the Nova "ironic" driver.
Please note that the examples provided may differ slightly from your environment.
Install Ironic
Install Ironic by following the steps described in these two sections of Ironic's install guide:
- Install and Configure Prerequisites
- Configure the Bare Metal Service. Do not start the Ironic services (the last step) just yet.
Prepare the "deploy-ironic" kernel and initrd for use with the driver
These instructions are for the PXE driver. If you plan to use another driver, prepare the appropriate image(s) for that driver instead.
Use diskimage-builder to create the Ironic deploy kernel and RAM disk. For example, the following will create the kernel and RAM disk in deploy-ironic.kernel and deploy-ironic.initramfs files respectively:
diskimage-builder/bin/ramdisk-image-create -a $NODE_ARCH $NODE_DIST deploy-ironic -o deploy-ironic $DIB_ELEMENTS
Load the Ironic deploy kernel and RAM disk built above into Glance. For example:
dkid=$(glance image-create --name "deploy-ironic-kernel" --public --disk-format aki --file deploy-ironic.kernel | awk ' / id / {print $4}') drid=$(glance image-create --name "deploy-ironic-ramdisk" --public --disk-format ari --file deploy-ironic.initramfs | awk ' / id / {print $4}')
Begin maintenance period
In order to prevent users from accessing Nova, begin your maintenance period. The maintenance will end when the migration is completed.
Stop Ironic's and Nova's services
If Ironic services are running, stop them:
sudo service ironic-api stop sudo service ironic-conductor stop
If Nova services are running, stop the compute and scheduler services:
sudo service nova-compute stop sudo service nova-scheduler stop
Update nova-compute configuration to use Ironic
- Follow steps 1 and 2 of Configure Compute Service to use the Bare Metal Service to change some settings and add an [ironic] section
- Remove the entire [baremetal] section
Update Nova baremetal's flavor metadata
Update the Nova "baremetal" flavor metadata to reference the deploy-ironic kernel and RAM disk loaded into Glance. For example:
nova flavor-key baremetal set "baremetal:deploy_kernel_id"="$dkid" nova flavor-key baremetal set "baremetal:deploy_ramdisk_id"="$drid"
Run the migrate_db script
The ironic-nova-bm-migrate script will migrate Nova baremetal node and interface information and associated driver configuration from the Nova database to the Ironic database. It only supports migrating from the IPMI and VirtualPowerManager power drivers.
ironic-nova-bm-migrate --nova-bm-db $database_connection_url_nova_bm \ --ironic-db $database_connection_url_ironic \ --node-arch x86_64 \ --nova-conf $NOVA_CONF_FILE
Start Ironic services
(Re)start the Ironic services via:
sudo service ironic-api start sudo service ironic-conductor start
Ensure Ironic services start-up
Before running the "ironic" commands below, be sure that the required OS_* environment variables are set / sourced. (More information is available at ironic Command-Line Interface).
ironic driver-list
should produce output like this sample:
+--------------+--------+ | name | hosts | +--------------+--------+ | pxe_ipmitool | ubuntu | | pxe_ssh | ubuntu | +--------------+--------+
- Note that the above list may not match your output exactly; it depends on the drivers you've enabled. If this is the first time starting the Ironic services, it is advisable to check the Ironic logs for errors.
Then run a "node-list" to ensure that the nodes have migrated correctly:
ironic node-list
This should produce a list such as:
+--------------------------------------+---------------+-------------+-----------------+-------------+ | uuid | instance_uuid | power_state | provision_state | maintenance | +--------------------------------------+---------------+-------------+-----------------+-------------+ | 36f24e67-aaec-41ba-ba20-509bdd548974 | None | power off | None | False | | 77024bdb-a360-419f-a0b5-bc18a97571c1 | None | power off | None | False | +--------------------------------------+---------------+-------------+-----------------+-------------+
Inspect each node in detail with the node-show command. The migration script populated the node's uuid, instance_uuid, created_at, updated_at, power_state, driver, and driver_info, instance_info, and properties from its Nova baremetal node:
ironic node-show 36f24e67-aaec-41ba-ba20-509bdd548974
+------------------------+-------------------------------------------------------------------------+ | Property | Value | +------------------------+-------------------------------------------------------------------------+ | instance_uuid | None | | target_power_state | None | | properties | {u'memory_mb': u'2048', u'cpu_arch': u'i386', u'local_gb': u'40', | | | u'cpus': u'1'} | | maintenance | False | | driver_info | {u'ssh_username': u'nobodycam', u'ssh_virt_type': u'virsh', | | | u'ssh_address': u'192.168.122.1', u'ssh_key_contents': u'-----BEGIN RSA | | | PRIVATE KEY----- | | | <SSH KEY REMOVED> | | | -----END RSA PRIVATE KEY-----'} | | extra | {} | | last_error | None | | created_at | 2014-09-15T17:50:59+00:00 | | target_provision_state | None | | driver | pxe_ssh | | updated_at | 2014-09-15T18:24:15+00:00 | | instance_info | {} | | chassis_uuid | None | | provision_state | None | | reservation | None | | power_state | power off | | console_enabled | False | | uuid | 36f24e67-aaec-41ba-ba20-509bdd548974 | +------------------------+-------------------------------------------------------------------------+
(Re)start Nova's compute and scheduler services
sudo service nova-compute start sudo service nova-scheduler start
Inspect Nova hypervisor details to ensure proper configuration
In addition to checking log files for obvious errors during startup, you may inspect the hypervisor details of nova-compute nodes to ensure they are properly registered and reporting correct resources from Ironic:
nova hypervisor-list +----+--------------------------------------+ | ID | Hypervisor hostname | +----+--------------------------------------+ | 1 | a6c3b50d-049b-4878-b92f-91e13ac855e2 | +----+--------------------------------------+
nova hypervisor-show 1 +-------------------------+--------------------------------------+ | Property | Value | +-------------------------+--------------------------------------+ | cpu_info | baremetal cpu | | current_workload | 0 | | disk_available_least | - | | free_disk_gb | 0 | | free_ram_mb | 0 | | host_ip | 192.0.2.1 | | hypervisor_hostname | a6c3b50d-049b-4878-b92f-91e13ac855e2 | | hypervisor_type | ironic | | hypervisor_version | 1 | | id | 1 | | local_gb | 40 | | local_gb_used | 40 | | memory_mb | 4096 | | memory_mb_used | 4096 | | running_vms | 1 | | service_disabled_reason | - | | service_host | nova-compute | | service_id | 5 | | state | up | | status | enabled | | vcpus | 1 | | vcpus_used | 1 | +-------------------------+--------------------------------------+
End maintenance period
You are done!
Nova Baremetal CLI Commands
After migrating to Ironic, some of the Nova baremetal commands will continue to work. This table lists the baremetal commands, whether or not they will continue to work, and their corresponding Ironic commands. It is advisable to use the Ironic commands corresponding to the supported baremetal commands.
Nova baremetal command | supported after migration | corresponding Ironic command |
---|---|---|
baremetal-interface-add | no | port-create |
baremetal-interface-list | no | port-list |
baremetal-interface-remove | no | port-delete |
baremetal-node-create | no | node-create |
baremetal-node-delete | no | node-delete |
baremetal-node-list | yes | node-list |
baremetal-node-show | yes | node-show |
References
- Diskimage-builder: https://github.com/openstack/diskimage-builder
- Ironic: https://wiki.openstack.org/wiki/Ironic
- Nova Baremetal: https://wiki.openstack.org/wiki/Baremetal