Backups in Longhorn are objects in an off-cluster backupstore, and the endpoint to access the backupstore is the backup target. For more information, see
To programmatically create backups, you can use the generic Kubernetes CSI VolumeSnapshot mechanism. To learn more about the CSI VolumeSnapshot mechanism, click here.
To create a CSI VolumeSnapshot associated with a Longhorn backup, you first need to create a VolumeSnapshotClass
object with the parameter type
set to bak
as follow:
For more information about VolumeSnapshotClass
, see the kubernetes documentation for VolumeSnapshotClasses.
After that, create a Kubernetes VolumeSnapshot
object with volumeSnapshotClassName
points to the name of the VolumeSnapshotClass
(longhorn-backup-vsc
) and the source
points to the PVC of the Longhorn volume for which a backup should be created.
Result: A backup is created. The VolumeSnapshot
object creation leads to the creation of a VolumeSnapshotContent
Kubernetes object. The VolumeSnapshotContent
refers to a Longhorn backup in its VolumeSnapshotContent.snapshotHandle
field with the name bak://backup-volume/backup-name
.
To see the backup, click Backup in the top navigation bar and navigate to the backup-volume mentioned in the VolumeSnapshotContent.snapshotHandle
.
How the CSI Mechanism Works in this Scenario
When the VolumeSnapshot object is created with kubectl, the field is used to identify a Longhorn snapshot and the associated VolumeSnapshotContent
object.
This creates a new Longhorn snapshot named snapshot-uuid
.
Then a backup of that snapshot is initiated, and the CSI request returns.
Afterwards a VolumeSnapshotContent
object named snapcontent-uuid
is created.
The CSI snapshotter sidecar periodically queries the Longhorn CSI plugin to evaluate the backup status.
Once the backup is completed, the VolumeSnapshotContent.readyToUse
flag is set to true.
Create a PersistentVolumeClaim
object where the dataSource
field points to an existing VolumeSnapshot
object that is associated with Longhorn backup.
The csi-provisioner will pick this up and instruct the Longhorn CSI driver to provision a new volume with the data from the associated backup.
Note that the spec.resources.requests.storage
value must be the same as the size of VolumeSnapshot
object.
Restore a Longhorn Backup that Has No Associated VolumeSnapshot
You can use the CSI mechanism to restore Longhorn backups that have not been created via the CSI mechanism. To restore Longhorn backups that have not been created via the CSI mechanism, you have to first manually create a VolumeSnapshot
and VolumeSnapshotContent
object for the backup.
Create a object with the snapshotHandle
field set to bak://backup-volume/backup-name
.
The backup-volume
and backup-name
values can be retrieved from the Backup page in the Longhorn UI.
Create the associated VolumeSnapshot
object with the name
field set to test-snapshot-existing-backup
, where the source
field refers to a VolumeSnapshotContent
object via the volumeSnapshotContentName
field.
This differs from the creation of a backup, in which case the source
field refers to a PerstistentVolumeClaim
via the persistentVolumeClaimName
field.
Only one type of reference can be set for a VolumeSnapshot
object.
Now you can create a PerstistantVolumeClaim
object that refers to the newly created VolumeSnapshot
object. For an example see above.