This runbook will show you how to restore a StackGres cluster backup. All the steps explained here are also possible from the StackGres web console.
Check the databases and sizes of your StackGres cluster.
The demo cluster ongres-db
has one database:
$ kubectl exec -it --namespace ongres-db ongres-db -c postgres-util -- psql -c '\l'
List of databases
Name | Owner | Encoding | Collate | Ctype | Access privileges | Size | Tablespace | Description
-----------+----------+----------+---------+---------+-----------------------+---------+------------+--------------------------------------------
demo_db | postgres | UTF8 | C.UTF-8 | C.UTF-8 | | 20 MB | pg_default |
postgres | postgres | UTF8 | C.UTF-8 | C.UTF-8 | | 7977 kB | pg_default | default administrative connection database
template0 | postgres | UTF8 | C.UTF-8 | C.UTF-8 | =c/postgres +| 7793 kB | pg_default | unmodifiable empty database
| | | | | postgres=CTc/postgres | | |
template1 | postgres | UTF8 | C.UTF-8 | C.UTF-8 | =c/postgres +| 7793 kB | pg_default | default template for new databases
| | | | | postgres=CTc/postgres | | |
(4 rows)
Get the backup list:
$ kubectl get sgbackups --namespace ongres-db
NAME AGE
backup-demo-1 3h33m
backup-demo-2 3h11m
backup-demo-3 55s
The restore operation includes creating a new cluster from a previously performed backup.
You’re able to specify any of the cluster params.
If you do not specify an SGInstanceProfile, it will use the default profile with 1
CPU and 2Gi
of RAM.
Create an instance profile specific to the restore cluster. Change the resources according to your requirements.
Create a YAML file with the following content and apply it to Kubernetes:
apiVersion: stackgres.io/v1
kind: SGInstanceProfile
metadata:
namespace: ongres-db
name: size-s
spec:
cpu: "500m"
memory: "256Mi"
Note: The restore process needs to be performed in the same namespace as the cluster which you want to backup.
To restore the backup you need to create a new SGCluster
specifying the initialData
section setting the param fromBackup
with the backup resource name.
Create a YAML file similar to the following content and apply it to Kubernetes:
apiVersion: stackgres.io/v1
kind: SGCluster
metadata:
name: demo-restore
namespace: ongres-db
spec:
instances: 1
postgres:
version: '12'
sgInstanceProfile: 'size-s'
pods:
persistentVolume:
size: '10Gi'
initialData:
restore:
fromBackup:
name: backup-demo-3
Now, you should have a new cluster called demo-restore
with all the data restored:
$ kubectl exec -it -n ongres-db demo-restore-0 -c postgres-util -- psql -c '\l+'
List of databases
Name | Owner | Encoding | Collate | Ctype | Access privileges | Size | Tablespace | Description
-----------+----------+----------+---------+---------+-----------------------+---------+------------+--------------------------------------------
demo_db | postgres | UTF8 | C.UTF-8 | C.UTF-8 | | 20 MB | pg_default |
postgres | postgres | UTF8 | C.UTF-8 | C.UTF-8 | | 7977 kB | pg_default | default administrative connection database
template0 | postgres | UTF8 | C.UTF-8 | C.UTF-8 | =c/postgres +| 7793 kB | pg_default | unmodifiable empty database
| | | | | postgres=CTc/postgres | | |
template1 | postgres | UTF8 | C.UTF-8 | C.UTF-8 | =c/postgres +| 7793 kB | pg_default | default template for new databases
| | | | | postgres=CTc/postgres | | |
(4 rows)