<div dir="ltr"><br><div class="gmail_extra"><br><br><div class="gmail_quote">On Mon, Jan 6, 2014 at 3:50 PM, Jon Bernard <span dir="ltr"><<a href="mailto:jbernard@tuxion.com" target="_blank">jbernard@tuxion.com</a>></span> wrote:<br>
<blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex">Hello all,<br>
<br>
I would like to propose instance-level snapshots as a feature for<br>
inclusion in Nova.  An initial draft of the more official proposal is<br>
here [1], blueprint is here [2].<br>
<br>
In a nutshell, this feature will take the existing create-image<br>
functionality a few steps further by providing the ability to take<br>
a snapshot of a running instance that includes all of its attached<br>
volumes.  A coordinated snapshot of multiple volumes for backup<br>
purposes.  The snapshot operation should occur while the instance is in<br>
a paused and quiesced state so that each volume snapshot is both<br>
consistent within itself and with respect to its sibling snapshots.<br>
<br>
I still have some open questions on a few topics:<br>
<br>
* API changes, two different approaches come to mind:<br>
<br>
  1. Nova already has a command `createImage` for creating an image of an<br>
     existing instance.  This command could be extended to take an<br>
     additional parameter `all-volumes` that signals the underlying code<br>
     to capture all attached volumes in addition to the root volume.  The<br>
     semantic here is important, `createImage` is used to create<br>
     a template image stored in Glance for later reuse.  If the primary<br>
     intent of this new feature is for backup only, then it may not be<br>
     wise to overlap the two operations in this way.  On the other hand,<br>
     this approach would introduce the least amount of change to the<br>
     existing API, requiring only modification of an existing command<br>
     instead of the addition of an entirely new one.<br>
<br>
  2. If the feature's primary use is for backup purposes, then a new API<br>
     call may be a better approach, and leave `createImage` untouched.<br>
     This new call could be called `createBackup` and take as a parameter<br>
     the name of the instance.  Although it introduces a new member to the<br>
     API reference, it would allow this feature to evolve without<br>
     introducing regressions in any existing calls.  These two calls could<br>
     share code at some point in the future.<br>
<br>
* Existing libvirt support:<br>
<br>
    To initially support consistent-across-multiple-volumes snapshots,<br>
    we must be able to ask libvirt for a snapshot of an already paused<br>
    guest.  I don't believe such a call is currently supported, so<br>
    changes to libvirt may be a prerequisite for this feature.<br>
<br>
Any contribution, comments, and pieces of advice are much appreciated.<br>
<br>
[1]: <a href="https://wiki.openstack.org/wiki/Nova/InstanceLevelSnapshots" target="_blank">https://wiki.openstack.org/wiki/Nova/InstanceLevelSnapshots</a><br>
[2]: <a href="https://blueprints.launchpad.net/nova/+spec/instance-level-snapshots" target="_blank">https://blueprints.launchpad.net/nova/+spec/instance-level-snapshots</a></blockquote><div><br></div><div>Hi Jon,</div><div>
<br></div><div>In your specification in the Snapshot Storage section you say "<span style="color:rgb(51,51,51);font-family:'Arial Unicode MS',Arial,sans-serif;font-size:14px;line-height:20px">it might be nice to combine all of the snapshot images into a single OVF file that contains all volumes attached to the instance at the time of snapshot." I'd love it if, by the time you get to the point of implementing this storage part, we have an option available to you in Glance for storing something akin to an Instance template. An instance template would be an entity stored in Glance with references to each volume or image that was uploaded as part of the snapshot. As an example, it could be something like</span></div>
<div><br></div><div><font color="#333333" face="Arial Unicode MS, Arial, sans-serif"><span style="font-size:14px;line-height:20px">"instance_template": {</span></font></div><div><font color="#333333" face="Arial Unicode MS, Arial, sans-serif"><span style="font-size:14px;line-height:20px">   "/dev/sda": "/v2/images/some-imageid",</span></font></div>
<div><font color="#333333" face="Arial Unicode MS, Arial, sans-serif"><span style="font-size:14px;line-height:20px">   "/dev/sdb": "<some url for a cinder volume-like entity>"</span></font></div>
<div><font color="#333333" face="Arial Unicode MS, Arial, sans-serif"><span style="font-size:14px;line-height:20px">}</span></font></div><div><font color="#333333" face="Arial Unicode MS, Arial, sans-serif"><span style="font-size:14px;line-height:20px"><br>
</span></font></div><div><font color="#333333" face="Arial Unicode MS, Arial, sans-serif"><span style="font-size:14px;line-height:20px">Essentially, this kind of storage would bring the OVF metadata up into Glance rather than burying it down in an image byte stream where it is harder to search or access.</span></font></div>
<div><font color="#333333" face="Arial Unicode MS, Arial, sans-serif"><span style="font-size:14px;line-height:20px"><br></span></font></div><div><font color="#333333" face="Arial Unicode MS, Arial, sans-serif"><span style="font-size:14px;line-height:20px">This is an idea that has been discussed several times before, generally favorably, and if we move ahead with instance-level snapshots in Nova I'd love to move quickly to support it in Glance. Part of the reason for the delay of this feature was my worry that if Glance jumps out ahead, we'll end up with some instance template format that Nova doesn't really want, so this opportunity for collaboration on use cases would be fantastic.</span></font></div>
<div><font color="#333333" face="Arial Unicode MS, Arial, sans-serif"><span style="font-size:14px;line-height:20px"><br></span></font></div><div><font color="#333333" face="Arial Unicode MS, Arial, sans-serif"><span style="font-size:14px;line-height:20px">If after a bit more discussion in this thread, folks think these templates in Glance would be a good idea, we can try to draw up a proposal for how to implement the first cut of this feature in Glance.</span></font></div>
<div><font color="#333333" face="Arial Unicode MS, Arial, sans-serif"><span style="font-size:14px;line-height:20px"><br></span></font></div><div><font color="#333333" face="Arial Unicode MS, Arial, sans-serif"><span style="font-size:14px;line-height:20px">Thanks</span></font></div>
<div> </div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex"><br>
<span class=""><font color="#888888"><br>
--<br>
Jon<br>
<br>
_______________________________________________<br>
OpenStack-dev mailing list<br>
<a href="mailto:OpenStack-dev@lists.openstack.org">OpenStack-dev@lists.openstack.org</a><br>
<a href="http://lists.openstack.org/cgi-bin/mailman/listinfo/openstack-dev" target="_blank">http://lists.openstack.org/cgi-bin/mailman/listinfo/openstack-dev</a><br>
</font></span></blockquote></div><br></div></div>