- Steps and RBD CLI commands for RBD snapshot and clone operations
This document outlines the command used to create RBD snapshot, delete RBD snapshot, Restore RBD snapshot and Create new RBD image from existing RBD image.
Refer snapshot for more information related to Volume cloning in kubernetes.
- Check if the parent image has more snapshots than the configured value, if it has more snapshot, add tasks to flatten all the temporary cloned images and return ResourceExhausted error message
- Create a temporary snapshot from the parent image
- Clone a new image from a temporary snapshot with options
--rbd-default-clone-format 2 --image-feature layering,deep-flatten
- Delete temporary snapshot created
- Check the image chain depth, if the
softlimit
is reached add a task to flatten the cloned image and return success. If the depth is reachedhardlimit
add a task flatten the cloned image and return snapshot status ready asfalse
rbd snap ls <RBD image for src k8s volume> --all
// If the parent has more snapshots than the configured `maxsnapshotsonimage`
// add background tasks to flatten the temporary cloned images (temporary cloned
// image names will be same as snapshot names)
ceph rbd task add flatten <RBD image for temporary snap images>
rbd snap create <RBD image for src k8s volume>@<random snap name>
rbd clone --rbd-default-clone-format 2 --image-feature
layering,deep-flatten <RBD image for src k8s volume>@<random snap>
<RBD image for temporary snap image>
rbd snap rm <RBD image for src k8s volume>@<random snap name>
rbd snap create <RBD image for temporary snap image>@<random snap name>
// check the depth, if the depth is greater than configured hardlimit add a
// task to flatten the cloned image, return snapshot status ready as `false`,
// if the depth is greater than softlimit add a task to flatten the image
// and return success
ceph rbd task add flatten <RBD image for temporary snap image>
- Check the depth(n) of the cloned image if
n>=(hardlimit -2)
, add task to flatten the image and return ABORT (to avoid image leak) - Clone a new image from the snapshot with user-provided options
// check the depth, if the depth is greater than configured (hardlimit)
// Add a task to value flatten the cloned image
ceph rbd task add flatten <RBD image for temporary snap image>
rbd clone --rbd-default-clone-format 2 --image-feature <k8s dst vol config>
<RBD image for temporary snap image>@<random snap name>
<RBD image for k8s dst vol>
// check the depth,if the depth is greater than configured hardlimit add a task
// to flatten the cloned image return ABORT error, if the depth is greater than
// softlimit add a task to flatten the image and return success
ceph rbd task add flatten <RBD image for k8s dst vol>
- Delete temporary snapshot on temporary cloned image
- Move the temporary cloned image to trash
- Add task to remove the image from trash
rbd snap create <RBD image for temporary snap image>@<random snap name>
rbd trash mv <RBD image for temporary snap image>
ceph rbd task trash remove <RBD image for temporary snap image ID>
With earlier implementation to delete the image we used to add a task to remove the image. With new changes this cannot be done as the image may contains snapshots or linking, so we will be following below steps to delete an image(this will be applicable for both normal image and cloned image)
- Move the rbd image to trash
- Add task to remove the image from trash
1) rbd trash mv <image>
2) ceph rbd task trash remove <image>
Refer volume-cloning for more information related to Volume cloning in kubernetes.
- Check the depth(n) of the cloned image if
n>=((hard limit) -2)
, add task to flatten the image and return ABORT (to avoid image leak) - Create snapshot of rbd image
- Clone the snapshot (temp clone)
- Delete the snapshot
- Snapshot the temp clone
- Clone the snapshot (final clone)
- Delete the snapshot
// check the image depth of the parent image if flatten required add a
// task to flatten image and return ABORT to avoid leak(same hardlimit and
// softlimit check will be done)
ceph rbd task add flatten <RBD image for src k8s volume>
rbd snap create <RBD image for src k8s volume>@<random snap name>
rbd clone --rbd-default-clone-format 2 --image-feature
layering,deep-flatten <RBD image for src k8s volume>@<random snap>
<RBD image for temporary snap image>
rbd snap rm <RBD image for src k8s volume>@<random snap name>
rbd snap create <RBD image for temporary snap image>@<random snap name>
rbd clone --rbd-default-clone-format 2 --image-feature <k8s dst vol config>
<RBD image for temporary snap image>@<random snap name>
<RBD image for k8s dst vol>
rbd snap rm <RBD image for src k8s volume>@<random snap name>