Release notes for CloudNativePG 1.26 ==================================== .. raw:: html History of user-visible changes in the 1.26 minor release of CloudNativePG. For a complete list of changes, please refer to the `commits `_ on the release branch in GitHub. Version 1.26.1 -------------- **Release date:** Jul 25, 2025 - In memory of `DJ Walker-Morgan `_ .\* Important Changes ^^^^^^^^^^^^^^^^^ CloudNativePG is moving toward a plugin-based, backup and recovery agnostic architecture (initiated in 1.26.0 with Barman Cloud). As part of this transition, the following fields in the ``.status`` section of the ``Cluster`` resource are now deprecated: - ``firstRecoverabilityPoint`` - ``firstRecoverabilityPointByMethod`` - ``lastSuccessfulBackup`` - ``lastSuccessfulBackupByMethod`` - ``lastFailedBackup`` Additionally, the following Prometheus metrics are deprecated: - ``cnpg_collector_first_recoverability_point`` - ``cnpg_collector_last_available_backup_timestamp`` - ``cnpg_collector_last_failed_backup_timestamp`` These fields and metrics will no longer update when using plugin-based backups (e.g., Barman Cloud via CNPG-I). They remain functional for users still using in-core Barman Cloud and volume snapshot backups. **Note:** We, as maintainers, are sorry for any inconvenience caused by not > highlighting this change during the 1.26.0 release. As we transition to a > plugin-based backup and recovery architecture, we encourage you to **test > your chosen plugin thoroughly in a staging environment before moving to > production** to ensure your workflows and observability integration continue > to meet your needs. Thank you for your understanding and for working with us > as CloudNativePG evolves to provide a more modular and robust experience. Changes ^^^^^^^ - Removed ``386`` and ARM (v5/v6/v7) architectures from the ``cnpg`` plugin build matrix, reducing the number of published binaries ( `#7648 `_ ). Enhancements ^^^^^^^^^^^^ - Improved validation of ``shared_buffers`` by correctly considering ``HugePages`` settings, ensuring accurate memory configuration checks ( `#7864 `_ ). - Set ``oom_score_adj`` for PostgreSQL worker processes to improve prioritization during out-of-memory situations ( `#7891 `_ ). - Added ``fqdn-uri`` and ``fqdn-jdbc-uri`` fields in user secrets to simplify application connection string management and align with DNS-based connection best practices ( `#7852 `_ ). - Added the ``systemID`` field and related condition in the ``Cluster`` status to track the PostgreSQL system identifier. ( `#7717 `_ ). Fixes ^^^^^ - Added a mutex in the connection pooler to protect concurrent access to the connections map, improving stability in high-concurrency environments ( `#7804 `_ ). - Fixed replica cluster instance ordering by correctly detecting the designated primary, improving replica cluster stability and switchover operations ( `#8108 `_ ). - Added support for reconciling ``VolumeAttributesClass`` for PVCs, enhancing storage compatibility and lifecycle management ( `#7885 `_ ). - Made the internal webserver routines non-blocking to improve responsiveness under load ( `#8071 `_ ). - Fixed an issue where the ``ensureReplicationClientLeafCertificate`` error did not display the correct ``secretName`` in the not found message ( `#8086 `_ ). - Prevented invalid ``ALTER SUBSCRIPTION`` statements by updating only PostgreSQL‑supported parameters; unsupported options like ``copy_data`` are ignored to avoid reconciliation failures ( `7844 `_ ). - Fixed an issue where the ``bootstrap-controller`` in the connection pooler did not apply ``resources`` settings correctly ( `#7922 `_ ). - Ensured online backups fail cleanly if the ``targetPod`` becomes unhealthy during backup, preventing partial or misleading backups ( `#7944 `_ ). - Ensured the Backup resource status is set properly after a failure, improving observability and scripting reliability ( `#7898 `_ ). - Improved liveness probe handling to avoid unnecessary timeouts when they are not required ( `#7902 `_ ). Version 1.26.0 -------------- **Release date:** May 23, 2025 .. _important-changes-1: Important Changes ^^^^^^^^^^^^^^^^^ - **CloudNativePG is now officially a CNCF project**: CloudNativePG has been accepted into the Cloud Native Computing Foundation (CNCF), marking a significant milestone in its evolution. As part of this transition, the project is now governed under **CloudNativePG, a Series of LF Projects, LLC**, ensuring long-term sustainability and community-driven innovation. (#7203) - **Deprecation of Native Barman Cloud Support**: Native support for Barman Cloud backups and recovery is now deprecated and will be fully removed in CloudNativePG version 1.28.0. Although still available in the current release, users are strongly encouraged to begin migrating their existing clusters to the new `Barman Cloud Plugin `_ to ensure a smooth and seamless transition. The plugin should also be used for all new deployments. This change marks the first step toward making CloudNativePG a backup-agnostic solution, a goal that will be fully realized when volume snapshot support is also moved to a plugin-based architecture. (#6876) - **End of Support for Barman 3.4 and Earlier**: CloudNativePG no longer supports Barman versions 3.4 and earlier, including the capability detection framework. Users running older operand versions (from before April 2023) must update their operand before upgrading the operator to avoid compatibility issues. (#7220) - **Hibernation Command Changes**: The ``hibernate on`` and ``hibernate off`` commands in the ``cnpg`` plugin for ``kubectl`` now serve as shortcuts for declarative hibernation. The previous imperative approach has been removed in favor of this method. Additionally, the ``hibernate status`` command has been removed, as its functionality is now covered by the standard ``status`` command. **Warning:** Do not upgrade to version 1.26 of both the plugin and the operator unless you are prepared to migrate to the declarative hibernation method. (#7155) Features ^^^^^^^^ - **Declarative Offline In-Place Major Upgrades of PostgreSQL**: Introduced support for offline in-place major upgrades when a new operand container image with a higher PostgreSQL major version is applied to a cluster. During the upgrade, all cluster pods are shut down to ensure data consistency. A new job is created to validate upgrade conditions, run ``pg_upgrade`` , and set up new directories for ``PGDATA`` , WAL files, and tablespaces as needed. Once the upgrade is complete, replicas are re-created. Failed upgrades can be rolled back declaratively. (#6664) - **Improved Startup and Readiness Probes for Replicas**: Enhanced support for Kubernetes startup and readiness probes in PostgreSQL instances, providing greater control over replicas based on the streaming lag. (#6623) - **Declarative management of extensions and schemas**: Introduced the ``extensions`` and ``schemas`` stanzas in the Database resource to declaratively create, modify, and drop PostgreSQL extensions and schemas within a database. (#7062) .. _enhancements-1: Enhancements ^^^^^^^^^^^^ - Introduced an opt-in experimental feature to enhance the liveness probe with network isolation detection for primary instances. This feature can be activated via the ``alpha.cnpg.io/livenessPinger`` annotation (#7466). - Introduced the ``STANDBY_TCP_USER_TIMEOUT`` operator configuration setting, allowing users to specify the ``tcp_user_timeout`` parameter on all standby instances managed by the operator. (#7036) - Introduced the ``DRAIN_TAINTS`` operator configuration option, enabling users to customize which node taints indicate a node is being drained. This replaces the previous fixed behavior of only recognizing ``node.kubernetes.io/unschedulable`` as a drain signal. (#6928) - Added a new field in the ``status`` of the ``Cluster`` resource to track the latest known Pod IP (#7546). - Added the ``pg_extensions`` metric, providing information about installed PostgreSQL extensions and their latest available versions. (#7195) - Added the ``KUBERNETES_CLUSTER_DOMAIN`` configuration option to the operator, allowing users to specify the domain suffix for fully qualified domain names (FQDNs) generated within the Kubernetes cluster. If not set, it defaults to ``cluster.local`` . (#6989) - Implemented the ``cnpg.io/validation`` annotation, enabling users to disable the validation webhook on CloudNativePG-managed resources. Use with caution, as this allows unrestricted changes. (#7196) - Added support for patching PostgreSQL instance pods using the ``cnpg.io/podPatch`` annotation with a JSON Patch. This may introduce discrepancies between the operator’s expectations and Kubernetes behavior, so it should be used with caution. (#6323) - Added support for collecting ``pg_stat_wal`` metrics in PostgreSQL 18. (#7005) - Removed the ``ENABLE_AZURE_PVC_UPDATES`` configuration, as it is no longer required to resize Azure volumes correctly. The Azure CSI driver includes the necessary fix as of version `1.11.0 `_ . (#7297) - The ``.spec.backup.barmanObjectStore`` and ``.spec.backup.retentionPolicy`` fields are now deprecated in favor of the external Barman Cloud Plugin, and a warning is now emitted by the admission webhook when these fields are used in the ``Cluster`` specification (#7500). - Added support for LZ4, XZ, and Zstandard compression methods when archiving WAL files via Barman Cloud (*deprecated*). (#7151) - CloudNativePG Interface (CNPG-I): - A plugin can now trigger instance rollouts by implementing the ``EVALUATE`` verb, ensuring that plugin-induced changes are properly reconciled. (#7126) - Introduced support for WAL recovery via CNPG-I plugins during snapshot restore. (#7284) Security ^^^^^^^^ - Set ``imagePullPolicy`` to ``Always`` for the operator deployment to ensure that images are always pulled from the registry, reducing the risk of using outdated or potentially unsafe local images. (#7250) .. _fixes-1: Fixes ^^^^^ - Fixed native replication slot synchronization and logical replication failover for PostgreSQL 17 by appending the ``dbname`` parameter to ``primary_conninfo`` in replica configurations (#7298). - Fixed a regression in WAL restore operations that prevented fallback to the in-tree ``barmanObjectStore`` configuration defined in the ``externalCluster`` source when a plugin failed to locate a WAL file (#7507). - Improved backup efficiency by introducing a fail-fast mechanism in WAL archiving, allowing quicker detection of unexpected primary demotion and avoiding unnecessary retries (#7483). - Fixed an off-by-one error in parallel WAL archiving that could cause one extra worker process to be spawned beyond the requested number (#7389). - Resolved a race condition that caused the operator to perform two switchovers when updating the PostgreSQL configuration. (#6991) - Corrected the ``PodMonitor`` configuration by adjusting the ``matchLabels`` scope for the targeted pooler and cluster pods. Previously, the ``matchLabels`` were too broad, inadvertently inheriting labels from the cluster and leading to data collection from unintended targets. (#7063) - Added a webhook warning for clusters with a missing unit (e.g., MB, GB) in the ``shared_buffers`` configuration. This will become an error in future releases. Users should update their configurations to include explicit units (e.g., ``512MB`` instead of ``512`` ). (#7160) - Treated timeout errors during volume snapshot creation as retryable to prevent unnecessary backup failures. (#7010) - Moved the defaulting logic for ``.spec.postgresql.synchronous.dataDurability`` from the CRD to the webhook to avoid UI issues with OLM. (#7600) - CloudNativePG Interface (CNPG-I): - Implemented automatic reloading of TLS certificates for plugins when they change. (#7029) - Ensured the operator properly closes the plugin connection when performing a backup using the plugin. (#7095, #7096) - Fixed an issue that prevented WALs from being archived on a former primary node when using a plugin. (#6964) - Improved performance and resilience of CNPG-I by removing timeouts for local plugin operations, avoiding failures during longer backup or WAL archiving executions (#7496). - ``cnpg`` plugin: - Increased the buffer size in the ``logs pretty`` command to better handle larger log output (#7281). - Ensured the ``plugin-name`` parameter is required for plugin-based backups and disallowed for non-plugin backup methods (#7506). - Ensured that the primary Pod is recreated during an imperative restart when ``primaryUpdateMethod`` is set to ``restart`` , aligning its definition with the replicas. (#7122) .. _changes-1: Changes ^^^^^^^ - Updated the default PostgreSQL version to 17.5 for new cluster definitions. (#7556) - Updated the default PgBouncer version to **1.24.1** for new ``Pooler`` deployments (#7399). Supported versions ^^^^^^^^^^^^^^^^^^ - Kubernetes 1.33, 1.32, 1.31, and 1.30 - PostgreSQL 17, 16, 15, 14, and 13 - PostgreSQL 17.5 is the default image - PostgreSQL 13 support ends on November 12, 2025