Commit Graph

700 Commits

Author SHA1 Message Date
Zavel Paytsev c1a027ffe8
Merge 38d2efa23b into a7aaad0a0b 2026-07-30 23:47:05 -07:00
Felix Kunde a2585e3ee1
prepare bugfix release (#3147) 2026-07-29 10:51:00 +02:00
Felix Kunde 8eda2cd1a2
bump to v2.0 (#3134)
* bump to v2.0
* update docs and remove some diagrams
* update crd in charts dir
* update helm charts
* reflect docs feedback
2026-07-27 23:50:17 +02:00
Juhani Pelli 4c1bb1c0ea
Use maxUnavailable for the critical-op PDB to stop idle alert noise (#3141)
* Use maxUnavailable for the critical-op PDB to stop idle alert noise

The critical-op PDB is created with minAvailable equal to
numberOfInstances while its selector (critical-operation=true) matches
no pods during normal operation. This leaves status.desiredHealthy at N
and currentHealthy at 0 permanently, so monitoring stacks fire alerts
like kube-prometheus-stack's KubePdbNotEnoughHealthyPods for every idle
cluster (#3020).

maxUnavailable: 0 provides the same protection while a critical
operation is running - no voluntary evictions of labeled pods - but
keeps the budget satisfied (desiredHealthy 0) when nothing matches.
When PDBs are disabled or there are no instances, the budget relaxes to
maxUnavailable 100% instead of minAvailable 0.

Fixes #3020

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>

* Update PDB docs for critical-op maxUnavailable semantics

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>

* Clarify why the two PDBs use different budget fields

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>

---------

Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
Co-authored-by: Felix Kunde <felix-kunde@gmx.de>
2026-07-27 17:36:42 +02:00
Felix Kunde d268c589c2
change volume specs to int32 and define max iops and throughput values (#3139)
* change int64 volume specs to int32 like in used AWS lib
* upper iops and throughput limits
* minor refactoring in ebs.go
2026-07-27 16:32:22 +02:00
Felix Kunde 56a8f1d90b
remove gp3 migration flow (#3142) 2026-07-27 14:02:44 +02:00
annielzy ca9513c831
Add envFrom support to Postgresql spec (#3118)
* add envFrom support
* generate files

---------

Co-authored-by: Felix Kunde <felix-kunde@gmx.de>
2026-07-22 17:21:31 +02:00
Tiago Condeixa 1b460310a2
add env var for spilo with irsa (#3135) 2026-07-22 16:40:06 +02:00
annielzy 5c6dcc65e2
Preserve sync quorum in primary PDB without master selector (#3119)
* Use minAvalable=SynchronousNodeCount + 1 in primary PDB when master selector is disabled

---------

Co-authored-by: Felix Kunde <felix-kunde@gmx.de>
Co-authored-by: Ida Novindasari <idanovinda@gmail.com>
2026-07-17 11:56:48 +02:00
Tiago Condeixa 7578f9d2c0
feat (operator): add support for IRSA (aws resources access) (#3128)
* fix data to POSIX and sed working on macos
* add ServiceAccountGetter to the newFakeK8sAnnotationsClient for unit tests
* try to update the service account
* use irsa_role_arn since we need the full arn, and remove enable_irsa
* move sa sync code to existing sync.go file to be all together
* change all Irsa to IRSA to follow go idiomatic that capitalize initialisms or acronyms
* using Update instead of Patch for the service account syn
* document the new option and add the key in the values/configs
* add the new option to the administrator docs
* trying to increase the timeout for the flaky test after sync

---------

Co-authored-by: Felix Kunde <felix-kunde@gmx.de>
2026-07-15 18:19:10 +02:00
Felix Kunde 18e359b995
drop deprecated fields from Postgresql CRD (#3106)
* remove deprecated fields from postgresql CRD

---------

Co-authored-by: ida-novindasari_zse <ida.novindasari@zalando.de>
Co-authored-by: Mikkel Oscar Lyderik Larsen <mikkeloscar@users.noreply.github.com>
Co-authored-by: idanovinda <idanovinda@gmail.com>
2026-07-02 16:53:03 +02:00
Felix Kunde a3d17c12d2
document changed configmap default (#3116)
* document changed configmap default
* update config reference
* add warning message in sync
* address review comments
2026-07-02 14:04:57 +02:00
Felix Kunde 1227fc2e1c
switch to metav1.Duration for timeout options (#3121)
* switch to metav1.Duration for timeout options
* fix custom config parsing and use safe coalesce
2026-06-29 10:32:24 +02:00
Felix Kunde df3224730f
Update to Go 1.26.4, build runners and go.mod depedencies (#3108)
* update golang and dependencies
* fix incorrect log formatting
* clean mod chache and introduce GOARCH in Dockerfile (choose dynamically)
* remove GO111MODULE mentions
* bump github actions from v2 to v3
* bump docker runners to v7
* use extra event store for backwards compatibility with existing codebase
* updated generated opconfig api
2026-06-23 13:35:53 +02:00
Jociele Padilha e4e686588e
Fix/logical backup job cleanup (#3111)
* feat(logical-backup): add configurable job history limits and TTL

Adds three new configuration options for logical backup cronjobs:
- logical_backup_successful_jobs_history_limit (default: 3)
- logical_backup_failed_jobs_history_limit (default: 3)
- logical_backup_ttl_seconds_after_finished (default: 86400)

These options control how many completed/failed backup jobs are
retained by Kubernetes and when finished jobs are automatically
deleted. This prevents accumulation of old backup jobs and pods
in namespaces with many PostgreSQL clusters.

Also updates the CronJob comparison logic to detect changes in
these new fields and trigger reconciliation when needed.

Closes zalando/postgres-operator#1092

* add added the 3 new fieldson crd

* updated gen api

---------

Co-authored-by: Jairo Llopis <jairo@moduon.team>
Co-authored-by: Felix Kunde <felix-kunde@gmx.de>
2026-06-19 12:12:58 +02:00
Lucas Nikola Pape a71e6bdf7f
feat: implement service type NodePort (#2986)
feat: implement service type NodePort
fix: handle LoadBalancer to NodePort service type transition
move NodePort check before LoadBalancer and remove redundant nodePor
add LB-specific DNS annotations again
2026-06-12 10:02:26 +02:00
Raphael Torquato 873dd548ff
Add cluster_labels and annotations to logical backup CronJob and Jobs (#3085)
* Add cluster_labels and annotations to logical backup CronJob and Jobs

When using the logical backup feature, the CronJob and its created Jobs
were missing the cluster_labels and annotations that are applied to
other cluster resources. This made it difficult to filter or identify
backup jobs using the same labels as other cluster components.

Changes:
- Added ObjectMeta with labels and annotations to JobTemplateSpec
- Updated CronJob ObjectMeta to use the merged labels (including
  'application: spilo-logical-backup')
- Updated tests to expect the new labels
2026-06-10 18:18:54 +02:00
Kadaffy Talavera 40b6c68443
fix: set password encryption default to scram-sha-256 (#2962)
* fix: set password encryption default to scram-sha-256

According to the Postgres official documentation, md5 passwords is
deprecated in favor of scram-sha-256 encryption.

The change in this PR updates the default encryption to the new postgres
default.

Documentation link:  https://www.postgresql.org/docs/18/auth-password.html

>Warning: Support for MD5-encrypted passwords is deprecated and will be removed in a future release of PostgreSQL.

Signed-off-by: Kadaffy Talavera <kadtalavera@gmail.com>

* fix: update user documentation about password encryption

Signed-off-by: Kadaffy Talavera <kadtalavera@gmail.com>

* Apply suggestion from @FxKu

---------

Signed-off-by: Kadaffy Talavera <kadtalavera@gmail.com>
Co-authored-by: Felix Kunde <felix-kunde@gmx.de>
2026-06-04 20:55:04 +02:00
Felix Kunde 4177fa27be
Provide liveness probe for CRD and config (#3089)
* add LivenessProbe to both CRDs 
* auto-generate liveness probe for CRD
* update topolgySpreadConstraint schema validation
* Disable it for config map
2026-06-02 17:31:42 +02:00
thoro f988e4cf0e
Fix deletion timestamp handling for clusters with finalizers (#3015)
When a Postgres cluster has a finalizer, deleting it sets a DeletionTimestamp
but doesn't remove the object until the finalizer is cleared. The operator
was not properly handling these DeletionTimestamp changes:

1. postgresqlUpdate() was filtering out events where only DeletionTimestamp
   changed (it only checked Spec and Annotations), causing the delete to
   never be processed.

2. EventUpdate case in processEvent() didn't check for DeletionTimestamp,
   so even if the event reached the processor, it would run Update() instead
   of Delete().

3. removeFinalizer() used a cached object with stale resourceVersion,
   causing "object has been modified" errors.

Fixes:
- Add explicit DeletionTimestamp check in postgresqlUpdate() to queue the event
- Add DeletionTimestamp check in EventUpdate to call Delete() when set
- Fetch latest object from API before removing finalizer to avoid conflicts

Co-authored-by: Felix Kunde <felix-kunde@gmx.de>
2026-06-01 09:18:20 +02:00
laiminhtrung1997 e871a167ed
Add topologySpreadConstraints configuration to pod spec. (#2530)
* Add topologySpreadConstraints configuration to pod spec.
* Run update-codegen.sh to add deepcopy for new field to the api.
* Reuse configured TopologySpreadConstraints for logical backup.
* Remove x-kubernetes-preserve-unknown-fields and XPreserveUnknownFields.
* Add topologySpreadConstraint example in the complete manifest.
* Add support for helm chart.
* Add documentation for topologySpreadConstraint.
* Update e2e test to patch topologySpreadConstraints into the postgresqls manifest.
* For e2e test, updated the PVC retention policy to remove redundant PVCs.
* Fix e2e test, expected PVC count in end-to-end test after config changes.
2026-05-29 17:07:47 +02:00
Felix Kunde 38d2efa23b
Merge branch 'master' into add-ignore-slots-dcs-config 2026-05-29 11:44:23 +02:00
Sai Asish Y 4d40270890
fix: correct 'occured' typo in error messages (#3094)
* fix: correct 'occured' typo in finalizer error message
* fix: correct 'occured' typo in EBS volume error message
2026-05-11 11:16:37 +02:00
Felix Kunde 618ac156e6
Volume mount length of pooler users (#3093)
* shorten pooler secret mount
* update postgres CRD in helm chart
2026-05-08 17:25:59 +02:00
Mikkel Oscar Lyderik Larsen 3ca1884876
Remove references to registry.opensource.zalan.do (#3092)
Signed-off-by: Mikkel Oscar Lyderik Larsen <mikkel.larsen@zalando.de>
2026-05-08 09:16:10 +02:00
Felix Kunde 388aa246fa
Merge branch 'master' into add-ignore-slots-dcs-config 2026-04-29 20:29:00 +02:00
Felix Kunde e1713705f4
build multi-arch pooler image (#3077)
* build multi-arch pooler image
* add pooler build step in delivery.yaml and bump pooler version
* pull from docker hub not zalando registry
* add pooler step to ghcr workflow
* pass infra roles to auth file via pooler entrypoint
* introduce extra pooler secret for mounting auth_file
* use pbgouncer as image name and push to ghcr on next merge
* build with latest pgbouncer
* integrate new image in e2e process and update pooler image default
* update pooler build dependencies
* build pooler image for e2e test
* more Makefile and e2e run script tweaking

---------

Co-authored-by: Ida Novindasari <idanovinda@gmail.com>
2026-04-28 13:34:36 +02:00
annielzy 97f4de7cc0
Fix rolling update deadlock when pods are stuck in non-running state (#3051)
* add fix to recreate non running pods in syncStatefulsets

* remove TestSyncStatefulSetNonRunningPodsDoNotBlockRecreatio

* revert pod_test

* pod without status

---------

Co-authored-by: Felix Kunde <felix-kunde@gmx.de>
Co-authored-by: Ida Novindasari <idanovinda@gmail.com>
2026-04-28 12:08:34 +02:00
Felix Kunde 688bbf1b9e
update standby check in pooler code (#3088) 2026-04-28 10:17:28 +02:00
Polina Bungina 0ac28e3aad
Do not set aws-load-balancer-connection-idle-timeout by default (#3054)
Co-authored-by: Felix Kunde <felix-kunde@gmx.de>
2026-04-24 14:23:54 +02:00
Andreas Mårtensson 27c969d14b
Set securityContext for backup container (#2117)
Co-authored-by: Felix Kunde <felix-kunde@gmx.de>
2026-04-24 11:06:30 +02:00
Felix Kunde 39cc09ccaa
feature toggle for using maintenance windows (#3074)
* feature toggle for using maintenance windows
2026-04-16 17:13:18 +02:00
Polina Bungina e9478894a8
Avoid rotating pods for PGVERSION change outside of maintenance window (#3065)
* Avoid rotating pods for PGVERSION change outside of maintenance window
* Update docs
2026-04-07 12:16:55 +02:00
Ida Novindasari 421bd6d664
fix: invalid switchover scheduling with default maintenance windows (#3058) 2026-03-24 12:57:15 +01:00
Jorge Solorzano d495825f4b
Remove hardcoded VersionMap from majorversionupgrade (#3043)
Co-authored-by: Felix Kunde <felix-kunde@gmx.de>
2026-03-02 11:13:10 +01:00
Felix Kunde 2a31c403d0
do not reset secrets of standby clusters (#3044)
* do not reset secrets of standby clusters
align error message with unit test
* check for other env vars, too
2026-02-26 17:27:47 +01:00
Ida Novindasari aefe9d8298
chore: add logging for major upgrade failure (#3046) 2026-02-19 09:57:20 +01:00
Zavel Paytsev ca35ac2583
Merge branch 'master' into add-ignore-slots-dcs-config 2026-02-18 11:14:40 -08:00
Ida Novindasari 6ce7c50cec
Add support for pg18 and remove pg13 (#3035)
* Add support for pg18 and remove pg13
* Update general spilo image and use new rebuilt e2e spilo image

---------

Co-authored-by: Polina Bungina <polina.bungina@zalando.de>
2026-02-17 10:19:19 +01:00
Zavel Paytsev ee47030783
Merge branch 'master' into add-ignore-slots-dcs-config 2026-02-03 12:21:37 -08:00
Felix Kunde 4f130f9cce
provide examples for maintenance_windows in manifest examples (#3040) 2026-02-02 16:35:01 +01:00
Felix Kunde b84c58c2a6
add support for global maintenance windows (#3038)
* add support for global maintenance windows
* fix schema validation and trim \ when unmarshalling maintenance window
2026-01-30 11:37:21 +01:00
Mikkel Oscar Lyderik Larsen f05150a81e
Use UpdateStatus instead of patch (#3005)
Signed-off-by: Mikkel Oscar Lyderik Larsen <mikkel.larsen@zalando.de>
Co-authored-by: Felix Kunde <felix-kunde@gmx.de>
2026-01-27 10:44:30 +01:00
Zavel Paytsev 6749c02825
Merge branch 'master' into add-ignore-slots-dcs-config 2026-01-21 13:34:37 -08:00
Polina Bungina b97de5d7f1
Standby section improvements (#3033)
- Allow standby_host to be specified together with wal_path
- Add standby_primary_slot_name
2026-01-19 13:54:27 +01:00
Pavel Zaytsev 7ce55c877e
Merge branch 'master' into add-ignore-slots-dcs-config 2026-01-13 09:53:07 -08:00
Felix Kunde 97115d6e3d
add annotation to ignore resources thresholds (#3030)
* add annotation to ignore resources thresholds
* add test case when annotation key is set but value is not true
2026-01-13 09:33:24 +01:00
Mikkel Oscar Lyderik Larsen a585b17796
Generate postgresql CRD from go structs (#3007)
* Sort postgresql.crd.yaml
* Generate postgresql CRD from go structs
* Expand sidecars, env and initcontainers
* Embed CRD to be submitted by the operator

Signed-off-by: Mikkel Oscar Lyderik Larsen <mikkel.larsen@zalando.de>

---------

Signed-off-by: Mikkel Oscar Lyderik Larsen <mikkel.larsen@zalando.de>
2026-01-12 17:33:28 +01:00
Mikkel Oscar Lyderik Larsen f6839f87b9
Modernize code generation (#3003)
Signed-off-by: Mikkel Oscar Lyderik Larsen <mikkel.larsen@zalando.de>
2026-01-09 14:22:10 +01:00
Pavel Zaytsev d0e215dee3 Add ignore_slots support to Patroni DCS configuration
- Add ignore_slots field to Patroni struct in CRD
- Add ignore_slots to patroniDCS struct for Spilo configuration
- Generate ignore_slots in SPILO_CONFIGURATION when specified
- Update CRD manifest to accept ignore_slots field
- Add unit test for ignore_slots configuration

This enables PostgreSQL 17 native slot synchronization support by allowing
users to configure Patroni to ignore specific replication slot types (e.g.,
logical slots) during failover operations.

Users can now configure ignore_slots in their PostgreSQL manifest:

  patroni:
    ignore_slots:
      - type: logical

This instructs Patroni to ignore logical replication slots during failover,
which is essential for PostgreSQL 17's native logical slot synchronization
feature where slots are automatically synced to standbys.
2025-12-23 16:18:09 -08:00