diff --git a/postgres-operator/Chart.yaml b/postgres-operator/Chart.yaml index 7a7f705..44e8885 100644 --- a/postgres-operator/Chart.yaml +++ b/postgres-operator/Chart.yaml @@ -1,7 +1,7 @@ apiVersion: v2 name: postgres-operator -version: 1.10.1 -appVersion: 1.10.1 +version: 1.11.0 +appVersion: 1.11.0 home: https://github.com/zalando/postgres-operator description: Postgres Operator creates and manages PostgreSQL clusters running in Kubernetes keywords: diff --git a/postgres-operator/crds/operatorconfigurations.yaml b/postgres-operator/crds/operatorconfigurations.yaml index c6d2635..b10be55 100644 --- a/postgres-operator/crds/operatorconfigurations.yaml +++ b/postgres-operator/crds/operatorconfigurations.yaml @@ -68,7 +68,7 @@ spec: type: string docker_image: type: string - default: "ghcr.io/zalando/spilo-15:3.0-p1" + default: "ghcr.io/zalando/spilo-16:3.2-p2" enable_crd_registration: type: boolean default: true @@ -167,10 +167,10 @@ spec: type: string minimal_major_version: type: string - default: "11" + default: "12" target_major_version: type: string - default: "15" + default: "16" kubernetes: type: object properties: @@ -205,9 +205,15 @@ spec: enable_cross_namespace_secret: type: boolean default: false + enable_finalizers: + type: boolean + default: false enable_init_containers: type: boolean default: true + enable_persistent_volume_claim_deletion: + type: boolean + default: true enable_pod_antiaffinity: type: boolean default: false @@ -278,6 +284,19 @@ spec: pdb_name_format: type: string default: "postgres-{cluster}-pdb" + persistent_volume_claim_retention_policy: + type: object + properties: + when_deleted: + type: string + enum: + - "delete" + - "retain" + when_scaled: + type: string + enum: + - "delete" + - "retain" pod_antiaffinity_preferred_during_scheduling: type: boolean default: false @@ -349,19 +368,15 @@ spec: default_cpu_limit: type: string pattern: '^(\d+m|\d+(\.\d{1,3})?)$' - default: "1" default_cpu_request: type: string pattern: '^(\d+m|\d+(\.\d{1,3})?)$' - default: "100m" default_memory_limit: type: string pattern: '^(\d+(e\d+)?|\d+(\.\d+)?(e\d+)?[EPTGMK]i?)$' - default: "500Mi" default_memory_request: type: string pattern: '^(\d+(e\d+)?|\d+(\.\d+)?(e\d+)?[EPTGMK]i?)$' - default: "100Mi" max_cpu_request: type: string pattern: '^(\d+m|\d+(\.\d{1,3})?)$' @@ -371,11 +386,9 @@ spec: min_cpu_limit: type: string pattern: '^(\d+m|\d+(\.\d{1,3})?)$' - default: "250m" min_memory_limit: type: string pattern: '^(\d+(e\d+)?|\d+(\.\d+)?(e\d+)?[EPTGMK]i?)$' - default: "250Mi" timeouts: type: object properties: @@ -489,7 +502,7 @@ spec: pattern: '^(\d+m|\d+(\.\d{1,3})?)$' logical_backup_docker_image: type: string - default: "registry.opensource.zalan.do/acid/logical-backup:v1.10.1" + default: "registry.opensource.zalan.do/acid/logical-backup:v1.11.0" logical_backup_google_application_credentials: type: string logical_backup_job_prefix: @@ -526,6 +539,8 @@ spec: type: string pattern: '^(\d+|\*)(/\d+)?(\s+(\d+|\*)(/\d+)?){4}$' default: "30 00 * * *" + logical_backup_cronjob_environment_secret: + type: string debug: type: object properties: @@ -637,7 +652,7 @@ spec: default: "pooler" connection_pooler_image: type: string - default: "registry.opensource.zalan.do/acid/pgbouncer:master-27" + default: "registry.opensource.zalan.do/acid/pgbouncer:master-32" connection_pooler_max_db_connections: type: integer default: 60 @@ -654,19 +669,15 @@ spec: connection_pooler_default_cpu_limit: type: string pattern: '^(\d+m|\d+(\.\d{1,3})?)$' - default: "1" connection_pooler_default_cpu_request: type: string pattern: '^(\d+m|\d+(\.\d{1,3})?)$' - default: "500m" connection_pooler_default_memory_limit: type: string pattern: '^(\d+(e\d+)?|\d+(\.\d+)?(e\d+)?[EPTGMK]i?)$' - default: "100Mi" connection_pooler_default_memory_request: type: string pattern: '^(\d+(e\d+)?|\d+(\.\d+)?(e\d+)?[EPTGMK]i?)$' - default: "100Mi" patroni: type: object properties: diff --git a/postgres-operator/crds/postgresqls.yaml b/postgres-operator/crds/postgresqls.yaml index 6f938cf..fcb278c 100644 --- a/postgres-operator/crds/postgresqls.yaml +++ b/postgres-operator/crds/postgresqls.yaml @@ -371,12 +371,12 @@ spec: version: type: string enum: - - "10" - "11" - "12" - "13" - "14" - "15" + - "16" parameters: type: object additionalProperties: @@ -441,6 +441,12 @@ spec: pattern: '^(\d+(e\d+)?|\d+(\.\d+)?(e\d+)?[EPTGMK]i?)$' # Note: the value specified here must not be zero or be higher # than the corresponding limit. + hugepages-2Mi: + type: string + pattern: '^(\d+(e\d+)?|\d+(\.\d+)?(e\d+)?[EPTGMK]i?)$' + hugepages-1Gi: + type: string + pattern: '^(\d+(e\d+)?|\d+(\.\d+)?(e\d+)?[EPTGMK]i?)$' requests: type: object properties: @@ -450,6 +456,12 @@ spec: memory: type: string pattern: '^(\d+(e\d+)?|\d+(\.\d+)?(e\d+)?[EPTGMK]i?)$' + hugepages-2Mi: + type: string + pattern: '^(\d+(e\d+)?|\d+(\.\d+)?(e\d+)?[EPTGMK]i?)$' + hugepages-1Gi: + type: string + pattern: '^(\d+(e\d+)?|\d+(\.\d+)?(e\d+)?[EPTGMK]i?)$' schedulerName: type: string serviceAnnotations: @@ -501,6 +513,8 @@ spec: type: integer database: type: string + enableRecovery: + type: boolean filter: type: object additionalProperties: @@ -518,6 +532,8 @@ spec: type: string payloadColumn: type: string + recoveryEventType: + type: string teamId: type: string tls: @@ -596,6 +612,11 @@ spec: - SUPERUSER - nosuperuser - NOSUPERUSER + usersIgnoringSecretRotation: + type: array + nullable: true + items: + type: string usersWithInPlaceSecretRotation: type: array nullable: true diff --git a/postgres-operator/index.yaml b/postgres-operator/index.yaml index 0a489c5..c7bbeee 100644 --- a/postgres-operator/index.yaml +++ b/postgres-operator/index.yaml @@ -1,9 +1,31 @@ apiVersion: v1 entries: postgres-operator: + - apiVersion: v2 + appVersion: 1.11.0 + created: "2024-03-14T17:11:54.311938906+01:00" + description: Postgres Operator creates and manages PostgreSQL clusters running + in Kubernetes + digest: f12f5ae9282dd77d37e3bfd0aa47be58ed0b2f02056889d8f1111bdb2b9fe286 + home: https://github.com/zalando/postgres-operator + keywords: + - postgres + - operator + - cloud-native + - patroni + - spilo + maintainers: + - email: opensource@zalando.de + name: Zalando + name: postgres-operator + sources: + - https://github.com/zalando/postgres-operator + urls: + - postgres-operator-1.11.0.tgz + version: 1.11.0 - apiVersion: v2 appVersion: 1.10.1 - created: "2023-09-07T16:26:25.96185313+02:00" + created: "2024-03-14T17:11:54.3101439+01:00" description: Postgres Operator creates and manages PostgreSQL clusters running in Kubernetes digest: cc3baa41753da92466223d0b334df27e79c882296577b404a8e9071411fcf19c @@ -25,7 +47,7 @@ entries: version: 1.10.1 - apiVersion: v2 appVersion: 1.10.0 - created: "2023-09-07T16:26:25.960303202+02:00" + created: "2024-03-14T17:11:54.308561116+01:00" description: Postgres Operator creates and manages PostgreSQL clusters running in Kubernetes digest: 60fc5c8059dfed175d14e1034b40997d9c59d33ec8ea158c0597f7228ab04b51 @@ -47,7 +69,7 @@ entries: version: 1.10.0 - apiVersion: v2 appVersion: 1.9.0 - created: "2023-09-07T16:26:25.971662154+02:00" + created: "2024-03-14T17:11:54.3194627+01:00" description: Postgres Operator creates and manages PostgreSQL clusters running in Kubernetes digest: 64df90c898ca591eb3a330328173ffaadfbf9ddd474d8c42ed143edc9e3f4276 @@ -69,7 +91,7 @@ entries: version: 1.9.0 - apiVersion: v2 appVersion: 1.8.2 - created: "2023-09-07T16:26:25.97011158+02:00" + created: "2024-03-14T17:11:54.317846817+01:00" description: Postgres Operator creates and manages PostgreSQL clusters running in Kubernetes digest: f77ffad2e98b72a621e5527015cf607935d3ed688f10ba4b626435acb9631b5b @@ -91,7 +113,7 @@ entries: version: 1.8.2 - apiVersion: v2 appVersion: 1.8.1 - created: "2023-09-07T16:26:25.968682347+02:00" + created: "2024-03-14T17:11:54.315242584+01:00" description: Postgres Operator creates and manages PostgreSQL clusters running in Kubernetes digest: ee0c3bb6ba72fa4289ba3b1c6060e5b312dd023faba2a61b4cb7d9e5e2cc57a5 @@ -113,7 +135,7 @@ entries: version: 1.8.1 - apiVersion: v1 appVersion: 1.8.0 - created: "2023-09-07T16:26:25.967242444+02:00" + created: "2024-03-14T17:11:54.313632778+01:00" description: Postgres Operator creates and manages PostgreSQL clusters running in Kubernetes digest: 3ae232cf009e09aa2ad11c171484cd2f1b72e63c59735e58fbe2b6eb842f4c86 @@ -133,48 +155,4 @@ entries: urls: - postgres-operator-1.8.0.tgz version: 1.8.0 - - apiVersion: v1 - appVersion: 1.7.1 - created: "2023-09-07T16:26:25.965786379+02:00" - description: Postgres Operator creates and manages PostgreSQL clusters running - in Kubernetes - digest: 7262563bec0b058e669ae6bcff0226e33fa9ece9c41ac46a53274046afe7700c - home: https://github.com/zalando/postgres-operator - keywords: - - postgres - - operator - - cloud-native - - patroni - - spilo - maintainers: - - email: opensource@zalando.de - name: Zalando - name: postgres-operator - sources: - - https://github.com/zalando/postgres-operator - urls: - - postgres-operator-1.7.1.tgz - version: 1.7.1 - - apiVersion: v1 - appVersion: 1.7.0 - created: "2023-09-07T16:26:25.963469658+02:00" - description: Postgres Operator creates and manages PostgreSQL clusters running - in Kubernetes - digest: c3e99fb94305f81484b8b1af18eefb78681f3b5d057d5ad10565e4afb7c65ffe - home: https://github.com/zalando/postgres-operator - keywords: - - postgres - - operator - - cloud-native - - patroni - - spilo - maintainers: - - email: opensource@zalando.de - name: Zalando - name: postgres-operator - sources: - - https://github.com/zalando/postgres-operator - urls: - - postgres-operator-1.7.0.tgz - version: 1.7.0 -generated: "2023-09-07T16:26:25.958442963+02:00" +generated: "2024-03-14T17:11:54.305930529+01:00" diff --git a/postgres-operator/templates/_helpers.tpl b/postgres-operator/templates/_helpers.tpl index ee3a8dd..0fa4eb8 100644 --- a/postgres-operator/templates/_helpers.tpl +++ b/postgres-operator/templates/_helpers.tpl @@ -38,6 +38,13 @@ Create a pod service account name. {{ default (printf "%s-%v" (include "postgres-operator.fullname" .) "pod") .Values.podServiceAccount.name }} {{- end -}} +{{/* +Create a pod priority class name. +*/}} +{{- define "postgres-pod.priorityClassName" -}} +{{ default (printf "%s-%v" (include "postgres-operator.fullname" .) "pod") .Values.podPriorityClassName.name }} +{{- end -}} + {{/* Create a controller ID. */}} diff --git a/postgres-operator/templates/configmap.yaml b/postgres-operator/templates/configmap.yaml index 471f1ae..9ea5741 100644 --- a/postgres-operator/templates/configmap.yaml +++ b/postgres-operator/templates/configmap.yaml @@ -10,9 +10,9 @@ metadata: app.kubernetes.io/managed-by: {{ .Release.Service }} app.kubernetes.io/instance: {{ .Release.Name }} data: - {{- if .Values.podPriorityClassName }} - pod_priority_class_name: {{ .Values.podPriorityClassName }} - {{- end }} +{{- if or .Values.podPriorityClassName.create .Values.podPriorityClassName.name }} + pod_priority_class_name: {{ include "postgres-pod.priorityClassName" . }} +{{- end }} pod_service_account_name: {{ include "postgres-pod.serviceAccountName" . }} {{- include "flattenValuesForConfigMap" .Values.configGeneral | indent 2 }} {{- include "flattenValuesForConfigMap" .Values.configUsers | indent 2 }} diff --git a/postgres-operator/templates/operatorconfiguration.yaml b/postgres-operator/templates/operatorconfiguration.yaml index 6d3b0eb..59243ee 100644 --- a/postgres-operator/templates/operatorconfiguration.yaml +++ b/postgres-operator/templates/operatorconfiguration.yaml @@ -16,8 +16,8 @@ configuration: major_version_upgrade: {{ toYaml .Values.configMajorVersionUpgrade | indent 4 }} kubernetes: - {{- if .Values.podPriorityClassName }} - pod_priority_class_name: {{ .Values.podPriorityClassName }} + {{- if .Values.podPriorityClassName.name }} + pod_priority_class_name: {{ .Values.podPriorityClassName.name }} {{- end }} pod_service_account_name: {{ include "postgres-pod.serviceAccountName" . }} oauth_token_secret_name: {{ template "postgres-operator.fullname" . }} diff --git a/postgres-operator/templates/postgres-pod-priority-class.yaml b/postgres-operator/templates/postgres-pod-priority-class.yaml index 583639e..de78b50 100644 --- a/postgres-operator/templates/postgres-pod-priority-class.yaml +++ b/postgres-operator/templates/postgres-pod-priority-class.yaml @@ -1,4 +1,4 @@ -{{- if .Values.podPriorityClassName }} +{{- if .Values.podPriorityClassName.create }} apiVersion: scheduling.k8s.io/v1 description: 'Use only for databases controlled by Postgres operator' kind: PriorityClass @@ -8,9 +8,9 @@ metadata: helm.sh/chart: {{ template "postgres-operator.chart" . }} app.kubernetes.io/managed-by: {{ .Release.Service }} app.kubernetes.io/instance: {{ .Release.Name }} - name: {{ .Values.podPriorityClassName }} + name: {{ include "postgres-pod.priorityClassName" . }} namespace: {{ .Release.Namespace }} preemptionPolicy: PreemptLowerPriority globalDefault: false -value: 1000000 +value: {{ .Values.podPriorityClassName.priority }} {{- end }} diff --git a/postgres-operator/values.yaml b/postgres-operator/values.yaml index 4f1d3fa..498efcb 100644 --- a/postgres-operator/values.yaml +++ b/postgres-operator/values.yaml @@ -1,7 +1,7 @@ image: registry: registry.opensource.zalan.do repository: acid/postgres-operator - tag: v1.10.1 + tag: v1.11.0 pullPolicy: "IfNotPresent" # Optionally specify an array of imagePullSecrets. @@ -38,7 +38,7 @@ configGeneral: # etcd connection string for Patroni. Empty uses K8s-native DCS. etcd_host: "" # Spilo docker image - docker_image: ghcr.io/zalando/spilo-15:3.0-p1 + docker_image: ghcr.io/zalando/spilo-16:3.2-p2 # key name for annotation to ignore globally configured instance limits # ignore_instance_limits_annotation_key: "" @@ -89,9 +89,9 @@ configMajorVersionUpgrade: # - acid # minimal Postgres major version that will not automatically be upgraded - minimal_major_version: "11" + minimal_major_version: "12" # target Postgres major version when upgrading clusters automatically - target_major_version: "15" + target_major_version: "16" configKubernetes: # list of additional capabilities for postgres container @@ -123,8 +123,14 @@ configKubernetes: # allow user secrets in other namespaces than the Postgres cluster enable_cross_namespace_secret: false + # use finalizers to ensure all managed resources are deleted prior to the postgresql CR + # this avoids stale resources in case the operator misses a delete event or is not running + # during deletion + enable_finalizers: false # enables initContainers to run actions before Spilo is started enable_init_containers: true + # toggles if operator should delete PVCs on cluster deletion + enable_persistent_volume_claim_deletion: true # toggles pod anti affinity on the Postgres pods enable_pod_antiaffinity: false # toggles PDB to set to MinAvailabe 0 or 1 @@ -165,6 +171,10 @@ configKubernetes: # defines the template for PDB (Pod Disruption Budget) names pdb_name_format: "postgres-{cluster}-pdb" + # specify the PVC retention policy when scaling down and/or deleting + persistent_volume_claim_retention_policy: + when_deleted: "retain" + when_scaled: "retain" # switches pod anti affinity type to `preferredDuringSchedulingIgnoredDuringExecution` pod_antiaffinity_preferred_during_scheduling: false # override topology key for pod anti affinity @@ -348,7 +358,7 @@ configLogicalBackup: # logical_backup_memory_request: "" # image for pods of the logical backup job (example runs pg_dumpall) - logical_backup_docker_image: "registry.opensource.zalan.do/acid/logical-backup:v1.10.1" + logical_backup_docker_image: "registry.opensource.zalan.do/acid/logical-backup:v1.11.0" # path of google cloud service account json file # logical_backup_google_application_credentials: "" @@ -372,6 +382,8 @@ configLogicalBackup: logical_backup_s3_retention_time: "" # backup schedule in the cron format logical_backup_schedule: "30 00 * * *" + # secret to be used as reference for env variables in cronjob + logical_backup_cronjob_environment_secret: "" # automate creation of human users with teams API service configTeamsApi: @@ -416,7 +428,7 @@ configConnectionPooler: # db user for pooler to use connection_pooler_user: "pooler" # docker image - connection_pooler_image: "registry.opensource.zalan.do/acid/pgbouncer:master-27" + connection_pooler_image: "registry.opensource.zalan.do/acid/pgbouncer:master-32" # max db connections the pooler should hold connection_pooler_max_db_connections: 60 # default pooling mode @@ -458,7 +470,14 @@ podServiceAccount: priorityClassName: "" # priority class for database pods -podPriorityClassName: "" +podPriorityClassName: + # If create is false with no name set, no podPriorityClassName is specified. + # Hence, the pod priorityClass is the one with globalDefault set. + # If there is no PriorityClass with globalDefault set, the priority of Pods with no priorityClassName is zero. + create: true + # If not set a name is generated using the fullname template and "-pod" suffix + name: "" + priority: 1000000 resources: limits: