[openstack-dev] Proposal for instance-level snapshots in Nova
jbernard at tuxion.com
Mon Jan 6 23:50:20 UTC 2014
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 , blueprint is here .
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.
More information about the OpenStack-dev