Deprecation plan for nova-baremetal
This spec outlines the process for upgrading from nova-baremetal to Ironic, and descibes the changes in Nova which will be required prior to deleting the nova-baremetal code from the Nova tree. blueprint deprecate-baremetal-driver Change-Id: I2a9e6ca2f19d5b0f80954cdec45a9eca17960fa1
This commit is contained in:
parent
5f452082f9
commit
bbc02a40bd
|
@ -0,0 +1,229 @@
|
|||
..
|
||||
This work is licensed under a Creative Commons Attribution 3.0 Unported
|
||||
License.
|
||||
|
||||
http://creativecommons.org/licenses/by/3.0/legalcode
|
||||
|
||||
====================================================
|
||||
Upgrade from a nova "baremetal" deployment to Ironic
|
||||
====================================================
|
||||
|
||||
https://blueprints.launchpad.net/nova/+spec/deprecate-baremetal-driver
|
||||
|
||||
This specification describes the requirements to providing an upgrade path from
|
||||
a deployment of the nova.virt.baremetal driver to the nova.virt.ironic driver.
|
||||
It outlines the data migration path and service upgrade process for such an
|
||||
upgrade.
|
||||
|
||||
Problem description
|
||||
===================
|
||||
|
||||
The community has split out the functionality of provisioning bare metal
|
||||
servers into a separate program, which includes the ironic and
|
||||
python-ironicclient projects. While the original intent of the
|
||||
nova.virt.baremetal driver was to be an experimental proof-of-concept for
|
||||
TripleO, it may have been deployed in some production environments to
|
||||
facilitate high-performance compute workloads.
|
||||
|
||||
It is unreasonable to expect operators who have chosen to use
|
||||
nova.virt.baremetal to lose all state and delete all instances during an
|
||||
upgrade. Migration tools will be available within Ironic.
|
||||
|
||||
NOTE: The service upgrade is only supported within the same release version,
|
||||
and will only be supported in the first integrated release containing Ironic.
|
||||
|
||||
For example, if this work is completed during the Juno cycle, an upgrade from
|
||||
"juno baremetal" to "juno ironic" will be supported, but a direct upgrade from
|
||||
"icehouse baremetal" to "juno ironic" will NOT be supported. That should be
|
||||
accomplished by first upgrading from "icehouse baremetal" to "juno baremetal"
|
||||
and then to "juno ironic".
|
||||
|
||||
Proposed change
|
||||
===============
|
||||
|
||||
At the start of a release cycle following the cycle in which this work is
|
||||
completed, the artifacts of baremetal will be delete from the Nova tree.
|
||||
This includes: the baremetal virt driver, baremetal host manager, 'nova_bm'
|
||||
database schema and its migration tests.
|
||||
|
||||
The API extension will be replaced by a read-only proxy API. This will forward
|
||||
the following API commands to Ironic:
|
||||
- baremetal-interface-list
|
||||
- baremetal-node-list
|
||||
- baremetal-node-show
|
||||
|
||||
|
||||
Alternatives
|
||||
------------
|
||||
|
||||
Three alternatives have been discussed.
|
||||
|
||||
* Do not provide any upgrade path; this met with significant opposition.
|
||||
|
||||
* Provide a data-only migration (eg, require that instances be deleted
|
||||
prior to, or as part of, the migration). This was also met with opposition.
|
||||
|
||||
* Rather than a data extract-and-load script, one could enroll instances
|
||||
via Ironic's REST API. This would require ironic's REST API to accept nodes
|
||||
that have non-null provision_state and power_state, which it expressly
|
||||
does not allow today. This change would require significant changes
|
||||
to the provisioning API and state management within the conductor service.
|
||||
|
||||
Data model impact
|
||||
-----------------
|
||||
|
||||
The nova_bm schema and all supporting DB migration tests may be deleted.
|
||||
|
||||
REST API impact
|
||||
---------------
|
||||
|
||||
The baremetal extension to Nova's REST API will be replaced with a read-only
|
||||
proxy API to Ironic. This will check policy, and forward the user's token
|
||||
to Ironic for secondary validation (Ironic requires "admin" privileges).
|
||||
|
||||
The following commands will NOT be proxied:
|
||||
- baremetal-interface-add
|
||||
- baremetal-interface-remove
|
||||
- baremetal-node-create
|
||||
- baremetal-node-delete
|
||||
|
||||
The endpoints for these methods will return a 404 NOT FOUND.
|
||||
|
||||
Notifications impact
|
||||
--------------------
|
||||
|
||||
None
|
||||
|
||||
Security impact
|
||||
---------------
|
||||
|
||||
None
|
||||
|
||||
Other end user impact
|
||||
---------------------
|
||||
|
||||
None
|
||||
|
||||
Performance Impact
|
||||
------------------
|
||||
|
||||
None
|
||||
|
||||
Other deployer impact
|
||||
---------------------
|
||||
|
||||
None
|
||||
|
||||
Developer impact
|
||||
----------------
|
||||
|
||||
None
|
||||
|
||||
|
||||
Implementation
|
||||
==============
|
||||
|
||||
Assignee(s)
|
||||
-----------
|
||||
|
||||
Primary assignee:
|
||||
devananda
|
||||
|
||||
Other contributors:
|
||||
adam_g
|
||||
romcheg
|
||||
|
||||
Work Items
|
||||
----------
|
||||
|
||||
* Create new API proxy/extension
|
||||
|
||||
* Database extraction-and-loading script
|
||||
(in Ironic's tree)
|
||||
|
||||
* Flavor update script
|
||||
(in Ironic's tree)
|
||||
|
||||
* Operator documentation
|
||||
(in Ironic's tree)
|
||||
|
||||
* Grenade tests
|
||||
(in Grenade)
|
||||
|
||||
Dependencies
|
||||
============
|
||||
|
||||
This proposal depends primarily upon the acceptance of the nova.virt.ironic
|
||||
driver into the Nova codebase, and secondarily on grenade testing of the
|
||||
migration script and upon several open changes in tempest which will allow
|
||||
Ironic to pass tempest/api/compute.
|
||||
|
||||
|
||||
Testing
|
||||
=======
|
||||
|
||||
A Grenade test will need to be developed that can:
|
||||
|
||||
* deploy nova with the fake virt driver
|
||||
|
||||
* populate nova_bm database with baremetal nodes and interfaces that map to
|
||||
local VMs
|
||||
|
||||
* create dummy images in glance for nova-bm's deploy kernel and ramdisk and
|
||||
create a flavor referencing them
|
||||
|
||||
* install ironic, build and publish new deploy kernel and ramdisk
|
||||
|
||||
* perform data migration
|
||||
|
||||
* reconfigure nova to use ironic, start ironic, and restart nova-compute
|
||||
|
||||
* run tempest
|
||||
|
||||
|
||||
Documentation Impact
|
||||
====================
|
||||
|
||||
Upgrade documentation must be written and maintained for one release cycle.
|
||||
|
||||
The proposed upgrade path is:
|
||||
|
||||
* build ironic deploy ramdisk and load it in glance
|
||||
|
||||
* create empty ironic database
|
||||
|
||||
* start maintenance period
|
||||
|
||||
* stop nova-compute services which are configured to use the
|
||||
nova.virt.baremetal driver
|
||||
|
||||
* update flavor metadata in Nova to reference new deploy kernel & ramdisk
|
||||
|
||||
* extract data from nova_bm and import to ironic, using the provided tool.
|
||||
This tool must accept separate database credentials for each database.
|
||||
|
||||
* start ironic services
|
||||
|
||||
* observe ironic log files to ensure take over completed w/o errors
|
||||
|
||||
* reconfigure nova-scheduler to use the ironic host manager, and, if desired,
|
||||
the exact match scheduler filters, then restart it
|
||||
|
||||
* reconfigure nova-compute service to use the nova.virt.ironic driver
|
||||
and the ClusteredComputeManager, then restart it
|
||||
|
||||
* observe nova-compute log files to ensure it has connected to ironic and is
|
||||
reporting available resources accurately
|
||||
|
||||
* end maintenance period
|
||||
|
||||
References
|
||||
==========
|
||||
|
||||
https://etherpad.openstack.org/p/juno-nova-deprecating-baremetal
|
||||
|
||||
https://etherpad.openstack.org/p/juno-nova-mid-cycle-meetup
|
||||
|
||||
https://review.openstack.org/#/q/topic:ironic_grenade,n,z
|
||||
|
||||
https://review.openstack.org/#/q/topic:ironic_tempest,n,z
|
Loading…
Reference in New Issue