New to Stash? Please start here.
Snapshot
What is Snapshot
A Snapshot
is a representation of backup snapshot in a Kubernetes native way. Stash uses an Aggregated API Server to provide get
and list
capabilities for snapshots from the backend.
This enables you to view some useful information such as creationTimestamp
, snapshot id
, backed up path
etc of a snapshot. This also provides the capability to restore a specific snapshot.
Snapshot structure
Like other official Kuberentes resources, a Snapshot
has TypeMeta
, ObjectMeta
and Status
sections. However, unlike other Kubernetes resources, it does not have a Spec
section.
A sample Snapshot
object is shown below,
apiVersion: repositories.stash.appscode.com/v1alpha1
kind: Snapshot
metadata:
creationTimestamp: "2020-07-25T17:41:31Z"
labels:
hostname: app
repository: minio-repo
name: minio-repo-b54ee4a0
namespace: demo
uid: b54ee4a0e9c9084696dc976f125c4fd0e6b1a31abfd82cfc857b3bc9e559fa2f
status:
gid: 0
hostname: app
paths:
- /var/lib/html
repository: minio-repo
tree: 11527d99281bf3725d58cd637d1f3c19ab9d397d6cff1887a1cd1f9c8c5ebb80
uid: 0
username: ""
Here, we are going to describe the various sections of a Snapshot
object.
Snapshot Metadata
metadata.name
metadata.name
specifies the name of theSnapshot
object. It follows the following pattern,<Repository crd name>-<first 8 digits of snapshot id>
.metadata.uid
metadata.uid
specifies the complete id of the respective restic snapshot in the backend.metadata.creationTimestamp
metadata.creationTimestamp
represents the time when the snapshot was created.metadata.labels
A
Snapshot
object holdsrepository
andhostname
as a label inmetadata.labels
section. This helps a user to query the snapshots of a particular repository and/or a particular host.
Snapshot Status
Snapshot
object has the following fields in .status
section:
status.gid
status.gid
indicates the group identifier of the user who took this backup.status.hostname
status.hostname
indicates the host identifier whose data has been backed up in this snapshot. In order to know how this host identifier are generated, please visit here.status.paths
status.paths
indicates the paths that have been backed up in this snapshot.status.repository
status.repository
indicates the name of the Repository crd where this Snapshot came from.status.tree
status.tree
indicatestree
of the restic snapshot. For more details, please visit here.status.uid
status.uid
indicatesuid
of the user who took this backup. Forroot
user it is 0.status.username
status.username
indicates the name of the user who runs the backup process that took the backup.status.tags
status.tags
indicates the tags of the snapshot.
Working with Snapshot
In this section, we are going to show different types of operations you can perform on the Snapshots.
Listing Snapshots:
Stash lists Snapshots directly from the backend. This operation can take more time than the default request timeout of kubectl
. So, we are going to increase the request timeout through the --request-timeout
flag for get/list commands.
# List Snapshots of all Repositories in the current namespace
$ kubectl get snapshot --request-timeout=300s
# List Snapshots of all Repositories of all namespaces
$ kubectl get snapshot --all-namespaces --request-timeout=300s
# List Snapshots of all Repositories of a particular namespace
$ kubectl get snapshot -n demo --request-timeout=300s
# List Snapshots of a particular Repository
$ kubectl get snapshot -l repository=local-repo --request-timeout=300s
# List Snapshots from multiple Repositories
$ kubectl get snapshot -l 'repository in (local-repo,gcs-repo)' --request-timeout=300s
# List Snapshots of a particular host
$ kubectl get snapshot -l hostname=db --request-timeout=300s
# List Snapshots of a particular Repository and particular host
$ kubectl get snapshot -l repository=local-repo,hostname=db --request-timeout=300s
Viewing information of a particular Snapshot:
$ kubectl get snapshot [-n <namespace>] <snapshot name> -o yaml
# Example:
$ kubectl get snapshot -n demo local-repo-02b0ed42 -o yaml
Preconditions for Snapshot
Stash provides
Snapshots
listing facility with the help of an Aggregated API Server. Your cluster must support Aggregated API Server. Otherwise, you won’t be able to performget
orlist
operation onSnapshot
.If you are using local backend, the respective pod that took the backup must be in
Running
state. It is not necessary if you use cloud backends.