[openstack-dev] Proposal for instance-level snapshots in Nova

Jon Bernard jbernard at tuxion.com
Mon Jan 6 23:50:20 UTC 2014

Hello all,

I would like to propose instance-level snapshots as a feature for
inclusion in Nova.  An initial draft of the more official proposal is
here [1], blueprint is here [2].

In a nutshell, this feature will take the existing create-image
functionality a few steps further by providing the ability to take
a snapshot of a running instance that includes all of its attached
volumes.  A coordinated snapshot of multiple volumes for backup
purposes.  The snapshot operation should occur while the instance is in
a paused and quiesced state so that each volume snapshot is both
consistent within itself and with respect to its sibling snapshots.

I still have some open questions on a few topics:

* API changes, two different approaches come to mind:

  1. Nova already has a command `createImage` for creating an image of an
     existing instance.  This command could be extended to take an
     additional parameter `all-volumes` that signals the underlying code
     to capture all attached volumes in addition to the root volume.  The
     semantic here is important, `createImage` is used to create
     a template image stored in Glance for later reuse.  If the primary
     intent of this new feature is for backup only, then it may not be
     wise to overlap the two operations in this way.  On the other hand,
     this approach would introduce the least amount of change to the
     existing API, requiring only modification of an existing command
     instead of the addition of an entirely new one.

  2. If the feature's primary use is for backup purposes, then a new API
     call may be a better approach, and leave `createImage` untouched.
     This new call could be called `createBackup` and take as a parameter
     the name of the instance.  Although it introduces a new member to the
     API reference, it would allow this feature to evolve without
     introducing regressions in any existing calls.  These two calls could
     share code at some point in the future.

* Existing libvirt support:

    To initially support consistent-across-multiple-volumes snapshots,
    we must be able to ask libvirt for a snapshot of an already paused
    guest.  I don't believe such a call is currently supported, so
    changes to libvirt may be a prerequisite for this feature.

Any contribution, comments, and pieces of advice are much appreciated.

[1]: https://wiki.openstack.org/wiki/Nova/InstanceLevelSnapshots
[2]: https://blueprints.launchpad.net/nova/+spec/instance-level-snapshots


More information about the OpenStack-dev mailing list