This guide demonstrates how to create backups for ZooKeeper clusters managed by KubeBlocks using the zoocreeper backup method.
KubeBlocks ZooKeeper uses zoocreeper for full backups:
| Method | Description |
|---|---|
zoocreeper | Copies ZooKeeper data snapshots and transaction logs to a backup repository. Runs on a follower node (falls back to leader if no follower is available). |
Before proceeding, verify your environment meets these requirements:
kubectl v1.21+ installed and configured with cluster accessReady state. See Create a BackupRepo for setup instructions.kubectl get backuprepo
NAME STATUS STORAGEPROVIDER ACCESSMETHOD DEFAULT AGE
minio-repo Ready minio Tool true 6h
KubeBlocks automatically generates a BackupPolicy for each ZooKeeper cluster:
kubectl get backuppolicy -n demo -l app.kubernetes.io/instance=zookeeper-cluster
NAME STATUS AGE
zookeeper-cluster-zookeeper-backup-policy Available 6h
View the available backup methods:
kubectl get backuppolicy zookeeper-cluster-zookeeper-backup-policy -n demo -oyaml \
| grep -A2 "backupMethods:"
ZooKeeper supports one backup method: zoocreeper.
apiVersion: dataprotection.kubeblocks.io/v1alpha1
kind: Backup
metadata:
name: zk-cluster-backup
namespace: demo
spec:
# Backup method: zoocreeper
backupMethod: zoocreeper
backupPolicyName: zookeeper-cluster-zookeeper-backup-policy
# `Retain`: backup data is kept when the Backup CR is deleted
# `Delete`: backup data is removed when the Backup CR is deleted
deletionPolicy: Delete
Apply it:
kubectl apply -f https://raw.githubusercontent.com/apecloud/kubeblocks-addons/refs/heads/main/examples/zookeeper/backup.yaml
apiVersion: operations.kubeblocks.io/v1alpha1
kind: OpsRequest
metadata:
name: zk-cluster-backup-ops
namespace: demo
spec:
clusterName: zookeeper-cluster
type: Backup
backup:
backupPolicyName: zookeeper-cluster-zookeeper-backup-policy
backupMethod: zoocreeper
deletionPolicy: Delete
retentionPeriod: 7d
kubectl get backup zk-cluster-backup -n demo -w
NAME POLICY METHOD REPO STATUS TOTAL-SIZE DURATION DELETION-POLICY CREATION-TIME COMPLETION-TIME
zk-cluster-backup zookeeper-cluster-zookeeper-backup-policy zoocreeper minio-repo Running 0 0s Delete 2026-04-03T12:37:31Z
zk-cluster-backup zookeeper-cluster-zookeeper-backup-policy zoocreeper minio-repo Completed 588 17s Delete 2026-04-03T12:37:31Z 2026-04-03T12:37:47Z
A Completed status means the backup succeeded.
Enable automatic scheduled backups by updating the BackupSchedule:
kubectl patch backupschedule zookeeper-cluster-zookeeper-backup-schedule -n demo \
--type merge \
-p '{"spec":{"schedules":[{"backupMethod":"zoocreeper","cronExpression":"0 2 * * *","enabled":true,"retentionPeriod":"7d"}]}}'
This schedules a daily backup at 2:00 AM with a 7-day retention period.
Verify:
kubectl get backupschedule zookeeper-cluster-zookeeper-backup-schedule -n demo -oyaml \
| grep -A5 "schedules:"
schedules:
- backupMethod: zoocreeper
cronExpression: 0 2 * * *
enabled: true
retentionPeriod: 7d
If a backup fails or stays in Running state:
Check the Backup resource for errors:
kubectl describe backup zk-cluster-backup -n demo
Check the backup job:
kubectl get job -n demo -l app.kubernetes.io/instance=zookeeper-cluster,app.kubernetes.io/managed-by=kubeblocks-dataprotection
Check job pod logs:
kubectl logs -n demo -l app.kubernetes.io/instance=zookeeper-cluster,app.kubernetes.io/managed-by=kubeblocks-dataprotection
kubectl delete backup zk-cluster-backup -n demo
kubectl delete cluster zookeeper-cluster -n demo
kubectl delete ns demo