Skip to content

Build1 publisher2 min readPublished

A label selector now freezes the Postgres data and WAL volumes at the same instant

VolumeGroupSnapshot reached general availability in Kubernetes v1.36 in May 2026. The atomic snapshot it promises is still executed by the CSI driver and the storage beneath it, so the driver is where the guarantee has to be checked.

The Engineer · Build desk

Illustration accompanying A label selector now freezes the Postgres data and WAL volumes at the same instant

What happened

  • VolumeGroupSnapshot became generally available in Kubernetes v1.36 in May 2026, putting the storage array's consistency group behind a vendor-neutral Kubernetes API.
  • The Container Storage Interface had scoped snapshots to a single object, the VolumeSnapshot, bound to one PersistentVolumeClaim, so which volumes belonged to the same application lived outside the model.
  • Backup tools snapshot each PVC in sequence, and the application keeps writing in between, so a transaction can land in the log on the second volume referencing data the first volume never captured.
  • In The New Stack's Postgres example, with the data directory on one PVC and the write-ahead log on another, every snapshot reported success and the cluster still refused to start.

Compiled by The EngineerSomething wrong?How this is made

Why it matters

  • constraint The API is portable and the atomicity stays with the driver and the array: where a driver or array cannot take a group snapshot, moving to v1.36 leaves restore coherence exactly where it was.
  • exposure A successful snapshot job looks the same whether the set is coherent or incoherent, so a team's real exposure is only measurable by restoring before an incident forces it.
  • decision Teams that rejected freezing a busy database on availability grounds now face a different question: what their CSI driver implements.

A VolumeGroupSnapshot carries a label selector. A selector like `app=postgres` picks up the data PVC and the logs PVC together [14]. The New Stack calls that the important design choice, because the group boundary is then expressed in Kubernetes terms that survive adding or resizing volumes over time [14]. Enumeration cannot do that. A tool that walks the PVC list at backup time is inferring an application boundary the per-PVC model never recorded [3]. Operators used to declare that boundary by hand, telling a storage array which LUNs belonged to the same application [4].

Each per-PVC snapshot is crash-consistent on its own, equivalent to pulling the power cord on that one volume, and none of them is consistent with the next [6]. The New Stack puts the interval between two sequential snapshots at a few hundred milliseconds of continued writes [7]. Take that at 300 ms and a three-volume application leaves the first snapshot about 600 ms behind the last, because the window is the sum of the gaps [18]. It widens with write rate and with volume count [8].

Whether that makes last night's backup worthless turns on something the version bump leaves alone. Quiescing closes the window: freeze I/O, flush buffers, snapshot, unfreeze [10]. Teams doing that already have coherent sets. Teams that ruled it out did so because freezing a busy database for the duration of a multi-volume snapshot is the disruption backups exist to avoid [10]. They have been producing what The New Stack describes as "a set of snapshots that each looks healthy and collectively describes a state that never existed" [9]. On the 2 a.m. Postgres restore, The New Stack wrote: "The backup wasn't corrupted in transit. It was inconsistent the moment it was taken." [17]

Adoption is three objects and one dependency. An administrator defines a VolumeGroupSnapshotClass describing how group snapshots are created for a given CSI driver, the user creates the VolumeGroupSnapshot with its selector, and a VolumeGroupSnapshotContent tracks the provisioned result [11]. The atomic part belongs to the driver: "Under the hood, the CSI driver takes one atomic, point-in-time snapshot across every selected volume," according to The New Stack, with no application quiescence required, provided the underlying storage supports it [12][13].

So general availability in v1.36 is a promotion of the API [1]. In my view the presumption worth carrying is a narrow one: a multi-volume set taken without quiescence has never been shown to restore, and showing it costs one restore drill [16]. That drill is also the only point at which the gap becomes visible.

What to watch

  • Whether CSI driver vendors publish which versions and which arrays implement atomic group snapshots, since the source conditions the guarantee on the storage layer.
  • Whether backup tools move their default from per-PVC enumeration to selector-driven VolumeGroupSnapshot requests.
  • Whether existing PVC labels on stateful workloads actually describe application boundaries, or would need relabelling before a selector matches the right group.
Loading claim ledger
Loading source directory links
Loading share composer
Loading topic controls
Loading related stories