New to Stash? Please start here.
A Repository is a Kubernetes CustomResourceDefinition(CRD) which represents backend information in a Kubernetes native way.
You have to create a Repository object for each backup target. Since v1beta1 api, a Repository object has 1-1 mapping with a target. Thus, only one target can be backed up into one Repository.
Like any official Kubernetes resource, a Repostiory object has TypeMeta, ObjectMeta, Spec and Status sections.
A sample Repository object that uses Google Cloud Storage(GCS) bucket as backend is shown below:
apiVersion: stash.appscode.com/v1alpha1
kind: Repository
metadata:
name: gcs-demo-repo
namespace: demo
spec:
backend:
gcs:
bucket: stash-demo-backup
prefix: demo
storageSecretName: gcs-secret
wipeOut: false
status:
firstBackupTime: "2019-04-15T06:08:16Z"
integrity: true
lastBackupTime: "2019-04-15T06:14:15Z"
size: 2.567 KiB
snapshotCount: 5
snapshotsRemovedOnLastCleanup: 1
Here, we are going to describe the various sections of the Repository crd.
SpecRepository CRD has the following fields in the .spec section.
spec.backend
spec.backend specifies the storage location where the backed up snapshots will be stored. To learn how to configure Repository crd for various backends, please visit here.
backend prefix/subPath
prefix of any backend denotes the directory inside the backend where the backed up snapshots will be stored. In case of Local backend, subPath is used for this purpose.
spec.wipeOut
As the name implies, spec.wipeOut field indicates whether Stash operator should delete backed up files from the backend when Repository crd is deleted. The default value of this field is false which tells Stash to not delete backed up data when a user deletes a Repository crd.
StatusStash operator updates .status of a Repository crd every time a backup operation is completed. Repository crd shows the following statistics in status section:
status.firstBackupTime
status.firstBackupTime indicates the timestamp when the first backup was taken.
status.lastBackupTime
status.lastBackupTime indicates the timestamp when the latest backup was taken.
status.integrity
Stash checks the integrity of backed up files after each backup. status.integrity shows the result of the integrity check.
status.size
status.size shows the total size of a repository after last backup.
status.snapshotCount
status.SnapshotCount shows the number of snapshots stored in the Repository.
status.snapshotsRemovedOnLastCleanup
status.snapshotsRemovedOnLastCleanup shows the number of old snapshots that has been cleaned up according to retention policy on last backup session.
Stash allows users to delete only Repository crd or Repository crd along with respective backed up data. Here, we are going to show how to perform these operations.
Delete only Repository keeping backed up data :
You can delete only Repository crd by,
$ kubectl delete repository <repository-name>
# Example
$ kubectl delete repository gcs-demo-repo
repository "gcs-demo-repo" deleted
This will delete only Repository crd. It won’t delete any backed up data from the backend. You can recreate the Repository object later to reuse existing data as long as your restic password in unchanged.
If you delete
Repositorycrd while respective stash sidecar still exists on the workload, it will fail to take further backup.
Delete Repository along with backed up data :
In order to prevent the users from accidentally deleting backed up data, Stash uses a special wipeOut flag in spec section of Repository crd. By default, this flag is set to wipeOut: false. If you want to delete respective backed up data from backend while deleting Repository crd, you must set this flag to wipeOut: true.
Currently, Stash does not support wiping out backed up data for local backend. If you want to cleanup backed up data from local backend, you must do it manually.
Here, is an example of deleting backed up data from GCS backend,
First, set wipeOut: true by patching Repository crd.
$ kubectl patch repository gcs-demo-repo --type="merge" --patch='{"spec": {"wipeOut": true}}'
repository "gcs-demo-repo" patched
Finally, delete Repository object. It will delete backed up data from the backend.
$ kubectl delete repository gcs-demo-repo
repository "gcs-demo-repo" deleted
You can browse your backend storage bucket to verify that the backed up data has been wiped out.