mirror nova host aggregates to placement API
A proposal to sync information about nova host aggregates into the placement service. Change-Id: Idbb36f04ee9b527b9e9e5bac11453ee04dc13b6f blueprint: placement-mirror-host-aggregates
This commit is contained in:
parent
0eecd7d8fa
commit
d570ef5f61
193
specs/rocky/approved/placement-mirror-host-aggregates.rst
Normal file
193
specs/rocky/approved/placement-mirror-host-aggregates.rst
Normal file
@ -0,0 +1,193 @@
|
|||||||
|
..
|
||||||
|
This work is licensed under a Creative Commons Attribution 3.0 Unported
|
||||||
|
License.
|
||||||
|
|
||||||
|
http://creativecommons.org/licenses/by/3.0/legalcode
|
||||||
|
|
||||||
|
========================================
|
||||||
|
Mirror nova host aggregates in placement
|
||||||
|
========================================
|
||||||
|
|
||||||
|
https://blueprints.launchpad.net/nova/+spec/placement-mirror-host-aggregates
|
||||||
|
|
||||||
|
This spec proposes to ensure that the placement service has a placement
|
||||||
|
aggregate record for each nova host aggregate.
|
||||||
|
|
||||||
|
Problem description
|
||||||
|
===================
|
||||||
|
|
||||||
|
Nova host aggregates are useful for grouping collections of ``nova-compute``
|
||||||
|
service workers together. Certain scheduler filters such as the
|
||||||
|
``AggregateMultiTenancyIsolationFilter`` `filter`_ look at metadata stored
|
||||||
|
against a nova host aggregate when evaluating whether a hypervisor host meets
|
||||||
|
certain filtering criteria.
|
||||||
|
|
||||||
|
.. _filter: https://github.com/openstack/nova/blob/stable/queens/nova/scheduler/filters/aggregate_multitenancy_isolation.py
|
||||||
|
|
||||||
|
In order to `replace`_ some of these filters with similar filter parameters to
|
||||||
|
the ``GET /allocation_candidates`` placement REST API, we first need to ensure
|
||||||
|
that nova host aggregates that tie collections of ``nova-compute`` service
|
||||||
|
workers together are represented in the placement API as **placement
|
||||||
|
aggregates** and associated with the **resource provider** records that
|
||||||
|
correspond to the compute node that the ``nova-compute`` service manages.
|
||||||
|
|
||||||
|
.. _replace: https://blueprints.launchpad.net/nova/+spec/alloc-candidates-member-of
|
||||||
|
|
||||||
|
Use Cases
|
||||||
|
---------
|
||||||
|
|
||||||
|
As a deployer I want to be able to leverage placement aggregates for my normal
|
||||||
|
host-aggregate groupings and thus I want nova to keep the changes I make
|
||||||
|
mirrored to placement for me.
|
||||||
|
|
||||||
|
Proposed change
|
||||||
|
===============
|
||||||
|
|
||||||
|
We propose to modify the implementation of the Compute API to call to the
|
||||||
|
placement service (via the scheduler reportclient) when a "host" member is
|
||||||
|
added or removed from a nova host aggregate.
|
||||||
|
|
||||||
|
Similarly, when a nova host aggregate is deleted, there will be a call to the
|
||||||
|
placement service to remove any resource provider to placement aggregate
|
||||||
|
associations for the nova host aggregate in question.
|
||||||
|
|
||||||
|
We will *not* be communicating with the placement service for either the
|
||||||
|
creation or update of a nova host aggregate, since the placement service does
|
||||||
|
not need to create a record for an aggregate until such time as a resource
|
||||||
|
provider is associated with it.
|
||||||
|
|
||||||
|
A new data migration command ``sync_placement_aggregates`` will be added to
|
||||||
|
synchronize existing nova host aggregate records using the ``nova-manage``
|
||||||
|
tool.
|
||||||
|
|
||||||
|
.. note::
|
||||||
|
|
||||||
|
If there is a failure in nova-api communicating with the placement service,
|
||||||
|
we will log a warning but not return an error to the end user. The
|
||||||
|
nova-manage command will allow reconciling aggregate information at a later
|
||||||
|
time.
|
||||||
|
|
||||||
|
Alternatives
|
||||||
|
------------
|
||||||
|
|
||||||
|
We could have adapted the ``nova-compute`` service workers to do this syncing
|
||||||
|
behaviour, but that would have required an upcall from the computes to the nova
|
||||||
|
api layer.
|
||||||
|
|
||||||
|
We could have had an external agent do the mirroring/syncing behaviour.
|
||||||
|
|
||||||
|
We could use a periodic task in the nova-scheduler service instead of a
|
||||||
|
nova-manage command.
|
||||||
|
|
||||||
|
Data model impact
|
||||||
|
-----------------
|
||||||
|
|
||||||
|
None.
|
||||||
|
|
||||||
|
REST API impact
|
||||||
|
---------------
|
||||||
|
|
||||||
|
None.
|
||||||
|
|
||||||
|
Security impact
|
||||||
|
---------------
|
||||||
|
|
||||||
|
None.
|
||||||
|
|
||||||
|
Notifications impact
|
||||||
|
--------------------
|
||||||
|
|
||||||
|
None.
|
||||||
|
|
||||||
|
Other end user impact
|
||||||
|
---------------------
|
||||||
|
|
||||||
|
None.
|
||||||
|
|
||||||
|
Performance Impact
|
||||||
|
------------------
|
||||||
|
|
||||||
|
There will be a slight negative impact to the ``add_host`` and ``remove_host``
|
||||||
|
operations for the Compute API since it will now need to communicate with the
|
||||||
|
placement service.
|
||||||
|
|
||||||
|
Other deployer impact
|
||||||
|
---------------------
|
||||||
|
|
||||||
|
The nova-api service's nova.conf file will now need to contain placement
|
||||||
|
service authentication credentials in order for the nova-api service to
|
||||||
|
communicate with placement. We will make the lack of placement auth credentials
|
||||||
|
a warning in Rocky and required in Stein.
|
||||||
|
|
||||||
|
In addition, the operator will want to run the ``nova-manage
|
||||||
|
sync_placement_aggregates`` command periodically to ensure nova and placement
|
||||||
|
have reconciled views of aggregate information.
|
||||||
|
|
||||||
|
Developer impact
|
||||||
|
----------------
|
||||||
|
|
||||||
|
None.
|
||||||
|
|
||||||
|
Upgrade impact
|
||||||
|
--------------
|
||||||
|
|
||||||
|
The nova-api service will now depend on being configured to authenticate with
|
||||||
|
the placement service, similar to the nova-compute and nova-conductor services.
|
||||||
|
We will make this a soft failure (warning in logs) in Rocky and a hard failure
|
||||||
|
in Stein.
|
||||||
|
|
||||||
|
Implementation
|
||||||
|
==============
|
||||||
|
|
||||||
|
Assignee(s)
|
||||||
|
-----------
|
||||||
|
|
||||||
|
Primary assignee:
|
||||||
|
jaypipes
|
||||||
|
|
||||||
|
Work Items
|
||||||
|
----------
|
||||||
|
|
||||||
|
* Add initialization check to nova-api to auth with placement. Make this a
|
||||||
|
non-hard failure for Rocky and a note about failing hard in Stein
|
||||||
|
* Add methods to the scheduler reportclient for adding an aggregate association
|
||||||
|
to a resource provider **by name**, since the os-aggregates Compute API uses
|
||||||
|
a non-UUID host name parameter for identifying the nova-compute service
|
||||||
|
worker
|
||||||
|
* Modify the ``nova.compute.api.AggregateAPI.add_host_to_aggregate()`` and
|
||||||
|
``remove_host_from_aggregate()`` methods to call out to the reportclient to
|
||||||
|
add or remove a resource provider to aggregate association by provider name
|
||||||
|
* Create new ``sync_placement_aggregates`` command in the ``nova-manage`` tool
|
||||||
|
|
||||||
|
Dependencies
|
||||||
|
============
|
||||||
|
|
||||||
|
None.
|
||||||
|
|
||||||
|
Testing
|
||||||
|
=======
|
||||||
|
|
||||||
|
Normal testing as well as full functional tests of the new ``nova-manage
|
||||||
|
sync_placement_aggregates`` command.
|
||||||
|
|
||||||
|
Documentation Impact
|
||||||
|
====================
|
||||||
|
|
||||||
|
A release note describing the mirroring process, requirement of the nova-api's
|
||||||
|
nova.conf to contain placement credentials and inclusion of the
|
||||||
|
``sync_placement_aggregates`` command in ``nova-manage`` should be done. In
|
||||||
|
addition, the `placement API reference`_ should be updated to describe how the
|
||||||
|
nova host aggregates are mirrored to placement.
|
||||||
|
|
||||||
|
.. _placement API reference: https://developer.openstack.org/api-ref/placement/#resource-provider-aggregates
|
||||||
|
|
||||||
|
References
|
||||||
|
==========
|
||||||
|
|
||||||
|
* Enables these blueprints:
|
||||||
|
|
||||||
|
* `Placement aggregate allocation ratios`_
|
||||||
|
* `Placement filter requests`_
|
||||||
|
|
||||||
|
.. _Placement aggregate allocation ratios: https://blueprints.launchpad.net/nova/+spec/placement-aggregate-allocation-ratios
|
||||||
|
.. _Placement filter requests: https://blueprints.launchpad.net/nova/+spec/placement-req-filter
|
Loading…
Reference in New Issue
Block a user