Support for Boot from Volume¶
This specification proposes to add boot from volume capability to Sahara.
Problem description¶
Sahara engine provisions VMs using a Glance image directly. In most installations this means that the image is copied as a local file the Nova-compute host and used as a root disk for the VM.
Having the root disk as a plain file introduces some limitations:
Nova VM live migration (or Host evacuation) is not possible.
Root disk performance may significantly suffer if QCOW2 format is used.
Having root disk replaced with a bootable Volume backed by a distributed backend or local disk storage will solve the limitation listed above.
Proposed change¶
The ability to boot from volume still requires an image to serve as source. This means that Volume base provisioning will require 2 steps.
Create a bootable volume from a registered Sahara image.
Boot a VM with the block_device_mapping parameter pointing to the created volume.
Volume based provisioning requires the volume size to be set explicitly. This means that Sahara should take care about this parameter. The proposed way to set the bootable volume size is take the root disk size of the flavor being used for the VM.
If the user selects the Node Group to be provisioned from the volume, he should set the boot_from_volume flag to True.
The volume based provisioning is different from image based and implies the following change.
The image parameter from the instance template should be removed.
The instance Heat template should have a new section with the block device mapping.
block_device_mapping: [{
device_name: "vda",
volume_id : {
get_resource : bootable_volume },
delete_on_termination : "true" }
]
The resource group definition should have a volume added by the following template:
bootable_volume:
type: OS::Cinder::Volume
properties:
size: <size derived from the flavor>
image: <regular Sahara image>
Alternatives¶
Alternatively the user may be allowed to chose an existing volume to boot from. This however cannot guarantee that the provided volume is suitable for the cluster installation. Sahara also requires a username metadata to be able to log into VM. This metadata is only stored in images right now.
Data model impact¶
Node Group Template, Node Group and Templates relation objects should now have a boolean boot_from_volume field.
REST API impact¶
Convert and Boot from Volume flag should be added to all endpoints responsible for Node Group manipulation.
Other end user impact¶
None
Deployer impact¶
None
Developer impact¶
None
Sahara-image-elements impact¶
None
Sahara-dashboard / Horizon impact¶
An option should be added to the Node Group create and update forms.
Implementation¶
Assignee(s)¶
- Primary assignee:
Nikita Konovalov nkonovalov@mirantis.com
Work Items¶
Implement boot from volume support at the backend with the db migration and Heat templates update.
Add boot_from_volume flag support in python-saharaclient
Add boot_from_volume flag support in sahara-dashboard
Dependencies¶
None
Testing¶
Unit test coverage in sahara and python-saharaclient repositories.
Integration test coverage in sahara-tests framework.
Documentation Impact¶
REST API documents should be updated.
General user documentation should describe the behavior introduced by the boot_from_volume flag.
References¶
None