Skip to main content

Stash

Stash by AppsCode is a Kubernetes-native backup operator. It supports S3-compatible storage via its S3 backend type.

Create a Repository

repository.yaml
apiVersion: stash.appscode.com/v1alpha1
kind: Repository
metadata:
name: filebase-repo
namespace: default
spec:
backend:
s3:
endpoint: https://s3.filebase.io
bucket: my-stash-bucket
region: auto
prefix: my-app/
storageSecretName: filebase-secret

Storage credentials Secret

secret.yaml
apiVersion: v1
kind: Secret
metadata:
name: filebase-secret
namespace: default
type: Opaque
stringData:
AWS_ACCESS_KEY_ID: YOUR_FILEBASE_KEY
AWS_SECRET_ACCESS_KEY: YOUR_FILEBASE_SECRET
RESTIC_PASSWORD: a-strong-encryption-password

(Stash uses restic under the hood, so it needs RESTIC_PASSWORD for client-side encryption.)

Define a BackupConfiguration

backup-config.yaml
apiVersion: stash.appscode.com/v1beta1
kind: BackupConfiguration
metadata:
name: my-app-backup
namespace: default
spec:
schedule: "0 2 * * *"
repository:
name: filebase-repo
target:
ref:
apiVersion: apps/v1
kind: Deployment
name: my-app
volumeMounts:
- mountPath: /data
name: data-volume
retentionPolicy:
name: keep-last-30
keepLast: 30
prunePolicy: AfterEachBackup

Apply:

kubectl apply -f secret.yaml
kubectl apply -f repository.yaml
kubectl apply -f backup-config.yaml

Restore

restore.yaml
apiVersion: stash.appscode.com/v1beta1
kind: RestoreSession
metadata:
name: my-app-restore
namespace: default
spec:
repository:
name: filebase-repo
target:
ref:
apiVersion: apps/v1
kind: Deployment
name: my-app
volumeMounts:
- mountPath: /data
name: data-volume

What's next