LINSTOR Kubernetes Backup Options

What backup solutions work with LINSTOR and Kubernetes?

What backup systems work with LINSTOR®? 

Kasten

Reported to work by customer. Not yet tested by LINIBT.

Kasten Documentation

Valero

Tested- Does not work.

Stash

Not yet tested.

Trillo

Works as described here: Installing Triliovault

In order to backup PVs, it requires snapshot support in the CSI driver that provisioned the volume.

Added Helm repos for Trilio:

helm repo add triliovault-operator http://charts.k8strilio.net/trilio-stable/k8s-triliovault-operator
helm repo add triliovault http://charts.k8strilio.net/trilio-stable/k8s-triliovault
helm repo update
helm install triliovault-operator triliovault-operator/k8s-triliovault-operator --version 0.2.0
cat << EOF > triliovault-manager.yaml
apiVersion: triliovault.trilio.io/v1alpha1
kind: TrilioVaultManager
metadata:
 labels:
   triliovault: triliovault
 name: triliovault-manager
 namespace: default
spec:
 trilioVaultAppVersion: 0.2.4
 helmVersion:
   version: v3
 applicationScope: Cluster
 #restoreNamespaces: ["kube-system", "default", "restore-ns"]
 resources:
   requests:
     memory: 400Mi
EOF
kubectl create -f triliovault-manager.yaml

I added snapshot support to Kubernetes 1.18:

git clone https://github.com/kubernetes-csi/external-snapshotter && cd external-snapshotter/
kubectl create -f config/crd
kubectl create -f deploy/kubernetes/snapshot-controller

Created a basic Ubuntu pod with a PV carved from LINSTOR (using labels `app=ubuntu` since Trilio uses labels to know what to backup). Created a file with my name in it:

cat << EOF > ubuntu-pod-and-vol.yaml
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
 name: ubuntu-pvc-0
 labels:
   app: ubuntu
spec:
 storageClassName: linstor-csi-lvm-thin-r1
 accessModes:
   - ReadWriteOnce
 resources:
   requests:
     storage: 3Gi
---
apiVersion: v1
kind: Pod
metadata:
 name: ubuntu-0
 labels:
   app: ubuntu
spec:
 volumes:
   - name: ubuntu-pvc-0
     persistentVolumeClaim:
       claimName: ubuntu-pvc-0
 containers:
   - name: ubuntu-0
     image: ubuntu
     volumeMounts:
       - mountPath: "/data"
         name: ubuntu-pvc-0
     command: ["bash"]
     args: ["-c", "while true; do sleep 10000s; done"]
EOF
kubectl apply -f ubuntu-pod-and-vol.yaml
kubectl exec -it ubuntu-0 -- bash -c “echo Matt > /data/name.txt”

Created an S3 bucket in AWS, no public access, using access keys I setup on my account. Then, created backup target and backup plan for Trilio, and took a backup:

cat << EOF > trilio-backup-plan.yaml
apiVersion: triliovault.trilio.io/v1alpha1
kind: BackupPlan
metadata:
 name: ubuntu-application
spec:
 backupConfig:
   target:
     name: ubuntu-target
   schedulePolicy:
     fullBackupCron:
       schedule: "* 0 1 * *"
     incrementalCron:
       schedule: "* 0 * * *"
 backupNamespace: default
 backupPlanComponents:
   custom:
     matchLabels:
        app: ubuntu
EOF
kubectl apply -f trilio-bucket.yaml
kubectl apply -f trilio-backup-plan.yaml

cat << EOF > trilio-backup.yaml
apiVersion: triliovault.trilio.io/v1alpha1
kind: Backup
metadata:
 name: ubuntu-backup
spec:
 type: Full
 scheduleType: OneTime
 backupPlan:
   name: ubuntu-application
EOF
kubectl apply -f trilio-backup.yaml

Once the backup completed, I deleted the ubuntu pod and pvc, verifying everything was gone from kubernetes and linstor. Then I used the restore yaml to restore the application and verify my data was restored successfully:

cat << EOF > trilio-restore.yaml
apiVersion: triliovault.trilio.io/v1alpha1
kind: Restore
metadata:
 name: ubuntu-restore
spec:
 source:
   type: Backup
   backup:
     name: ubuntu-backup
 restoreNamespace: default
EOF

kubectl apply -f trilio-restore.yaml
kubectl exec -it ubuntu-0 -- bash -c “cat /data/name.txt”

 

Reviewed 2020/12/14 – DGT