Ironic/NovaBaremetalIronicMigration
Contents
- 1 Nova Bare-metal to Ironic migration
- 1.1 Assumptions / Requirements
- 1.2 High Level Walk Through
- 1.2.1 Detailed examples
- 1.2.1.1 Build kernel and ram-disk
- 1.2.1.2 Create empty database
- 1.2.1.3 Stop services
- 1.2.1.4 Changes
- 1.2.1.5 Ironic section
- 1.2.1.6 Baremetal section
- 1.2.1.7 Load kernel and ram-disk
- 1.2.1.8 Update flavor
- 1.2.1.9 Run migrate script
- 1.2.1.10 Start Ironic services
- 1.2.1.11 Ensure service start-up
- 1.2.1.12 Start Nova services
- 1.2.1 Detailed examples
- 2 References
Nova Bare-metal to Ironic migration
The purpose of this wiki to 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. Next the entire upgrade process at a high level, leading to a detailed example of each step.
Assumptions / Requirements
This section describes assumptions made about the operating environment in which the upgrade 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. An upgrade 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.
- Migrating live instances between virt drivers in Nova is not tested, and therefore is not recommended.
- That being said, we have had some success in migrating a live "baremetal" instance to "ironic" and then deleting it.
- Upgrading from Icehouse "baremetal" to Juno "baremetal" is not tested upstream, but we are not aware of any bugs affecting this upgrade.
High Level Walk Through
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.
- Prepare the "deploy-ironic" kernel and initrd for use with the PXE driver
- Initialize the Ironic schema using ironic-dbsync (Example)
- Begin maintenance period, preventing user access to Nova, which will last until the migration is complete.
- Stop Nova compute and scheduler services (Example)
- Update nova-compute configuration (nova.conf)
- Update flavor metadata to reference Ironic's deploy kernel & ramdisk (Example)
- Run migrate_db script (Example)
- Start Ironic services (Example)
- Ensure proper service start-up (Example)
- (Re)start Nova compute and scheduler services (Example)
- End maintenance period
Detailed examples
Below are detailed examples of the steps required to migrate Nova Bare-metal to Ironic.
- Note these are general examples and differ slightly from your configuration.
Build kernel and ram-disk
Use Diskimage-builder to create the Ironic deploy kernel and ram-disk
diskimage-builder/bin/ramdisk-image-create -a $NODE_ARCH $NODE_DIST deploy-ironic -o deploy-ironic $DIB_ELEMENTS
Create empty database
For MySql
mysql -u root -e "create schema ironic" ironic-dbsync --config-file etc/ironic/ironic.conf.local
Stop services
sudo service nova-compute stop sudo service nova-scheduler stop
Changes
In an editor change the current compute_driver and scheduler_host_manager to match the example below:
compute_driver = nova.virt.ironic.IronicDriver scheduler_host_manager = nova.scheduler.ironic_host_manager.IronicHostManager
Ironic section
Add the Ironic section to the bottom of the nova.conf file: (adjusting the sample below to match your settings)
[ironic] admin_username = ironic admin_password = password admin_url = http://keystone.host:35357/v2.0 admin_tenant_name = service
Baremetal section
Remove the entire Nova Bare-metal driver section:
[Baremetal] sql_connection = db tftp_root = /tftpboot flavor_extra_specs = cpu_arch / arch driver = nova.virt.baremetal.pxe.PXE pxe_network_config=True pxe_deploy_timeout= pxe_deploy_timeout power_manager = power_manager virtual_power_host_user=user virtual_power_host_key=/mnt/state/var/lib/nova/virtual-power-key virtual_power_ssh_host=ssh_host virtual_power_type=type
Load kernel and ram-disk
Load the Ironic deploy kernel and ramdisk built above into glance.
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}')
Update flavor
Update the Nova flavor to reference the deploy-ironic kernel and ram-disk loaded into glance.
nova flavor-key baremetal set "baremetal:deploy_kernel_id"="$dkid" nova flavor-key baremetal set "baremetal:deploy_ramdisk_id"="$drid"
Run migrate script
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
sudo service ironic-api start sudo service ironic-conductor start
Ensure service start-up
Before running the command below be sure that the required OS_* environment variables are set / sourced.
ironic driver-list
Which should produce output like this sample:
+--------------+--------+ | name | hosts | +--------------+--------+ | pxe_ipmitool | ubuntu | | pxe_ssh | ubuntu | +--------------+--------+
- Note that the above list may not match your out but exactly depending on the drivers you've enabled. If this is the first startup for Ironic it would also be advisable to check the ironic logs for errors too.
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:
ironic node-show
+------------------------+-------------------------------------------------------------------------+ | 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 | +------------------------+-------------------------------------------------------------------------+
Start Nova services
sudo service nova-compute start sudo service nova-scheduler start
References
- Ironic: https://wiki.openstack.org/wiki/Ironic
- Nova Baremetal: https://wiki.openstack.org/wiki/Baremetal