Merge "Add spec for downloading images via RBD"
This commit is contained in:
201
specs/victoria/approved/nova-image-download-via-rbd.rst
Normal file
201
specs/victoria/approved/nova-image-download-via-rbd.rst
Normal file
@@ -0,0 +1,201 @@
|
||||
..
|
||||
This work is licensed under a Creative Commons Attribution 3.0 Unported
|
||||
License.
|
||||
|
||||
http://creativecommons.org/licenses/by/3.0/legalcode
|
||||
|
||||
=====================================================
|
||||
Allow Nova to download Glance images directly via RBD
|
||||
=====================================================
|
||||
|
||||
https://blueprints.launchpad.net/nova/+spec/nova-image-download-via-rbd
|
||||
|
||||
|
||||
Problem description
|
||||
===================
|
||||
|
||||
When using compute-local storage with qcow2 based VM root disks, Glance images
|
||||
are downloaded into the libvirt image store by way of the Glance HTTP API.
|
||||
For images in the 10s-100s of GB, this download can be _very_ slow.
|
||||
If the compute node has access to Ceph, it can instead perform an 'rbd export'
|
||||
on the Glance image, bypassing the Glance API entirely and directly download
|
||||
the image from Ceph. This direct download can result in a drastic reduction
|
||||
in download time, from tens of minutes to tens of seconds.
|
||||
|
||||
Use Cases
|
||||
---------
|
||||
|
||||
As a user with a Ceph-backed image storage, I want to configure some compute
|
||||
hosts for qcow2 images local to the compute host but quickly get the images
|
||||
from Ceph rather than slow downloads from the Glance API.
|
||||
|
||||
Proposed change
|
||||
===============
|
||||
|
||||
A special download handler will be registered for Glance images when the 'rbd'
|
||||
value is present in ``allowed_direct_url_schemes`` option.
|
||||
|
||||
This download handler will be called only when a VM is scheduled on a node and
|
||||
the required Glance image is not already present in the local libvirt image
|
||||
cache. It will execute the OS native 'rbd export' command, using ``privsep``,
|
||||
in order to perform the download operation instead of using the Glance HTTP
|
||||
API.
|
||||
|
||||
The mechanism for per-scheme download handlers was previously available
|
||||
as a plugin point, which is now deprecated, along with the
|
||||
allowed_direct_url_schemes config option. This effort will close out on that
|
||||
deprecation by moving the per-scheme support into the nova.images.glance module
|
||||
itself, undeprecating the allowed_direct_url_schemes config, and removing the
|
||||
old nova.images.download plug point.
|
||||
|
||||
The glance module also never used to perform image signature verification when
|
||||
the per-scheme module was used. Since we are moving this into core code,
|
||||
we will also fix this so that per-scheme images are verified like all the rest.
|
||||
|
||||
Alternatives
|
||||
------------
|
||||
|
||||
VM root disks can be run directly within Ceph as creation of these VM root
|
||||
disks are fast as they are COW clones for the Glance image, also in Ceph.
|
||||
However, running the VM root disks from Ceph introduces additional latency to
|
||||
the running VM and needlessly wastes network bandwidth and Ceph IOPS. This
|
||||
specific functionality was added in Mitaka but is aimed at a different use case
|
||||
where the VM root disks remain in Ceph and are not run as qcow2 local disks.
|
||||
|
||||
https://specs.openstack.org/openstack/nova-specs/specs/mitaka/implemented/rbd-instance-snapshots.html
|
||||
|
||||
The other alternative is to continue with existing approach only.
|
||||
|
||||
Data model impact
|
||||
-----------------
|
||||
|
||||
None
|
||||
|
||||
REST API impact
|
||||
---------------
|
||||
|
||||
None
|
||||
|
||||
Security impact
|
||||
---------------
|
||||
|
||||
None
|
||||
|
||||
Notifications impact
|
||||
--------------------
|
||||
|
||||
None
|
||||
|
||||
Other end user impact
|
||||
---------------------
|
||||
|
||||
None
|
||||
|
||||
Performance Impact
|
||||
------------------
|
||||
|
||||
None
|
||||
|
||||
Other deployer impact
|
||||
---------------------
|
||||
|
||||
As proposed, there are no new configuration items, simply configuration of
|
||||
existing items.
|
||||
|
||||
The following configuration options are required to ensure qcow2 local images
|
||||
are downloaded from Ceph and cached on the local compute host:
|
||||
|
||||
On the Glance API node in glance-api.conf:
|
||||
|
||||
``DEFAULT.show_image_direct_url=true``
|
||||
|
||||
On the Nova compute node in nova.conf:
|
||||
|
||||
``DEFAULT.force_raw_images=false``
|
||||
|
||||
``libvirt.images_type=qcow2``
|
||||
|
||||
``libvirt.images_rbd_ceph_conf=<ceph_config_file>``
|
||||
|
||||
``libvirt.rbd_user=<ceph_user_name>``
|
||||
|
||||
``glance.allowed_direct_url_schemes = rbd``
|
||||
|
||||
Looking ahead, it may be desired to create additional entries in the libvirt
|
||||
section of ``nova.conf`` for this feature as the current implementation assumes
|
||||
that the ``rbd_user`` will have access to the Glance images. This may not be
|
||||
the case depending upon how the Ceph pool permissions are configured.
|
||||
|
||||
Developer impact
|
||||
----------------
|
||||
|
||||
The ``allowed_direct_url_schemes`` option was deprecated in Queens. Proposed
|
||||
implementation of this feature would halt the deprecation of this option and
|
||||
we would need to "un-deprecate" it.
|
||||
|
||||
Upgrade impact
|
||||
--------------
|
||||
|
||||
None
|
||||
|
||||
Implementation
|
||||
==============
|
||||
|
||||
Assignee(s)
|
||||
-----------
|
||||
|
||||
Primary assignee:
|
||||
Jiri Suchomel <jiri.suchomel@suse.com>
|
||||
|
||||
Feature Liaison
|
||||
---------------
|
||||
|
||||
Feature liaison:
|
||||
Dan Smith (danms)
|
||||
|
||||
Work Items
|
||||
----------
|
||||
|
||||
* Refactor existing in-house out-of-tree implementation and integrate it fully
|
||||
into current codebase
|
||||
* Write tests for implementation
|
||||
* Update the admin guide with the description of how to set up the config if
|
||||
the new feature is required.
|
||||
|
||||
Dependencies
|
||||
============
|
||||
|
||||
None
|
||||
|
||||
Testing
|
||||
=======
|
||||
|
||||
* Unit tests
|
||||
* Add an experimental on-demand queue job which uses Ceph with local qcow2
|
||||
images and 'direct from rbd' feature enabled
|
||||
|
||||
Documentation Impact
|
||||
====================
|
||||
|
||||
The admin guide should be updated to call out this use case and how it differs
|
||||
from the Ceph-native snapshot feature. A good place to document this may be:
|
||||
|
||||
https://docs.openstack.org/nova/latest/admin/configuration/hypervisor-kvm.html#configure-compute-backing-storage
|
||||
|
||||
References
|
||||
==========
|
||||
|
||||
http://lists.openstack.org/pipermail/openstack-dev/2018-May/131002.html
|
||||
|
||||
http://lists.openstack.org/pipermail/openstack-operators/2018-June/015384.html
|
||||
|
||||
History
|
||||
=======
|
||||
|
||||
.. list-table:: Revisions
|
||||
:header-rows: 1
|
||||
|
||||
* - Release Name
|
||||
- Description
|
||||
* - Victoria
|
||||
- Introduced
|
||||
Reference in New Issue
Block a user