Skip to content

Releases: heyvaldemar/kubernetes-postgres-recovery

Release list

v1.0.0

Choose a tag to compare

@heyvaldemar heyvaldemar released this 14 Oct 18:14

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 TABLE has 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.