Repository navigation
Release notes — v0.3.3
Separate WAL storage, TLS-only clients, synchronous replication, native backup retention, and richer connection details.
Highlights
Separate WAL storage
Put WAL on its own volume with spec.components.engine.parameters.walStorage. The provider maps that to CloudNativePG Cluster.spec.walStorage, so CloudNativePG owns provisioning, migration, and expansion. Each instance gets its own WAL PVC. Omit walStorage to keep WAL on the data volume.
spec:
components:
engine:
storage:
size: 20Gi
parameters:
walStorage:
size: 5Gi
storageClass: fast-storage
resizeInUseVolumes: trueSet a positive size, or a pvcTemplate storage request. The data-volume storage class is not inherited. Once configured, WAL storage cannot be removed, and shrinking is rejected. Expansion needs a StorageClass that allows volume expansion. Adding a volume to an existing cluster can restart instances. In the UI (OpenEverest dev.4 or later), this is the Separate WAL storage toggle under Resources, off by default for new instances.
Require TLS
CloudNativePG always serves TLS, and its default pg_hba.conf also accepts unencrypted connections. parameters.requireTLS: true places hostnossl all all all reject ahead of your pg_hba rules. CloudNativePG applies that with a reload, so pods are not restarted. Replication and local connections are unchanged.
The UI turns this on by default for new and restored instances. Unset means off, so existing instances keep accepting unencrypted clients until you enable it. sslmode=disable is refused. sslmode=prefer still works. Use sslmode=verify-full with the cluster CA to authenticate the server.
Synchronous replication
Replication stays asynchronous unless you set parameters.postgresql.synchronous. The UI exposes this as Synchronous replication under Resources (standby count, quorum or priority selection, and whether writes stop or fall back when too few standbys remain).
spec:
components:
engine:
replicas: 3
parameters:
postgresql:
synchronous:
method: any # any = quorum, first = priority order
number: 1 # standbys that must confirm each commit
dataDurability: requirednumber must be lower than replicas. The provider rejects other values before the Cluster is applied. dataDurability: required stops writes when too few standbys are available. preferred falls back to asynchronous replication until standbys return.
Native backup retention and deletion
Time-window retention is delegated to CloudNativePG and Barman (retention.type: time, for example 30d). The window applies to that cluster's whole Barman archive, including on-demand backups and WAL, not to each schedule on its own. Count retention is not supported. Schedules on the same storage must share one duration, or all omit retention. Instances in one namespace that share backup storage share its ObjectStore, so they must agree as well. A conflicting policy is refused with BackupRetentionConflict on BackupConfigured.
The OpenEverest dev.4 schedule form only edits count retention ("retention copies"). Leave copies at 0 and set time retention through the API or CLI.
deletionPolicy: Delete runs a one-off barman-cloud-backup-delete Job for that backup's Barman ID. deletionPolicy: Retain removes the Everest objects and leaves the base backup in the object store. It does not exempt the backup from Barman's archive-wide policy. Delete Backups before deleting their Instance. Data deletion runs only while the source Instance exists. If the Job fails, inspect its logs and delete the Job to retry.
Connection details
The connection Secret now includes read endpoints and an explicit TLS mode:
host—<cluster>-rw, the read-write Servicehost-r—<cluster>-r, every ready instance, including the primary (omitted when the read Service is disabled)host-ro—<cluster>-ro, ready replicas only (published when the read-only Service is enabled andreplicasis at least 2)sslmode—require, anduriincludes it
node-postgres (pg-connection-string 2.7 and later) treats sslmode=require as verify-full. Point sslrootcert at ca.crt from the <cluster>-ca Secret, or use sslmode=no-verify to encrypt without checking the certificate.
Pod priority
parameters.priorityClassName maps to CloudNativePG spec.priorityClassName. The UI field is optional under Advanced. The name must be a valid Kubernetes object name, and the PriorityClass must already exist. Leaving it unset keeps the cluster default. Changing it rolls the instance pods.
Failed cluster status
Terminal CloudNativePG phases are now reported as Instance Failed, with the phase and phaseReason in the message: unrecoverable, plugin failure, unknown plugin, cannot create cluster objects, image catalog error, architecture binary missing, and invalid definition. In-progress work (replica creation, failover, upgrade, supervised switchover) stays Provisioning.
CPU quantities
CPU request and limit fields are text inputs. Values such as 0.5 or 500m are sent as Kubernetes quantity strings, so fractional cores are accepted. The API and CLI reject CPU that is not positive or is finer than a millicore. Existing stored values ("1", "500m") load unchanged.
Testing
End-to-end coverage now runs against the released OpenEverest chart: a Chainsaw backup-restore suite, and Playwright tests that create an instance through the UI. The OpenEverest health check ignores the one startup restart everest-server can take, and fails the run only if something restarts after that.
What's Changed
- Use native Barman retention and honor backup data deletion by @spron-in in #89
- Expose separate WAL storage through the provider by @spron-in in #90
- Add requireTLS to reject unencrypted client connections by @spron-in in #95
- Add priorityClassName for the instance pods by @spron-in in #96
- Expose synchronous replication in the UI and validate it by @spron-in in #97
- Add e2e tests on the full OpenEverest platform by @spron-in in #98
- Send CPU as a quantity string from the UI; fix Tilt controller crash by @spron-in in #100
- Map CloudNativePG failed phases to Instance Failed by @AdityaPimpalkar in #101
- Make the e2e OpenEverest health check ignore startup restarts by @spron-in in #102
- Add read and read-only services and sslmode to connection details by @AdityaPimpalkar in #104
Full Changelog: v0.3.2...v0.3.3