A backup only counts once it has been restored and checked.
BackupVouch is a Kubernetes operator. It takes your PostgreSQL backups, restores each one into a throwaway database, runs the SQL checks you wrote, and tells you the result.
Early alpha (API v1alpha1). It works end to end in a kind cluster and has not run in production yet. PostgreSQL only.
NAME PHASE LAST BACKUP VERIFIED RESTORE TIME app-db Idle 7s True 1
NAME PHASE LAST BACKUP VERIFIED
app-db Idle 27s False
reason: ChecksumMismatch
message: the stored backup does not match the
checksum recorded when it was taken
What it does on every run
You write one BackupPolicy: a schedule, your database, your S3 bucket and a few SQL checks. The operator does the rest and keeps the proof in the resource status.
- Back upDump the database and store it with its checksum.
- RestoreRestore that stored copy into a scratch Postgres that is deleted afterwards.
- CheckRun your SQL, for example “the users table has 3 rows”.
- ReportConditions, events, Prometheus metrics, and an optional read-only dashboard.
Why it exists
Most teams find out a backup is broken during an outage. The job said success, but the file was truncated, a credential had changed, or a table was missing.
BackupVouch asks the question every night, before you need the answer: would last night’s backup actually restore, and how long would it take?
- An alert on
backupvouch_verification_success == 0the day a backup goes bad. - A measured restore time to plan around.
- A plain answer for a manager or an auditor.
- Failure messages that say what failed and never include row data.
What it is not
It is not a database manager, and it does not do point-in-time recovery. It takes plain dumps and proves them. Tools such as CloudNativePG, Velero and K8up take or restore backups, and FireDrill verifies backups made by other tools. The comparison, with the date it was checked, is in the spec.