Operations
Backup And Restores
Custom Secret
tpl
This guide demonstrates how to configure a MongoDB cluster on KubeBlocks with:
This combination provides comprehensive data protection with minimal recovery point objectives (RPO).
Point-In-Time Recovery (PITR) allows you to restore a database to a specific moment in time by combining full backups with continuous binlog/wal/archive log backups.
For details on restoring data from both full backups and continuous binlog backups, refer to the Restore From PITR guide.
Before proceeding, ensure the following:
kubectl create ns demo
namespace/demo created
Backup Repository Configured:
BackupRepo
BackupRepo
status is Ready
Cluster is Running:
Running
stateKubeBlocks MongoDB supports these backup methods:
Feature | Method | Description |
---|---|---|
Full Backup | dump | Uses mongodump , a MongoDB utility used to create a binary export of the contents of a database |
Full Backup | datafile | Backup the data files of the database |
Continuous Backup | archive-oplog | Continuously archives MongoDB oplog using wal-g |
Deploy a MongoDB ReplicaSet Cluster with 3 replicas and specify backup information:
apiVersion: apps.kubeblocks.io/v1
kind: Cluster
metadata:
name: mongo-cluster
namespace: demo
spec:
terminationPolicy: Delete
clusterDef: mongodb
topology: replicaset
componentSpecs:
- name: mongodb
serviceVersion: "6.0.16"
replicas: 3
resources:
limits:
cpu: '0.5'
memory: 0.5Gi
requests:
cpu: '0.5'
memory: 0.5Gi
volumeClaimTemplates:
- name: data
spec:
storageClassName: ""
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 20Gi
backup:
retentionPeriod: 7d
# for full backup
method: datafile # full backup methnod name
enabled: true
cronExpression: 0 18 * * * # full backup scheuler
# for continuous backup
continuousMethod: archive-oplog # continuous backup method, paired with method wal-g
pitrEnabled: true # enable continous method or not
repoName: s3-repo # specify backuprepo, if not specified, the BackupRepo annotated as `default` will be used.
Key Configuration Fields Explained
Field | Value | Description |
---|---|---|
backup.enabled | true | Enables scheduled backups |
method | datafile | Full backup method using PostgreSQL's native utility |
cronExpression | 0 18 * * * | Daily full backup at 6PM UTC |
retentionPeriod | 7d | Retains backups for 7 days |
repoName | s3-repo | Backup repository name (S3-compatible storage) |
pitrEnabled | true | Enables continuous WAL archiving for PITR |
continuousMethod | archive-oplog | Method for continuous WAL archiving |
Monitor the cluster status until it transitions to the Running state:
kubectl get cluster mongo-cluster -n demo -w
Expected Output:
kubectl get cluster mongo-cluster -n demo
NAME CLUSTER-DEFINITION TERMINATION-POLICY STATUS AGE
mongo-cluster mongodb Delete Creating 49s
mongo-cluster mongodb Delete Running 62s
Check the pod status and roles:
kubectl get pods -l app.kubernetes.io/instance=mongo-cluster -L kubeblocks.io/role -n demo
Expected Output:
NAME READY STATUS RESTARTS AGE ROLE
mongo-cluster-mongodb-0 2/2 Running 0 78s primary
mongo-cluster-mongodb-1 2/2 Running 0 63s secondary
mongo-cluster-mongodb-2 2/2 Running 0 48s secondary
Once the cluster status becomes Running, your MongoDB cluster is ready for use.
If you are creating the cluster for the very first time, it may take some time to pull images before running.
Verify continuous backup operation with these commands:
# get continuous backup
kubectl get backup -l app.kubernetes.io/instance=mongo-cluster,dataprotection.kubeblocks.io/backup-type=Continuous -n demo
# get pod working for continuous backup
kubectl get pod -l app.kubernetes.io/instance=mongo-cluster,dataprotection.kubeblocks.io/backup-type=Continuous -n demo
KubeBlocks automatically creates a BackupSchedule
resource. Inspect the configuration:
kubectl get backupschedule pg-cluster-postgresql-backup-schedule -n demo -oyaml
Example Output:
apiVersion: dataprotection.kubeblocks.io/v1alpha1
kind: BackupSchedule
...
spec:
backupPolicyName: mongo-cluster-mongodb-backup-schedule
schedules:
- backupMethod: datafile
cronExpression: 0 18 * * *
enabled: true #
retentionPeriod: 7d
- backupMethod: archive-oplog
cronExpression: '*/5 * * * *'
enabled: true # set to `true` to enable continuous backup
retentionPeriod: 8d # set the retention period to your need
This guide covered:
Key Benefits: