KubeNine
All case studies

Cost Optimization

Cutting the managed Postgres bill without giving up RDS-class reliability

Moving a multi-tenant SaaS platform off AWS RDS and Aurora Serverless v2 onto self-hosted CloudNativePG on Kubernetes — lower database spend, HA and point-in-time recovery on par with managed Postgres, and zero downtime for live tenants.

Managed bill retired
Database spend
HA + PITR on S3
Reliability
Zero downtime
Cutover

// the challenge

The client ran multiple production databases on AWS RDS and Aurora Serverless v2, paying thousands of dollars a month for managed Postgres. The bill kept climbing, and the platform was locked into a vendor price curve for capacity it could host itself. The team wanted PostgreSQL on their own Kubernetes cluster — but only if self-managed HA, failover, and backups were genuinely comparable to what RDS already gave them. Live production data meant the move had to happen with no downtime, and the goal was to end with every managed instance gone, not a hybrid that still paid the old bill.

// our approach

  • Deployed the CloudNativePG operator on the platform's Kubernetes cluster, one Cluster resource per database, so each gets operator-managed primary/replica HA the way RDS Multi-AZ would.
  • Cloned each source with CNPG pg_basebackup physical streaming — a healthy replica with zero downtime on the source, then cut over once catch-up was clean.
  • Matched managed-Postgres recovery with continuous point-in-time recovery: barman-cloud WAL archiving plus base backups to S3, so restore points aren't worse than what RDS offered.
  • Migrated secrets and connection wiring (External Secrets, in-cluster DNS behind Traefik) so applications pointed at the new clusters without a long dual-write window.
  • Deleted every RDS and Aurora Serverless v2 instance only after HA, backups, and production traffic were verified on CloudNativePG.

// the outcome

Production databases now run on the platform's own Kubernetes with operator-managed HA and S3-backed point-in-time recovery — reliability in the same class as the managed service they left, without the managed-Postgres invoice. Live workloads saw no downtime through the move, and the recurring RDS/Aurora spend went to zero once the last managed instance was retired.

Have a similar challenge?

Book a 15-minute call and we'll show you where we can help — no pitch, no obligation.