← Back to all sparks
P

Postgres Operator

DEVOPS
Velocity6.3

Operator for running highly available PostgreSQL clusters on Kubernetes

Zalando's Postgres Operator finally shipped v2 — and had to reissue it within a day.

kubernetespostgresoperatormajor-releaserelease-engineering
Current state
The Postgres Operator has crossed from a long-running 1.x line into a v2 major release requiring an explicit migration. v2 brings Postgres 18 support, NodePort services, TopologySpreadConstraints, an ARM-compatible pooler image, IRSA for EKS, and globally configurable maintenance windows. The initial v2.0.0 tag shipped with an OperatorConfiguration CRD type mismatch that broke GitOps pipelines and was superseded by v2.0.1 the same day.
Where it's heading
The 1.x releases — shipped under animal codenames rather than versions — were incrementally widening operator control over child resources: owner references, per-cluster maintenance windows, inherited annotations, PDBs for bootstrap protection. v2 consolidates that into a breaking release and picks up the platform work the 1.x line kept deferring: ARM images, EKS-native identity, spread constraints. The recurring pattern of releases shipping incomplete — missing UI and logical-backup images in one, a pipeline-breaking CRD in another — suggests release engineering is the weak point rather than the code itself.
Prediction
Expect a 2.0.x patch stream shaking out migration problems from the v2 CRD changes before any new features land. Postgres 18 support arriving here also implies Spilo image updates will keep pacing upstream Postgres releases.

Recent moves

  1. 8d ago

    v2 lands: Postgres 18, EKS IRSA, ARM pooler, spread constraints

    ⚡ SPARK

    The release the 1.x codename line had been building toward — a breaking major with a documented migration path, bundling Postgres 18 support with the platform features operators had been working around. It also functions as the real v2.0.0, since the tag a day earlier shipped with a CRD defect.

    View source ↗
  2. 9d ago

    v2.0.0 pulled over a GitOps-breaking CRD defect

    Effectively a withdrawal notice: the v2.0.0 tag shipped an OperatorConfiguration CRD with a type mismatch that breaks GitOps pipelines, and the notes redirect readers to v2.0.1. Treat v2.0.1 as the real v2 release; this entry carries the image list and contributor credits but nothing installable.

    View source ↗
  3. 7mo ago

    1.15.1 bugfix release repairs the ghcr build pipeline

    A patch to the 1.15 line fixing the ghcr build pipeline, sidecar cascading failures on missing images, and a password-override risk when secret syncing fails midway. Its existence is explained by 1.15.0 having shipped without UI and logical-backup images.

    View source ↗
  4. 7mo ago

    1.15.0 adds a bootstrap-phase PDB — but ships without images

    A second PodDisruptionBudget to protect pods during bootstrap and support for Patroni's bootstrap_labels are the substance, alongside better service diffing when switching to configmap-based Kubernetes state. The release notes open by telling users to skip straight to 1.15.1 because UI and logical-backup images are missing — the same release-engineering failure that would recur at v2.0.0.

    View source ↗
  5. 1y ago

    Postgres 17 support and fleet-scale API rate controls

    Postgres 17 support arrives on the usual annual cadence, and configurable QPS and burst limits for the API client target operators running large fleets. Sidecar command support and new EBS CSI driver handling continue the pattern of widening what can be customized per cluster.

    View source ↗
  6. 1y ago

    Owner references on child resources and per-cluster maintenance windows

    Owner references across all child resources and per-cluster maintenance windows for major-version upgrades are early versions of control that v2 would later make global. Representing every child resource — including Patroni-created services and configmaps — in the cluster's Go struct is the plumbing that made the later work possible.

    View source ↗