Repository navigation
Releases: heyvaldemar/kubernetes-postgres-recovery
Releases · heyvaldemar/kubernetes-postgres-recovery
Release list
v1.0.0
PostgreSQL on Kubernetes, restored every day. The first release.
What it is
PostgreSQL 18.6 on CloudNativePG 1.30.1: three instances with a synchronous standby required, WAL and daily base backups through the Barman Cloud plugin 0.15.1 to an S3 bucket, a one-minute archive ceiling, a 7-day recovery window. Every image by digest, Pod Security restricted. It runs on kind at no cloud cost, with SeaweedFS standing in for S3. A reference, not a product: it does not run in production anywhere.
What the drill proves, daily
- A malformed restore is refused before it starts; a well-formed one is admitted.
- A restore to a second before a
DROP TABLEhas every row before the target, none after, and the table. - The primary is killed while a client writes every 200 ms: every write the client was told committed is on the new primary.
- The cluster and its volumes are deleted: a restore from the bucket alone has the rows written before the loss.
- A cluster created again under the lost one's name reports Ready and does not archive. Ready is not backed up.
What three runs on a GitHub-hosted runner measured
No acknowledged write lost. A new primary named 5 to 22 s after the kill. Restores ready in 50 to 54 s. The README has the runs and what the numbers do and do not mean.
Two findings from the build
- A client with no connect timeout waited 136 seconds through a failover that took seconds: its connection to the dead primary's address waited out TCP's retries.
- A restore target time with no zone is accepted and read as UTC. Typed from a wall clock elsewhere, it restores to the wrong hour; the runbook says to write the zone, and the drill keeps a plant for it.
Full history in CHANGELOG.md.