From bbd73354e4f6f3229819839b4379c7fc1fcf0a68 Mon Sep 17 00:00:00 2001
From: tony-landreth <tony.landreth@crunchydata.com>
Date: Thu, 20 Mar 2025 10:12:56 -0400
Subject: [PATCH 1/9] Adds missing gis image from last release

---
 kustomize/install/components/images-by-tag/kustomization.yaml | 3 +++
 1 file changed, 3 insertions(+)

diff --git a/kustomize/install/components/images-by-tag/kustomization.yaml b/kustomize/install/components/images-by-tag/kustomization.yaml
index 6955ac1a..1c45865e 100644
--- a/kustomize/install/components/images-by-tag/kustomization.yaml
+++ b/kustomize/install/components/images-by-tag/kustomization.yaml
@@ -45,3 +45,6 @@ images:
 - name: image-crunchy-postgres-17-gis-3.4
   newName: registry.developers.crunchydata.com/crunchydata/crunchy-postgres-gis
   newTag: ubi8-17.4-3.4-2
+- name: image-crunchy-postgres-17-gis-3.5
+  newName: registry.developers.crunchydata.com/crunchydata/crunchy-postgres-gis
+  newTag: ubi8-17.4-3.5-0

From 2a788cc69a4166db354da594ff2015242c79f23d Mon Sep 17 00:00:00 2001
From: tony-landreth <tony.landreth@crunchydata.com>
Date: Tue, 1 Apr 2025 16:22:21 -0400
Subject: [PATCH 2/9] Updates to v5.8.0

---
 helm/install/Chart.yaml                       |    4 +-
 ...crunchydata.com_crunchybridgeclusters.yaml |   24 +-
 ...res-operator.crunchydata.com_pgadmins.yaml |  709 ++++++-
 ...s-operator.crunchydata.com_pgupgrades.yaml |   90 +-
 ...ator.crunchydata.com_postgresclusters.yaml | 1633 ++++++++++++++---
 helm/install/templates/manager.yaml           |    3 +
 helm/install/templates/role.yaml              |   12 +
 helm/install/values.yaml                      |   34 +-
 .../images-by-tag/kustomization.yaml          |   41 +-
 ...crunchydata.com_crunchybridgeclusters.yaml |   24 +-
 ...res-operator.crunchydata.com_pgadmins.yaml |  709 ++++++-
 ...s-operator.crunchydata.com_pgupgrades.yaml |   90 +-
 ...ator.crunchydata.com_postgresclusters.yaml | 1633 ++++++++++++++---
 kustomize/install/default/kustomization.yaml  |    2 +-
 kustomize/install/manager/kustomization.yaml  |    2 +-
 kustomize/install/manager/manager.yaml        |   13 +-
 kustomize/install/rbac/cluster/role.yaml      |   22 +-
 .../singlenamespace/kustomization.yaml        |    2 +-
 18 files changed, 4352 insertions(+), 695 deletions(-)

diff --git a/helm/install/Chart.yaml b/helm/install/Chart.yaml
index 38fc378e..2ca0eabc 100644
--- a/helm/install/Chart.yaml
+++ b/helm/install/Chart.yaml
@@ -4,5 +4,5 @@ description: Installer for PGO, the open source Postgres Operator from Crunchy D
 
 type: application
 # The version below should match the version on the PostgresCluster CRD
-version: 5.7.4
-appVersion: 5.7.4
+version: 5.8.0
+appVersion: 5.8.0
diff --git a/helm/install/crds/postgres-operator.crunchydata.com_crunchybridgeclusters.yaml b/helm/install/crds/postgres-operator.crunchydata.com_crunchybridgeclusters.yaml
index a9ee680f..d39a89b2 100644
--- a/helm/install/crds/postgres-operator.crunchydata.com_crunchybridgeclusters.yaml
+++ b/helm/install/crds/postgres-operator.crunchydata.com_crunchybridgeclusters.yaml
@@ -2,11 +2,10 @@ apiVersion: apiextensions.k8s.io/v1
 kind: CustomResourceDefinition
 metadata:
   annotations:
-    controller-gen.kubebuilder.io/version: v0.15.0
-  labels:
-    app.kubernetes.io/name: pgo
-    app.kubernetes.io/version: 5.7.4
+    controller-gen.kubebuilder.io/version: v0.17.2
   name: crunchybridgeclusters.postgres-operator.crunchydata.com
+  labels:
+    app.kubernetes.io/version: 5.8.0
 spec:
   group: postgres-operator.crunchydata.com
   names:
@@ -44,11 +43,7 @@ spec:
                 to be managed by Crunchy Data Bridge
               properties:
                 clusterName:
-                  description: |-
-                    The name of the cluster
-                    ---
-                    According to Bridge API/GUI errors,
-                    "Field name should be between 5 and 50 characters in length, containing only unicode characters, unicode numbers, hyphens, spaces, or underscores, and starting with a character", and ending with a character or number.
+                  description: The name of the cluster
                   maxLength: 50
                   minLength: 5
                   pattern: ^[A-Za-z][A-Za-z0-9\-_ ]*[A-Za-z0-9]$
@@ -94,6 +89,7 @@ spec:
                     - aws
                     - azure
                     - gcp
+                  maxLength: 10
                   type: string
                   x-kubernetes-validations:
                     - message: immutable
@@ -161,8 +157,7 @@ spec:
                 conditions:
                   description: conditions represent the observations of postgres cluster's current state.
                   items:
-                    description: "Condition contains details for one aspect of the current state of this API Resource.\n---\nThis struct is intended for direct use as an array at the field path .status.conditions.  For example,\n\n\n\ttype FooStatus struct{\n\t    // Represents the observations of a foo's current state.\n\t    // Known .status.conditions.type are: \"Available\", \"Progressing\", and\
-                      \ \"Degraded\"\n\t    // +patchMergeKey=type\n\t    // +patchStrategy=merge\n\t    // +listType=map\n\t    // +listMapKey=type\n\t    Conditions []metav1.Condition `json:\"conditions,omitempty\" patchStrategy:\"merge\" patchMergeKey:\"type\" protobuf:\"bytes,1,rep,name=conditions\"`\n\n\n\t    // other fields\n\t}"
+                    description: Condition contains details for one aspect of the current state of this API Resource.
                     properties:
                       lastTransitionTime:
                         description: |-
@@ -203,12 +198,7 @@ spec:
                           - Unknown
                         type: string
                       type:
-                        description: |-
-                          type of condition in CamelCase or in foo.example.com/CamelCase.
-                          ---
-                          Many .condition.type values are consistent across resources like Available, but because arbitrary conditions can be
-                          useful (see .node.status.conditions), the ability to deconflict is important.
-                          The regex it matches is (dns1123SubdomainFmt/)?(qualifiedNameFmt)
+                        description: type of condition in CamelCase or in foo.example.com/CamelCase.
                         maxLength: 316
                         pattern: ^([a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*/)?(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])$
                         type: string
diff --git a/helm/install/crds/postgres-operator.crunchydata.com_pgadmins.yaml b/helm/install/crds/postgres-operator.crunchydata.com_pgadmins.yaml
index 6db57a1a..48ca7e75 100644
--- a/helm/install/crds/postgres-operator.crunchydata.com_pgadmins.yaml
+++ b/helm/install/crds/postgres-operator.crunchydata.com_pgadmins.yaml
@@ -2,11 +2,10 @@ apiVersion: apiextensions.k8s.io/v1
 kind: CustomResourceDefinition
 metadata:
   annotations:
-    controller-gen.kubebuilder.io/version: v0.15.0
-  labels:
-    app.kubernetes.io/name: pgo
-    app.kubernetes.io/version: 5.7.4
+    controller-gen.kubebuilder.io/version: v0.17.2
   name: pgadmins.postgres-operator.crunchydata.com
+  labels:
+    app.kubernetes.io/version: 5.8.0
 spec:
   group: postgres-operator.crunchydata.com
   names:
@@ -309,7 +308,7 @@ spec:
                                       pod labels will be ignored. The default value is empty.
                                       The same key is forbidden to exist in both matchLabelKeys and labelSelector.
                                       Also, matchLabelKeys cannot be set when labelSelector isn't set.
-                                      This is an alpha field and requires enabling MatchLabelKeysInPodAffinity feature gate.
+                                      This is a beta field and requires enabling MatchLabelKeysInPodAffinity feature gate (enabled by default).
                                     items:
                                       type: string
                                     type: array
@@ -324,7 +323,7 @@ spec:
                                       pod labels will be ignored. The default value is empty.
                                       The same key is forbidden to exist in both mismatchLabelKeys and labelSelector.
                                       Also, mismatchLabelKeys cannot be set when labelSelector isn't set.
-                                      This is an alpha field and requires enabling MatchLabelKeysInPodAffinity feature gate.
+                                      This is a beta field and requires enabling MatchLabelKeysInPodAffinity feature gate (enabled by default).
                                     items:
                                       type: string
                                     type: array
@@ -485,7 +484,7 @@ spec:
                                   pod labels will be ignored. The default value is empty.
                                   The same key is forbidden to exist in both matchLabelKeys and labelSelector.
                                   Also, matchLabelKeys cannot be set when labelSelector isn't set.
-                                  This is an alpha field and requires enabling MatchLabelKeysInPodAffinity feature gate.
+                                  This is a beta field and requires enabling MatchLabelKeysInPodAffinity feature gate (enabled by default).
                                 items:
                                   type: string
                                 type: array
@@ -500,7 +499,7 @@ spec:
                                   pod labels will be ignored. The default value is empty.
                                   The same key is forbidden to exist in both mismatchLabelKeys and labelSelector.
                                   Also, mismatchLabelKeys cannot be set when labelSelector isn't set.
-                                  This is an alpha field and requires enabling MatchLabelKeysInPodAffinity feature gate.
+                                  This is a beta field and requires enabling MatchLabelKeysInPodAffinity feature gate (enabled by default).
                                 items:
                                   type: string
                                 type: array
@@ -654,7 +653,7 @@ spec:
                                       pod labels will be ignored. The default value is empty.
                                       The same key is forbidden to exist in both matchLabelKeys and labelSelector.
                                       Also, matchLabelKeys cannot be set when labelSelector isn't set.
-                                      This is an alpha field and requires enabling MatchLabelKeysInPodAffinity feature gate.
+                                      This is a beta field and requires enabling MatchLabelKeysInPodAffinity feature gate (enabled by default).
                                     items:
                                       type: string
                                     type: array
@@ -669,7 +668,7 @@ spec:
                                       pod labels will be ignored. The default value is empty.
                                       The same key is forbidden to exist in both mismatchLabelKeys and labelSelector.
                                       Also, mismatchLabelKeys cannot be set when labelSelector isn't set.
-                                      This is an alpha field and requires enabling MatchLabelKeysInPodAffinity feature gate.
+                                      This is a beta field and requires enabling MatchLabelKeysInPodAffinity feature gate (enabled by default).
                                     items:
                                       type: string
                                     type: array
@@ -830,7 +829,7 @@ spec:
                                   pod labels will be ignored. The default value is empty.
                                   The same key is forbidden to exist in both matchLabelKeys and labelSelector.
                                   Also, matchLabelKeys cannot be set when labelSelector isn't set.
-                                  This is an alpha field and requires enabling MatchLabelKeysInPodAffinity feature gate.
+                                  This is a beta field and requires enabling MatchLabelKeysInPodAffinity feature gate (enabled by default).
                                 items:
                                   type: string
                                 type: array
@@ -845,7 +844,7 @@ spec:
                                   pod labels will be ignored. The default value is empty.
                                   The same key is forbidden to exist in both mismatchLabelKeys and labelSelector.
                                   Also, mismatchLabelKeys cannot be set when labelSelector isn't set.
-                                  This is an alpha field and requires enabling MatchLabelKeysInPodAffinity feature gate.
+                                  This is a beta field and requires enabling MatchLabelKeysInPodAffinity feature gate (enabled by default).
                                 items:
                                   type: string
                                 type: array
@@ -936,17 +935,26 @@ spec:
                         More info: https://www.pgadmin.org/docs/pgadmin4/latest/external_database.html
                       properties:
                         key:
-                          description: The key of the secret to select from.  Must be a valid secret key.
+                          description: Name of the data field within the Secret.
+                          maxLength: 253
+                          minLength: 1
+                          pattern: ^[-._a-zA-Z0-9]+$
                           type: string
+                          x-kubernetes-validations:
+                            - message: cannot be "." or start with ".."
+                              rule: self != "." && !self.startsWith("..")
                         name:
-                          default: ""
-                          description: 'Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names'
+                          description: Name of the Secret.
+                          maxLength: 253
+                          minLength: 1
+                          pattern: ^[a-z0-9]([-a-z0-9]*[a-z0-9])?([.][a-z0-9]([-a-z0-9]*[a-z0-9])?)*$
                           type: string
                         optional:
-                          description: Specify whether the Secret or its key must be defined
+                          description: Whether or not the Secret or its data must be defined. Defaults to false.
                           type: boolean
                       required:
                         - key
+                        - name
                       type: object
                       x-kubernetes-map-type: atomic
                     files:
@@ -954,21 +962,20 @@ spec:
                         Files allows the user to mount projected volumes into the pgAdmin
                         container so that files can be referenced by pgAdmin as needed.
                       items:
-                        description: Projection that may be projected along with other supported volume types
+                        description: |-
+                          Projection that may be projected along with other supported volume types.
+                          Exactly one of these fields must be set.
                         properties:
                           clusterTrustBundle:
                             description: |-
                               ClusterTrustBundle allows a pod to access the `.spec.trustBundle` field
                               of ClusterTrustBundle objects in an auto-updating file.
 
-
                               Alpha, gated by the ClusterTrustBundleProjection feature gate.
 
-
                               ClusterTrustBundle objects can either be selected by name, or by the
                               combination of signer name and a label selector.
 
-
                               Kubelet performs aggressive normalization of the PEM contents written
                               into the pod filesystem.  Esoteric PEM features such as inter-block
                               comments and block headers are stripped.  Certificates are deduplicated.
@@ -1091,7 +1098,12 @@ spec:
                                 x-kubernetes-list-type: atomic
                               name:
                                 default: ""
-                                description: 'Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names'
+                                description: |-
+                                  Name of the referent.
+                                  This field is effectively required, but due to backwards compatibility is
+                                  allowed to be empty. Instances of this type with an empty value here are
+                                  almost certainly wrong.
+                                  More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names
                                 type: string
                               optional:
                                 description: optional specify whether the ConfigMap or its keys must be defined
@@ -1203,7 +1215,12 @@ spec:
                                 x-kubernetes-list-type: atomic
                               name:
                                 default: ""
-                                description: 'Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names'
+                                description: |-
+                                  Name of the referent.
+                                  This field is effectively required, but due to backwards compatibility is
+                                  allowed to be empty. Instances of this type with an empty value here are
+                                  almost certainly wrong.
+                                  More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names
                                 type: string
                               optional:
                                 description: optional field specify whether the Secret or its key must be defined
@@ -1242,7 +1259,7 @@ spec:
                       type: array
                     gunicorn:
                       description: |-
-                        Settings for the gunicorn server.
+                        Settings for the Gunicorn server.
                         More info: https://docs.gunicorn.org/en/latest/settings.html
                       type: object
                       x-kubernetes-preserve-unknown-fields: true
@@ -1252,25 +1269,82 @@ spec:
                         More info: https://www.pgadmin.org/docs/pgadmin4/latest/ldap.html
                       properties:
                         key:
-                          description: The key of the secret to select from.  Must be a valid secret key.
+                          description: Name of the data field within the Secret.
+                          maxLength: 253
+                          minLength: 1
+                          pattern: ^[-._a-zA-Z0-9]+$
                           type: string
+                          x-kubernetes-validations:
+                            - message: cannot be "." or start with ".."
+                              rule: self != "." && !self.startsWith("..")
                         name:
-                          default: ""
-                          description: 'Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names'
+                          description: Name of the Secret.
+                          maxLength: 253
+                          minLength: 1
+                          pattern: ^[a-z0-9]([-a-z0-9]*[a-z0-9])?([.][a-z0-9]([-a-z0-9]*[a-z0-9])?)*$
                           type: string
                         optional:
-                          description: Specify whether the Secret or its key must be defined
+                          description: Whether or not the Secret or its data must be defined. Defaults to false.
                           type: boolean
                       required:
                         - key
+                        - name
                       type: object
                       x-kubernetes-map-type: atomic
+                    oauthConfigurations:
+                      description: |-
+                        Secrets for the `OAUTH2_CONFIG` setting. If there are `OAUTH2_CONFIG` values
+                        in the settings field, they will be combined with the values loaded here.
+                        More info: https://www.pgadmin.org/docs/pgadmin4/latest/oauth2.html
+                      items:
+                        properties:
+                          name:
+                            description: The OAUTH2_NAME of this configuration.
+                            maxLength: 20
+                            minLength: 1
+                            pattern: ^[A-Za-z0-9]+$
+                            type: string
+                          secret:
+                            description: A Secret containing the settings of one OAuth2 provider as a JSON object.
+                            properties:
+                              key:
+                                description: Name of the data field within the Secret.
+                                maxLength: 253
+                                minLength: 1
+                                pattern: ^[-._a-zA-Z0-9]+$
+                                type: string
+                                x-kubernetes-validations:
+                                  - message: cannot be "." or start with ".."
+                                    rule: self != "." && !self.startsWith("..")
+                              name:
+                                description: Name of the Secret.
+                                maxLength: 253
+                                minLength: 1
+                                pattern: ^[a-z0-9]([-a-z0-9]*[a-z0-9])?([.][a-z0-9]([-a-z0-9]*[a-z0-9])?)*$
+                                type: string
+                            required:
+                              - key
+                              - name
+                            type: object
+                            x-kubernetes-map-type: atomic
+                        required:
+                          - name
+                          - secret
+                        type: object
+                        x-kubernetes-map-type: atomic
+                      maxItems: 10
+                      minItems: 1
+                      type: array
+                      x-kubernetes-list-map-keys:
+                        - name
+                      x-kubernetes-list-type: map
                     settings:
                       description: |-
                         Settings for the pgAdmin server process. Keys should be uppercase and
                         values must be constants.
                         More info: https://www.pgadmin.org/docs/pgadmin4/latest/config_py.html
                       type: object
+                      x-kubernetes-map-type: granular
                       x-kubernetes-preserve-unknown-fields: true
                   type: object
                 dataVolumeClaimSpec:
@@ -1457,7 +1531,7 @@ spec:
                         set to a Pending state, as reflected by the modifyVolumeStatus field, until such as a resource
                         exists.
                         More info: https://kubernetes.io/docs/concepts/storage/volume-attributes-classes/
-                        (Alpha) Using this field requires the VolumeAttributesClass feature gate to be enabled.
+                        (Beta) Using this field requires the VolumeAttributesClass feature gate to be enabled (off by default).
                       type: string
                     volumeMode:
                       description: |-
@@ -1468,6 +1542,12 @@ spec:
                       description: volumeName is the binding reference to the PersistentVolume backing this claim.
                       type: string
                   type: object
+                  x-kubernetes-map-type: atomic
+                  x-kubernetes-validations:
+                    - message: missing accessModes
+                      rule: 0 < size(self.accessModes)
+                    - message: missing storage request
+                      rule: has(self.resources.requests.storage)
                 image:
                   description: The image name to use for pgAdmin instance.
                   type: string
@@ -1480,6 +1560,7 @@ spec:
                     - Always
                     - Never
                     - IfNotPresent
+                  maxLength: 15
                   type: string
                 imagePullSecrets:
                   description: |-
@@ -1493,11 +1574,555 @@ spec:
                     properties:
                       name:
                         default: ""
-                        description: 'Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names'
+                        description: |-
+                          Name of the referent.
+                          This field is effectively required, but due to backwards compatibility is
+                          allowed to be empty. Instances of this type with an empty value here are
+                          almost certainly wrong.
+                          More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names
                         type: string
                     type: object
                     x-kubernetes-map-type: atomic
                   type: array
+                instrumentation:
+                  description: |-
+                    Configuration for the OpenTelemetry collector container used to collect
+                    logs and metrics.
+                  properties:
+                    config:
+                      description: Config is the place for users to configure exporters and provide files.
+                      properties:
+                        detectors:
+                          description: |-
+                            Resource detectors add identifying attributes to logs and metrics. These run in the order they are defined.
+                            More info: https://github.com/open-telemetry/opentelemetry-collector-contrib/blob/-/processor/resourcedetectionprocessor#readme
+                          items:
+                            properties:
+                              attributes:
+                                additionalProperties:
+                                  type: boolean
+                                description: |-
+                                  Attributes to use from this detector. Detectors usually add every attribute
+                                  they know automatically. Names omitted here behave according to detector defaults.
+                                maxProperties: 30
+                                minProperties: 1
+                                type: object
+                                x-kubernetes-map-type: atomic
+                              name:
+                                description: 'Name of the resource detector to enable: `aks`, `eks`, `gcp`, etc.'
+                                maxLength: 20
+                                minLength: 1
+                                type: string
+                            required:
+                              - name
+                            type: object
+                            x-kubernetes-map-type: atomic
+                          maxItems: 10
+                          minItems: 1
+                          type: array
+                          x-kubernetes-list-map-keys:
+                            - name
+                          x-kubernetes-list-type: map
+                        exporters:
+                          description: |-
+                            Exporters allows users to configure OpenTelemetry exporters that exist
+                            in the collector image.
+                          type: object
+                          x-kubernetes-preserve-unknown-fields: true
+                        files:
+                          description: |-
+                            Files allows the user to mount projected volumes into the collector
+                            Pod so that files can be referenced by the collector as needed.
+                          items:
+                            description: |-
+                              Projection that may be projected along with other supported volume types.
+                              Exactly one of these fields must be set.
+                            properties:
+                              clusterTrustBundle:
+                                description: |-
+                                  ClusterTrustBundle allows a pod to access the `.spec.trustBundle` field
+                                  of ClusterTrustBundle objects in an auto-updating file.
+
+                                  Alpha, gated by the ClusterTrustBundleProjection feature gate.
+
+                                  ClusterTrustBundle objects can either be selected by name, or by the
+                                  combination of signer name and a label selector.
+
+                                  Kubelet performs aggressive normalization of the PEM contents written
+                                  into the pod filesystem.  Esoteric PEM features such as inter-block
+                                  comments and block headers are stripped.  Certificates are deduplicated.
+                                  The ordering of certificates within the file is arbitrary, and Kubelet
+                                  may change the order over time.
+                                properties:
+                                  labelSelector:
+                                    description: |-
+                                      Select all ClusterTrustBundles that match this label selector.  Only has
+                                      effect if signerName is set.  Mutually-exclusive with name.  If unset,
+                                      interpreted as "match nothing".  If set but empty, interpreted as "match
+                                      everything".
+                                    properties:
+                                      matchExpressions:
+                                        description: matchExpressions is a list of label selector requirements. The requirements are ANDed.
+                                        items:
+                                          description: |-
+                                            A label selector requirement is a selector that contains values, a key, and an operator that
+                                            relates the key and values.
+                                          properties:
+                                            key:
+                                              description: key is the label key that the selector applies to.
+                                              type: string
+                                            operator:
+                                              description: |-
+                                                operator represents a key's relationship to a set of values.
+                                                Valid operators are In, NotIn, Exists and DoesNotExist.
+                                              type: string
+                                            values:
+                                              description: |-
+                                                values is an array of string values. If the operator is In or NotIn,
+                                                the values array must be non-empty. If the operator is Exists or DoesNotExist,
+                                                the values array must be empty. This array is replaced during a strategic
+                                                merge patch.
+                                              items:
+                                                type: string
+                                              type: array
+                                              x-kubernetes-list-type: atomic
+                                          required:
+                                            - key
+                                            - operator
+                                          type: object
+                                        type: array
+                                        x-kubernetes-list-type: atomic
+                                      matchLabels:
+                                        additionalProperties:
+                                          type: string
+                                        description: |-
+                                          matchLabels is a map of {key,value} pairs. A single {key,value} in the matchLabels
+                                          map is equivalent to an element of matchExpressions, whose key field is "key", the
+                                          operator is "In", and the values array contains only "value". The requirements are ANDed.
+                                        type: object
+                                    type: object
+                                    x-kubernetes-map-type: atomic
+                                  name:
+                                    description: |-
+                                      Select a single ClusterTrustBundle by object name.  Mutually-exclusive
+                                      with signerName and labelSelector.
+                                    type: string
+                                  optional:
+                                    description: |-
+                                      If true, don't block pod startup if the referenced ClusterTrustBundle(s)
+                                      aren't available.  If using name, then the named ClusterTrustBundle is
+                                      allowed not to exist.  If using signerName, then the combination of
+                                      signerName and labelSelector is allowed to match zero
+                                      ClusterTrustBundles.
+                                    type: boolean
+                                  path:
+                                    description: Relative path from the volume root to write the bundle.
+                                    type: string
+                                  signerName:
+                                    description: |-
+                                      Select all ClusterTrustBundles that match this signer name.
+                                      Mutually-exclusive with name.  The contents of all selected
+                                      ClusterTrustBundles will be unified and deduplicated.
+                                    type: string
+                                required:
+                                  - path
+                                type: object
+                              configMap:
+                                description: configMap information about the configMap data to project
+                                properties:
+                                  items:
+                                    description: |-
+                                      items if unspecified, each key-value pair in the Data field of the referenced
+                                      ConfigMap will be projected into the volume as a file whose name is the
+                                      key and content is the value. If specified, the listed keys will be
+                                      projected into the specified paths, and unlisted keys will not be
+                                      present. If a key is specified which is not present in the ConfigMap,
+                                      the volume setup will error unless it is marked optional. Paths must be
+                                      relative and may not contain the '..' path or start with '..'.
+                                    items:
+                                      description: Maps a string key to a path within a volume.
+                                      properties:
+                                        key:
+                                          description: key is the key to project.
+                                          type: string
+                                        mode:
+                                          description: |-
+                                            mode is Optional: mode bits used to set permissions on this file.
+                                            Must be an octal value between 0000 and 0777 or a decimal value between 0 and 511.
+                                            YAML accepts both octal and decimal values, JSON requires decimal values for mode bits.
+                                            If not specified, the volume defaultMode will be used.
+                                            This might be in conflict with other options that affect the file
+                                            mode, like fsGroup, and the result can be other mode bits set.
+                                          format: int32
+                                          type: integer
+                                        path:
+                                          description: |-
+                                            path is the relative path of the file to map the key to.
+                                            May not be an absolute path.
+                                            May not contain the path element '..'.
+                                            May not start with the string '..'.
+                                          type: string
+                                      required:
+                                        - key
+                                        - path
+                                      type: object
+                                    type: array
+                                    x-kubernetes-list-type: atomic
+                                  name:
+                                    default: ""
+                                    description: |-
+                                      Name of the referent.
+                                      This field is effectively required, but due to backwards compatibility is
+                                      allowed to be empty. Instances of this type with an empty value here are
+                                      almost certainly wrong.
+                                      More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names
+                                    type: string
+                                  optional:
+                                    description: optional specify whether the ConfigMap or its keys must be defined
+                                    type: boolean
+                                type: object
+                                x-kubernetes-map-type: atomic
+                              downwardAPI:
+                                description: downwardAPI information about the downwardAPI data to project
+                                properties:
+                                  items:
+                                    description: Items is a list of DownwardAPIVolume file
+                                    items:
+                                      description: DownwardAPIVolumeFile represents information to create the file containing the pod field
+                                      properties:
+                                        fieldRef:
+                                          description: 'Required: Selects a field of the pod: only annotations, labels, name, namespace and uid are supported.'
+                                          properties:
+                                            apiVersion:
+                                              description: Version of the schema the FieldPath is written in terms of, defaults to "v1".
+                                              type: string
+                                            fieldPath:
+                                              description: Path of the field to select in the specified API version.
+                                              type: string
+                                          required:
+                                            - fieldPath
+                                          type: object
+                                          x-kubernetes-map-type: atomic
+                                        mode:
+                                          description: |-
+                                            Optional: mode bits used to set permissions on this file, must be an octal value
+                                            between 0000 and 0777 or a decimal value between 0 and 511.
+                                            YAML accepts both octal and decimal values, JSON requires decimal values for mode bits.
+                                            If not specified, the volume defaultMode will be used.
+                                            This might be in conflict with other options that affect the file
+                                            mode, like fsGroup, and the result can be other mode bits set.
+                                          format: int32
+                                          type: integer
+                                        path:
+                                          description: 'Required: Path is  the relative path name of the file to be created. Must not be absolute or contain the ''..'' path. Must be utf-8 encoded. The first item of the relative path must not start with ''..'''
+                                          type: string
+                                        resourceFieldRef:
+                                          description: |-
+                                            Selects a resource of the container: only resources limits and requests
+                                            (limits.cpu, limits.memory, requests.cpu and requests.memory) are currently supported.
+                                          properties:
+                                            containerName:
+                                              description: 'Container name: required for volumes, optional for env vars'
+                                              type: string
+                                            divisor:
+                                              anyOf:
+                                                - type: integer
+                                                - type: string
+                                              description: Specifies the output format of the exposed resources, defaults to "1"
+                                              pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$
+                                              x-kubernetes-int-or-string: true
+                                            resource:
+                                              description: 'Required: resource to select'
+                                              type: string
+                                          required:
+                                            - resource
+                                          type: object
+                                          x-kubernetes-map-type: atomic
+                                      required:
+                                        - path
+                                      type: object
+                                    type: array
+                                    x-kubernetes-list-type: atomic
+                                type: object
+                              secret:
+                                description: secret information about the secret data to project
+                                properties:
+                                  items:
+                                    description: |-
+                                      items if unspecified, each key-value pair in the Data field of the referenced
+                                      Secret will be projected into the volume as a file whose name is the
+                                      key and content is the value. If specified, the listed keys will be
+                                      projected into the specified paths, and unlisted keys will not be
+                                      present. If a key is specified which is not present in the Secret,
+                                      the volume setup will error unless it is marked optional. Paths must be
+                                      relative and may not contain the '..' path or start with '..'.
+                                    items:
+                                      description: Maps a string key to a path within a volume.
+                                      properties:
+                                        key:
+                                          description: key is the key to project.
+                                          type: string
+                                        mode:
+                                          description: |-
+                                            mode is Optional: mode bits used to set permissions on this file.
+                                            Must be an octal value between 0000 and 0777 or a decimal value between 0 and 511.
+                                            YAML accepts both octal and decimal values, JSON requires decimal values for mode bits.
+                                            If not specified, the volume defaultMode will be used.
+                                            This might be in conflict with other options that affect the file
+                                            mode, like fsGroup, and the result can be other mode bits set.
+                                          format: int32
+                                          type: integer
+                                        path:
+                                          description: |-
+                                            path is the relative path of the file to map the key to.
+                                            May not be an absolute path.
+                                            May not contain the path element '..'.
+                                            May not start with the string '..'.
+                                          type: string
+                                      required:
+                                        - key
+                                        - path
+                                      type: object
+                                    type: array
+                                    x-kubernetes-list-type: atomic
+                                  name:
+                                    default: ""
+                                    description: |-
+                                      Name of the referent.
+                                      This field is effectively required, but due to backwards compatibility is
+                                      allowed to be empty. Instances of this type with an empty value here are
+                                      almost certainly wrong.
+                                      More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names
+                                    type: string
+                                  optional:
+                                    description: optional field specify whether the Secret or its key must be defined
+                                    type: boolean
+                                type: object
+                                x-kubernetes-map-type: atomic
+                              serviceAccountToken:
+                                description: serviceAccountToken is information about the serviceAccountToken data to project
+                                properties:
+                                  audience:
+                                    description: |-
+                                      audience is the intended audience of the token. A recipient of a token
+                                      must identify itself with an identifier specified in the audience of the
+                                      token, and otherwise should reject the token. The audience defaults to the
+                                      identifier of the apiserver.
+                                    type: string
+                                  expirationSeconds:
+                                    description: |-
+                                      expirationSeconds is the requested duration of validity of the service
+                                      account token. As the token approaches expiration, the kubelet volume
+                                      plugin will proactively rotate the service account token. The kubelet will
+                                      start trying to rotate the token if the token is older than 80 percent of
+                                      its time to live or if the token is older than 24 hours.Defaults to 1 hour
+                                      and must be at least 10 minutes.
+                                    format: int64
+                                    type: integer
+                                  path:
+                                    description: |-
+                                      path is the path relative to the mount point of the file to project the
+                                      token into.
+                                    type: string
+                                required:
+                                  - path
+                                type: object
+                            type: object
+                          minItems: 1
+                          type: array
+                          x-kubernetes-list-type: atomic
+                      type: object
+                    image:
+                      description: |-
+                        Image name to use for collector containers. When omitted, the value
+                        comes from an operator environment variable.
+                      type: string
+                    logs:
+                      description: Logs is the place for users to configure the log collection.
+                      properties:
+                        batches:
+                          description: Log records are exported in small batches. Set this field to change their size and frequency.
+                          properties:
+                            maxDelay:
+                              default: 200ms
+                              description: |-
+                                Maximum time to wait before exporting a log record. Higher numbers
+                                allow more records to be deduplicated and compressed before export.
+                              format: duration
+                              maxLength: 20
+                              minLength: 1
+                              pattern: ^((PT)?( *[0-9]+ *(?i:(ms|s|m)|(milli|sec|min)s?))+|0)$
+                              type: string
+                              x-kubernetes-validations:
+                                - rule: duration("0") <= self && self <= duration("5m")
+                            maxRecords:
+                              description: |-
+                                Maximum number of records to include in an exported batch. When present,
+                                batches this size are sent without any further delay.
+                              format: int32
+                              minimum: 1
+                              type: integer
+                            minRecords:
+                              default: 8192
+                              description: |-
+                                Number of records to wait for before exporting a batch. Higher numbers
+                                allow more records to be deduplicated and compressed before export.
+                              format: int32
+                              minimum: 0
+                              type: integer
+                          type: object
+                          x-kubernetes-map-type: atomic
+                          x-kubernetes-validations:
+                            - message: to disable batching, both minRecords and maxDelay must be zero
+                              rule: (has(self.minRecords) && self.minRecords == 0) == (has(self.maxDelay) && self.maxDelay == duration('0'))
+                            - message: minRecords cannot be larger than maxRecords
+                              rule: '!has(self.maxRecords) || self.minRecords <= self.maxRecords'
+                        exporters:
+                          description: The names of exporters that should send logs.
+                          items:
+                            type: string
+                          minItems: 1
+                          type: array
+                          x-kubernetes-list-type: set
+                        retentionPeriod:
+                          description: |-
+                            How long to retain log files locally. An RFC 3339 duration or a number
+                            and unit: `12 hr`, `3d`, `4 weeks`, etc.
+                          format: duration
+                          maxLength: 20
+                          minLength: 1
+                          pattern: ^(PT)?( *[0-9]+ *(?i:(h|hr|d|w|wk)|(hour|day|week)s?))+$
+                          type: string
+                          x-kubernetes-validations:
+                            - message: must be at least one hour
+                              rule: duration("1h") <= self && self <= duration("8760h")
+                      type: object
+                    metrics:
+                      description: Metrics is the place for users to configure metrics collection.
+                      properties:
+                        customQueries:
+                          description: |-
+                            Where users can turn off built-in metrics and also provide their own
+                            custom queries.
+                          properties:
+                            add:
+                              description: User defined queries and metrics.
+                              items:
+                                properties:
+                                  collectionInterval:
+                                    default: 5s
+                                    description: How often the queries should be run.
+                                    format: duration
+                                    maxLength: 20
+                                    minLength: 1
+                                    pattern: ^((PT)?( *[0-9]+ *(?i:(ms|s|m)|(milli|sec|min)s?))+|0)$
+                                    type: string
+                                    x-kubernetes-validations:
+                                      - rule: duration("0") <= self && self <= duration("60m")
+                                  name:
+                                    description: |-
+                                      The name of this batch of queries, which will be used in naming the OTel
+                                      SqlQuery receiver.
+                                    maxLength: 20
+                                    pattern: ^[^\pZ\pC\pS]+$
+                                    type: string
+                                  queries:
+                                    description: A ConfigMap holding the yaml file that contains the queries.
+                                    properties:
+                                      key:
+                                        description: Name of the data field within the ConfigMap.
+                                        maxLength: 253
+                                        minLength: 1
+                                        pattern: ^[-._a-zA-Z0-9]+$
+                                        type: string
+                                        x-kubernetes-validations:
+                                          - message: cannot be "." or start with ".."
+                                            rule: self != "." && !self.startsWith("..")
+                                      name:
+                                        description: Name of the ConfigMap.
+                                        maxLength: 253
+                                        minLength: 1
+                                        pattern: ^[a-z0-9]([-a-z0-9]*[a-z0-9])?([.][a-z0-9]([-a-z0-9]*[a-z0-9])?)*$
+                                        type: string
+                                    required:
+                                      - key
+                                      - name
+                                    type: object
+                                    x-kubernetes-map-type: atomic
+                                required:
+                                  - name
+                                  - queries
+                                type: object
+                              type: array
+                            remove:
+                              description: |-
+                                A list of built-in queries that should be removed. If all queries for a
+                                given SQL statement are removed, the SQL statement will no longer be run.
+                              items:
+                                type: string
+                              type: array
+                          type: object
+                      type: object
+                    resources:
+                      description: Resources holds the resource requirements for the collector container.
+                      properties:
+                        claims:
+                          description: |-
+                            Claims lists the names of resources, defined in spec.resourceClaims,
+                            that are used by this container.
+
+                            This is an alpha field and requires enabling the
+                            DynamicResourceAllocation feature gate.
+
+                            This field is immutable. It can only be set for containers.
+                          items:
+                            description: ResourceClaim references one entry in PodSpec.ResourceClaims.
+                            properties:
+                              name:
+                                description: |-
+                                  Name must match the name of one entry in pod.spec.resourceClaims of
+                                  the Pod where this field is used. It makes that resource available
+                                  inside a container.
+                                type: string
+                              request:
+                                description: |-
+                                  Request is the name chosen for a request in the referenced claim.
+                                  If empty, everything from the claim is made available, otherwise
+                                  only the result of this request.
+                                type: string
+                            required:
+                              - name
+                            type: object
+                          type: array
+                          x-kubernetes-list-map-keys:
+                            - name
+                          x-kubernetes-list-type: map
+                        limits:
+                          additionalProperties:
+                            anyOf:
+                              - type: integer
+                              - type: string
+                            pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$
+                            x-kubernetes-int-or-string: true
+                          description: |-
+                            Limits describes the maximum amount of compute resources allowed.
+                            More info: https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/
+                          type: object
+                        requests:
+                          additionalProperties:
+                            anyOf:
+                              - type: integer
+                              - type: string
+                            pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$
+                            x-kubernetes-int-or-string: true
+                          description: |-
+                            Requests describes the minimum amount of compute resources required.
+                            If Requests is omitted for a container, it defaults to Limits if that is explicitly specified,
+                            otherwise to an implementation-defined value. Requests cannot exceed Limits.
+                            More info: https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/
+                          type: object
+                      type: object
+                  type: object
                 metadata:
                   description: Metadata contains metadata for custom resources
                   properties:
@@ -1524,11 +2149,9 @@ spec:
                         Claims lists the names of resources, defined in spec.resourceClaims,
                         that are used by this container.
 
-
                         This is an alpha field and requires enabling the
                         DynamicResourceAllocation feature gate.
 
-
                         This field is immutable. It can only be set for containers.
                       items:
                         description: ResourceClaim references one entry in PodSpec.ResourceClaims.
@@ -1539,6 +2162,12 @@ spec:
                               the Pod where this field is used. It makes that resource available
                               inside a container.
                             type: string
+                          request:
+                            description: |-
+                              Request is the name chosen for a request in the referenced claim.
+                              If empty, everything from the claim is made available, otherwise
+                              only the result of this request.
+                            type: string
                         required:
                           - name
                         type: object
@@ -1704,7 +2333,12 @@ spec:
                             type: string
                           name:
                             default: ""
-                            description: 'Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names'
+                            description: |-
+                              Name of the referent.
+                              This field is effectively required, but due to backwards compatibility is
+                              allowed to be empty. Instances of this type with an empty value here are
+                              almost certainly wrong.
+                              More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names
                             type: string
                           optional:
                             description: Specify whether the Secret or its key must be defined
@@ -1720,6 +2354,7 @@ spec:
                         enum:
                           - Administrator
                           - User
+                        maxLength: 15
                         type: string
                       username:
                         description: |-
@@ -1745,8 +2380,7 @@ spec:
                     conditions represent the observations of pgAdmin's current state.
                     Known .status.conditions.type is: "PersistentVolumeResizing"
                   items:
-                    description: "Condition contains details for one aspect of the current state of this API Resource.\n---\nThis struct is intended for direct use as an array at the field path .status.conditions.  For example,\n\n\n\ttype FooStatus struct{\n\t    // Represents the observations of a foo's current state.\n\t    // Known .status.conditions.type are: \"Available\", \"Progressing\", and\
-                      \ \"Degraded\"\n\t    // +patchMergeKey=type\n\t    // +patchStrategy=merge\n\t    // +listType=map\n\t    // +listMapKey=type\n\t    Conditions []metav1.Condition `json:\"conditions,omitempty\" patchStrategy:\"merge\" patchMergeKey:\"type\" protobuf:\"bytes,1,rep,name=conditions\"`\n\n\n\t    // other fields\n\t}"
+                    description: Condition contains details for one aspect of the current state of this API Resource.
                     properties:
                       lastTransitionTime:
                         description: |-
@@ -1787,12 +2421,7 @@ spec:
                           - Unknown
                         type: string
                       type:
-                        description: |-
-                          type of condition in CamelCase or in foo.example.com/CamelCase.
-                          ---
-                          Many .condition.type values are consistent across resources like Available, but because arbitrary conditions can be
-                          useful (see .node.status.conditions), the ability to deconflict is important.
-                          The regex it matches is (dns1123SubdomainFmt/)?(qualifiedNameFmt)
+                        description: type of condition in CamelCase or in foo.example.com/CamelCase.
                         maxLength: 316
                         pattern: ^([a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*/)?(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])$
                         type: string
diff --git a/helm/install/crds/postgres-operator.crunchydata.com_pgupgrades.yaml b/helm/install/crds/postgres-operator.crunchydata.com_pgupgrades.yaml
index ad180c42..e8c3190f 100644
--- a/helm/install/crds/postgres-operator.crunchydata.com_pgupgrades.yaml
+++ b/helm/install/crds/postgres-operator.crunchydata.com_pgupgrades.yaml
@@ -2,11 +2,10 @@ apiVersion: apiextensions.k8s.io/v1
 kind: CustomResourceDefinition
 metadata:
   annotations:
-    controller-gen.kubebuilder.io/version: v0.15.0
-  labels:
-    app.kubernetes.io/name: pgo
-    app.kubernetes.io/version: 5.7.4
+    controller-gen.kubebuilder.io/version: v0.17.2
   name: pgupgrades.postgres-operator.crunchydata.com
+  labels:
+    app.kubernetes.io/version: 5.8.0
 spec:
   group: postgres-operator.crunchydata.com
   names:
@@ -309,7 +308,7 @@ spec:
                                       pod labels will be ignored. The default value is empty.
                                       The same key is forbidden to exist in both matchLabelKeys and labelSelector.
                                       Also, matchLabelKeys cannot be set when labelSelector isn't set.
-                                      This is an alpha field and requires enabling MatchLabelKeysInPodAffinity feature gate.
+                                      This is a beta field and requires enabling MatchLabelKeysInPodAffinity feature gate (enabled by default).
                                     items:
                                       type: string
                                     type: array
@@ -324,7 +323,7 @@ spec:
                                       pod labels will be ignored. The default value is empty.
                                       The same key is forbidden to exist in both mismatchLabelKeys and labelSelector.
                                       Also, mismatchLabelKeys cannot be set when labelSelector isn't set.
-                                      This is an alpha field and requires enabling MatchLabelKeysInPodAffinity feature gate.
+                                      This is a beta field and requires enabling MatchLabelKeysInPodAffinity feature gate (enabled by default).
                                     items:
                                       type: string
                                     type: array
@@ -485,7 +484,7 @@ spec:
                                   pod labels will be ignored. The default value is empty.
                                   The same key is forbidden to exist in both matchLabelKeys and labelSelector.
                                   Also, matchLabelKeys cannot be set when labelSelector isn't set.
-                                  This is an alpha field and requires enabling MatchLabelKeysInPodAffinity feature gate.
+                                  This is a beta field and requires enabling MatchLabelKeysInPodAffinity feature gate (enabled by default).
                                 items:
                                   type: string
                                 type: array
@@ -500,7 +499,7 @@ spec:
                                   pod labels will be ignored. The default value is empty.
                                   The same key is forbidden to exist in both mismatchLabelKeys and labelSelector.
                                   Also, mismatchLabelKeys cannot be set when labelSelector isn't set.
-                                  This is an alpha field and requires enabling MatchLabelKeysInPodAffinity feature gate.
+                                  This is a beta field and requires enabling MatchLabelKeysInPodAffinity feature gate (enabled by default).
                                 items:
                                   type: string
                                 type: array
@@ -654,7 +653,7 @@ spec:
                                       pod labels will be ignored. The default value is empty.
                                       The same key is forbidden to exist in both matchLabelKeys and labelSelector.
                                       Also, matchLabelKeys cannot be set when labelSelector isn't set.
-                                      This is an alpha field and requires enabling MatchLabelKeysInPodAffinity feature gate.
+                                      This is a beta field and requires enabling MatchLabelKeysInPodAffinity feature gate (enabled by default).
                                     items:
                                       type: string
                                     type: array
@@ -669,7 +668,7 @@ spec:
                                       pod labels will be ignored. The default value is empty.
                                       The same key is forbidden to exist in both mismatchLabelKeys and labelSelector.
                                       Also, mismatchLabelKeys cannot be set when labelSelector isn't set.
-                                      This is an alpha field and requires enabling MatchLabelKeysInPodAffinity feature gate.
+                                      This is a beta field and requires enabling MatchLabelKeysInPodAffinity feature gate (enabled by default).
                                     items:
                                       type: string
                                     type: array
@@ -830,7 +829,7 @@ spec:
                                   pod labels will be ignored. The default value is empty.
                                   The same key is forbidden to exist in both matchLabelKeys and labelSelector.
                                   Also, matchLabelKeys cannot be set when labelSelector isn't set.
-                                  This is an alpha field and requires enabling MatchLabelKeysInPodAffinity feature gate.
+                                  This is a beta field and requires enabling MatchLabelKeysInPodAffinity feature gate (enabled by default).
                                 items:
                                   type: string
                                 type: array
@@ -845,7 +844,7 @@ spec:
                                   pod labels will be ignored. The default value is empty.
                                   The same key is forbidden to exist in both mismatchLabelKeys and labelSelector.
                                   Also, mismatchLabelKeys cannot be set when labelSelector isn't set.
-                                  This is an alpha field and requires enabling MatchLabelKeysInPodAffinity feature gate.
+                                  This is a beta field and requires enabling MatchLabelKeysInPodAffinity feature gate (enabled by default).
                                 items:
                                   type: string
                                 type: array
@@ -926,8 +925,9 @@ spec:
                   type: object
                 fromPostgresVersion:
                   description: The major version of PostgreSQL before the upgrade.
+                  format: int32
                   maximum: 17
-                  minimum: 10
+                  minimum: 11
                   type: integer
                 image:
                   description: The image name to use for major PostgreSQL upgrades.
@@ -941,12 +941,13 @@ spec:
                     - Always
                     - Never
                     - IfNotPresent
+                  maxLength: 15
                   type: string
                 imagePullSecrets:
                   description: |-
                     The image pull secrets used to pull from a private registry.
                     Changing this value causes all running PGUpgrade pods to restart.
-                    https://k8s.io/docs/tasks/configure-pod-container/pull-image-private-registry/
+                    https://kubernetes.io/docs/tasks/configure-pod-container/pull-image-private-registry
                   items:
                     description: |-
                       LocalObjectReference contains enough information to let you locate the
@@ -954,11 +955,23 @@ spec:
                     properties:
                       name:
                         default: ""
-                        description: 'Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names'
+                        description: |-
+                          Name of the referent.
+                          This field is effectively required, but due to backwards compatibility is
+                          allowed to be empty. Instances of this type with an empty value here are
+                          almost certainly wrong.
+                          More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names
                         type: string
                     type: object
                     x-kubernetes-map-type: atomic
                   type: array
+                jobs:
+                  description: |-
+                    The number of simultaneous processes pg_upgrade should use.
+                    More info: https://www.postgresql.org/docs/current/pgupgrade.html
+                  format: int32
+                  minimum: 0
+                  type: integer
                 metadata:
                   description: Metadata contains metadata for custom resources
                   properties:
@@ -972,14 +985,14 @@ spec:
                       type: object
                   type: object
                 postgresClusterName:
-                  description: The name of the cluster to be updated
+                  description: The name of the Postgres cluster to upgrade.
                   minLength: 1
                   type: string
                 priorityClassName:
                   description: |-
                     Priority class name for the PGUpgrade pod. Changing this
                     value causes PGUpgrade pod to restart.
-                    More info: https://kubernetes.io/docs/concepts/scheduling-eviction/pod-priority-preemption/
+                    More info: https://kubernetes.io/docs/concepts/scheduling-eviction/pod-priority-preemption
                   type: string
                 resources:
                   description: Resource requirements for the PGUpgrade container.
@@ -989,11 +1002,9 @@ spec:
                         Claims lists the names of resources, defined in spec.resourceClaims,
                         that are used by this container.
 
-
                         This is an alpha field and requires enabling the
                         DynamicResourceAllocation feature gate.
 
-
                         This field is immutable. It can only be set for containers.
                       items:
                         description: ResourceClaim references one entry in PodSpec.ResourceClaims.
@@ -1004,6 +1015,12 @@ spec:
                               the Pod where this field is used. It makes that resource available
                               inside a container.
                             type: string
+                          request:
+                            description: |-
+                              Request is the name chosen for a request in the referenced claim.
+                              If empty, everything from the claim is made available, otherwise
+                              only the result of this request.
+                            type: string
                         required:
                           - name
                         type: object
@@ -1036,15 +1053,11 @@ spec:
                         More info: https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/
                       type: object
                   type: object
-                toPostgresImage:
-                  description: |-
-                    The image name to use for PostgreSQL containers after upgrade.
-                    When omitted, the value comes from an operator environment variable.
-                  type: string
                 toPostgresVersion:
                   description: The major version of PostgreSQL to be upgraded to.
+                  format: int32
                   maximum: 17
-                  minimum: 10
+                  minimum: 11
                   type: integer
                 tolerations:
                   description: |-
@@ -1087,19 +1100,35 @@ spec:
                         type: string
                     type: object
                   type: array
+                transferMethod:
+                  description: |-
+                    The method pg_upgrade should use to transfer files to the new cluster.
+                    More info: https://www.postgresql.org/docs/current/pgupgrade.html
+                  enum:
+                    - Clone
+                    - Copy
+                    - CopyFileRange
+                    - Link
+                  maxLength: 15
+                  type: string
               required:
                 - fromPostgresVersion
                 - postgresClusterName
                 - toPostgresVersion
               type: object
+              x-kubernetes-validations:
+                - rule: self.fromPostgresVersion < self.toPostgresVersion
+                - message: Only Copy or Link before PostgreSQL 12
+                  rule: '!has(self.transferMethod) || (self.toPostgresVersion < 12 ? self.transferMethod in ["Copy","Link"] : true)'
+                - message: Only Clone, Copy, or Link before PostgreSQL 17
+                  rule: '!has(self.transferMethod) || (self.toPostgresVersion < 17 ? self.transferMethod in ["Clone","Copy","Link"] : true)'
             status:
               description: PGUpgradeStatus defines the observed state of PGUpgrade
               properties:
                 conditions:
                   description: conditions represent the observations of PGUpgrade's current state.
                   items:
-                    description: "Condition contains details for one aspect of the current state of this API Resource.\n---\nThis struct is intended for direct use as an array at the field path .status.conditions.  For example,\n\n\n\ttype FooStatus struct{\n\t    // Represents the observations of a foo's current state.\n\t    // Known .status.conditions.type are: \"Available\", \"Progressing\", and\
-                      \ \"Degraded\"\n\t    // +patchMergeKey=type\n\t    // +patchStrategy=merge\n\t    // +listType=map\n\t    // +listMapKey=type\n\t    Conditions []metav1.Condition `json:\"conditions,omitempty\" patchStrategy:\"merge\" patchMergeKey:\"type\" protobuf:\"bytes,1,rep,name=conditions\"`\n\n\n\t    // other fields\n\t}"
+                    description: Condition contains details for one aspect of the current state of this API Resource.
                     properties:
                       lastTransitionTime:
                         description: |-
@@ -1140,12 +1169,7 @@ spec:
                           - Unknown
                         type: string
                       type:
-                        description: |-
-                          type of condition in CamelCase or in foo.example.com/CamelCase.
-                          ---
-                          Many .condition.type values are consistent across resources like Available, but because arbitrary conditions can be
-                          useful (see .node.status.conditions), the ability to deconflict is important.
-                          The regex it matches is (dns1123SubdomainFmt/)?(qualifiedNameFmt)
+                        description: type of condition in CamelCase or in foo.example.com/CamelCase.
                         maxLength: 316
                         pattern: ^([a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*/)?(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])$
                         type: string
diff --git a/helm/install/crds/postgres-operator.crunchydata.com_postgresclusters.yaml b/helm/install/crds/postgres-operator.crunchydata.com_postgresclusters.yaml
index cd5de8bb..ad20f580 100644
--- a/helm/install/crds/postgres-operator.crunchydata.com_postgresclusters.yaml
+++ b/helm/install/crds/postgres-operator.crunchydata.com_postgresclusters.yaml
@@ -2,11 +2,10 @@ apiVersion: apiextensions.k8s.io/v1
 kind: CustomResourceDefinition
 metadata:
   annotations:
-    controller-gen.kubebuilder.io/version: v0.15.0
-  labels:
-    app.kubernetes.io/name: pgo
-    app.kubernetes.io/version: 5.7.4
+    controller-gen.kubebuilder.io/version: v0.17.2
   name: postgresclusters.postgres-operator.crunchydata.com
+  labels:
+    app.kubernetes.io/version: 5.8.0
 spec:
   group: postgres-operator.crunchydata.com
   names:
@@ -41,6 +40,81 @@ spec:
             spec:
               description: PostgresClusterSpec defines the desired state of PostgresCluster
               properties:
+                authentication:
+                  properties:
+                    rules:
+                      description: 'More info: https://www.postgresql.org/docs/current/auth-pg-hba-conf.html'
+                      items:
+                        properties:
+                          connection:
+                            description: |-
+                              The connection transport this rule matches. Typical values are:
+                               1. "host" for network connections that may or may not be encrypted.
+                               2. "hostssl" for network connections encrypted using TLS.
+                               3. "hostgssenc" for network connections encrypted using GSSAPI.
+                            maxLength: 20
+                            minLength: 1
+                            pattern: ^[-a-z0-9]+$
+                            type: string
+                          databases:
+                            description: Which databases this rule matches. When omitted or empty, this rule matches all databases.
+                            items:
+                              maxLength: 63
+                              minLength: 1
+                              type: string
+                            maxItems: 20
+                            type: array
+                            x-kubernetes-list-type: atomic
+                          hba:
+                            description: One line of the "pg_hba.conf" file. Changes to this value will be automatically reloaded without validation.
+                            maxLength: 100
+                            minLength: 1
+                            pattern: ^[[:print:]]+$
+                            type: string
+                            x-kubernetes-validations:
+                              - message: cannot include other files
+                                rule: '!self.trim().startsWith("include")'
+                          method:
+                            description: |-
+                              The authentication method to use when a connection matches this rule.
+                              The special value "reject" refuses connections that match this rule.
+                              More info: https://www.postgresql.org/docs/current/auth-methods.html
+                            maxLength: 20
+                            minLength: 1
+                            pattern: ^[-a-z0-9]+$
+                            type: string
+                            x-kubernetes-validations:
+                              - message: the "trust" method is unsafe
+                                rule: self != "trust"
+                          options:
+                            additionalProperties:
+                              anyOf:
+                                - type: integer
+                                - type: string
+                              x-kubernetes-int-or-string: true
+                            maxProperties: 20
+                            type: object
+                            x-kubernetes-map-type: atomic
+                          users:
+                            description: Which user names this rule matches. When omitted or empty, this rule matches all users.
+                            items:
+                              maxLength: 63
+                              minLength: 1
+                              type: string
+                            maxItems: 20
+                            type: array
+                            x-kubernetes-list-type: atomic
+                        type: object
+                        x-kubernetes-map-type: atomic
+                        x-kubernetes-validations:
+                          - message: '"hba" cannot be combined with other fields'
+                            rule: 'has(self.hba) ? !has(self.connection) && !has(self.databases) && !has(self.method) && !has(self.options) && !has(self.users) : true'
+                          - message: '"connection" and "method" are required'
+                            rule: 'has(self.hba) ? true : has(self.connection) && has(self.method)'
+                      maxItems: 10
+                      type: array
+                      x-kubernetes-list-type: atomic
+                  type: object
                 backups:
                   description: PostgreSQL backup configuration
                   properties:
@@ -54,21 +128,20 @@ spec:
                             PostgreSQL Operator:
                             https://pgbackrest.org/configuration.html
                           items:
-                            description: Projection that may be projected along with other supported volume types
+                            description: |-
+                              Projection that may be projected along with other supported volume types.
+                              Exactly one of these fields must be set.
                             properties:
                               clusterTrustBundle:
                                 description: |-
                                   ClusterTrustBundle allows a pod to access the `.spec.trustBundle` field
                                   of ClusterTrustBundle objects in an auto-updating file.
 
-
                                   Alpha, gated by the ClusterTrustBundleProjection feature gate.
 
-
                                   ClusterTrustBundle objects can either be selected by name, or by the
                                   combination of signer name and a label selector.
 
-
                                   Kubelet performs aggressive normalization of the PEM contents written
                                   into the pod filesystem.  Esoteric PEM features such as inter-block
                                   comments and block headers are stripped.  Certificates are deduplicated.
@@ -191,7 +264,12 @@ spec:
                                     x-kubernetes-list-type: atomic
                                   name:
                                     default: ""
-                                    description: 'Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names'
+                                    description: |-
+                                      Name of the referent.
+                                      This field is effectively required, but due to backwards compatibility is
+                                      allowed to be empty. Instances of this type with an empty value here are
+                                      almost certainly wrong.
+                                      More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names
                                     type: string
                                   optional:
                                     description: optional specify whether the ConfigMap or its keys must be defined
@@ -303,7 +381,12 @@ spec:
                                     x-kubernetes-list-type: atomic
                                   name:
                                     default: ""
-                                    description: 'Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names'
+                                    description: |-
+                                      Name of the referent.
+                                      This field is effectively required, but due to backwards compatibility is
+                                      allowed to be empty. Instances of this type with an empty value here are
+                                      almost certainly wrong.
+                                      More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names
                                     type: string
                                   optional:
                                     description: optional field specify whether the Secret or its key must be defined
@@ -626,7 +709,7 @@ spec:
                                                   pod labels will be ignored. The default value is empty.
                                                   The same key is forbidden to exist in both matchLabelKeys and labelSelector.
                                                   Also, matchLabelKeys cannot be set when labelSelector isn't set.
-                                                  This is an alpha field and requires enabling MatchLabelKeysInPodAffinity feature gate.
+                                                  This is a beta field and requires enabling MatchLabelKeysInPodAffinity feature gate (enabled by default).
                                                 items:
                                                   type: string
                                                 type: array
@@ -641,7 +724,7 @@ spec:
                                                   pod labels will be ignored. The default value is empty.
                                                   The same key is forbidden to exist in both mismatchLabelKeys and labelSelector.
                                                   Also, mismatchLabelKeys cannot be set when labelSelector isn't set.
-                                                  This is an alpha field and requires enabling MatchLabelKeysInPodAffinity feature gate.
+                                                  This is a beta field and requires enabling MatchLabelKeysInPodAffinity feature gate (enabled by default).
                                                 items:
                                                   type: string
                                                 type: array
@@ -802,7 +885,7 @@ spec:
                                               pod labels will be ignored. The default value is empty.
                                               The same key is forbidden to exist in both matchLabelKeys and labelSelector.
                                               Also, matchLabelKeys cannot be set when labelSelector isn't set.
-                                              This is an alpha field and requires enabling MatchLabelKeysInPodAffinity feature gate.
+                                              This is a beta field and requires enabling MatchLabelKeysInPodAffinity feature gate (enabled by default).
                                             items:
                                               type: string
                                             type: array
@@ -817,7 +900,7 @@ spec:
                                               pod labels will be ignored. The default value is empty.
                                               The same key is forbidden to exist in both mismatchLabelKeys and labelSelector.
                                               Also, mismatchLabelKeys cannot be set when labelSelector isn't set.
-                                              This is an alpha field and requires enabling MatchLabelKeysInPodAffinity feature gate.
+                                              This is a beta field and requires enabling MatchLabelKeysInPodAffinity feature gate (enabled by default).
                                             items:
                                               type: string
                                             type: array
@@ -971,7 +1054,7 @@ spec:
                                                   pod labels will be ignored. The default value is empty.
                                                   The same key is forbidden to exist in both matchLabelKeys and labelSelector.
                                                   Also, matchLabelKeys cannot be set when labelSelector isn't set.
-                                                  This is an alpha field and requires enabling MatchLabelKeysInPodAffinity feature gate.
+                                                  This is a beta field and requires enabling MatchLabelKeysInPodAffinity feature gate (enabled by default).
                                                 items:
                                                   type: string
                                                 type: array
@@ -986,7 +1069,7 @@ spec:
                                                   pod labels will be ignored. The default value is empty.
                                                   The same key is forbidden to exist in both mismatchLabelKeys and labelSelector.
                                                   Also, mismatchLabelKeys cannot be set when labelSelector isn't set.
-                                                  This is an alpha field and requires enabling MatchLabelKeysInPodAffinity feature gate.
+                                                  This is a beta field and requires enabling MatchLabelKeysInPodAffinity feature gate (enabled by default).
                                                 items:
                                                   type: string
                                                 type: array
@@ -1147,7 +1230,7 @@ spec:
                                               pod labels will be ignored. The default value is empty.
                                               The same key is forbidden to exist in both matchLabelKeys and labelSelector.
                                               Also, matchLabelKeys cannot be set when labelSelector isn't set.
-                                              This is an alpha field and requires enabling MatchLabelKeysInPodAffinity feature gate.
+                                              This is a beta field and requires enabling MatchLabelKeysInPodAffinity feature gate (enabled by default).
                                             items:
                                               type: string
                                             type: array
@@ -1162,7 +1245,7 @@ spec:
                                               pod labels will be ignored. The default value is empty.
                                               The same key is forbidden to exist in both mismatchLabelKeys and labelSelector.
                                               Also, mismatchLabelKeys cannot be set when labelSelector isn't set.
-                                              This is an alpha field and requires enabling MatchLabelKeysInPodAffinity feature gate.
+                                              This is a beta field and requires enabling MatchLabelKeysInPodAffinity feature gate (enabled by default).
                                             items:
                                               type: string
                                             type: array
@@ -1256,11 +1339,9 @@ spec:
                                     Claims lists the names of resources, defined in spec.resourceClaims,
                                     that are used by this container.
 
-
                                     This is an alpha field and requires enabling the
                                     DynamicResourceAllocation feature gate.
 
-
                                     This field is immutable. It can only be set for containers.
                                   items:
                                     description: ResourceClaim references one entry in PodSpec.ResourceClaims.
@@ -1271,6 +1352,12 @@ spec:
                                           the Pod where this field is used. It makes that resource available
                                           inside a container.
                                         type: string
+                                      request:
+                                        description: |-
+                                          Request is the name chosen for a request in the referenced claim.
+                                          If empty, everything from the claim is made available, otherwise
+                                          only the result of this request.
+                                        type: string
                                     required:
                                       - name
                                     type: object
@@ -1656,7 +1743,7 @@ spec:
                                                   pod labels will be ignored. The default value is empty.
                                                   The same key is forbidden to exist in both matchLabelKeys and labelSelector.
                                                   Also, matchLabelKeys cannot be set when labelSelector isn't set.
-                                                  This is an alpha field and requires enabling MatchLabelKeysInPodAffinity feature gate.
+                                                  This is a beta field and requires enabling MatchLabelKeysInPodAffinity feature gate (enabled by default).
                                                 items:
                                                   type: string
                                                 type: array
@@ -1671,7 +1758,7 @@ spec:
                                                   pod labels will be ignored. The default value is empty.
                                                   The same key is forbidden to exist in both mismatchLabelKeys and labelSelector.
                                                   Also, mismatchLabelKeys cannot be set when labelSelector isn't set.
-                                                  This is an alpha field and requires enabling MatchLabelKeysInPodAffinity feature gate.
+                                                  This is a beta field and requires enabling MatchLabelKeysInPodAffinity feature gate (enabled by default).
                                                 items:
                                                   type: string
                                                 type: array
@@ -1832,7 +1919,7 @@ spec:
                                               pod labels will be ignored. The default value is empty.
                                               The same key is forbidden to exist in both matchLabelKeys and labelSelector.
                                               Also, matchLabelKeys cannot be set when labelSelector isn't set.
-                                              This is an alpha field and requires enabling MatchLabelKeysInPodAffinity feature gate.
+                                              This is a beta field and requires enabling MatchLabelKeysInPodAffinity feature gate (enabled by default).
                                             items:
                                               type: string
                                             type: array
@@ -1847,7 +1934,7 @@ spec:
                                               pod labels will be ignored. The default value is empty.
                                               The same key is forbidden to exist in both mismatchLabelKeys and labelSelector.
                                               Also, mismatchLabelKeys cannot be set when labelSelector isn't set.
-                                              This is an alpha field and requires enabling MatchLabelKeysInPodAffinity feature gate.
+                                              This is a beta field and requires enabling MatchLabelKeysInPodAffinity feature gate (enabled by default).
                                             items:
                                               type: string
                                             type: array
@@ -2001,7 +2088,7 @@ spec:
                                                   pod labels will be ignored. The default value is empty.
                                                   The same key is forbidden to exist in both matchLabelKeys and labelSelector.
                                                   Also, matchLabelKeys cannot be set when labelSelector isn't set.
-                                                  This is an alpha field and requires enabling MatchLabelKeysInPodAffinity feature gate.
+                                                  This is a beta field and requires enabling MatchLabelKeysInPodAffinity feature gate (enabled by default).
                                                 items:
                                                   type: string
                                                 type: array
@@ -2016,7 +2103,7 @@ spec:
                                                   pod labels will be ignored. The default value is empty.
                                                   The same key is forbidden to exist in both mismatchLabelKeys and labelSelector.
                                                   Also, mismatchLabelKeys cannot be set when labelSelector isn't set.
-                                                  This is an alpha field and requires enabling MatchLabelKeysInPodAffinity feature gate.
+                                                  This is a beta field and requires enabling MatchLabelKeysInPodAffinity feature gate (enabled by default).
                                                 items:
                                                   type: string
                                                 type: array
@@ -2177,7 +2264,7 @@ spec:
                                               pod labels will be ignored. The default value is empty.
                                               The same key is forbidden to exist in both matchLabelKeys and labelSelector.
                                               Also, matchLabelKeys cannot be set when labelSelector isn't set.
-                                              This is an alpha field and requires enabling MatchLabelKeysInPodAffinity feature gate.
+                                              This is a beta field and requires enabling MatchLabelKeysInPodAffinity feature gate (enabled by default).
                                             items:
                                               type: string
                                             type: array
@@ -2192,7 +2279,7 @@ spec:
                                               pod labels will be ignored. The default value is empty.
                                               The same key is forbidden to exist in both mismatchLabelKeys and labelSelector.
                                               Also, mismatchLabelKeys cannot be set when labelSelector isn't set.
-                                              This is an alpha field and requires enabling MatchLabelKeysInPodAffinity feature gate.
+                                              This is a beta field and requires enabling MatchLabelKeysInPodAffinity feature gate (enabled by default).
                                             items:
                                               type: string
                                             type: array
@@ -2285,11 +2372,9 @@ spec:
                                     Claims lists the names of resources, defined in spec.resourceClaims,
                                     that are used by this container.
 
-
                                     This is an alpha field and requires enabling the
                                     DynamicResourceAllocation feature gate.
 
-
                                     This field is immutable. It can only be set for containers.
                                   items:
                                     description: ResourceClaim references one entry in PodSpec.ResourceClaims.
@@ -2300,6 +2385,12 @@ spec:
                                           the Pod where this field is used. It makes that resource available
                                           inside a container.
                                         type: string
+                                      request:
+                                        description: |-
+                                          Request is the name chosen for a request in the referenced claim.
+                                          If empty, everything from the claim is made available, otherwise
+                                          only the result of this request.
+                                        type: string
                                     required:
                                       - name
                                     type: object
@@ -2377,7 +2468,12 @@ spec:
                                   x-kubernetes-list-type: atomic
                                 name:
                                   default: ""
-                                  description: 'Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names'
+                                  description: |-
+                                    Name of the referent.
+                                    This field is effectively required, but due to backwards compatibility is
+                                    allowed to be empty. Instances of this type with an empty value here are
+                                    almost certainly wrong.
+                                    More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names
                                   type: string
                                 optional:
                                   description: optional specify whether the ConfigMap or its keys must be defined
@@ -2429,7 +2525,12 @@ spec:
                                   x-kubernetes-list-type: atomic
                                 name:
                                   default: ""
-                                  description: 'Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names'
+                                  description: |-
+                                    Name of the referent.
+                                    This field is effectively required, but due to backwards compatibility is
+                                    allowed to be empty. Instances of this type with an empty value here are
+                                    almost certainly wrong.
+                                    More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names
                                   type: string
                                 optional:
                                   description: optional field specify whether the Secret or its key must be defined
@@ -2543,7 +2644,6 @@ spec:
                                       Keys that don't exist in the incoming pod labels will
                                       be ignored. A null or empty list means only match against labelSelector.
 
-
                                       This is a beta field and requires the MatchLabelKeysInPodTopologySpread feature gate to be enabled (enabled by default).
                                     items:
                                       type: string
@@ -2583,7 +2683,6 @@ spec:
                                       Valid values are integers greater than 0.
                                       When value is not nil, WhenUnsatisfiable must be DoNotSchedule.
 
-
                                       For example, in a 3-zone cluster, MaxSkew is set to 2, MinDomains is set to 5 and pods with the same
                                       labelSelector spread as 2/2/2:
                                       | zone1 | zone2 | zone3 |
@@ -2601,7 +2700,6 @@ spec:
                                       - Honor: only nodes matching nodeAffinity/nodeSelector are included in the calculations.
                                       - Ignore: nodeAffinity/nodeSelector are ignored. All nodes are included in the calculations.
 
-
                                       If this value is nil, the behavior is equivalent to the Honor policy.
                                       This is a beta-level feature default enabled by the NodeInclusionPolicyInPodTopologySpread feature flag.
                                     type: string
@@ -2613,7 +2711,6 @@ spec:
                                       has a toleration, are included.
                                       - Ignore: node taints are ignored. All nodes are included.
 
-
                                       If this value is nil, the behavior is equivalent to the Ignore policy.
                                       This is a beta-level feature default enabled by the NodeInclusionPolicyInPodTopologySpread feature flag.
                                     type: string
@@ -2744,7 +2841,6 @@ spec:
                                           More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#access-modes-1
                                         items:
                                           type: string
-                                        minItems: 1
                                         type: array
                                         x-kubernetes-list-type: atomic
                                       dataSource:
@@ -2854,11 +2950,7 @@ spec:
                                               If Requests is omitted for a container, it defaults to Limits if that is explicitly specified,
                                               otherwise to an implementation-defined value. Requests cannot exceed Limits.
                                               More info: https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/
-                                            required:
-                                              - storage
                                             type: object
-                                        required:
-                                          - requests
                                         type: object
                                       selector:
                                         description: selector is a label query over volumes to consider for binding.
@@ -2922,7 +3014,7 @@ spec:
                                           set to a Pending state, as reflected by the modifyVolumeStatus field, until such as a resource
                                           exists.
                                           More info: https://kubernetes.io/docs/concepts/storage/volume-attributes-classes/
-                                          (Alpha) Using this field requires the VolumeAttributesClass feature gate to be enabled.
+                                          (Beta) Using this field requires the VolumeAttributesClass feature gate to be enabled (off by default).
                                         type: string
                                       volumeMode:
                                         description: |-
@@ -2932,10 +3024,13 @@ spec:
                                       volumeName:
                                         description: volumeName is the binding reference to the PersistentVolume backing this claim.
                                         type: string
-                                    required:
-                                      - accessModes
-                                      - resources
                                     type: object
+                                    x-kubernetes-map-type: atomic
+                                    x-kubernetes-validations:
+                                      - message: missing accessModes
+                                        rule: 0 < size(self.accessModes)
+                                      - message: missing storage request
+                                        rule: has(self.resources.requests.storage)
                                 required:
                                   - volumeClaimSpec
                                 type: object
@@ -3218,7 +3313,7 @@ spec:
                                                   pod labels will be ignored. The default value is empty.
                                                   The same key is forbidden to exist in both matchLabelKeys and labelSelector.
                                                   Also, matchLabelKeys cannot be set when labelSelector isn't set.
-                                                  This is an alpha field and requires enabling MatchLabelKeysInPodAffinity feature gate.
+                                                  This is a beta field and requires enabling MatchLabelKeysInPodAffinity feature gate (enabled by default).
                                                 items:
                                                   type: string
                                                 type: array
@@ -3233,7 +3328,7 @@ spec:
                                                   pod labels will be ignored. The default value is empty.
                                                   The same key is forbidden to exist in both mismatchLabelKeys and labelSelector.
                                                   Also, mismatchLabelKeys cannot be set when labelSelector isn't set.
-                                                  This is an alpha field and requires enabling MatchLabelKeysInPodAffinity feature gate.
+                                                  This is a beta field and requires enabling MatchLabelKeysInPodAffinity feature gate (enabled by default).
                                                 items:
                                                   type: string
                                                 type: array
@@ -3394,7 +3489,7 @@ spec:
                                               pod labels will be ignored. The default value is empty.
                                               The same key is forbidden to exist in both matchLabelKeys and labelSelector.
                                               Also, matchLabelKeys cannot be set when labelSelector isn't set.
-                                              This is an alpha field and requires enabling MatchLabelKeysInPodAffinity feature gate.
+                                              This is a beta field and requires enabling MatchLabelKeysInPodAffinity feature gate (enabled by default).
                                             items:
                                               type: string
                                             type: array
@@ -3409,7 +3504,7 @@ spec:
                                               pod labels will be ignored. The default value is empty.
                                               The same key is forbidden to exist in both mismatchLabelKeys and labelSelector.
                                               Also, mismatchLabelKeys cannot be set when labelSelector isn't set.
-                                              This is an alpha field and requires enabling MatchLabelKeysInPodAffinity feature gate.
+                                              This is a beta field and requires enabling MatchLabelKeysInPodAffinity feature gate (enabled by default).
                                             items:
                                               type: string
                                             type: array
@@ -3563,7 +3658,7 @@ spec:
                                                   pod labels will be ignored. The default value is empty.
                                                   The same key is forbidden to exist in both matchLabelKeys and labelSelector.
                                                   Also, matchLabelKeys cannot be set when labelSelector isn't set.
-                                                  This is an alpha field and requires enabling MatchLabelKeysInPodAffinity feature gate.
+                                                  This is a beta field and requires enabling MatchLabelKeysInPodAffinity feature gate (enabled by default).
                                                 items:
                                                   type: string
                                                 type: array
@@ -3578,7 +3673,7 @@ spec:
                                                   pod labels will be ignored. The default value is empty.
                                                   The same key is forbidden to exist in both mismatchLabelKeys and labelSelector.
                                                   Also, mismatchLabelKeys cannot be set when labelSelector isn't set.
-                                                  This is an alpha field and requires enabling MatchLabelKeysInPodAffinity feature gate.
+                                                  This is a beta field and requires enabling MatchLabelKeysInPodAffinity feature gate (enabled by default).
                                                 items:
                                                   type: string
                                                 type: array
@@ -3739,7 +3834,7 @@ spec:
                                               pod labels will be ignored. The default value is empty.
                                               The same key is forbidden to exist in both matchLabelKeys and labelSelector.
                                               Also, matchLabelKeys cannot be set when labelSelector isn't set.
-                                              This is an alpha field and requires enabling MatchLabelKeysInPodAffinity feature gate.
+                                              This is a beta field and requires enabling MatchLabelKeysInPodAffinity feature gate (enabled by default).
                                             items:
                                               type: string
                                             type: array
@@ -3754,7 +3849,7 @@ spec:
                                               pod labels will be ignored. The default value is empty.
                                               The same key is forbidden to exist in both mismatchLabelKeys and labelSelector.
                                               Also, mismatchLabelKeys cannot be set when labelSelector isn't set.
-                                              This is an alpha field and requires enabling MatchLabelKeysInPodAffinity feature gate.
+                                              This is a beta field and requires enabling MatchLabelKeysInPodAffinity feature gate (enabled by default).
                                             items:
                                               type: string
                                             type: array
@@ -3875,11 +3970,9 @@ spec:
                                     Claims lists the names of resources, defined in spec.resourceClaims,
                                     that are used by this container.
 
-
                                     This is an alpha field and requires enabling the
                                     DynamicResourceAllocation feature gate.
 
-
                                     This field is immutable. It can only be set for containers.
                                   items:
                                     description: ResourceClaim references one entry in PodSpec.ResourceClaims.
@@ -3890,6 +3983,12 @@ spec:
                                           the Pod where this field is used. It makes that resource available
                                           inside a container.
                                         type: string
+                                      request:
+                                        description: |-
+                                          Request is the name chosen for a request in the referenced claim.
+                                          If empty, everything from the claim is made available, otherwise
+                                          only the result of this request.
+                                        type: string
                                     required:
                                       - name
                                     type: object
@@ -3981,11 +4080,9 @@ spec:
                                         Claims lists the names of resources, defined in spec.resourceClaims,
                                         that are used by this container.
 
-
                                         This is an alpha field and requires enabling the
                                         DynamicResourceAllocation feature gate.
 
-
                                         This field is immutable. It can only be set for containers.
                                       items:
                                         description: ResourceClaim references one entry in PodSpec.ResourceClaims.
@@ -3996,6 +4093,12 @@ spec:
                                               the Pod where this field is used. It makes that resource available
                                               inside a container.
                                             type: string
+                                          request:
+                                            description: |-
+                                              Request is the name chosen for a request in the referenced claim.
+                                              If empty, everything from the claim is made available, otherwise
+                                              only the result of this request.
+                                            type: string
                                         required:
                                           - name
                                         type: object
@@ -4040,11 +4143,9 @@ spec:
                                         Claims lists the names of resources, defined in spec.resourceClaims,
                                         that are used by this container.
 
-
                                         This is an alpha field and requires enabling the
                                         DynamicResourceAllocation feature gate.
 
-
                                         This field is immutable. It can only be set for containers.
                                       items:
                                         description: ResourceClaim references one entry in PodSpec.ResourceClaims.
@@ -4055,6 +4156,12 @@ spec:
                                               the Pod where this field is used. It makes that resource available
                                               inside a container.
                                             type: string
+                                          request:
+                                            description: |-
+                                              Request is the name chosen for a request in the referenced claim.
+                                              If empty, everything from the claim is made available, otherwise
+                                              only the result of this request.
+                                            type: string
                                         required:
                                           - name
                                         type: object
@@ -4106,22 +4213,22 @@ spec:
                 config:
                   properties:
                     files:
+                      description: Files to mount under "/etc/postgres".
                       items:
-                        description: Projection that may be projected along with other supported volume types
+                        description: |-
+                          Projection that may be projected along with other supported volume types.
+                          Exactly one of these fields must be set.
                         properties:
                           clusterTrustBundle:
                             description: |-
                               ClusterTrustBundle allows a pod to access the `.spec.trustBundle` field
                               of ClusterTrustBundle objects in an auto-updating file.
 
-
                               Alpha, gated by the ClusterTrustBundleProjection feature gate.
 
-
                               ClusterTrustBundle objects can either be selected by name, or by the
                               combination of signer name and a label selector.
 
-
                               Kubelet performs aggressive normalization of the PEM contents written
                               into the pod filesystem.  Esoteric PEM features such as inter-block
                               comments and block headers are stripped.  Certificates are deduplicated.
@@ -4244,7 +4351,12 @@ spec:
                                 x-kubernetes-list-type: atomic
                               name:
                                 default: ""
-                                description: 'Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names'
+                                description: |-
+                                  Name of the referent.
+                                  This field is effectively required, but due to backwards compatibility is
+                                  allowed to be empty. Instances of this type with an empty value here are
+                                  almost certainly wrong.
+                                  More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names
                                 type: string
                               optional:
                                 description: optional specify whether the ConfigMap or its keys must be defined
@@ -4356,7 +4468,12 @@ spec:
                                 x-kubernetes-list-type: atomic
                               name:
                                 default: ""
-                                description: 'Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names'
+                                description: |-
+                                  Name of the referent.
+                                  This field is effectively required, but due to backwards compatibility is
+                                  allowed to be empty. Instances of this type with an empty value here are
+                                  almost certainly wrong.
+                                  More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names
                                 type: string
                               optional:
                                 description: optional field specify whether the Secret or its key must be defined
@@ -4393,6 +4510,53 @@ spec:
                             type: object
                         type: object
                       type: array
+                    parameters:
+                      additionalProperties:
+                        anyOf:
+                          - type: integer
+                          - type: string
+                        x-kubernetes-int-or-string: true
+                      description: |-
+                        Configuration parameters for the PostgreSQL server. Some values will
+                        be reloaded without validation and some cause PostgreSQL to restart.
+                        Some values cannot be changed at all.
+                        More info: https://www.postgresql.org/docs/current/runtime-config.html
+                      maxProperties: 50
+                      type: object
+                      x-kubernetes-map-type: granular
+                      x-kubernetes-validations:
+                        - message: 'cannot change PGDATA path: config_file, data_directory'
+                          rule: '!has(self.config_file) && !has(self.data_directory)'
+                        - message: cannot change external_pid_file
+                          rule: '!has(self.external_pid_file)'
+                        - message: 'cannot change authentication path: hba_file, ident_file'
+                          rule: '!has(self.hba_file) && !has(self.ident_file)'
+                        - message: 'network connectivity is always enabled: listen_addresses'
+                          rule: '!has(self.listen_addresses)'
+                        - message: change port using .spec.port instead
+                          rule: '!has(self.port)'
+                        - message: TLS is always enabled
+                          rule: '!has(self.ssl) && !self.exists(k, k.startsWith("ssl_"))'
+                        - message: domain socket paths cannot be changed
+                          rule: '!self.exists(k, k.startsWith("unix_socket_"))'
+                        - message: wal_level must be "replica" or higher
+                          rule: '!has(self.wal_level) || self.wal_level in ["logical"]'
+                        - message: wal_log_hints are always enabled
+                          rule: '!has(self.wal_log_hints)'
+                        - rule: '!has(self.archive_mode) && !has(self.archive_command) && !has(self.restore_command)'
+                        - rule: '!has(self.recovery_target) && !self.exists(k, k.startsWith("recovery_target_"))'
+                        - message: hot_standby is always enabled
+                          rule: '!has(self.hot_standby)'
+                        - rule: '!has(self.synchronous_standby_names)'
+                        - rule: '!has(self.primary_conninfo) && !has(self.primary_slot_name)'
+                        - message: delayed replication is not supported at this time
+                          rule: '!has(self.recovery_min_apply_delay)'
+                        - message: cluster_name is derived from the PostgresCluster name
+                          rule: '!has(self.cluster_name)'
+                        - message: disabling logging_collector is unsafe
+                          rule: '!has(self.logging_collector)'
+                        - message: log_file_mode cannot be changed
+                          rule: '!has(self.log_file_mode)'
                   type: object
                 customReplicationTLSSecret:
                   description: |-
@@ -4443,7 +4607,12 @@ spec:
                       x-kubernetes-list-type: atomic
                     name:
                       default: ""
-                      description: 'Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names'
+                      description: |-
+                        Name of the referent.
+                        This field is effectively required, but due to backwards compatibility is
+                        allowed to be empty. Instances of this type with an empty value here are
+                        almost certainly wrong.
+                        More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names
                       type: string
                     optional:
                       description: optional field specify whether the Secret or its key must be defined
@@ -4502,7 +4671,12 @@ spec:
                       x-kubernetes-list-type: atomic
                     name:
                       default: ""
-                      description: 'Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names'
+                      description: |-
+                        Name of the referent.
+                        This field is effectively required, but due to backwards compatibility is
+                        allowed to be empty. Instances of this type with an empty value here are
+                        almost certainly wrong.
+                        More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names
                       type: string
                     optional:
                       description: optional field specify whether the Secret or its key must be defined
@@ -4787,7 +4961,7 @@ spec:
                                               pod labels will be ignored. The default value is empty.
                                               The same key is forbidden to exist in both matchLabelKeys and labelSelector.
                                               Also, matchLabelKeys cannot be set when labelSelector isn't set.
-                                              This is an alpha field and requires enabling MatchLabelKeysInPodAffinity feature gate.
+                                              This is a beta field and requires enabling MatchLabelKeysInPodAffinity feature gate (enabled by default).
                                             items:
                                               type: string
                                             type: array
@@ -4802,7 +4976,7 @@ spec:
                                               pod labels will be ignored. The default value is empty.
                                               The same key is forbidden to exist in both mismatchLabelKeys and labelSelector.
                                               Also, mismatchLabelKeys cannot be set when labelSelector isn't set.
-                                              This is an alpha field and requires enabling MatchLabelKeysInPodAffinity feature gate.
+                                              This is a beta field and requires enabling MatchLabelKeysInPodAffinity feature gate (enabled by default).
                                             items:
                                               type: string
                                             type: array
@@ -4963,7 +5137,7 @@ spec:
                                           pod labels will be ignored. The default value is empty.
                                           The same key is forbidden to exist in both matchLabelKeys and labelSelector.
                                           Also, matchLabelKeys cannot be set when labelSelector isn't set.
-                                          This is an alpha field and requires enabling MatchLabelKeysInPodAffinity feature gate.
+                                          This is a beta field and requires enabling MatchLabelKeysInPodAffinity feature gate (enabled by default).
                                         items:
                                           type: string
                                         type: array
@@ -4978,7 +5152,7 @@ spec:
                                           pod labels will be ignored. The default value is empty.
                                           The same key is forbidden to exist in both mismatchLabelKeys and labelSelector.
                                           Also, mismatchLabelKeys cannot be set when labelSelector isn't set.
-                                          This is an alpha field and requires enabling MatchLabelKeysInPodAffinity feature gate.
+                                          This is a beta field and requires enabling MatchLabelKeysInPodAffinity feature gate (enabled by default).
                                         items:
                                           type: string
                                         type: array
@@ -5132,7 +5306,7 @@ spec:
                                               pod labels will be ignored. The default value is empty.
                                               The same key is forbidden to exist in both matchLabelKeys and labelSelector.
                                               Also, matchLabelKeys cannot be set when labelSelector isn't set.
-                                              This is an alpha field and requires enabling MatchLabelKeysInPodAffinity feature gate.
+                                              This is a beta field and requires enabling MatchLabelKeysInPodAffinity feature gate (enabled by default).
                                             items:
                                               type: string
                                             type: array
@@ -5147,7 +5321,7 @@ spec:
                                               pod labels will be ignored. The default value is empty.
                                               The same key is forbidden to exist in both mismatchLabelKeys and labelSelector.
                                               Also, mismatchLabelKeys cannot be set when labelSelector isn't set.
-                                              This is an alpha field and requires enabling MatchLabelKeysInPodAffinity feature gate.
+                                              This is a beta field and requires enabling MatchLabelKeysInPodAffinity feature gate (enabled by default).
                                             items:
                                               type: string
                                             type: array
@@ -5308,7 +5482,7 @@ spec:
                                           pod labels will be ignored. The default value is empty.
                                           The same key is forbidden to exist in both matchLabelKeys and labelSelector.
                                           Also, matchLabelKeys cannot be set when labelSelector isn't set.
-                                          This is an alpha field and requires enabling MatchLabelKeysInPodAffinity feature gate.
+                                          This is a beta field and requires enabling MatchLabelKeysInPodAffinity feature gate (enabled by default).
                                         items:
                                           type: string
                                         type: array
@@ -5323,7 +5497,7 @@ spec:
                                           pod labels will be ignored. The default value is empty.
                                           The same key is forbidden to exist in both mismatchLabelKeys and labelSelector.
                                           Also, mismatchLabelKeys cannot be set when labelSelector isn't set.
-                                          This is an alpha field and requires enabling MatchLabelKeysInPodAffinity feature gate.
+                                          This is a beta field and requires enabling MatchLabelKeysInPodAffinity feature gate (enabled by default).
                                         items:
                                           type: string
                                         type: array
@@ -5409,21 +5583,20 @@ spec:
                             PostgreSQL Operator:
                             https://pgbackrest.org/configuration.html
                           items:
-                            description: Projection that may be projected along with other supported volume types
+                            description: |-
+                              Projection that may be projected along with other supported volume types.
+                              Exactly one of these fields must be set.
                             properties:
                               clusterTrustBundle:
                                 description: |-
                                   ClusterTrustBundle allows a pod to access the `.spec.trustBundle` field
                                   of ClusterTrustBundle objects in an auto-updating file.
 
-
                                   Alpha, gated by the ClusterTrustBundleProjection feature gate.
 
-
                                   ClusterTrustBundle objects can either be selected by name, or by the
                                   combination of signer name and a label selector.
 
-
                                   Kubelet performs aggressive normalization of the PEM contents written
                                   into the pod filesystem.  Esoteric PEM features such as inter-block
                                   comments and block headers are stripped.  Certificates are deduplicated.
@@ -5546,7 +5719,12 @@ spec:
                                     x-kubernetes-list-type: atomic
                                   name:
                                     default: ""
-                                    description: 'Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names'
+                                    description: |-
+                                      Name of the referent.
+                                      This field is effectively required, but due to backwards compatibility is
+                                      allowed to be empty. Instances of this type with an empty value here are
+                                      almost certainly wrong.
+                                      More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names
                                     type: string
                                   optional:
                                     description: optional specify whether the ConfigMap or its keys must be defined
@@ -5658,7 +5836,12 @@ spec:
                                     x-kubernetes-list-type: atomic
                                   name:
                                     default: ""
-                                    description: 'Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names'
+                                    description: |-
+                                      Name of the referent.
+                                      This field is effectively required, but due to backwards compatibility is
+                                      allowed to be empty. Instances of this type with an empty value here are
+                                      almost certainly wrong.
+                                      More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names
                                     type: string
                                   optional:
                                     description: optional field specify whether the Secret or its key must be defined
@@ -5974,7 +6157,7 @@ spec:
                                         set to a Pending state, as reflected by the modifyVolumeStatus field, until such as a resource
                                         exists.
                                         More info: https://kubernetes.io/docs/concepts/storage/volume-attributes-classes/
-                                        (Alpha) Using this field requires the VolumeAttributesClass feature gate to be enabled.
+                                        (Beta) Using this field requires the VolumeAttributesClass feature gate to be enabled (off by default).
                                       type: string
                                     volumeMode:
                                       description: |-
@@ -5985,6 +6168,12 @@ spec:
                                       description: volumeName is the binding reference to the PersistentVolume backing this claim.
                                       type: string
                                   type: object
+                                  x-kubernetes-map-type: atomic
+                                  x-kubernetes-validations:
+                                    - message: missing accessModes
+                                      rule: 0 < size(self.accessModes)
+                                    - message: missing storage request
+                                      rule: has(self.resources.requests.storage)
                               required:
                                 - volumeClaimSpec
                               type: object
@@ -5999,11 +6188,9 @@ spec:
                                 Claims lists the names of resources, defined in spec.resourceClaims,
                                 that are used by this container.
 
-
                                 This is an alpha field and requires enabling the
                                 DynamicResourceAllocation feature gate.
 
-
                                 This field is immutable. It can only be set for containers.
                               items:
                                 description: ResourceClaim references one entry in PodSpec.ResourceClaims.
@@ -6014,6 +6201,12 @@ spec:
                                       the Pod where this field is used. It makes that resource available
                                       inside a container.
                                     type: string
+                                  request:
+                                    description: |-
+                                      Request is the name chosen for a request in the referenced claim.
+                                      If empty, everything from the claim is made available, otherwise
+                                      only the result of this request.
+                                    type: string
                                 required:
                                   - name
                                 type: object
@@ -6097,6 +6290,10 @@ spec:
                         - repo
                         - stanza
                       type: object
+                      x-kubernetes-validations:
+                        - fieldPath: .repo
+                          message: Only S3, GCS or Azure repos can be used as a pgBackRest data source.
+                          rule: '!has(self.repo.volume)'
                     postgresCluster:
                       description: |-
                         Defines a pgBackRest data source that can be used to pre-populate the PostgreSQL data
@@ -6372,7 +6569,7 @@ spec:
                                               pod labels will be ignored. The default value is empty.
                                               The same key is forbidden to exist in both matchLabelKeys and labelSelector.
                                               Also, matchLabelKeys cannot be set when labelSelector isn't set.
-                                              This is an alpha field and requires enabling MatchLabelKeysInPodAffinity feature gate.
+                                              This is a beta field and requires enabling MatchLabelKeysInPodAffinity feature gate (enabled by default).
                                             items:
                                               type: string
                                             type: array
@@ -6387,7 +6584,7 @@ spec:
                                               pod labels will be ignored. The default value is empty.
                                               The same key is forbidden to exist in both mismatchLabelKeys and labelSelector.
                                               Also, mismatchLabelKeys cannot be set when labelSelector isn't set.
-                                              This is an alpha field and requires enabling MatchLabelKeysInPodAffinity feature gate.
+                                              This is a beta field and requires enabling MatchLabelKeysInPodAffinity feature gate (enabled by default).
                                             items:
                                               type: string
                                             type: array
@@ -6548,7 +6745,7 @@ spec:
                                           pod labels will be ignored. The default value is empty.
                                           The same key is forbidden to exist in both matchLabelKeys and labelSelector.
                                           Also, matchLabelKeys cannot be set when labelSelector isn't set.
-                                          This is an alpha field and requires enabling MatchLabelKeysInPodAffinity feature gate.
+                                          This is a beta field and requires enabling MatchLabelKeysInPodAffinity feature gate (enabled by default).
                                         items:
                                           type: string
                                         type: array
@@ -6563,7 +6760,7 @@ spec:
                                           pod labels will be ignored. The default value is empty.
                                           The same key is forbidden to exist in both mismatchLabelKeys and labelSelector.
                                           Also, mismatchLabelKeys cannot be set when labelSelector isn't set.
-                                          This is an alpha field and requires enabling MatchLabelKeysInPodAffinity feature gate.
+                                          This is a beta field and requires enabling MatchLabelKeysInPodAffinity feature gate (enabled by default).
                                         items:
                                           type: string
                                         type: array
@@ -6717,7 +6914,7 @@ spec:
                                               pod labels will be ignored. The default value is empty.
                                               The same key is forbidden to exist in both matchLabelKeys and labelSelector.
                                               Also, matchLabelKeys cannot be set when labelSelector isn't set.
-                                              This is an alpha field and requires enabling MatchLabelKeysInPodAffinity feature gate.
+                                              This is a beta field and requires enabling MatchLabelKeysInPodAffinity feature gate (enabled by default).
                                             items:
                                               type: string
                                             type: array
@@ -6732,7 +6929,7 @@ spec:
                                               pod labels will be ignored. The default value is empty.
                                               The same key is forbidden to exist in both mismatchLabelKeys and labelSelector.
                                               Also, mismatchLabelKeys cannot be set when labelSelector isn't set.
-                                              This is an alpha field and requires enabling MatchLabelKeysInPodAffinity feature gate.
+                                              This is a beta field and requires enabling MatchLabelKeysInPodAffinity feature gate (enabled by default).
                                             items:
                                               type: string
                                             type: array
@@ -6893,7 +7090,7 @@ spec:
                                           pod labels will be ignored. The default value is empty.
                                           The same key is forbidden to exist in both matchLabelKeys and labelSelector.
                                           Also, matchLabelKeys cannot be set when labelSelector isn't set.
-                                          This is an alpha field and requires enabling MatchLabelKeysInPodAffinity feature gate.
+                                          This is a beta field and requires enabling MatchLabelKeysInPodAffinity feature gate (enabled by default).
                                         items:
                                           type: string
                                         type: array
@@ -6908,7 +7105,7 @@ spec:
                                           pod labels will be ignored. The default value is empty.
                                           The same key is forbidden to exist in both mismatchLabelKeys and labelSelector.
                                           Also, mismatchLabelKeys cannot be set when labelSelector isn't set.
-                                          This is an alpha field and requires enabling MatchLabelKeysInPodAffinity feature gate.
+                                          This is a beta field and requires enabling MatchLabelKeysInPodAffinity feature gate (enabled by default).
                                         items:
                                           type: string
                                         type: array
@@ -7025,11 +7222,9 @@ spec:
                                 Claims lists the names of resources, defined in spec.resourceClaims,
                                 that are used by this container.
 
-
                                 This is an alpha field and requires enabling the
                                 DynamicResourceAllocation feature gate.
 
-
                                 This field is immutable. It can only be set for containers.
                               items:
                                 description: ResourceClaim references one entry in PodSpec.ResourceClaims.
@@ -7040,6 +7235,12 @@ spec:
                                       the Pod where this field is used. It makes that resource available
                                       inside a container.
                                     type: string
+                                  request:
+                                    description: |-
+                                      Request is the name chosen for a request in the referenced claim.
+                                      If empty, everything from the claim is made available, otherwise
+                                      only the result of this request.
+                                    type: string
                                 required:
                                   - name
                                 type: object
@@ -7211,6 +7412,7 @@ spec:
                     - Always
                     - Never
                     - IfNotPresent
+                  maxLength: 15
                   type: string
                 imagePullSecrets:
                   description: |-
@@ -7224,7 +7426,12 @@ spec:
                     properties:
                       name:
                         default: ""
-                        description: 'Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names'
+                        description: |-
+                          Name of the referent.
+                          This field is effectively required, but due to backwards compatibility is
+                          allowed to be empty. Instances of this type with an empty value here are
+                          almost certainly wrong.
+                          More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names
                         type: string
                     type: object
                     x-kubernetes-map-type: atomic
@@ -7504,7 +7711,7 @@ spec:
                                             pod labels will be ignored. The default value is empty.
                                             The same key is forbidden to exist in both matchLabelKeys and labelSelector.
                                             Also, matchLabelKeys cannot be set when labelSelector isn't set.
-                                            This is an alpha field and requires enabling MatchLabelKeysInPodAffinity feature gate.
+                                            This is a beta field and requires enabling MatchLabelKeysInPodAffinity feature gate (enabled by default).
                                           items:
                                             type: string
                                           type: array
@@ -7519,7 +7726,7 @@ spec:
                                             pod labels will be ignored. The default value is empty.
                                             The same key is forbidden to exist in both mismatchLabelKeys and labelSelector.
                                             Also, mismatchLabelKeys cannot be set when labelSelector isn't set.
-                                            This is an alpha field and requires enabling MatchLabelKeysInPodAffinity feature gate.
+                                            This is a beta field and requires enabling MatchLabelKeysInPodAffinity feature gate (enabled by default).
                                           items:
                                             type: string
                                           type: array
@@ -7680,7 +7887,7 @@ spec:
                                         pod labels will be ignored. The default value is empty.
                                         The same key is forbidden to exist in both matchLabelKeys and labelSelector.
                                         Also, matchLabelKeys cannot be set when labelSelector isn't set.
-                                        This is an alpha field and requires enabling MatchLabelKeysInPodAffinity feature gate.
+                                        This is a beta field and requires enabling MatchLabelKeysInPodAffinity feature gate (enabled by default).
                                       items:
                                         type: string
                                       type: array
@@ -7695,7 +7902,7 @@ spec:
                                         pod labels will be ignored. The default value is empty.
                                         The same key is forbidden to exist in both mismatchLabelKeys and labelSelector.
                                         Also, mismatchLabelKeys cannot be set when labelSelector isn't set.
-                                        This is an alpha field and requires enabling MatchLabelKeysInPodAffinity feature gate.
+                                        This is a beta field and requires enabling MatchLabelKeysInPodAffinity feature gate (enabled by default).
                                       items:
                                         type: string
                                       type: array
@@ -7849,7 +8056,7 @@ spec:
                                             pod labels will be ignored. The default value is empty.
                                             The same key is forbidden to exist in both matchLabelKeys and labelSelector.
                                             Also, matchLabelKeys cannot be set when labelSelector isn't set.
-                                            This is an alpha field and requires enabling MatchLabelKeysInPodAffinity feature gate.
+                                            This is a beta field and requires enabling MatchLabelKeysInPodAffinity feature gate (enabled by default).
                                           items:
                                             type: string
                                           type: array
@@ -7864,7 +8071,7 @@ spec:
                                             pod labels will be ignored. The default value is empty.
                                             The same key is forbidden to exist in both mismatchLabelKeys and labelSelector.
                                             Also, mismatchLabelKeys cannot be set when labelSelector isn't set.
-                                            This is an alpha field and requires enabling MatchLabelKeysInPodAffinity feature gate.
+                                            This is a beta field and requires enabling MatchLabelKeysInPodAffinity feature gate (enabled by default).
                                           items:
                                             type: string
                                           type: array
@@ -8025,7 +8232,7 @@ spec:
                                         pod labels will be ignored. The default value is empty.
                                         The same key is forbidden to exist in both matchLabelKeys and labelSelector.
                                         Also, matchLabelKeys cannot be set when labelSelector isn't set.
-                                        This is an alpha field and requires enabling MatchLabelKeysInPodAffinity feature gate.
+                                        This is a beta field and requires enabling MatchLabelKeysInPodAffinity feature gate (enabled by default).
                                       items:
                                         type: string
                                       type: array
@@ -8040,7 +8247,7 @@ spec:
                                         pod labels will be ignored. The default value is empty.
                                         The same key is forbidden to exist in both mismatchLabelKeys and labelSelector.
                                         Also, mismatchLabelKeys cannot be set when labelSelector isn't set.
-                                        This is an alpha field and requires enabling MatchLabelKeysInPodAffinity feature gate.
+                                        This is a beta field and requires enabling MatchLabelKeysInPodAffinity feature gate (enabled by default).
                                       items:
                                         type: string
                                       type: array
@@ -8187,7 +8394,12 @@ spec:
                                             type: string
                                           name:
                                             default: ""
-                                            description: 'Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names'
+                                            description: |-
+                                              Name of the referent.
+                                              This field is effectively required, but due to backwards compatibility is
+                                              allowed to be empty. Instances of this type with an empty value here are
+                                              almost certainly wrong.
+                                              More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names
                                             type: string
                                           optional:
                                             description: Specify whether the ConfigMap or its key must be defined
@@ -8241,7 +8453,12 @@ spec:
                                             type: string
                                           name:
                                             default: ""
-                                            description: 'Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names'
+                                            description: |-
+                                              Name of the referent.
+                                              This field is effectively required, but due to backwards compatibility is
+                                              allowed to be empty. Instances of this type with an empty value here are
+                                              almost certainly wrong.
+                                              More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names
                                             type: string
                                           optional:
                                             description: Specify whether the Secret or its key must be defined
@@ -8274,7 +8491,12 @@ spec:
                                     properties:
                                       name:
                                         default: ""
-                                        description: 'Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names'
+                                        description: |-
+                                          Name of the referent.
+                                          This field is effectively required, but due to backwards compatibility is
+                                          allowed to be empty. Instances of this type with an empty value here are
+                                          almost certainly wrong.
+                                          More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names
                                         type: string
                                       optional:
                                         description: Specify whether the ConfigMap must be defined
@@ -8289,7 +8511,12 @@ spec:
                                     properties:
                                       name:
                                         default: ""
-                                        description: 'Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names'
+                                        description: |-
+                                          Name of the referent.
+                                          This field is effectively required, but due to backwards compatibility is
+                                          allowed to be empty. Instances of this type with an empty value here are
+                                          almost certainly wrong.
+                                          More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names
                                         type: string
                                       optional:
                                         description: Specify whether the Secret must be defined
@@ -8563,11 +8790,11 @@ spec:
                                       format: int32
                                       type: integer
                                     service:
+                                      default: ""
                                       description: |-
                                         Service is the name of the service to place in the gRPC HealthCheckRequest
                                         (see https://github.com/grpc/grpc/blob/master/doc/health-checking.md).
 
-
                                         If this is not specified, the default behavior is defined by gRPC.
                                       type: string
                                   required:
@@ -8769,11 +8996,11 @@ spec:
                                       format: int32
                                       type: integer
                                     service:
+                                      default: ""
                                       description: |-
                                         Service is the name of the service to place in the gRPC HealthCheckRequest
                                         (see https://github.com/grpc/grpc/blob/master/doc/health-checking.md).
 
-
                                         If this is not specified, the default behavior is defined by gRPC.
                                       type: string
                                   required:
@@ -8916,11 +9143,9 @@ spec:
                                     Claims lists the names of resources, defined in spec.resourceClaims,
                                     that are used by this container.
 
-
                                     This is an alpha field and requires enabling the
                                     DynamicResourceAllocation feature gate.
 
-
                                     This field is immutable. It can only be set for containers.
                                   items:
                                     description: ResourceClaim references one entry in PodSpec.ResourceClaims.
@@ -8931,6 +9156,12 @@ spec:
                                           the Pod where this field is used. It makes that resource available
                                           inside a container.
                                         type: string
+                                      request:
+                                        description: |-
+                                          Request is the name chosen for a request in the referenced claim.
+                                          If empty, everything from the claim is made available, otherwise
+                                          only the result of this request.
+                                        type: string
                                     required:
                                       - name
                                     type: object
@@ -9052,7 +9283,7 @@ spec:
                                 procMount:
                                   description: |-
                                     procMount denotes the type of proc mount to use for the containers.
-                                    The default is DefaultProcMount which uses the container runtime defaults for
+                                    The default value is Default which uses the container runtime defaults for
                                     readonly paths and masked paths.
                                     This requires the ProcMountType feature flag to be enabled.
                                     Note that this field cannot be set when spec.os.name is windows.
@@ -9126,7 +9357,13 @@ spec:
                                         Must be set if type is "Localhost". Must NOT be set for any other type.
                                       type: string
                                     type:
-                                      description: 'type indicates which kind of seccomp profile will be applied. Valid options are: Localhost - a profile defined in a file on the node should be used. RuntimeDefault - the container runtime default profile should be used. Unconfined - no profile should be applied.'
+                                      description: |-
+                                        type indicates which kind of seccomp profile will be applied.
+                                        Valid options are:
+
+                                        Localhost - a profile defined in a file on the node should be used.
+                                        RuntimeDefault - the container runtime default profile should be used.
+                                        Unconfined - no profile should be applied.
                                       type: string
                                   required:
                                     - type
@@ -9202,11 +9439,11 @@ spec:
                                       format: int32
                                       type: integer
                                     service:
+                                      default: ""
                                       description: |-
                                         Service is the name of the service to place in the gRPC HealthCheckRequest
                                         (see https://github.com/grpc/grpc/blob/master/doc/health-checking.md).
 
-
                                         If this is not specified, the default behavior is defined by gRPC.
                                       type: string
                                   required:
@@ -9411,10 +9648,8 @@ spec:
                                       RecursiveReadOnly specifies whether read-only mounts should be handled
                                       recursively.
 
-
                                       If ReadOnly is false, this field has no meaning and must be unspecified.
 
-
                                       If ReadOnly is true, and this field is set to Disabled, the mount is not made
                                       recursively read-only.  If this field is set to IfPossible, the mount is made
                                       recursively read-only, if it is supported by the container runtime.  If this
@@ -9422,11 +9657,9 @@ spec:
                                       supported by the container runtime, otherwise the pod will not be started and
                                       an error will be generated to indicate the reason.
 
-
                                       If this field is set to IfPossible or Enabled, MountPropagation must be set to
                                       None (or be unspecified, which defaults to None).
 
-
                                       If this field is not specified, it is treated as an equivalent of Disabled.
                                     type: string
                                   subPath:
@@ -9471,7 +9704,6 @@ spec:
                               More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#access-modes-1
                             items:
                               type: string
-                            minItems: 1
                             type: array
                             x-kubernetes-list-type: atomic
                           dataSource:
@@ -9581,11 +9813,7 @@ spec:
                                   If Requests is omitted for a container, it defaults to Limits if that is explicitly specified,
                                   otherwise to an implementation-defined value. Requests cannot exceed Limits.
                                   More info: https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/
-                                required:
-                                  - storage
                                 type: object
-                            required:
-                              - requests
                             type: object
                           selector:
                             description: selector is a label query over volumes to consider for binding.
@@ -9649,7 +9877,7 @@ spec:
                               set to a Pending state, as reflected by the modifyVolumeStatus field, until such as a resource
                               exists.
                               More info: https://kubernetes.io/docs/concepts/storage/volume-attributes-classes/
-                              (Alpha) Using this field requires the VolumeAttributesClass feature gate to be enabled.
+                              (Beta) Using this field requires the VolumeAttributesClass feature gate to be enabled (off by default).
                             type: string
                           volumeMode:
                             description: |-
@@ -9659,10 +9887,13 @@ spec:
                           volumeName:
                             description: volumeName is the binding reference to the PersistentVolume backing this claim.
                             type: string
-                        required:
-                          - accessModes
-                          - resources
                         type: object
+                        x-kubernetes-map-type: atomic
+                        x-kubernetes-validations:
+                          - message: missing accessModes
+                            rule: 0 < size(self.accessModes)
+                          - message: missing storage request
+                            rule: has(self.resources.requests.storage)
                       metadata:
                         description: Metadata contains metadata for custom resources
                         properties:
@@ -9712,11 +9943,9 @@ spec:
                               Claims lists the names of resources, defined in spec.resourceClaims,
                               that are used by this container.
 
-
                               This is an alpha field and requires enabling the
                               DynamicResourceAllocation feature gate.
 
-
                               This field is immutable. It can only be set for containers.
                             items:
                               description: ResourceClaim references one entry in PodSpec.ResourceClaims.
@@ -9727,6 +9956,12 @@ spec:
                                     the Pod where this field is used. It makes that resource available
                                     inside a container.
                                   type: string
+                                request:
+                                  description: |-
+                                    Request is the name chosen for a request in the referenced claim.
+                                    If empty, everything from the claim is made available, otherwise
+                                    only the result of this request.
+                                  type: string
                               required:
                                 - name
                               type: object
@@ -9773,11 +10008,9 @@ spec:
                                       Claims lists the names of resources, defined in spec.resourceClaims,
                                       that are used by this container.
 
-
                                       This is an alpha field and requires enabling the
                                       DynamicResourceAllocation feature gate.
 
-
                                       This field is immutable. It can only be set for containers.
                                     items:
                                       description: ResourceClaim references one entry in PodSpec.ResourceClaims.
@@ -9788,6 +10021,12 @@ spec:
                                             the Pod where this field is used. It makes that resource available
                                             inside a container.
                                           type: string
+                                        request:
+                                          description: |-
+                                            Request is the name chosen for a request in the referenced claim.
+                                            If empty, everything from the claim is made available, otherwise
+                                            only the result of this request.
+                                          type: string
                                       required:
                                         - name
                                       type: object
@@ -10012,7 +10251,7 @@ spec:
                                     set to a Pending state, as reflected by the modifyVolumeStatus field, until such as a resource
                                     exists.
                                     More info: https://kubernetes.io/docs/concepts/storage/volume-attributes-classes/
-                                    (Alpha) Using this field requires the VolumeAttributesClass feature gate to be enabled.
+                                    (Beta) Using this field requires the VolumeAttributesClass feature gate to be enabled (off by default).
                                   type: string
                                 volumeMode:
                                   description: |-
@@ -10023,6 +10262,12 @@ spec:
                                   description: volumeName is the binding reference to the PersistentVolume backing this claim.
                                   type: string
                               type: object
+                              x-kubernetes-map-type: atomic
+                              x-kubernetes-validations:
+                                - message: missing accessModes
+                                  rule: 0 < size(self.accessModes)
+                                - message: missing storage request
+                                  rule: has(self.resources.requests.storage)
                             name:
                               description: |-
                                 The name for the tablespace, used as the path name for the volume.
@@ -10145,7 +10390,6 @@ spec:
                                 Keys that don't exist in the incoming pod labels will
                                 be ignored. A null or empty list means only match against labelSelector.
 
-
                                 This is a beta field and requires the MatchLabelKeysInPodTopologySpread feature gate to be enabled (enabled by default).
                               items:
                                 type: string
@@ -10185,7 +10429,6 @@ spec:
                                 Valid values are integers greater than 0.
                                 When value is not nil, WhenUnsatisfiable must be DoNotSchedule.
 
-
                                 For example, in a 3-zone cluster, MaxSkew is set to 2, MinDomains is set to 5 and pods with the same
                                 labelSelector spread as 2/2/2:
                                 | zone1 | zone2 | zone3 |
@@ -10203,7 +10446,6 @@ spec:
                                 - Honor: only nodes matching nodeAffinity/nodeSelector are included in the calculations.
                                 - Ignore: nodeAffinity/nodeSelector are ignored. All nodes are included in the calculations.
 
-
                                 If this value is nil, the behavior is equivalent to the Honor policy.
                                 This is a beta-level feature default enabled by the NodeInclusionPolicyInPodTopologySpread feature flag.
                               type: string
@@ -10215,7 +10457,6 @@ spec:
                                 has a toleration, are included.
                                 - Ignore: node taints are ignored. All nodes are included.
 
-
                                 If this value is nil, the behavior is equivalent to the Ignore policy.
                                 This is a beta-level feature default enabled by the NodeInclusionPolicyInPodTopologySpread feature flag.
                               type: string
@@ -10259,6 +10500,210 @@ spec:
                             - whenUnsatisfiable
                           type: object
                         type: array
+                      volumes:
+                        properties:
+                          temp:
+                            description: |-
+                              An ephemeral volume for temporary files.
+                              More info: https://kubernetes.io/docs/concepts/storage/ephemeral-volumes
+                            properties:
+                              accessModes:
+                                description: |-
+                                  accessModes contains the desired access modes the volume should have.
+                                  More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#access-modes-1
+                                items:
+                                  type: string
+                                type: array
+                                x-kubernetes-list-type: atomic
+                              dataSource:
+                                description: |-
+                                  dataSource field can be used to specify either:
+                                  * An existing VolumeSnapshot object (snapshot.storage.k8s.io/VolumeSnapshot)
+                                  * An existing PVC (PersistentVolumeClaim)
+                                  If the provisioner or an external controller can support the specified data source,
+                                  it will create a new volume based on the contents of the specified data source.
+                                  When the AnyVolumeDataSource feature gate is enabled, dataSource contents will be copied to dataSourceRef,
+                                  and dataSourceRef contents will be copied to dataSource when dataSourceRef.namespace is not specified.
+                                  If the namespace is specified, then dataSourceRef will not be copied to dataSource.
+                                properties:
+                                  apiGroup:
+                                    description: |-
+                                      APIGroup is the group for the resource being referenced.
+                                      If APIGroup is not specified, the specified Kind must be in the core API group.
+                                      For any other third-party types, APIGroup is required.
+                                    type: string
+                                  kind:
+                                    description: Kind is the type of resource being referenced
+                                    type: string
+                                  name:
+                                    description: Name is the name of resource being referenced
+                                    type: string
+                                required:
+                                  - kind
+                                  - name
+                                type: object
+                                x-kubernetes-map-type: atomic
+                              dataSourceRef:
+                                description: |-
+                                  dataSourceRef specifies the object from which to populate the volume with data, if a non-empty
+                                  volume is desired. This may be any object from a non-empty API group (non
+                                  core object) or a PersistentVolumeClaim object.
+                                  When this field is specified, volume binding will only succeed if the type of
+                                  the specified object matches some installed volume populator or dynamic
+                                  provisioner.
+                                  This field will replace the functionality of the dataSource field and as such
+                                  if both fields are non-empty, they must have the same value. For backwards
+                                  compatibility, when namespace isn't specified in dataSourceRef,
+                                  both fields (dataSource and dataSourceRef) will be set to the same
+                                  value automatically if one of them is empty and the other is non-empty.
+                                  When namespace is specified in dataSourceRef,
+                                  dataSource isn't set to the same value and must be empty.
+                                  There are three important differences between dataSource and dataSourceRef:
+                                  * While dataSource only allows two specific types of objects, dataSourceRef
+                                    allows any non-core object, as well as PersistentVolumeClaim objects.
+                                  * While dataSource ignores disallowed values (dropping them), dataSourceRef
+                                    preserves all values, and generates an error if a disallowed value is
+                                    specified.
+                                  * While dataSource only allows local objects, dataSourceRef allows objects
+                                    in any namespaces.
+                                  (Beta) Using this field requires the AnyVolumeDataSource feature gate to be enabled.
+                                  (Alpha) Using the namespace field of dataSourceRef requires the CrossNamespaceVolumeDataSource feature gate to be enabled.
+                                properties:
+                                  apiGroup:
+                                    description: |-
+                                      APIGroup is the group for the resource being referenced.
+                                      If APIGroup is not specified, the specified Kind must be in the core API group.
+                                      For any other third-party types, APIGroup is required.
+                                    type: string
+                                  kind:
+                                    description: Kind is the type of resource being referenced
+                                    type: string
+                                  name:
+                                    description: Name is the name of resource being referenced
+                                    type: string
+                                  namespace:
+                                    description: |-
+                                      Namespace is the namespace of resource being referenced
+                                      Note that when a namespace is specified, a gateway.networking.k8s.io/ReferenceGrant object is required in the referent namespace to allow that namespace's owner to accept the reference. See the ReferenceGrant documentation for details.
+                                      (Alpha) This field requires the CrossNamespaceVolumeDataSource feature gate to be enabled.
+                                    type: string
+                                required:
+                                  - kind
+                                  - name
+                                type: object
+                              resources:
+                                description: |-
+                                  resources represents the minimum resources the volume should have.
+                                  If RecoverVolumeExpansionFailure feature is enabled users are allowed to specify resource requirements
+                                  that are lower than previous value but must still be higher than capacity recorded in the
+                                  status field of the claim.
+                                  More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#resources
+                                properties:
+                                  limits:
+                                    additionalProperties:
+                                      anyOf:
+                                        - type: integer
+                                        - type: string
+                                      pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$
+                                      x-kubernetes-int-or-string: true
+                                    description: |-
+                                      Limits describes the maximum amount of compute resources allowed.
+                                      More info: https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/
+                                    type: object
+                                  requests:
+                                    additionalProperties:
+                                      anyOf:
+                                        - type: integer
+                                        - type: string
+                                      pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$
+                                      x-kubernetes-int-or-string: true
+                                    description: |-
+                                      Requests describes the minimum amount of compute resources required.
+                                      If Requests is omitted for a container, it defaults to Limits if that is explicitly specified,
+                                      otherwise to an implementation-defined value. Requests cannot exceed Limits.
+                                      More info: https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/
+                                    type: object
+                                type: object
+                              selector:
+                                description: selector is a label query over volumes to consider for binding.
+                                properties:
+                                  matchExpressions:
+                                    description: matchExpressions is a list of label selector requirements. The requirements are ANDed.
+                                    items:
+                                      description: |-
+                                        A label selector requirement is a selector that contains values, a key, and an operator that
+                                        relates the key and values.
+                                      properties:
+                                        key:
+                                          description: key is the label key that the selector applies to.
+                                          type: string
+                                        operator:
+                                          description: |-
+                                            operator represents a key's relationship to a set of values.
+                                            Valid operators are In, NotIn, Exists and DoesNotExist.
+                                          type: string
+                                        values:
+                                          description: |-
+                                            values is an array of string values. If the operator is In or NotIn,
+                                            the values array must be non-empty. If the operator is Exists or DoesNotExist,
+                                            the values array must be empty. This array is replaced during a strategic
+                                            merge patch.
+                                          items:
+                                            type: string
+                                          type: array
+                                          x-kubernetes-list-type: atomic
+                                      required:
+                                        - key
+                                        - operator
+                                      type: object
+                                    type: array
+                                    x-kubernetes-list-type: atomic
+                                  matchLabels:
+                                    additionalProperties:
+                                      type: string
+                                    description: |-
+                                      matchLabels is a map of {key,value} pairs. A single {key,value} in the matchLabels
+                                      map is equivalent to an element of matchExpressions, whose key field is "key", the
+                                      operator is "In", and the values array contains only "value". The requirements are ANDed.
+                                    type: object
+                                type: object
+                                x-kubernetes-map-type: atomic
+                              storageClassName:
+                                description: |-
+                                  storageClassName is the name of the StorageClass required by the claim.
+                                  More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#class-1
+                                type: string
+                              volumeAttributesClassName:
+                                description: |-
+                                  volumeAttributesClassName may be used to set the VolumeAttributesClass used by this claim.
+                                  If specified, the CSI driver will create or update the volume with the attributes defined
+                                  in the corresponding VolumeAttributesClass. This has a different purpose than storageClassName,
+                                  it can be changed after the claim is created. An empty string value means that no VolumeAttributesClass
+                                  will be applied to the claim but it's not allowed to reset this field to empty string once it is set.
+                                  If unspecified and the PersistentVolumeClaim is unbound, the default VolumeAttributesClass
+                                  will be set by the persistentvolume controller if it exists.
+                                  If the resource referred to by volumeAttributesClass does not exist, this PersistentVolumeClaim will be
+                                  set to a Pending state, as reflected by the modifyVolumeStatus field, until such as a resource
+                                  exists.
+                                  More info: https://kubernetes.io/docs/concepts/storage/volume-attributes-classes/
+                                  (Beta) Using this field requires the VolumeAttributesClass feature gate to be enabled (off by default).
+                                type: string
+                              volumeMode:
+                                description: |-
+                                  volumeMode defines what type of volume is required by the claim.
+                                  Value of Filesystem is implied when not included in claim spec.
+                                type: string
+                              volumeName:
+                                description: volumeName is the binding reference to the PersistentVolume backing this claim.
+                                type: string
+                            type: object
+                            x-kubernetes-map-type: atomic
+                            x-kubernetes-validations:
+                              - message: missing accessModes
+                                rule: 0 < size(self.accessModes)
+                              - message: missing storage request
+                                rule: has(self.resources.requests.storage)
+                        type: object
                       walVolumeClaimSpec:
                         description: |-
                           Defines a separate PersistentVolumeClaim for PostgreSQL's write-ahead log.
@@ -10270,7 +10715,6 @@ spec:
                               More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#access-modes-1
                             items:
                               type: string
-                            minItems: 1
                             type: array
                             x-kubernetes-list-type: atomic
                           dataSource:
@@ -10380,11 +10824,7 @@ spec:
                                   If Requests is omitted for a container, it defaults to Limits if that is explicitly specified,
                                   otherwise to an implementation-defined value. Requests cannot exceed Limits.
                                   More info: https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/
-                                required:
-                                  - storage
                                 type: object
-                            required:
-                              - requests
                             type: object
                           selector:
                             description: selector is a label query over volumes to consider for binding.
@@ -10448,7 +10888,7 @@ spec:
                               set to a Pending state, as reflected by the modifyVolumeStatus field, until such as a resource
                               exists.
                               More info: https://kubernetes.io/docs/concepts/storage/volume-attributes-classes/
-                              (Alpha) Using this field requires the VolumeAttributesClass feature gate to be enabled.
+                              (Beta) Using this field requires the VolumeAttributesClass feature gate to be enabled (off by default).
                             type: string
                           volumeMode:
                             description: |-
@@ -10458,10 +10898,13 @@ spec:
                           volumeName:
                             description: volumeName is the binding reference to the PersistentVolume backing this claim.
                             type: string
-                        required:
-                          - accessModes
-                          - resources
                         type: object
+                        x-kubernetes-map-type: atomic
+                        x-kubernetes-validations:
+                          - message: missing accessModes
+                            rule: 0 < size(self.accessModes)
+                          - message: missing storage request
+                            rule: has(self.resources.requests.storage)
                     required:
                       - dataVolumeClaimSpec
                     type: object
@@ -10470,13 +10913,552 @@ spec:
                   x-kubernetes-list-map-keys:
                     - name
                   x-kubernetes-list-type: map
-                metadata:
-                  description: Metadata contains metadata for custom resources
+                instrumentation:
+                  description: |-
+                    Configuration for the OpenTelemetry collector container used to collect
+                    logs and metrics.
                   properties:
-                    annotations:
-                      additionalProperties:
-                        type: string
-                      type: object
+                    config:
+                      description: Config is the place for users to configure exporters and provide files.
+                      properties:
+                        detectors:
+                          description: |-
+                            Resource detectors add identifying attributes to logs and metrics. These run in the order they are defined.
+                            More info: https://github.com/open-telemetry/opentelemetry-collector-contrib/blob/-/processor/resourcedetectionprocessor#readme
+                          items:
+                            properties:
+                              attributes:
+                                additionalProperties:
+                                  type: boolean
+                                description: |-
+                                  Attributes to use from this detector. Detectors usually add every attribute
+                                  they know automatically. Names omitted here behave according to detector defaults.
+                                maxProperties: 30
+                                minProperties: 1
+                                type: object
+                                x-kubernetes-map-type: atomic
+                              name:
+                                description: 'Name of the resource detector to enable: `aks`, `eks`, `gcp`, etc.'
+                                maxLength: 20
+                                minLength: 1
+                                type: string
+                            required:
+                              - name
+                            type: object
+                            x-kubernetes-map-type: atomic
+                          maxItems: 10
+                          minItems: 1
+                          type: array
+                          x-kubernetes-list-map-keys:
+                            - name
+                          x-kubernetes-list-type: map
+                        exporters:
+                          description: |-
+                            Exporters allows users to configure OpenTelemetry exporters that exist
+                            in the collector image.
+                          type: object
+                          x-kubernetes-preserve-unknown-fields: true
+                        files:
+                          description: |-
+                            Files allows the user to mount projected volumes into the collector
+                            Pod so that files can be referenced by the collector as needed.
+                          items:
+                            description: |-
+                              Projection that may be projected along with other supported volume types.
+                              Exactly one of these fields must be set.
+                            properties:
+                              clusterTrustBundle:
+                                description: |-
+                                  ClusterTrustBundle allows a pod to access the `.spec.trustBundle` field
+                                  of ClusterTrustBundle objects in an auto-updating file.
+
+                                  Alpha, gated by the ClusterTrustBundleProjection feature gate.
+
+                                  ClusterTrustBundle objects can either be selected by name, or by the
+                                  combination of signer name and a label selector.
+
+                                  Kubelet performs aggressive normalization of the PEM contents written
+                                  into the pod filesystem.  Esoteric PEM features such as inter-block
+                                  comments and block headers are stripped.  Certificates are deduplicated.
+                                  The ordering of certificates within the file is arbitrary, and Kubelet
+                                  may change the order over time.
+                                properties:
+                                  labelSelector:
+                                    description: |-
+                                      Select all ClusterTrustBundles that match this label selector.  Only has
+                                      effect if signerName is set.  Mutually-exclusive with name.  If unset,
+                                      interpreted as "match nothing".  If set but empty, interpreted as "match
+                                      everything".
+                                    properties:
+                                      matchExpressions:
+                                        description: matchExpressions is a list of label selector requirements. The requirements are ANDed.
+                                        items:
+                                          description: |-
+                                            A label selector requirement is a selector that contains values, a key, and an operator that
+                                            relates the key and values.
+                                          properties:
+                                            key:
+                                              description: key is the label key that the selector applies to.
+                                              type: string
+                                            operator:
+                                              description: |-
+                                                operator represents a key's relationship to a set of values.
+                                                Valid operators are In, NotIn, Exists and DoesNotExist.
+                                              type: string
+                                            values:
+                                              description: |-
+                                                values is an array of string values. If the operator is In or NotIn,
+                                                the values array must be non-empty. If the operator is Exists or DoesNotExist,
+                                                the values array must be empty. This array is replaced during a strategic
+                                                merge patch.
+                                              items:
+                                                type: string
+                                              type: array
+                                              x-kubernetes-list-type: atomic
+                                          required:
+                                            - key
+                                            - operator
+                                          type: object
+                                        type: array
+                                        x-kubernetes-list-type: atomic
+                                      matchLabels:
+                                        additionalProperties:
+                                          type: string
+                                        description: |-
+                                          matchLabels is a map of {key,value} pairs. A single {key,value} in the matchLabels
+                                          map is equivalent to an element of matchExpressions, whose key field is "key", the
+                                          operator is "In", and the values array contains only "value". The requirements are ANDed.
+                                        type: object
+                                    type: object
+                                    x-kubernetes-map-type: atomic
+                                  name:
+                                    description: |-
+                                      Select a single ClusterTrustBundle by object name.  Mutually-exclusive
+                                      with signerName and labelSelector.
+                                    type: string
+                                  optional:
+                                    description: |-
+                                      If true, don't block pod startup if the referenced ClusterTrustBundle(s)
+                                      aren't available.  If using name, then the named ClusterTrustBundle is
+                                      allowed not to exist.  If using signerName, then the combination of
+                                      signerName and labelSelector is allowed to match zero
+                                      ClusterTrustBundles.
+                                    type: boolean
+                                  path:
+                                    description: Relative path from the volume root to write the bundle.
+                                    type: string
+                                  signerName:
+                                    description: |-
+                                      Select all ClusterTrustBundles that match this signer name.
+                                      Mutually-exclusive with name.  The contents of all selected
+                                      ClusterTrustBundles will be unified and deduplicated.
+                                    type: string
+                                required:
+                                  - path
+                                type: object
+                              configMap:
+                                description: configMap information about the configMap data to project
+                                properties:
+                                  items:
+                                    description: |-
+                                      items if unspecified, each key-value pair in the Data field of the referenced
+                                      ConfigMap will be projected into the volume as a file whose name is the
+                                      key and content is the value. If specified, the listed keys will be
+                                      projected into the specified paths, and unlisted keys will not be
+                                      present. If a key is specified which is not present in the ConfigMap,
+                                      the volume setup will error unless it is marked optional. Paths must be
+                                      relative and may not contain the '..' path or start with '..'.
+                                    items:
+                                      description: Maps a string key to a path within a volume.
+                                      properties:
+                                        key:
+                                          description: key is the key to project.
+                                          type: string
+                                        mode:
+                                          description: |-
+                                            mode is Optional: mode bits used to set permissions on this file.
+                                            Must be an octal value between 0000 and 0777 or a decimal value between 0 and 511.
+                                            YAML accepts both octal and decimal values, JSON requires decimal values for mode bits.
+                                            If not specified, the volume defaultMode will be used.
+                                            This might be in conflict with other options that affect the file
+                                            mode, like fsGroup, and the result can be other mode bits set.
+                                          format: int32
+                                          type: integer
+                                        path:
+                                          description: |-
+                                            path is the relative path of the file to map the key to.
+                                            May not be an absolute path.
+                                            May not contain the path element '..'.
+                                            May not start with the string '..'.
+                                          type: string
+                                      required:
+                                        - key
+                                        - path
+                                      type: object
+                                    type: array
+                                    x-kubernetes-list-type: atomic
+                                  name:
+                                    default: ""
+                                    description: |-
+                                      Name of the referent.
+                                      This field is effectively required, but due to backwards compatibility is
+                                      allowed to be empty. Instances of this type with an empty value here are
+                                      almost certainly wrong.
+                                      More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names
+                                    type: string
+                                  optional:
+                                    description: optional specify whether the ConfigMap or its keys must be defined
+                                    type: boolean
+                                type: object
+                                x-kubernetes-map-type: atomic
+                              downwardAPI:
+                                description: downwardAPI information about the downwardAPI data to project
+                                properties:
+                                  items:
+                                    description: Items is a list of DownwardAPIVolume file
+                                    items:
+                                      description: DownwardAPIVolumeFile represents information to create the file containing the pod field
+                                      properties:
+                                        fieldRef:
+                                          description: 'Required: Selects a field of the pod: only annotations, labels, name, namespace and uid are supported.'
+                                          properties:
+                                            apiVersion:
+                                              description: Version of the schema the FieldPath is written in terms of, defaults to "v1".
+                                              type: string
+                                            fieldPath:
+                                              description: Path of the field to select in the specified API version.
+                                              type: string
+                                          required:
+                                            - fieldPath
+                                          type: object
+                                          x-kubernetes-map-type: atomic
+                                        mode:
+                                          description: |-
+                                            Optional: mode bits used to set permissions on this file, must be an octal value
+                                            between 0000 and 0777 or a decimal value between 0 and 511.
+                                            YAML accepts both octal and decimal values, JSON requires decimal values for mode bits.
+                                            If not specified, the volume defaultMode will be used.
+                                            This might be in conflict with other options that affect the file
+                                            mode, like fsGroup, and the result can be other mode bits set.
+                                          format: int32
+                                          type: integer
+                                        path:
+                                          description: 'Required: Path is  the relative path name of the file to be created. Must not be absolute or contain the ''..'' path. Must be utf-8 encoded. The first item of the relative path must not start with ''..'''
+                                          type: string
+                                        resourceFieldRef:
+                                          description: |-
+                                            Selects a resource of the container: only resources limits and requests
+                                            (limits.cpu, limits.memory, requests.cpu and requests.memory) are currently supported.
+                                          properties:
+                                            containerName:
+                                              description: 'Container name: required for volumes, optional for env vars'
+                                              type: string
+                                            divisor:
+                                              anyOf:
+                                                - type: integer
+                                                - type: string
+                                              description: Specifies the output format of the exposed resources, defaults to "1"
+                                              pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$
+                                              x-kubernetes-int-or-string: true
+                                            resource:
+                                              description: 'Required: resource to select'
+                                              type: string
+                                          required:
+                                            - resource
+                                          type: object
+                                          x-kubernetes-map-type: atomic
+                                      required:
+                                        - path
+                                      type: object
+                                    type: array
+                                    x-kubernetes-list-type: atomic
+                                type: object
+                              secret:
+                                description: secret information about the secret data to project
+                                properties:
+                                  items:
+                                    description: |-
+                                      items if unspecified, each key-value pair in the Data field of the referenced
+                                      Secret will be projected into the volume as a file whose name is the
+                                      key and content is the value. If specified, the listed keys will be
+                                      projected into the specified paths, and unlisted keys will not be
+                                      present. If a key is specified which is not present in the Secret,
+                                      the volume setup will error unless it is marked optional. Paths must be
+                                      relative and may not contain the '..' path or start with '..'.
+                                    items:
+                                      description: Maps a string key to a path within a volume.
+                                      properties:
+                                        key:
+                                          description: key is the key to project.
+                                          type: string
+                                        mode:
+                                          description: |-
+                                            mode is Optional: mode bits used to set permissions on this file.
+                                            Must be an octal value between 0000 and 0777 or a decimal value between 0 and 511.
+                                            YAML accepts both octal and decimal values, JSON requires decimal values for mode bits.
+                                            If not specified, the volume defaultMode will be used.
+                                            This might be in conflict with other options that affect the file
+                                            mode, like fsGroup, and the result can be other mode bits set.
+                                          format: int32
+                                          type: integer
+                                        path:
+                                          description: |-
+                                            path is the relative path of the file to map the key to.
+                                            May not be an absolute path.
+                                            May not contain the path element '..'.
+                                            May not start with the string '..'.
+                                          type: string
+                                      required:
+                                        - key
+                                        - path
+                                      type: object
+                                    type: array
+                                    x-kubernetes-list-type: atomic
+                                  name:
+                                    default: ""
+                                    description: |-
+                                      Name of the referent.
+                                      This field is effectively required, but due to backwards compatibility is
+                                      allowed to be empty. Instances of this type with an empty value here are
+                                      almost certainly wrong.
+                                      More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names
+                                    type: string
+                                  optional:
+                                    description: optional field specify whether the Secret or its key must be defined
+                                    type: boolean
+                                type: object
+                                x-kubernetes-map-type: atomic
+                              serviceAccountToken:
+                                description: serviceAccountToken is information about the serviceAccountToken data to project
+                                properties:
+                                  audience:
+                                    description: |-
+                                      audience is the intended audience of the token. A recipient of a token
+                                      must identify itself with an identifier specified in the audience of the
+                                      token, and otherwise should reject the token. The audience defaults to the
+                                      identifier of the apiserver.
+                                    type: string
+                                  expirationSeconds:
+                                    description: |-
+                                      expirationSeconds is the requested duration of validity of the service
+                                      account token. As the token approaches expiration, the kubelet volume
+                                      plugin will proactively rotate the service account token. The kubelet will
+                                      start trying to rotate the token if the token is older than 80 percent of
+                                      its time to live or if the token is older than 24 hours.Defaults to 1 hour
+                                      and must be at least 10 minutes.
+                                    format: int64
+                                    type: integer
+                                  path:
+                                    description: |-
+                                      path is the path relative to the mount point of the file to project the
+                                      token into.
+                                    type: string
+                                required:
+                                  - path
+                                type: object
+                            type: object
+                          minItems: 1
+                          type: array
+                          x-kubernetes-list-type: atomic
+                      type: object
+                    image:
+                      description: |-
+                        Image name to use for collector containers. When omitted, the value
+                        comes from an operator environment variable.
+                      type: string
+                    logs:
+                      description: Logs is the place for users to configure the log collection.
+                      properties:
+                        batches:
+                          description: Log records are exported in small batches. Set this field to change their size and frequency.
+                          properties:
+                            maxDelay:
+                              default: 200ms
+                              description: |-
+                                Maximum time to wait before exporting a log record. Higher numbers
+                                allow more records to be deduplicated and compressed before export.
+                              format: duration
+                              maxLength: 20
+                              minLength: 1
+                              pattern: ^((PT)?( *[0-9]+ *(?i:(ms|s|m)|(milli|sec|min)s?))+|0)$
+                              type: string
+                              x-kubernetes-validations:
+                                - rule: duration("0") <= self && self <= duration("5m")
+                            maxRecords:
+                              description: |-
+                                Maximum number of records to include in an exported batch. When present,
+                                batches this size are sent without any further delay.
+                              format: int32
+                              minimum: 1
+                              type: integer
+                            minRecords:
+                              default: 8192
+                              description: |-
+                                Number of records to wait for before exporting a batch. Higher numbers
+                                allow more records to be deduplicated and compressed before export.
+                              format: int32
+                              minimum: 0
+                              type: integer
+                          type: object
+                          x-kubernetes-map-type: atomic
+                          x-kubernetes-validations:
+                            - message: to disable batching, both minRecords and maxDelay must be zero
+                              rule: (has(self.minRecords) && self.minRecords == 0) == (has(self.maxDelay) && self.maxDelay == duration('0'))
+                            - message: minRecords cannot be larger than maxRecords
+                              rule: '!has(self.maxRecords) || self.minRecords <= self.maxRecords'
+                        exporters:
+                          description: The names of exporters that should send logs.
+                          items:
+                            type: string
+                          minItems: 1
+                          type: array
+                          x-kubernetes-list-type: set
+                        retentionPeriod:
+                          description: |-
+                            How long to retain log files locally. An RFC 3339 duration or a number
+                            and unit: `12 hr`, `3d`, `4 weeks`, etc.
+                          format: duration
+                          maxLength: 20
+                          minLength: 1
+                          pattern: ^(PT)?( *[0-9]+ *(?i:(h|hr|d|w|wk)|(hour|day|week)s?))+$
+                          type: string
+                          x-kubernetes-validations:
+                            - message: must be at least one hour
+                              rule: duration("1h") <= self && self <= duration("8760h")
+                      type: object
+                    metrics:
+                      description: Metrics is the place for users to configure metrics collection.
+                      properties:
+                        customQueries:
+                          description: |-
+                            Where users can turn off built-in metrics and also provide their own
+                            custom queries.
+                          properties:
+                            add:
+                              description: User defined queries and metrics.
+                              items:
+                                properties:
+                                  collectionInterval:
+                                    default: 5s
+                                    description: How often the queries should be run.
+                                    format: duration
+                                    maxLength: 20
+                                    minLength: 1
+                                    pattern: ^((PT)?( *[0-9]+ *(?i:(ms|s|m)|(milli|sec|min)s?))+|0)$
+                                    type: string
+                                    x-kubernetes-validations:
+                                      - rule: duration("0") <= self && self <= duration("60m")
+                                  name:
+                                    description: |-
+                                      The name of this batch of queries, which will be used in naming the OTel
+                                      SqlQuery receiver.
+                                    maxLength: 20
+                                    pattern: ^[^\pZ\pC\pS]+$
+                                    type: string
+                                  queries:
+                                    description: A ConfigMap holding the yaml file that contains the queries.
+                                    properties:
+                                      key:
+                                        description: Name of the data field within the ConfigMap.
+                                        maxLength: 253
+                                        minLength: 1
+                                        pattern: ^[-._a-zA-Z0-9]+$
+                                        type: string
+                                        x-kubernetes-validations:
+                                          - message: cannot be "." or start with ".."
+                                            rule: self != "." && !self.startsWith("..")
+                                      name:
+                                        description: Name of the ConfigMap.
+                                        maxLength: 253
+                                        minLength: 1
+                                        pattern: ^[a-z0-9]([-a-z0-9]*[a-z0-9])?([.][a-z0-9]([-a-z0-9]*[a-z0-9])?)*$
+                                        type: string
+                                    required:
+                                      - key
+                                      - name
+                                    type: object
+                                    x-kubernetes-map-type: atomic
+                                required:
+                                  - name
+                                  - queries
+                                type: object
+                              type: array
+                            remove:
+                              description: |-
+                                A list of built-in queries that should be removed. If all queries for a
+                                given SQL statement are removed, the SQL statement will no longer be run.
+                              items:
+                                type: string
+                              type: array
+                          type: object
+                      type: object
+                    resources:
+                      description: Resources holds the resource requirements for the collector container.
+                      properties:
+                        claims:
+                          description: |-
+                            Claims lists the names of resources, defined in spec.resourceClaims,
+                            that are used by this container.
+
+                            This is an alpha field and requires enabling the
+                            DynamicResourceAllocation feature gate.
+
+                            This field is immutable. It can only be set for containers.
+                          items:
+                            description: ResourceClaim references one entry in PodSpec.ResourceClaims.
+                            properties:
+                              name:
+                                description: |-
+                                  Name must match the name of one entry in pod.spec.resourceClaims of
+                                  the Pod where this field is used. It makes that resource available
+                                  inside a container.
+                                type: string
+                              request:
+                                description: |-
+                                  Request is the name chosen for a request in the referenced claim.
+                                  If empty, everything from the claim is made available, otherwise
+                                  only the result of this request.
+                                type: string
+                            required:
+                              - name
+                            type: object
+                          type: array
+                          x-kubernetes-list-map-keys:
+                            - name
+                          x-kubernetes-list-type: map
+                        limits:
+                          additionalProperties:
+                            anyOf:
+                              - type: integer
+                              - type: string
+                            pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$
+                            x-kubernetes-int-or-string: true
+                          description: |-
+                            Limits describes the maximum amount of compute resources allowed.
+                            More info: https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/
+                          type: object
+                        requests:
+                          additionalProperties:
+                            anyOf:
+                              - type: integer
+                              - type: string
+                            pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$
+                            x-kubernetes-int-or-string: true
+                          description: |-
+                            Requests describes the minimum amount of compute resources required.
+                            If Requests is omitted for a container, it defaults to Limits if that is explicitly specified,
+                            otherwise to an implementation-defined value. Requests cannot exceed Limits.
+                            More info: https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/
+                          type: object
+                      type: object
+                  type: object
+                metadata:
+                  description: Metadata contains metadata for custom resources
+                  properties:
+                    annotations:
+                      additionalProperties:
+                        type: string
+                      type: object
                     labels:
                       additionalProperties:
                         type: string
@@ -10498,21 +11480,20 @@ spec:
                                 https://github.com/prometheus-community/postgres_exporter#flags
                                 Changing the values of field causes PostgreSQL and the exporter to restart.
                               items:
-                                description: Projection that may be projected along with other supported volume types
+                                description: |-
+                                  Projection that may be projected along with other supported volume types.
+                                  Exactly one of these fields must be set.
                                 properties:
                                   clusterTrustBundle:
                                     description: |-
                                       ClusterTrustBundle allows a pod to access the `.spec.trustBundle` field
                                       of ClusterTrustBundle objects in an auto-updating file.
 
-
                                       Alpha, gated by the ClusterTrustBundleProjection feature gate.
 
-
                                       ClusterTrustBundle objects can either be selected by name, or by the
                                       combination of signer name and a label selector.
 
-
                                       Kubelet performs aggressive normalization of the PEM contents written
                                       into the pod filesystem.  Esoteric PEM features such as inter-block
                                       comments and block headers are stripped.  Certificates are deduplicated.
@@ -10635,7 +11616,12 @@ spec:
                                         x-kubernetes-list-type: atomic
                                       name:
                                         default: ""
-                                        description: 'Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names'
+                                        description: |-
+                                          Name of the referent.
+                                          This field is effectively required, but due to backwards compatibility is
+                                          allowed to be empty. Instances of this type with an empty value here are
+                                          almost certainly wrong.
+                                          More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names
                                         type: string
                                       optional:
                                         description: optional specify whether the ConfigMap or its keys must be defined
@@ -10747,7 +11733,12 @@ spec:
                                         x-kubernetes-list-type: atomic
                                       name:
                                         default: ""
-                                        description: 'Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names'
+                                        description: |-
+                                          Name of the referent.
+                                          This field is effectively required, but due to backwards compatibility is
+                                          allowed to be empty. Instances of this type with an empty value here are
+                                          almost certainly wrong.
+                                          More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names
                                         type: string
                                       optional:
                                         description: optional field specify whether the Secret or its key must be defined
@@ -10829,7 +11820,12 @@ spec:
                                   x-kubernetes-list-type: atomic
                                 name:
                                   default: ""
-                                  description: 'Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names'
+                                  description: |-
+                                    Name of the referent.
+                                    This field is effectively required, but due to backwards compatibility is
+                                    allowed to be empty. Instances of this type with an empty value here are
+                                    almost certainly wrong.
+                                    More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names
                                   type: string
                                 optional:
                                   description: optional field specify whether the Secret or its key must be defined
@@ -10851,11 +11847,9 @@ spec:
                                     Claims lists the names of resources, defined in spec.resourceClaims,
                                     that are used by this container.
 
-
                                     This is an alpha field and requires enabling the
                                     DynamicResourceAllocation feature gate.
 
-
                                     This field is immutable. It can only be set for containers.
                                   items:
                                     description: ResourceClaim references one entry in PodSpec.ResourceClaims.
@@ -10866,6 +11860,12 @@ spec:
                                           the Pod where this field is used. It makes that resource available
                                           inside a container.
                                         type: string
+                                      request:
+                                        description: |-
+                                          Request is the name chosen for a request in the referenced claim.
+                                          If empty, everything from the claim is made available, otherwise
+                                          only the result of this request.
+                                        type: string
                                     required:
                                       - name
                                     type: object
@@ -10926,6 +11926,36 @@ spec:
                       format: int32
                       minimum: 3
                       type: integer
+                    logging:
+                      description: Patroni log configuration settings.
+                      properties:
+                        level:
+                          default: INFO
+                          description: |-
+                            The Patroni log level.
+                            More info: https://docs.python.org/3/library/logging.html#levels
+                          enum:
+                            - CRITICAL
+                            - ERROR
+                            - WARNING
+                            - INFO
+                            - DEBUG
+                            - NOTSET
+                          maxLength: 10
+                          type: string
+                        storageLimit:
+                          anyOf:
+                            - type: integer
+                            - type: string
+                          description: |-
+                            Limits the total amount of space taken by Patroni log files.
+                            Minimum value is 25MB.
+                            More info: https://kubernetes.io/docs/reference/kubernetes-api/common-definitions/quantity
+                          pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$
+                          x-kubernetes-int-or-string: true
+                      required:
+                        - storageLimit
+                      type: object
                     port:
                       default: 8008
                       description: |-
@@ -10957,6 +11987,7 @@ spec:
                           enum:
                             - Switchover
                             - Failover
+                          maxLength: 15
                           type: string
                       required:
                         - enabled
@@ -10990,7 +12021,7 @@ spec:
                 postgresVersion:
                   description: The major version of PostgreSQL installed in the PostgreSQL image
                   maximum: 17
-                  minimum: 10
+                  minimum: 11
                   type: integer
                 proxy:
                   description: The specification of a proxy that connects to PostgreSQL.
@@ -11267,7 +12298,7 @@ spec:
                                               pod labels will be ignored. The default value is empty.
                                               The same key is forbidden to exist in both matchLabelKeys and labelSelector.
                                               Also, matchLabelKeys cannot be set when labelSelector isn't set.
-                                              This is an alpha field and requires enabling MatchLabelKeysInPodAffinity feature gate.
+                                              This is a beta field and requires enabling MatchLabelKeysInPodAffinity feature gate (enabled by default).
                                             items:
                                               type: string
                                             type: array
@@ -11282,7 +12313,7 @@ spec:
                                               pod labels will be ignored. The default value is empty.
                                               The same key is forbidden to exist in both mismatchLabelKeys and labelSelector.
                                               Also, mismatchLabelKeys cannot be set when labelSelector isn't set.
-                                              This is an alpha field and requires enabling MatchLabelKeysInPodAffinity feature gate.
+                                              This is a beta field and requires enabling MatchLabelKeysInPodAffinity feature gate (enabled by default).
                                             items:
                                               type: string
                                             type: array
@@ -11443,7 +12474,7 @@ spec:
                                           pod labels will be ignored. The default value is empty.
                                           The same key is forbidden to exist in both matchLabelKeys and labelSelector.
                                           Also, matchLabelKeys cannot be set when labelSelector isn't set.
-                                          This is an alpha field and requires enabling MatchLabelKeysInPodAffinity feature gate.
+                                          This is a beta field and requires enabling MatchLabelKeysInPodAffinity feature gate (enabled by default).
                                         items:
                                           type: string
                                         type: array
@@ -11458,7 +12489,7 @@ spec:
                                           pod labels will be ignored. The default value is empty.
                                           The same key is forbidden to exist in both mismatchLabelKeys and labelSelector.
                                           Also, mismatchLabelKeys cannot be set when labelSelector isn't set.
-                                          This is an alpha field and requires enabling MatchLabelKeysInPodAffinity feature gate.
+                                          This is a beta field and requires enabling MatchLabelKeysInPodAffinity feature gate (enabled by default).
                                         items:
                                           type: string
                                         type: array
@@ -11612,7 +12643,7 @@ spec:
                                               pod labels will be ignored. The default value is empty.
                                               The same key is forbidden to exist in both matchLabelKeys and labelSelector.
                                               Also, matchLabelKeys cannot be set when labelSelector isn't set.
-                                              This is an alpha field and requires enabling MatchLabelKeysInPodAffinity feature gate.
+                                              This is a beta field and requires enabling MatchLabelKeysInPodAffinity feature gate (enabled by default).
                                             items:
                                               type: string
                                             type: array
@@ -11627,7 +12658,7 @@ spec:
                                               pod labels will be ignored. The default value is empty.
                                               The same key is forbidden to exist in both mismatchLabelKeys and labelSelector.
                                               Also, mismatchLabelKeys cannot be set when labelSelector isn't set.
-                                              This is an alpha field and requires enabling MatchLabelKeysInPodAffinity feature gate.
+                                              This is a beta field and requires enabling MatchLabelKeysInPodAffinity feature gate (enabled by default).
                                             items:
                                               type: string
                                             type: array
@@ -11788,7 +12819,7 @@ spec:
                                           pod labels will be ignored. The default value is empty.
                                           The same key is forbidden to exist in both matchLabelKeys and labelSelector.
                                           Also, matchLabelKeys cannot be set when labelSelector isn't set.
-                                          This is an alpha field and requires enabling MatchLabelKeysInPodAffinity feature gate.
+                                          This is a beta field and requires enabling MatchLabelKeysInPodAffinity feature gate (enabled by default).
                                         items:
                                           type: string
                                         type: array
@@ -11803,7 +12834,7 @@ spec:
                                           pod labels will be ignored. The default value is empty.
                                           The same key is forbidden to exist in both mismatchLabelKeys and labelSelector.
                                           Also, mismatchLabelKeys cannot be set when labelSelector isn't set.
-                                          This is an alpha field and requires enabling MatchLabelKeysInPodAffinity feature gate.
+                                          This is a beta field and requires enabling MatchLabelKeysInPodAffinity feature gate (enabled by default).
                                         items:
                                           type: string
                                         type: array
@@ -11909,21 +12940,20 @@ spec:
                                 reloaded.
                                 More info: https://www.pgbouncer.org/config.html#include-directive
                               items:
-                                description: Projection that may be projected along with other supported volume types
+                                description: |-
+                                  Projection that may be projected along with other supported volume types.
+                                  Exactly one of these fields must be set.
                                 properties:
                                   clusterTrustBundle:
                                     description: |-
                                       ClusterTrustBundle allows a pod to access the `.spec.trustBundle` field
                                       of ClusterTrustBundle objects in an auto-updating file.
 
-
                                       Alpha, gated by the ClusterTrustBundleProjection feature gate.
 
-
                                       ClusterTrustBundle objects can either be selected by name, or by the
                                       combination of signer name and a label selector.
 
-
                                       Kubelet performs aggressive normalization of the PEM contents written
                                       into the pod filesystem.  Esoteric PEM features such as inter-block
                                       comments and block headers are stripped.  Certificates are deduplicated.
@@ -12046,7 +13076,12 @@ spec:
                                         x-kubernetes-list-type: atomic
                                       name:
                                         default: ""
-                                        description: 'Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names'
+                                        description: |-
+                                          Name of the referent.
+                                          This field is effectively required, but due to backwards compatibility is
+                                          allowed to be empty. Instances of this type with an empty value here are
+                                          almost certainly wrong.
+                                          More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names
                                         type: string
                                       optional:
                                         description: optional specify whether the ConfigMap or its keys must be defined
@@ -12158,7 +13193,12 @@ spec:
                                         x-kubernetes-list-type: atomic
                                       name:
                                         default: ""
-                                        description: 'Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names'
+                                        description: |-
+                                          Name of the referent.
+                                          This field is effectively required, but due to backwards compatibility is
+                                          allowed to be empty. Instances of this type with an empty value here are
+                                          almost certainly wrong.
+                                          More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names
                                         type: string
                                       optional:
                                         description: optional field specify whether the Secret or its key must be defined
@@ -12278,7 +13318,12 @@ spec:
                                               type: string
                                             name:
                                               default: ""
-                                              description: 'Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names'
+                                              description: |-
+                                                Name of the referent.
+                                                This field is effectively required, but due to backwards compatibility is
+                                                allowed to be empty. Instances of this type with an empty value here are
+                                                almost certainly wrong.
+                                                More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names
                                               type: string
                                             optional:
                                               description: Specify whether the ConfigMap or its key must be defined
@@ -12332,7 +13377,12 @@ spec:
                                               type: string
                                             name:
                                               default: ""
-                                              description: 'Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names'
+                                              description: |-
+                                                Name of the referent.
+                                                This field is effectively required, but due to backwards compatibility is
+                                                allowed to be empty. Instances of this type with an empty value here are
+                                                almost certainly wrong.
+                                                More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names
                                               type: string
                                             optional:
                                               description: Specify whether the Secret or its key must be defined
@@ -12365,7 +13415,12 @@ spec:
                                       properties:
                                         name:
                                           default: ""
-                                          description: 'Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names'
+                                          description: |-
+                                            Name of the referent.
+                                            This field is effectively required, but due to backwards compatibility is
+                                            allowed to be empty. Instances of this type with an empty value here are
+                                            almost certainly wrong.
+                                            More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names
                                           type: string
                                         optional:
                                           description: Specify whether the ConfigMap must be defined
@@ -12380,7 +13435,12 @@ spec:
                                       properties:
                                         name:
                                           default: ""
-                                          description: 'Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names'
+                                          description: |-
+                                            Name of the referent.
+                                            This field is effectively required, but due to backwards compatibility is
+                                            allowed to be empty. Instances of this type with an empty value here are
+                                            almost certainly wrong.
+                                            More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names
                                           type: string
                                         optional:
                                           description: Specify whether the Secret must be defined
@@ -12654,11 +13714,11 @@ spec:
                                         format: int32
                                         type: integer
                                       service:
+                                        default: ""
                                         description: |-
                                           Service is the name of the service to place in the gRPC HealthCheckRequest
                                           (see https://github.com/grpc/grpc/blob/master/doc/health-checking.md).
 
-
                                           If this is not specified, the default behavior is defined by gRPC.
                                         type: string
                                     required:
@@ -12860,11 +13920,11 @@ spec:
                                         format: int32
                                         type: integer
                                       service:
+                                        default: ""
                                         description: |-
                                           Service is the name of the service to place in the gRPC HealthCheckRequest
                                           (see https://github.com/grpc/grpc/blob/master/doc/health-checking.md).
 
-
                                           If this is not specified, the default behavior is defined by gRPC.
                                         type: string
                                     required:
@@ -13007,11 +14067,9 @@ spec:
                                       Claims lists the names of resources, defined in spec.resourceClaims,
                                       that are used by this container.
 
-
                                       This is an alpha field and requires enabling the
                                       DynamicResourceAllocation feature gate.
 
-
                                       This field is immutable. It can only be set for containers.
                                     items:
                                       description: ResourceClaim references one entry in PodSpec.ResourceClaims.
@@ -13022,6 +14080,12 @@ spec:
                                             the Pod where this field is used. It makes that resource available
                                             inside a container.
                                           type: string
+                                        request:
+                                          description: |-
+                                            Request is the name chosen for a request in the referenced claim.
+                                            If empty, everything from the claim is made available, otherwise
+                                            only the result of this request.
+                                          type: string
                                       required:
                                         - name
                                       type: object
@@ -13143,7 +14207,7 @@ spec:
                                   procMount:
                                     description: |-
                                       procMount denotes the type of proc mount to use for the containers.
-                                      The default is DefaultProcMount which uses the container runtime defaults for
+                                      The default value is Default which uses the container runtime defaults for
                                       readonly paths and masked paths.
                                       This requires the ProcMountType feature flag to be enabled.
                                       Note that this field cannot be set when spec.os.name is windows.
@@ -13217,7 +14281,13 @@ spec:
                                           Must be set if type is "Localhost". Must NOT be set for any other type.
                                         type: string
                                       type:
-                                        description: 'type indicates which kind of seccomp profile will be applied. Valid options are: Localhost - a profile defined in a file on the node should be used. RuntimeDefault - the container runtime default profile should be used. Unconfined - no profile should be applied.'
+                                        description: |-
+                                          type indicates which kind of seccomp profile will be applied.
+                                          Valid options are:
+
+                                          Localhost - a profile defined in a file on the node should be used.
+                                          RuntimeDefault - the container runtime default profile should be used.
+                                          Unconfined - no profile should be applied.
                                         type: string
                                     required:
                                       - type
@@ -13293,11 +14363,11 @@ spec:
                                         format: int32
                                         type: integer
                                       service:
+                                        default: ""
                                         description: |-
                                           Service is the name of the service to place in the gRPC HealthCheckRequest
                                           (see https://github.com/grpc/grpc/blob/master/doc/health-checking.md).
 
-
                                           If this is not specified, the default behavior is defined by gRPC.
                                         type: string
                                     required:
@@ -13502,10 +14572,8 @@ spec:
                                         RecursiveReadOnly specifies whether read-only mounts should be handled
                                         recursively.
 
-
                                         If ReadOnly is false, this field has no meaning and must be unspecified.
 
-
                                         If ReadOnly is true, and this field is set to Disabled, the mount is not made
                                         recursively read-only.  If this field is set to IfPossible, the mount is made
                                         recursively read-only, if it is supported by the container runtime.  If this
@@ -13513,11 +14581,9 @@ spec:
                                         supported by the container runtime, otherwise the pod will not be started and
                                         an error will be generated to indicate the reason.
 
-
                                         If this field is set to IfPossible or Enabled, MountPropagation must be set to
                                         None (or be unspecified, which defaults to None).
 
-
                                         If this field is not specified, it is treated as an equivalent of Disabled.
                                       type: string
                                     subPath:
@@ -13599,7 +14665,12 @@ spec:
                               x-kubernetes-list-type: atomic
                             name:
                               default: ""
-                              description: 'Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names'
+                              description: |-
+                                Name of the referent.
+                                This field is effectively required, but due to backwards compatibility is
+                                allowed to be empty. Instances of this type with an empty value here are
+                                almost certainly wrong.
+                                More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names
                               type: string
                             optional:
                               description: optional field specify whether the Secret or its key must be defined
@@ -13664,11 +14735,9 @@ spec:
                                 Claims lists the names of resources, defined in spec.resourceClaims,
                                 that are used by this container.
 
-
                                 This is an alpha field and requires enabling the
                                 DynamicResourceAllocation feature gate.
 
-
                                 This field is immutable. It can only be set for containers.
                               items:
                                 description: ResourceClaim references one entry in PodSpec.ResourceClaims.
@@ -13679,6 +14748,12 @@ spec:
                                       the Pod where this field is used. It makes that resource available
                                       inside a container.
                                     type: string
+                                  request:
+                                    description: |-
+                                      Request is the name chosen for a request in the referenced claim.
+                                      If empty, everything from the claim is made available, otherwise
+                                      only the result of this request.
+                                    type: string
                                 required:
                                   - name
                                 type: object
@@ -13719,12 +14794,31 @@ spec:
                               enum:
                                 - Cluster
                                 - Local
+                              maxLength: 10
                               type: string
                             internalTrafficPolicy:
                               description: 'More info: https://kubernetes.io/docs/concepts/services-networking/service/#traffic-policies'
                               enum:
                                 - Cluster
                                 - Local
+                              maxLength: 10
+                              type: string
+                            ipFamilies:
+                              items:
+                                description: |-
+                                  IPFamily represents the IP Family (IPv4 or IPv6). This type is used
+                                  to express the family of an IP expressed by a type (e.g. service.spec.ipFamilies).
+                                enum:
+                                  - IPv4
+                                  - IPv6
+                                type: string
+                              type: array
+                            ipFamilyPolicy:
+                              description: 'More info: https://kubernetes.io/docs/reference/kubernetes-api/service-resources/service-v1/'
+                              enum:
+                                - SingleStack
+                                - PreferDualStack
+                                - RequireDualStack
                               type: string
                             metadata:
                               description: Metadata contains metadata for custom resources
@@ -13753,6 +14847,7 @@ spec:
                                 - ClusterIP
                                 - NodePort
                                 - LoadBalancer
+                              maxLength: 15
                               type: string
                           type: object
                         sidecars:
@@ -13769,11 +14864,9 @@ spec:
                                         Claims lists the names of resources, defined in spec.resourceClaims,
                                         that are used by this container.
 
-
                                         This is an alpha field and requires enabling the
                                         DynamicResourceAllocation feature gate.
 
-
                                         This field is immutable. It can only be set for containers.
                                       items:
                                         description: ResourceClaim references one entry in PodSpec.ResourceClaims.
@@ -13784,6 +14877,12 @@ spec:
                                               the Pod where this field is used. It makes that resource available
                                               inside a container.
                                             type: string
+                                          request:
+                                            description: |-
+                                              Request is the name chosen for a request in the referenced claim.
+                                              If empty, everything from the claim is made available, otherwise
+                                              only the result of this request.
+                                            type: string
                                         required:
                                           - name
                                         type: object
@@ -13926,7 +15025,6 @@ spec:
                                   Keys that don't exist in the incoming pod labels will
                                   be ignored. A null or empty list means only match against labelSelector.
 
-
                                   This is a beta field and requires the MatchLabelKeysInPodTopologySpread feature gate to be enabled (enabled by default).
                                 items:
                                   type: string
@@ -13966,7 +15064,6 @@ spec:
                                   Valid values are integers greater than 0.
                                   When value is not nil, WhenUnsatisfiable must be DoNotSchedule.
 
-
                                   For example, in a 3-zone cluster, MaxSkew is set to 2, MinDomains is set to 5 and pods with the same
                                   labelSelector spread as 2/2/2:
                                   | zone1 | zone2 | zone3 |
@@ -13984,7 +15081,6 @@ spec:
                                   - Honor: only nodes matching nodeAffinity/nodeSelector are included in the calculations.
                                   - Ignore: nodeAffinity/nodeSelector are ignored. All nodes are included in the calculations.
 
-
                                   If this value is nil, the behavior is equivalent to the Honor policy.
                                   This is a beta-level feature default enabled by the NodeInclusionPolicyInPodTopologySpread feature flag.
                                 type: string
@@ -13996,7 +15092,6 @@ spec:
                                   has a toleration, are included.
                                   - Ignore: node taints are ignored. All nodes are included.
 
-
                                   If this value is nil, the behavior is equivalent to the Ignore policy.
                                   This is a beta-level feature default enabled by the NodeInclusionPolicyInPodTopologySpread feature flag.
                                 type: string
@@ -14052,12 +15147,31 @@ spec:
                       enum:
                         - Cluster
                         - Local
+                      maxLength: 10
                       type: string
                     internalTrafficPolicy:
                       description: 'More info: https://kubernetes.io/docs/concepts/services-networking/service/#traffic-policies'
                       enum:
                         - Cluster
                         - Local
+                      maxLength: 10
+                      type: string
+                    ipFamilies:
+                      items:
+                        description: |-
+                          IPFamily represents the IP Family (IPv4 or IPv6). This type is used
+                          to express the family of an IP expressed by a type (e.g. service.spec.ipFamilies).
+                        enum:
+                          - IPv4
+                          - IPv6
+                        type: string
+                      type: array
+                    ipFamilyPolicy:
+                      description: 'More info: https://kubernetes.io/docs/reference/kubernetes-api/service-resources/service-v1/'
+                      enum:
+                        - SingleStack
+                        - PreferDualStack
+                        - RequireDualStack
                       type: string
                     metadata:
                       description: Metadata contains metadata for custom resources
@@ -14086,6 +15200,7 @@ spec:
                         - ClusterIP
                         - NodePort
                         - LoadBalancer
+                      maxLength: 15
                       type: string
                   type: object
                 service:
@@ -14096,12 +15211,31 @@ spec:
                       enum:
                         - Cluster
                         - Local
+                      maxLength: 10
                       type: string
                     internalTrafficPolicy:
                       description: 'More info: https://kubernetes.io/docs/concepts/services-networking/service/#traffic-policies'
                       enum:
                         - Cluster
                         - Local
+                      maxLength: 10
+                      type: string
+                    ipFamilies:
+                      items:
+                        description: |-
+                          IPFamily represents the IP Family (IPv4 or IPv6). This type is used
+                          to express the family of an IP expressed by a type (e.g. service.spec.ipFamilies).
+                        enum:
+                          - IPv4
+                          - IPv6
+                        type: string
+                      type: array
+                    ipFamilyPolicy:
+                      description: 'More info: https://kubernetes.io/docs/reference/kubernetes-api/service-resources/service-v1/'
+                      enum:
+                        - SingleStack
+                        - PreferDualStack
+                        - RequireDualStack
                       type: string
                     metadata:
                       description: Metadata contains metadata for custom resources
@@ -14130,6 +15264,7 @@ spec:
                         - ClusterIP
                         - NodePort
                         - LoadBalancer
+                      maxLength: 15
                       type: string
                   type: object
                 shutdown:
@@ -14448,7 +15583,7 @@ spec:
                                               pod labels will be ignored. The default value is empty.
                                               The same key is forbidden to exist in both matchLabelKeys and labelSelector.
                                               Also, matchLabelKeys cannot be set when labelSelector isn't set.
-                                              This is an alpha field and requires enabling MatchLabelKeysInPodAffinity feature gate.
+                                              This is a beta field and requires enabling MatchLabelKeysInPodAffinity feature gate (enabled by default).
                                             items:
                                               type: string
                                             type: array
@@ -14463,7 +15598,7 @@ spec:
                                               pod labels will be ignored. The default value is empty.
                                               The same key is forbidden to exist in both mismatchLabelKeys and labelSelector.
                                               Also, mismatchLabelKeys cannot be set when labelSelector isn't set.
-                                              This is an alpha field and requires enabling MatchLabelKeysInPodAffinity feature gate.
+                                              This is a beta field and requires enabling MatchLabelKeysInPodAffinity feature gate (enabled by default).
                                             items:
                                               type: string
                                             type: array
@@ -14624,7 +15759,7 @@ spec:
                                           pod labels will be ignored. The default value is empty.
                                           The same key is forbidden to exist in both matchLabelKeys and labelSelector.
                                           Also, matchLabelKeys cannot be set when labelSelector isn't set.
-                                          This is an alpha field and requires enabling MatchLabelKeysInPodAffinity feature gate.
+                                          This is a beta field and requires enabling MatchLabelKeysInPodAffinity feature gate (enabled by default).
                                         items:
                                           type: string
                                         type: array
@@ -14639,7 +15774,7 @@ spec:
                                           pod labels will be ignored. The default value is empty.
                                           The same key is forbidden to exist in both mismatchLabelKeys and labelSelector.
                                           Also, mismatchLabelKeys cannot be set when labelSelector isn't set.
-                                          This is an alpha field and requires enabling MatchLabelKeysInPodAffinity feature gate.
+                                          This is a beta field and requires enabling MatchLabelKeysInPodAffinity feature gate (enabled by default).
                                         items:
                                           type: string
                                         type: array
@@ -14793,7 +15928,7 @@ spec:
                                               pod labels will be ignored. The default value is empty.
                                               The same key is forbidden to exist in both matchLabelKeys and labelSelector.
                                               Also, matchLabelKeys cannot be set when labelSelector isn't set.
-                                              This is an alpha field and requires enabling MatchLabelKeysInPodAffinity feature gate.
+                                              This is a beta field and requires enabling MatchLabelKeysInPodAffinity feature gate (enabled by default).
                                             items:
                                               type: string
                                             type: array
@@ -14808,7 +15943,7 @@ spec:
                                               pod labels will be ignored. The default value is empty.
                                               The same key is forbidden to exist in both mismatchLabelKeys and labelSelector.
                                               Also, mismatchLabelKeys cannot be set when labelSelector isn't set.
-                                              This is an alpha field and requires enabling MatchLabelKeysInPodAffinity feature gate.
+                                              This is a beta field and requires enabling MatchLabelKeysInPodAffinity feature gate (enabled by default).
                                             items:
                                               type: string
                                             type: array
@@ -14969,7 +16104,7 @@ spec:
                                           pod labels will be ignored. The default value is empty.
                                           The same key is forbidden to exist in both matchLabelKeys and labelSelector.
                                           Also, matchLabelKeys cannot be set when labelSelector isn't set.
-                                          This is an alpha field and requires enabling MatchLabelKeysInPodAffinity feature gate.
+                                          This is a beta field and requires enabling MatchLabelKeysInPodAffinity feature gate (enabled by default).
                                         items:
                                           type: string
                                         type: array
@@ -14984,7 +16119,7 @@ spec:
                                           pod labels will be ignored. The default value is empty.
                                           The same key is forbidden to exist in both mismatchLabelKeys and labelSelector.
                                           Also, mismatchLabelKeys cannot be set when labelSelector isn't set.
-                                          This is an alpha field and requires enabling MatchLabelKeysInPodAffinity feature gate.
+                                          This is a beta field and requires enabling MatchLabelKeysInPodAffinity feature gate (enabled by default).
                                         items:
                                           type: string
                                         type: array
@@ -15074,21 +16209,20 @@ spec:
                                 Files allows the user to mount projected volumes into the pgAdmin
                                 container so that files can be referenced by pgAdmin as needed.
                               items:
-                                description: Projection that may be projected along with other supported volume types
+                                description: |-
+                                  Projection that may be projected along with other supported volume types.
+                                  Exactly one of these fields must be set.
                                 properties:
                                   clusterTrustBundle:
                                     description: |-
                                       ClusterTrustBundle allows a pod to access the `.spec.trustBundle` field
                                       of ClusterTrustBundle objects in an auto-updating file.
 
-
                                       Alpha, gated by the ClusterTrustBundleProjection feature gate.
 
-
                                       ClusterTrustBundle objects can either be selected by name, or by the
                                       combination of signer name and a label selector.
 
-
                                       Kubelet performs aggressive normalization of the PEM contents written
                                       into the pod filesystem.  Esoteric PEM features such as inter-block
                                       comments and block headers are stripped.  Certificates are deduplicated.
@@ -15211,7 +16345,12 @@ spec:
                                         x-kubernetes-list-type: atomic
                                       name:
                                         default: ""
-                                        description: 'Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names'
+                                        description: |-
+                                          Name of the referent.
+                                          This field is effectively required, but due to backwards compatibility is
+                                          allowed to be empty. Instances of this type with an empty value here are
+                                          almost certainly wrong.
+                                          More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names
                                         type: string
                                       optional:
                                         description: optional specify whether the ConfigMap or its keys must be defined
@@ -15323,7 +16462,12 @@ spec:
                                         x-kubernetes-list-type: atomic
                                       name:
                                         default: ""
-                                        description: 'Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names'
+                                        description: |-
+                                          Name of the referent.
+                                          This field is effectively required, but due to backwards compatibility is
+                                          allowed to be empty. Instances of this type with an empty value here are
+                                          almost certainly wrong.
+                                          More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names
                                         type: string
                                       optional:
                                         description: optional field specify whether the Secret or its key must be defined
@@ -15366,17 +16510,26 @@ spec:
                                 More info: https://www.pgadmin.org/docs/pgadmin4/latest/ldap.html
                               properties:
                                 key:
-                                  description: The key of the secret to select from.  Must be a valid secret key.
+                                  description: Name of the data field within the Secret.
+                                  maxLength: 253
+                                  minLength: 1
+                                  pattern: ^[-._a-zA-Z0-9]+$
                                   type: string
+                                  x-kubernetes-validations:
+                                    - message: cannot be "." or start with ".."
+                                      rule: self != "." && !self.startsWith("..")
                                 name:
-                                  default: ""
-                                  description: 'Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names'
+                                  description: Name of the Secret.
+                                  maxLength: 253
+                                  minLength: 1
+                                  pattern: ^[a-z0-9]([-a-z0-9]*[a-z0-9])?([.][a-z0-9]([-a-z0-9]*[a-z0-9])?)*$
                                   type: string
                                 optional:
-                                  description: Specify whether the Secret or its key must be defined
+                                  description: Whether or not the Secret or its data must be defined. Defaults to false.
                                   type: boolean
                               required:
                                 - key
+                                - name
                               type: object
                               x-kubernetes-map-type: atomic
                             settings:
@@ -15571,7 +16724,7 @@ spec:
                                 set to a Pending state, as reflected by the modifyVolumeStatus field, until such as a resource
                                 exists.
                                 More info: https://kubernetes.io/docs/concepts/storage/volume-attributes-classes/
-                                (Alpha) Using this field requires the VolumeAttributesClass feature gate to be enabled.
+                                (Beta) Using this field requires the VolumeAttributesClass feature gate to be enabled (off by default).
                               type: string
                             volumeMode:
                               description: |-
@@ -15582,6 +16735,12 @@ spec:
                               description: volumeName is the binding reference to the PersistentVolume backing this claim.
                               type: string
                           type: object
+                          x-kubernetes-map-type: atomic
+                          x-kubernetes-validations:
+                            - message: missing accessModes
+                              rule: 0 < size(self.accessModes)
+                            - message: missing storage request
+                              rule: has(self.resources.requests.storage)
                         image:
                           description: |-
                             Name of a container image that can run pgAdmin 4. Changing this value causes
@@ -15625,11 +16784,9 @@ spec:
                                 Claims lists the names of resources, defined in spec.resourceClaims,
                                 that are used by this container.
 
-
                                 This is an alpha field and requires enabling the
                                 DynamicResourceAllocation feature gate.
 
-
                                 This field is immutable. It can only be set for containers.
                               items:
                                 description: ResourceClaim references one entry in PodSpec.ResourceClaims.
@@ -15640,6 +16797,12 @@ spec:
                                       the Pod where this field is used. It makes that resource available
                                       inside a container.
                                     type: string
+                                  request:
+                                    description: |-
+                                      Request is the name chosen for a request in the referenced claim.
+                                      If empty, everything from the claim is made available, otherwise
+                                      only the result of this request.
+                                    type: string
                                 required:
                                   - name
                                 type: object
@@ -15680,12 +16843,31 @@ spec:
                               enum:
                                 - Cluster
                                 - Local
+                              maxLength: 10
                               type: string
                             internalTrafficPolicy:
                               description: 'More info: https://kubernetes.io/docs/concepts/services-networking/service/#traffic-policies'
                               enum:
                                 - Cluster
                                 - Local
+                              maxLength: 10
+                              type: string
+                            ipFamilies:
+                              items:
+                                description: |-
+                                  IPFamily represents the IP Family (IPv4 or IPv6). This type is used
+                                  to express the family of an IP expressed by a type (e.g. service.spec.ipFamilies).
+                                enum:
+                                  - IPv4
+                                  - IPv6
+                                type: string
+                              type: array
+                            ipFamilyPolicy:
+                              description: 'More info: https://kubernetes.io/docs/reference/kubernetes-api/service-resources/service-v1/'
+                              enum:
+                                - SingleStack
+                                - PreferDualStack
+                                - RequireDualStack
                               type: string
                             metadata:
                               description: Metadata contains metadata for custom resources
@@ -15714,6 +16896,7 @@ spec:
                                 - ClusterIP
                                 - NodePort
                                 - LoadBalancer
+                              maxLength: 15
                               type: string
                           type: object
                         tolerations:
@@ -15823,7 +17006,6 @@ spec:
                                   Keys that don't exist in the incoming pod labels will
                                   be ignored. A null or empty list means only match against labelSelector.
 
-
                                   This is a beta field and requires the MatchLabelKeysInPodTopologySpread feature gate to be enabled (enabled by default).
                                 items:
                                   type: string
@@ -15863,7 +17045,6 @@ spec:
                                   Valid values are integers greater than 0.
                                   When value is not nil, WhenUnsatisfiable must be DoNotSchedule.
 
-
                                   For example, in a 3-zone cluster, MaxSkew is set to 2, MinDomains is set to 5 and pods with the same
                                   labelSelector spread as 2/2/2:
                                   | zone1 | zone2 | zone3 |
@@ -15881,7 +17062,6 @@ spec:
                                   - Honor: only nodes matching nodeAffinity/nodeSelector are included in the calculations.
                                   - Ignore: nodeAffinity/nodeSelector are ignored. All nodes are included in the calculations.
 
-
                                   If this value is nil, the behavior is equivalent to the Honor policy.
                                   This is a beta-level feature default enabled by the NodeInclusionPolicyInPodTopologySpread feature flag.
                                 type: string
@@ -15893,7 +17073,6 @@ spec:
                                   has a toleration, are included.
                                   - Ignore: node taints are ignored. All nodes are included.
 
-
                                   If this value is nil, the behavior is equivalent to the Ignore policy.
                                   This is a beta-level feature default enabled by the NodeInclusionPolicyInPodTopologySpread feature flag.
                                 type: string
@@ -15957,9 +17136,6 @@ spec:
                           database from this list does NOT revoke access. This field is ignored for
                           the "postgres" user.
                         items:
-                          description: |-
-                            PostgreSQL identifiers are limited in length but may contain any character.
-                            More info: https://www.postgresql.org/docs/current/sql-syntax-lexical.html#SQL-SYNTAX-IDENTIFIERS
                           maxLength: 63
                           minLength: 1
                           type: string
@@ -15999,6 +17175,7 @@ spec:
                             enum:
                               - ASCII
                               - AlphaNumeric
+                            maxLength: 15
                             type: string
                         required:
                           - type
@@ -16065,7 +17242,7 @@ spec:
                           - Unknown
                         type: string
                       type:
-                        description: type of condition in CamelCase.
+                        description: type of condition in CamelCase or in foo.example.com/CamelCase.
                         maxLength: 316
                         pattern: ^([a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*/)?(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])$
                         type: string
diff --git a/helm/install/templates/manager.yaml b/helm/install/templates/manager.yaml
index 1f8695d3..8bae42ba 100644
--- a/helm/install/templates/manager.yaml
+++ b/helm/install/templates/manager.yaml
@@ -49,6 +49,9 @@ spec:
           capabilities: { drop: [ALL] }
           readOnlyRootFilesystem: true
           runAsNonRoot: true
+        ports:
+        - containerPort: 8443
+          name: metrics
         livenessProbe:
           httpGet:
             path: /readyz
diff --git a/helm/install/templates/role.yaml b/helm/install/templates/role.yaml
index 1c00a573..e09b4a6b 100644
--- a/helm/install/templates/role.yaml
+++ b/helm/install/templates/role.yaml
@@ -70,6 +70,18 @@ rules:
   - list
   - patch
   - watch
+- apiGroups:
+  - authentication.k8s.io
+  resources:
+  - tokenreviews
+  verbs:
+  - create
+- apiGroups:
+  - authorization.k8s.io
+  resources:
+  - subjectaccessreviews
+  verbs:
+  - create
 - apiGroups:
   - batch
   resources:
diff --git a/helm/install/values.yaml b/helm/install/values.yaml
index 8b0f1a42..2cf9c7ae 100644
--- a/helm/install/values.yaml
+++ b/helm/install/values.yaml
@@ -2,36 +2,34 @@
 # controllerImages are used to run the operator's controllers.
 # The cluster image defined below runs the PostgresCluster and PGUpgrade controllers.
 controllerImages:
-  cluster: registry.developers.crunchydata.com/crunchydata/postgres-operator:ubi8-5.7.4-0
+  cluster: registry.developers.crunchydata.com/crunchydata/postgres-operator:ubi9-5.8.0-0
 
 # relatedImages are used when an image is omitted from PostgresCluster, PGAdmin or PGUpgrade specs.
 relatedImages:
   postgres_17:
-    image: registry.developers.crunchydata.com/crunchydata/crunchy-postgres:ubi8-17.4-0
+    image: registry.developers.crunchydata.com/crunchydata/crunchy-postgres:ubi9-17.4-2513
+  postgres_17_gis_3.5:
+    image: registry.developers.crunchydata.com/crunchydata/crunchy-postgres-gis:ubi9-17.4-3.5-2513
   postgres_17_gis_3.4:
-    image: registry.developers.crunchydata.com/crunchydata/crunchy-postgres-gis:ubi8-17.4-3.4-0
+    image: registry.developers.crunchydata.com/crunchydata/crunchy-postgres-gis:ubi9-17.4-3.4-2513
   postgres_16:
-    image: registry.developers.crunchydata.com/crunchydata/crunchy-postgres:ubi8-16.8-0
+    image: registry.developers.crunchydata.com/crunchydata/crunchy-postgres:ubi9-16.8-2513
   postgres_16_gis_3.4:
-    image: registry.developers.crunchydata.com/crunchydata/crunchy-postgres-gis:ubi8-16.8-3.4-0
+    image: registry.developers.crunchydata.com/crunchydata/crunchy-postgres-gis:ubi9-16.8-3.4-2513
   postgres_16_gis_3.3:
-    image: registry.developers.crunchydata.com/crunchydata/crunchy-postgres-gis:ubi8-16.8-3.3-0
-  postgres_15:
-    image: registry.developers.crunchydata.com/crunchydata/crunchy-postgres:ubi8-15.12-0
-  postgres_15_gis_3.3:
-    image: registry.developers.crunchydata.com/crunchydata/crunchy-postgres-gis:ubi8-15.12-3.3-0
-  pgadmin:
-    image: registry.developers.crunchydata.com/crunchydata/crunchy-pgadmin4:ubi8-4.30-35
+    image: registry.developers.crunchydata.com/crunchydata/crunchy-postgres-gis:ubi9-16.8-3.3-2513
   pgbackrest:
-    image: registry.developers.crunchydata.com/crunchydata/crunchy-pgbackrest:ubi8-2.54.1-1
+    image: registry.developers.crunchydata.com/crunchydata/crunchy-pgbackrest:ubi9-2.54.2-2513
   pgbouncer:
-    image: registry.developers.crunchydata.com/crunchydata/crunchy-pgbouncer:ubi8-1.23-4
+    image: registry.developers.crunchydata.com/crunchydata/crunchy-pgbouncer:ubi9-1.24-2513
   pgexporter:
-    image: registry.developers.crunchydata.com/crunchydata/crunchy-postgres-exporter:ubi8-0.16.0-1
+    image: registry.developers.crunchydata.com/crunchydata/crunchy-postgres-exporter:ubi9-0.16.0-2513
   pgupgrade:
-    image: registry.developers.crunchydata.com/crunchydata/crunchy-upgrade:ubi8-5.7.4-0
+    image: registry.developers.crunchydata.com/crunchydata/crunchy-upgrade:ubi9-17.4-2513
   standalone_pgadmin:
-    image: registry.developers.crunchydata.com/crunchydata/crunchy-pgadmin4:ubi8-8.14-2
+    image: registry.developers.crunchydata.com/crunchydata/crunchy-pgadmin4:ubi9-9.1-2513
+  collector:
+    image: registry.developers.crunchydata.com/crunchydata/postgres-operator:ubi9-5.8.0-0
 
 # singleNamespace controls where PGO watches for PostgresClusters. When false,
 # PGO watches for and responds to PostgresClusters in all namespaces. When true,
@@ -88,4 +86,4 @@ resources:
 # Override environment variables entirely !!DANGEROUS!!
 # envOverride:
 #   - name: PG_DEBUG
-#     value: "true"
\ No newline at end of file
+#     value: "true"
diff --git a/kustomize/install/components/images-by-tag/kustomization.yaml b/kustomize/install/components/images-by-tag/kustomization.yaml
index 1c45865e..861c3dfe 100644
--- a/kustomize/install/components/images-by-tag/kustomization.yaml
+++ b/kustomize/install/components/images-by-tag/kustomization.yaml
@@ -2,49 +2,40 @@ kind: Component
 images:
 - name: image-pgadmin
   newName: registry.developers.crunchydata.com/crunchydata/crunchy-pgadmin4
-  newTag: ubi8-8.14-2
-- name: image-pgadmin-v4
-  newName: registry.developers.crunchydata.com/crunchydata/crunchy-pgadmin4
-  newTag: ubi8-4.30-35
+  newTag: ubi9-9.1-2513
 - name: image-pgbackrest
   newName: registry.developers.crunchydata.com/crunchydata/crunchy-pgbackrest
-  newTag: ubi8-2.54.1-1
+  newTag: ubi9-2.54.2-2513
 - name: image-pgbouncer
   newName: registry.developers.crunchydata.com/crunchydata/crunchy-pgbouncer
-  newTag: ubi8-1.23-4
+  newTag: ubi9-1.24-2513
 - name: image-postgres-exporter
   newName: registry.developers.crunchydata.com/crunchydata/crunchy-postgres-exporter
-  newTag: ubi8-0.16.0-1
-- name: image-postgres-operator-5.7
-  newName: registry.developers.crunchydata.com/crunchydata/postgres-operator
-  newTag: ubi8-5.7.4-0
-- name: image-postgres-operator-5.6
+  newTag: ubi9-0.16.0-2513
+- name: image-postgres-operator-5.8
   newName: registry.developers.crunchydata.com/crunchydata/postgres-operator
-  newTag: ubi8-5.6.6-0
-- name: image-crunchy-postgres-15
-  newName: registry.developers.crunchydata.com/crunchydata/crunchy-postgres
-  newTag: ubi8-15.12-0
+  newTag: ubi9-5.8.0-0
 - name: image-crunchy-postgres-16
   newName: registry.developers.crunchydata.com/crunchydata/crunchy-postgres
-  newTag: ubi8-16.8-0
+  newTag: ubi9-16.8-2513
 - name: image-crunchy-postgres-17
   newName: registry.developers.crunchydata.com/crunchydata/crunchy-postgres
-  newTag: ubi8-17.4-0
+  newTag: ubi9-17.4-2513
 - name: image-crunchy-upgrade
   newName: registry.developers.crunchydata.com/crunchydata/crunchy-upgrade
-  newTag: ubi8-5.7.4-0
-- name: image-crunchy-postgres-15-gis-3.3
-  newName: registry.developers.crunchydata.com/crunchydata/crunchy-postgres-gis
-  newTag: ubi8-15.12-3.3-2
+  newTag: ubi9-17.4-2513
 - name: image-crunchy-postgres-16-gis-3.3
   newName: registry.developers.crunchydata.com/crunchydata/crunchy-postgres-gis
-  newTag: ubi8-16.8-3.3-2
+  newTag: ubi9-16.8-3.3-2513
 - name: image-crunchy-postgres-16-gis-3.4
   newName: registry.developers.crunchydata.com/crunchydata/crunchy-postgres-gis
-  newTag: ubi8-16.8-3.4-2
+  newTag: ubi9-16.8-3.4-2513
 - name: image-crunchy-postgres-17-gis-3.4
   newName: registry.developers.crunchydata.com/crunchydata/crunchy-postgres-gis
-  newTag: ubi8-17.4-3.4-2
+  newTag: ubi9-17.4-3.4-2513
 - name: image-crunchy-postgres-17-gis-3.5
   newName: registry.developers.crunchydata.com/crunchydata/crunchy-postgres-gis
-  newTag: ubi8-17.4-3.5-0
+  newTag: ubi9-17.4-3.5-2513
+- name: image-collector
+  newName: registry.developers.crunchydata.com/crunchydata/postgres-operator
+  newTag: ubi9-5.8.0-0
diff --git a/kustomize/install/crd/bases/postgres-operator.crunchydata.com_crunchybridgeclusters.yaml b/kustomize/install/crd/bases/postgres-operator.crunchydata.com_crunchybridgeclusters.yaml
index a9ee680f..d39a89b2 100644
--- a/kustomize/install/crd/bases/postgres-operator.crunchydata.com_crunchybridgeclusters.yaml
+++ b/kustomize/install/crd/bases/postgres-operator.crunchydata.com_crunchybridgeclusters.yaml
@@ -2,11 +2,10 @@ apiVersion: apiextensions.k8s.io/v1
 kind: CustomResourceDefinition
 metadata:
   annotations:
-    controller-gen.kubebuilder.io/version: v0.15.0
-  labels:
-    app.kubernetes.io/name: pgo
-    app.kubernetes.io/version: 5.7.4
+    controller-gen.kubebuilder.io/version: v0.17.2
   name: crunchybridgeclusters.postgres-operator.crunchydata.com
+  labels:
+    app.kubernetes.io/version: 5.8.0
 spec:
   group: postgres-operator.crunchydata.com
   names:
@@ -44,11 +43,7 @@ spec:
                 to be managed by Crunchy Data Bridge
               properties:
                 clusterName:
-                  description: |-
-                    The name of the cluster
-                    ---
-                    According to Bridge API/GUI errors,
-                    "Field name should be between 5 and 50 characters in length, containing only unicode characters, unicode numbers, hyphens, spaces, or underscores, and starting with a character", and ending with a character or number.
+                  description: The name of the cluster
                   maxLength: 50
                   minLength: 5
                   pattern: ^[A-Za-z][A-Za-z0-9\-_ ]*[A-Za-z0-9]$
@@ -94,6 +89,7 @@ spec:
                     - aws
                     - azure
                     - gcp
+                  maxLength: 10
                   type: string
                   x-kubernetes-validations:
                     - message: immutable
@@ -161,8 +157,7 @@ spec:
                 conditions:
                   description: conditions represent the observations of postgres cluster's current state.
                   items:
-                    description: "Condition contains details for one aspect of the current state of this API Resource.\n---\nThis struct is intended for direct use as an array at the field path .status.conditions.  For example,\n\n\n\ttype FooStatus struct{\n\t    // Represents the observations of a foo's current state.\n\t    // Known .status.conditions.type are: \"Available\", \"Progressing\", and\
-                      \ \"Degraded\"\n\t    // +patchMergeKey=type\n\t    // +patchStrategy=merge\n\t    // +listType=map\n\t    // +listMapKey=type\n\t    Conditions []metav1.Condition `json:\"conditions,omitempty\" patchStrategy:\"merge\" patchMergeKey:\"type\" protobuf:\"bytes,1,rep,name=conditions\"`\n\n\n\t    // other fields\n\t}"
+                    description: Condition contains details for one aspect of the current state of this API Resource.
                     properties:
                       lastTransitionTime:
                         description: |-
@@ -203,12 +198,7 @@ spec:
                           - Unknown
                         type: string
                       type:
-                        description: |-
-                          type of condition in CamelCase or in foo.example.com/CamelCase.
-                          ---
-                          Many .condition.type values are consistent across resources like Available, but because arbitrary conditions can be
-                          useful (see .node.status.conditions), the ability to deconflict is important.
-                          The regex it matches is (dns1123SubdomainFmt/)?(qualifiedNameFmt)
+                        description: type of condition in CamelCase or in foo.example.com/CamelCase.
                         maxLength: 316
                         pattern: ^([a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*/)?(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])$
                         type: string
diff --git a/kustomize/install/crd/bases/postgres-operator.crunchydata.com_pgadmins.yaml b/kustomize/install/crd/bases/postgres-operator.crunchydata.com_pgadmins.yaml
index 6db57a1a..48ca7e75 100644
--- a/kustomize/install/crd/bases/postgres-operator.crunchydata.com_pgadmins.yaml
+++ b/kustomize/install/crd/bases/postgres-operator.crunchydata.com_pgadmins.yaml
@@ -2,11 +2,10 @@ apiVersion: apiextensions.k8s.io/v1
 kind: CustomResourceDefinition
 metadata:
   annotations:
-    controller-gen.kubebuilder.io/version: v0.15.0
-  labels:
-    app.kubernetes.io/name: pgo
-    app.kubernetes.io/version: 5.7.4
+    controller-gen.kubebuilder.io/version: v0.17.2
   name: pgadmins.postgres-operator.crunchydata.com
+  labels:
+    app.kubernetes.io/version: 5.8.0
 spec:
   group: postgres-operator.crunchydata.com
   names:
@@ -309,7 +308,7 @@ spec:
                                       pod labels will be ignored. The default value is empty.
                                       The same key is forbidden to exist in both matchLabelKeys and labelSelector.
                                       Also, matchLabelKeys cannot be set when labelSelector isn't set.
-                                      This is an alpha field and requires enabling MatchLabelKeysInPodAffinity feature gate.
+                                      This is a beta field and requires enabling MatchLabelKeysInPodAffinity feature gate (enabled by default).
                                     items:
                                       type: string
                                     type: array
@@ -324,7 +323,7 @@ spec:
                                       pod labels will be ignored. The default value is empty.
                                       The same key is forbidden to exist in both mismatchLabelKeys and labelSelector.
                                       Also, mismatchLabelKeys cannot be set when labelSelector isn't set.
-                                      This is an alpha field and requires enabling MatchLabelKeysInPodAffinity feature gate.
+                                      This is a beta field and requires enabling MatchLabelKeysInPodAffinity feature gate (enabled by default).
                                     items:
                                       type: string
                                     type: array
@@ -485,7 +484,7 @@ spec:
                                   pod labels will be ignored. The default value is empty.
                                   The same key is forbidden to exist in both matchLabelKeys and labelSelector.
                                   Also, matchLabelKeys cannot be set when labelSelector isn't set.
-                                  This is an alpha field and requires enabling MatchLabelKeysInPodAffinity feature gate.
+                                  This is a beta field and requires enabling MatchLabelKeysInPodAffinity feature gate (enabled by default).
                                 items:
                                   type: string
                                 type: array
@@ -500,7 +499,7 @@ spec:
                                   pod labels will be ignored. The default value is empty.
                                   The same key is forbidden to exist in both mismatchLabelKeys and labelSelector.
                                   Also, mismatchLabelKeys cannot be set when labelSelector isn't set.
-                                  This is an alpha field and requires enabling MatchLabelKeysInPodAffinity feature gate.
+                                  This is a beta field and requires enabling MatchLabelKeysInPodAffinity feature gate (enabled by default).
                                 items:
                                   type: string
                                 type: array
@@ -654,7 +653,7 @@ spec:
                                       pod labels will be ignored. The default value is empty.
                                       The same key is forbidden to exist in both matchLabelKeys and labelSelector.
                                       Also, matchLabelKeys cannot be set when labelSelector isn't set.
-                                      This is an alpha field and requires enabling MatchLabelKeysInPodAffinity feature gate.
+                                      This is a beta field and requires enabling MatchLabelKeysInPodAffinity feature gate (enabled by default).
                                     items:
                                       type: string
                                     type: array
@@ -669,7 +668,7 @@ spec:
                                       pod labels will be ignored. The default value is empty.
                                       The same key is forbidden to exist in both mismatchLabelKeys and labelSelector.
                                       Also, mismatchLabelKeys cannot be set when labelSelector isn't set.
-                                      This is an alpha field and requires enabling MatchLabelKeysInPodAffinity feature gate.
+                                      This is a beta field and requires enabling MatchLabelKeysInPodAffinity feature gate (enabled by default).
                                     items:
                                       type: string
                                     type: array
@@ -830,7 +829,7 @@ spec:
                                   pod labels will be ignored. The default value is empty.
                                   The same key is forbidden to exist in both matchLabelKeys and labelSelector.
                                   Also, matchLabelKeys cannot be set when labelSelector isn't set.
-                                  This is an alpha field and requires enabling MatchLabelKeysInPodAffinity feature gate.
+                                  This is a beta field and requires enabling MatchLabelKeysInPodAffinity feature gate (enabled by default).
                                 items:
                                   type: string
                                 type: array
@@ -845,7 +844,7 @@ spec:
                                   pod labels will be ignored. The default value is empty.
                                   The same key is forbidden to exist in both mismatchLabelKeys and labelSelector.
                                   Also, mismatchLabelKeys cannot be set when labelSelector isn't set.
-                                  This is an alpha field and requires enabling MatchLabelKeysInPodAffinity feature gate.
+                                  This is a beta field and requires enabling MatchLabelKeysInPodAffinity feature gate (enabled by default).
                                 items:
                                   type: string
                                 type: array
@@ -936,17 +935,26 @@ spec:
                         More info: https://www.pgadmin.org/docs/pgadmin4/latest/external_database.html
                       properties:
                         key:
-                          description: The key of the secret to select from.  Must be a valid secret key.
+                          description: Name of the data field within the Secret.
+                          maxLength: 253
+                          minLength: 1
+                          pattern: ^[-._a-zA-Z0-9]+$
                           type: string
+                          x-kubernetes-validations:
+                            - message: cannot be "." or start with ".."
+                              rule: self != "." && !self.startsWith("..")
                         name:
-                          default: ""
-                          description: 'Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names'
+                          description: Name of the Secret.
+                          maxLength: 253
+                          minLength: 1
+                          pattern: ^[a-z0-9]([-a-z0-9]*[a-z0-9])?([.][a-z0-9]([-a-z0-9]*[a-z0-9])?)*$
                           type: string
                         optional:
-                          description: Specify whether the Secret or its key must be defined
+                          description: Whether or not the Secret or its data must be defined. Defaults to false.
                           type: boolean
                       required:
                         - key
+                        - name
                       type: object
                       x-kubernetes-map-type: atomic
                     files:
@@ -954,21 +962,20 @@ spec:
                         Files allows the user to mount projected volumes into the pgAdmin
                         container so that files can be referenced by pgAdmin as needed.
                       items:
-                        description: Projection that may be projected along with other supported volume types
+                        description: |-
+                          Projection that may be projected along with other supported volume types.
+                          Exactly one of these fields must be set.
                         properties:
                           clusterTrustBundle:
                             description: |-
                               ClusterTrustBundle allows a pod to access the `.spec.trustBundle` field
                               of ClusterTrustBundle objects in an auto-updating file.
 
-
                               Alpha, gated by the ClusterTrustBundleProjection feature gate.
 
-
                               ClusterTrustBundle objects can either be selected by name, or by the
                               combination of signer name and a label selector.
 
-
                               Kubelet performs aggressive normalization of the PEM contents written
                               into the pod filesystem.  Esoteric PEM features such as inter-block
                               comments and block headers are stripped.  Certificates are deduplicated.
@@ -1091,7 +1098,12 @@ spec:
                                 x-kubernetes-list-type: atomic
                               name:
                                 default: ""
-                                description: 'Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names'
+                                description: |-
+                                  Name of the referent.
+                                  This field is effectively required, but due to backwards compatibility is
+                                  allowed to be empty. Instances of this type with an empty value here are
+                                  almost certainly wrong.
+                                  More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names
                                 type: string
                               optional:
                                 description: optional specify whether the ConfigMap or its keys must be defined
@@ -1203,7 +1215,12 @@ spec:
                                 x-kubernetes-list-type: atomic
                               name:
                                 default: ""
-                                description: 'Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names'
+                                description: |-
+                                  Name of the referent.
+                                  This field is effectively required, but due to backwards compatibility is
+                                  allowed to be empty. Instances of this type with an empty value here are
+                                  almost certainly wrong.
+                                  More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names
                                 type: string
                               optional:
                                 description: optional field specify whether the Secret or its key must be defined
@@ -1242,7 +1259,7 @@ spec:
                       type: array
                     gunicorn:
                       description: |-
-                        Settings for the gunicorn server.
+                        Settings for the Gunicorn server.
                         More info: https://docs.gunicorn.org/en/latest/settings.html
                       type: object
                       x-kubernetes-preserve-unknown-fields: true
@@ -1252,25 +1269,82 @@ spec:
                         More info: https://www.pgadmin.org/docs/pgadmin4/latest/ldap.html
                       properties:
                         key:
-                          description: The key of the secret to select from.  Must be a valid secret key.
+                          description: Name of the data field within the Secret.
+                          maxLength: 253
+                          minLength: 1
+                          pattern: ^[-._a-zA-Z0-9]+$
                           type: string
+                          x-kubernetes-validations:
+                            - message: cannot be "." or start with ".."
+                              rule: self != "." && !self.startsWith("..")
                         name:
-                          default: ""
-                          description: 'Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names'
+                          description: Name of the Secret.
+                          maxLength: 253
+                          minLength: 1
+                          pattern: ^[a-z0-9]([-a-z0-9]*[a-z0-9])?([.][a-z0-9]([-a-z0-9]*[a-z0-9])?)*$
                           type: string
                         optional:
-                          description: Specify whether the Secret or its key must be defined
+                          description: Whether or not the Secret or its data must be defined. Defaults to false.
                           type: boolean
                       required:
                         - key
+                        - name
                       type: object
                       x-kubernetes-map-type: atomic
+                    oauthConfigurations:
+                      description: |-
+                        Secrets for the `OAUTH2_CONFIG` setting. If there are `OAUTH2_CONFIG` values
+                        in the settings field, they will be combined with the values loaded here.
+                        More info: https://www.pgadmin.org/docs/pgadmin4/latest/oauth2.html
+                      items:
+                        properties:
+                          name:
+                            description: The OAUTH2_NAME of this configuration.
+                            maxLength: 20
+                            minLength: 1
+                            pattern: ^[A-Za-z0-9]+$
+                            type: string
+                          secret:
+                            description: A Secret containing the settings of one OAuth2 provider as a JSON object.
+                            properties:
+                              key:
+                                description: Name of the data field within the Secret.
+                                maxLength: 253
+                                minLength: 1
+                                pattern: ^[-._a-zA-Z0-9]+$
+                                type: string
+                                x-kubernetes-validations:
+                                  - message: cannot be "." or start with ".."
+                                    rule: self != "." && !self.startsWith("..")
+                              name:
+                                description: Name of the Secret.
+                                maxLength: 253
+                                minLength: 1
+                                pattern: ^[a-z0-9]([-a-z0-9]*[a-z0-9])?([.][a-z0-9]([-a-z0-9]*[a-z0-9])?)*$
+                                type: string
+                            required:
+                              - key
+                              - name
+                            type: object
+                            x-kubernetes-map-type: atomic
+                        required:
+                          - name
+                          - secret
+                        type: object
+                        x-kubernetes-map-type: atomic
+                      maxItems: 10
+                      minItems: 1
+                      type: array
+                      x-kubernetes-list-map-keys:
+                        - name
+                      x-kubernetes-list-type: map
                     settings:
                       description: |-
                         Settings for the pgAdmin server process. Keys should be uppercase and
                         values must be constants.
                         More info: https://www.pgadmin.org/docs/pgadmin4/latest/config_py.html
                       type: object
+                      x-kubernetes-map-type: granular
                       x-kubernetes-preserve-unknown-fields: true
                   type: object
                 dataVolumeClaimSpec:
@@ -1457,7 +1531,7 @@ spec:
                         set to a Pending state, as reflected by the modifyVolumeStatus field, until such as a resource
                         exists.
                         More info: https://kubernetes.io/docs/concepts/storage/volume-attributes-classes/
-                        (Alpha) Using this field requires the VolumeAttributesClass feature gate to be enabled.
+                        (Beta) Using this field requires the VolumeAttributesClass feature gate to be enabled (off by default).
                       type: string
                     volumeMode:
                       description: |-
@@ -1468,6 +1542,12 @@ spec:
                       description: volumeName is the binding reference to the PersistentVolume backing this claim.
                       type: string
                   type: object
+                  x-kubernetes-map-type: atomic
+                  x-kubernetes-validations:
+                    - message: missing accessModes
+                      rule: 0 < size(self.accessModes)
+                    - message: missing storage request
+                      rule: has(self.resources.requests.storage)
                 image:
                   description: The image name to use for pgAdmin instance.
                   type: string
@@ -1480,6 +1560,7 @@ spec:
                     - Always
                     - Never
                     - IfNotPresent
+                  maxLength: 15
                   type: string
                 imagePullSecrets:
                   description: |-
@@ -1493,11 +1574,555 @@ spec:
                     properties:
                       name:
                         default: ""
-                        description: 'Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names'
+                        description: |-
+                          Name of the referent.
+                          This field is effectively required, but due to backwards compatibility is
+                          allowed to be empty. Instances of this type with an empty value here are
+                          almost certainly wrong.
+                          More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names
                         type: string
                     type: object
                     x-kubernetes-map-type: atomic
                   type: array
+                instrumentation:
+                  description: |-
+                    Configuration for the OpenTelemetry collector container used to collect
+                    logs and metrics.
+                  properties:
+                    config:
+                      description: Config is the place for users to configure exporters and provide files.
+                      properties:
+                        detectors:
+                          description: |-
+                            Resource detectors add identifying attributes to logs and metrics. These run in the order they are defined.
+                            More info: https://github.com/open-telemetry/opentelemetry-collector-contrib/blob/-/processor/resourcedetectionprocessor#readme
+                          items:
+                            properties:
+                              attributes:
+                                additionalProperties:
+                                  type: boolean
+                                description: |-
+                                  Attributes to use from this detector. Detectors usually add every attribute
+                                  they know automatically. Names omitted here behave according to detector defaults.
+                                maxProperties: 30
+                                minProperties: 1
+                                type: object
+                                x-kubernetes-map-type: atomic
+                              name:
+                                description: 'Name of the resource detector to enable: `aks`, `eks`, `gcp`, etc.'
+                                maxLength: 20
+                                minLength: 1
+                                type: string
+                            required:
+                              - name
+                            type: object
+                            x-kubernetes-map-type: atomic
+                          maxItems: 10
+                          minItems: 1
+                          type: array
+                          x-kubernetes-list-map-keys:
+                            - name
+                          x-kubernetes-list-type: map
+                        exporters:
+                          description: |-
+                            Exporters allows users to configure OpenTelemetry exporters that exist
+                            in the collector image.
+                          type: object
+                          x-kubernetes-preserve-unknown-fields: true
+                        files:
+                          description: |-
+                            Files allows the user to mount projected volumes into the collector
+                            Pod so that files can be referenced by the collector as needed.
+                          items:
+                            description: |-
+                              Projection that may be projected along with other supported volume types.
+                              Exactly one of these fields must be set.
+                            properties:
+                              clusterTrustBundle:
+                                description: |-
+                                  ClusterTrustBundle allows a pod to access the `.spec.trustBundle` field
+                                  of ClusterTrustBundle objects in an auto-updating file.
+
+                                  Alpha, gated by the ClusterTrustBundleProjection feature gate.
+
+                                  ClusterTrustBundle objects can either be selected by name, or by the
+                                  combination of signer name and a label selector.
+
+                                  Kubelet performs aggressive normalization of the PEM contents written
+                                  into the pod filesystem.  Esoteric PEM features such as inter-block
+                                  comments and block headers are stripped.  Certificates are deduplicated.
+                                  The ordering of certificates within the file is arbitrary, and Kubelet
+                                  may change the order over time.
+                                properties:
+                                  labelSelector:
+                                    description: |-
+                                      Select all ClusterTrustBundles that match this label selector.  Only has
+                                      effect if signerName is set.  Mutually-exclusive with name.  If unset,
+                                      interpreted as "match nothing".  If set but empty, interpreted as "match
+                                      everything".
+                                    properties:
+                                      matchExpressions:
+                                        description: matchExpressions is a list of label selector requirements. The requirements are ANDed.
+                                        items:
+                                          description: |-
+                                            A label selector requirement is a selector that contains values, a key, and an operator that
+                                            relates the key and values.
+                                          properties:
+                                            key:
+                                              description: key is the label key that the selector applies to.
+                                              type: string
+                                            operator:
+                                              description: |-
+                                                operator represents a key's relationship to a set of values.
+                                                Valid operators are In, NotIn, Exists and DoesNotExist.
+                                              type: string
+                                            values:
+                                              description: |-
+                                                values is an array of string values. If the operator is In or NotIn,
+                                                the values array must be non-empty. If the operator is Exists or DoesNotExist,
+                                                the values array must be empty. This array is replaced during a strategic
+                                                merge patch.
+                                              items:
+                                                type: string
+                                              type: array
+                                              x-kubernetes-list-type: atomic
+                                          required:
+                                            - key
+                                            - operator
+                                          type: object
+                                        type: array
+                                        x-kubernetes-list-type: atomic
+                                      matchLabels:
+                                        additionalProperties:
+                                          type: string
+                                        description: |-
+                                          matchLabels is a map of {key,value} pairs. A single {key,value} in the matchLabels
+                                          map is equivalent to an element of matchExpressions, whose key field is "key", the
+                                          operator is "In", and the values array contains only "value". The requirements are ANDed.
+                                        type: object
+                                    type: object
+                                    x-kubernetes-map-type: atomic
+                                  name:
+                                    description: |-
+                                      Select a single ClusterTrustBundle by object name.  Mutually-exclusive
+                                      with signerName and labelSelector.
+                                    type: string
+                                  optional:
+                                    description: |-
+                                      If true, don't block pod startup if the referenced ClusterTrustBundle(s)
+                                      aren't available.  If using name, then the named ClusterTrustBundle is
+                                      allowed not to exist.  If using signerName, then the combination of
+                                      signerName and labelSelector is allowed to match zero
+                                      ClusterTrustBundles.
+                                    type: boolean
+                                  path:
+                                    description: Relative path from the volume root to write the bundle.
+                                    type: string
+                                  signerName:
+                                    description: |-
+                                      Select all ClusterTrustBundles that match this signer name.
+                                      Mutually-exclusive with name.  The contents of all selected
+                                      ClusterTrustBundles will be unified and deduplicated.
+                                    type: string
+                                required:
+                                  - path
+                                type: object
+                              configMap:
+                                description: configMap information about the configMap data to project
+                                properties:
+                                  items:
+                                    description: |-
+                                      items if unspecified, each key-value pair in the Data field of the referenced
+                                      ConfigMap will be projected into the volume as a file whose name is the
+                                      key and content is the value. If specified, the listed keys will be
+                                      projected into the specified paths, and unlisted keys will not be
+                                      present. If a key is specified which is not present in the ConfigMap,
+                                      the volume setup will error unless it is marked optional. Paths must be
+                                      relative and may not contain the '..' path or start with '..'.
+                                    items:
+                                      description: Maps a string key to a path within a volume.
+                                      properties:
+                                        key:
+                                          description: key is the key to project.
+                                          type: string
+                                        mode:
+                                          description: |-
+                                            mode is Optional: mode bits used to set permissions on this file.
+                                            Must be an octal value between 0000 and 0777 or a decimal value between 0 and 511.
+                                            YAML accepts both octal and decimal values, JSON requires decimal values for mode bits.
+                                            If not specified, the volume defaultMode will be used.
+                                            This might be in conflict with other options that affect the file
+                                            mode, like fsGroup, and the result can be other mode bits set.
+                                          format: int32
+                                          type: integer
+                                        path:
+                                          description: |-
+                                            path is the relative path of the file to map the key to.
+                                            May not be an absolute path.
+                                            May not contain the path element '..'.
+                                            May not start with the string '..'.
+                                          type: string
+                                      required:
+                                        - key
+                                        - path
+                                      type: object
+                                    type: array
+                                    x-kubernetes-list-type: atomic
+                                  name:
+                                    default: ""
+                                    description: |-
+                                      Name of the referent.
+                                      This field is effectively required, but due to backwards compatibility is
+                                      allowed to be empty. Instances of this type with an empty value here are
+                                      almost certainly wrong.
+                                      More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names
+                                    type: string
+                                  optional:
+                                    description: optional specify whether the ConfigMap or its keys must be defined
+                                    type: boolean
+                                type: object
+                                x-kubernetes-map-type: atomic
+                              downwardAPI:
+                                description: downwardAPI information about the downwardAPI data to project
+                                properties:
+                                  items:
+                                    description: Items is a list of DownwardAPIVolume file
+                                    items:
+                                      description: DownwardAPIVolumeFile represents information to create the file containing the pod field
+                                      properties:
+                                        fieldRef:
+                                          description: 'Required: Selects a field of the pod: only annotations, labels, name, namespace and uid are supported.'
+                                          properties:
+                                            apiVersion:
+                                              description: Version of the schema the FieldPath is written in terms of, defaults to "v1".
+                                              type: string
+                                            fieldPath:
+                                              description: Path of the field to select in the specified API version.
+                                              type: string
+                                          required:
+                                            - fieldPath
+                                          type: object
+                                          x-kubernetes-map-type: atomic
+                                        mode:
+                                          description: |-
+                                            Optional: mode bits used to set permissions on this file, must be an octal value
+                                            between 0000 and 0777 or a decimal value between 0 and 511.
+                                            YAML accepts both octal and decimal values, JSON requires decimal values for mode bits.
+                                            If not specified, the volume defaultMode will be used.
+                                            This might be in conflict with other options that affect the file
+                                            mode, like fsGroup, and the result can be other mode bits set.
+                                          format: int32
+                                          type: integer
+                                        path:
+                                          description: 'Required: Path is  the relative path name of the file to be created. Must not be absolute or contain the ''..'' path. Must be utf-8 encoded. The first item of the relative path must not start with ''..'''
+                                          type: string
+                                        resourceFieldRef:
+                                          description: |-
+                                            Selects a resource of the container: only resources limits and requests
+                                            (limits.cpu, limits.memory, requests.cpu and requests.memory) are currently supported.
+                                          properties:
+                                            containerName:
+                                              description: 'Container name: required for volumes, optional for env vars'
+                                              type: string
+                                            divisor:
+                                              anyOf:
+                                                - type: integer
+                                                - type: string
+                                              description: Specifies the output format of the exposed resources, defaults to "1"
+                                              pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$
+                                              x-kubernetes-int-or-string: true
+                                            resource:
+                                              description: 'Required: resource to select'
+                                              type: string
+                                          required:
+                                            - resource
+                                          type: object
+                                          x-kubernetes-map-type: atomic
+                                      required:
+                                        - path
+                                      type: object
+                                    type: array
+                                    x-kubernetes-list-type: atomic
+                                type: object
+                              secret:
+                                description: secret information about the secret data to project
+                                properties:
+                                  items:
+                                    description: |-
+                                      items if unspecified, each key-value pair in the Data field of the referenced
+                                      Secret will be projected into the volume as a file whose name is the
+                                      key and content is the value. If specified, the listed keys will be
+                                      projected into the specified paths, and unlisted keys will not be
+                                      present. If a key is specified which is not present in the Secret,
+                                      the volume setup will error unless it is marked optional. Paths must be
+                                      relative and may not contain the '..' path or start with '..'.
+                                    items:
+                                      description: Maps a string key to a path within a volume.
+                                      properties:
+                                        key:
+                                          description: key is the key to project.
+                                          type: string
+                                        mode:
+                                          description: |-
+                                            mode is Optional: mode bits used to set permissions on this file.
+                                            Must be an octal value between 0000 and 0777 or a decimal value between 0 and 511.
+                                            YAML accepts both octal and decimal values, JSON requires decimal values for mode bits.
+                                            If not specified, the volume defaultMode will be used.
+                                            This might be in conflict with other options that affect the file
+                                            mode, like fsGroup, and the result can be other mode bits set.
+                                          format: int32
+                                          type: integer
+                                        path:
+                                          description: |-
+                                            path is the relative path of the file to map the key to.
+                                            May not be an absolute path.
+                                            May not contain the path element '..'.
+                                            May not start with the string '..'.
+                                          type: string
+                                      required:
+                                        - key
+                                        - path
+                                      type: object
+                                    type: array
+                                    x-kubernetes-list-type: atomic
+                                  name:
+                                    default: ""
+                                    description: |-
+                                      Name of the referent.
+                                      This field is effectively required, but due to backwards compatibility is
+                                      allowed to be empty. Instances of this type with an empty value here are
+                                      almost certainly wrong.
+                                      More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names
+                                    type: string
+                                  optional:
+                                    description: optional field specify whether the Secret or its key must be defined
+                                    type: boolean
+                                type: object
+                                x-kubernetes-map-type: atomic
+                              serviceAccountToken:
+                                description: serviceAccountToken is information about the serviceAccountToken data to project
+                                properties:
+                                  audience:
+                                    description: |-
+                                      audience is the intended audience of the token. A recipient of a token
+                                      must identify itself with an identifier specified in the audience of the
+                                      token, and otherwise should reject the token. The audience defaults to the
+                                      identifier of the apiserver.
+                                    type: string
+                                  expirationSeconds:
+                                    description: |-
+                                      expirationSeconds is the requested duration of validity of the service
+                                      account token. As the token approaches expiration, the kubelet volume
+                                      plugin will proactively rotate the service account token. The kubelet will
+                                      start trying to rotate the token if the token is older than 80 percent of
+                                      its time to live or if the token is older than 24 hours.Defaults to 1 hour
+                                      and must be at least 10 minutes.
+                                    format: int64
+                                    type: integer
+                                  path:
+                                    description: |-
+                                      path is the path relative to the mount point of the file to project the
+                                      token into.
+                                    type: string
+                                required:
+                                  - path
+                                type: object
+                            type: object
+                          minItems: 1
+                          type: array
+                          x-kubernetes-list-type: atomic
+                      type: object
+                    image:
+                      description: |-
+                        Image name to use for collector containers. When omitted, the value
+                        comes from an operator environment variable.
+                      type: string
+                    logs:
+                      description: Logs is the place for users to configure the log collection.
+                      properties:
+                        batches:
+                          description: Log records are exported in small batches. Set this field to change their size and frequency.
+                          properties:
+                            maxDelay:
+                              default: 200ms
+                              description: |-
+                                Maximum time to wait before exporting a log record. Higher numbers
+                                allow more records to be deduplicated and compressed before export.
+                              format: duration
+                              maxLength: 20
+                              minLength: 1
+                              pattern: ^((PT)?( *[0-9]+ *(?i:(ms|s|m)|(milli|sec|min)s?))+|0)$
+                              type: string
+                              x-kubernetes-validations:
+                                - rule: duration("0") <= self && self <= duration("5m")
+                            maxRecords:
+                              description: |-
+                                Maximum number of records to include in an exported batch. When present,
+                                batches this size are sent without any further delay.
+                              format: int32
+                              minimum: 1
+                              type: integer
+                            minRecords:
+                              default: 8192
+                              description: |-
+                                Number of records to wait for before exporting a batch. Higher numbers
+                                allow more records to be deduplicated and compressed before export.
+                              format: int32
+                              minimum: 0
+                              type: integer
+                          type: object
+                          x-kubernetes-map-type: atomic
+                          x-kubernetes-validations:
+                            - message: to disable batching, both minRecords and maxDelay must be zero
+                              rule: (has(self.minRecords) && self.minRecords == 0) == (has(self.maxDelay) && self.maxDelay == duration('0'))
+                            - message: minRecords cannot be larger than maxRecords
+                              rule: '!has(self.maxRecords) || self.minRecords <= self.maxRecords'
+                        exporters:
+                          description: The names of exporters that should send logs.
+                          items:
+                            type: string
+                          minItems: 1
+                          type: array
+                          x-kubernetes-list-type: set
+                        retentionPeriod:
+                          description: |-
+                            How long to retain log files locally. An RFC 3339 duration or a number
+                            and unit: `12 hr`, `3d`, `4 weeks`, etc.
+                          format: duration
+                          maxLength: 20
+                          minLength: 1
+                          pattern: ^(PT)?( *[0-9]+ *(?i:(h|hr|d|w|wk)|(hour|day|week)s?))+$
+                          type: string
+                          x-kubernetes-validations:
+                            - message: must be at least one hour
+                              rule: duration("1h") <= self && self <= duration("8760h")
+                      type: object
+                    metrics:
+                      description: Metrics is the place for users to configure metrics collection.
+                      properties:
+                        customQueries:
+                          description: |-
+                            Where users can turn off built-in metrics and also provide their own
+                            custom queries.
+                          properties:
+                            add:
+                              description: User defined queries and metrics.
+                              items:
+                                properties:
+                                  collectionInterval:
+                                    default: 5s
+                                    description: How often the queries should be run.
+                                    format: duration
+                                    maxLength: 20
+                                    minLength: 1
+                                    pattern: ^((PT)?( *[0-9]+ *(?i:(ms|s|m)|(milli|sec|min)s?))+|0)$
+                                    type: string
+                                    x-kubernetes-validations:
+                                      - rule: duration("0") <= self && self <= duration("60m")
+                                  name:
+                                    description: |-
+                                      The name of this batch of queries, which will be used in naming the OTel
+                                      SqlQuery receiver.
+                                    maxLength: 20
+                                    pattern: ^[^\pZ\pC\pS]+$
+                                    type: string
+                                  queries:
+                                    description: A ConfigMap holding the yaml file that contains the queries.
+                                    properties:
+                                      key:
+                                        description: Name of the data field within the ConfigMap.
+                                        maxLength: 253
+                                        minLength: 1
+                                        pattern: ^[-._a-zA-Z0-9]+$
+                                        type: string
+                                        x-kubernetes-validations:
+                                          - message: cannot be "." or start with ".."
+                                            rule: self != "." && !self.startsWith("..")
+                                      name:
+                                        description: Name of the ConfigMap.
+                                        maxLength: 253
+                                        minLength: 1
+                                        pattern: ^[a-z0-9]([-a-z0-9]*[a-z0-9])?([.][a-z0-9]([-a-z0-9]*[a-z0-9])?)*$
+                                        type: string
+                                    required:
+                                      - key
+                                      - name
+                                    type: object
+                                    x-kubernetes-map-type: atomic
+                                required:
+                                  - name
+                                  - queries
+                                type: object
+                              type: array
+                            remove:
+                              description: |-
+                                A list of built-in queries that should be removed. If all queries for a
+                                given SQL statement are removed, the SQL statement will no longer be run.
+                              items:
+                                type: string
+                              type: array
+                          type: object
+                      type: object
+                    resources:
+                      description: Resources holds the resource requirements for the collector container.
+                      properties:
+                        claims:
+                          description: |-
+                            Claims lists the names of resources, defined in spec.resourceClaims,
+                            that are used by this container.
+
+                            This is an alpha field and requires enabling the
+                            DynamicResourceAllocation feature gate.
+
+                            This field is immutable. It can only be set for containers.
+                          items:
+                            description: ResourceClaim references one entry in PodSpec.ResourceClaims.
+                            properties:
+                              name:
+                                description: |-
+                                  Name must match the name of one entry in pod.spec.resourceClaims of
+                                  the Pod where this field is used. It makes that resource available
+                                  inside a container.
+                                type: string
+                              request:
+                                description: |-
+                                  Request is the name chosen for a request in the referenced claim.
+                                  If empty, everything from the claim is made available, otherwise
+                                  only the result of this request.
+                                type: string
+                            required:
+                              - name
+                            type: object
+                          type: array
+                          x-kubernetes-list-map-keys:
+                            - name
+                          x-kubernetes-list-type: map
+                        limits:
+                          additionalProperties:
+                            anyOf:
+                              - type: integer
+                              - type: string
+                            pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$
+                            x-kubernetes-int-or-string: true
+                          description: |-
+                            Limits describes the maximum amount of compute resources allowed.
+                            More info: https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/
+                          type: object
+                        requests:
+                          additionalProperties:
+                            anyOf:
+                              - type: integer
+                              - type: string
+                            pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$
+                            x-kubernetes-int-or-string: true
+                          description: |-
+                            Requests describes the minimum amount of compute resources required.
+                            If Requests is omitted for a container, it defaults to Limits if that is explicitly specified,
+                            otherwise to an implementation-defined value. Requests cannot exceed Limits.
+                            More info: https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/
+                          type: object
+                      type: object
+                  type: object
                 metadata:
                   description: Metadata contains metadata for custom resources
                   properties:
@@ -1524,11 +2149,9 @@ spec:
                         Claims lists the names of resources, defined in spec.resourceClaims,
                         that are used by this container.
 
-
                         This is an alpha field and requires enabling the
                         DynamicResourceAllocation feature gate.
 
-
                         This field is immutable. It can only be set for containers.
                       items:
                         description: ResourceClaim references one entry in PodSpec.ResourceClaims.
@@ -1539,6 +2162,12 @@ spec:
                               the Pod where this field is used. It makes that resource available
                               inside a container.
                             type: string
+                          request:
+                            description: |-
+                              Request is the name chosen for a request in the referenced claim.
+                              If empty, everything from the claim is made available, otherwise
+                              only the result of this request.
+                            type: string
                         required:
                           - name
                         type: object
@@ -1704,7 +2333,12 @@ spec:
                             type: string
                           name:
                             default: ""
-                            description: 'Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names'
+                            description: |-
+                              Name of the referent.
+                              This field is effectively required, but due to backwards compatibility is
+                              allowed to be empty. Instances of this type with an empty value here are
+                              almost certainly wrong.
+                              More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names
                             type: string
                           optional:
                             description: Specify whether the Secret or its key must be defined
@@ -1720,6 +2354,7 @@ spec:
                         enum:
                           - Administrator
                           - User
+                        maxLength: 15
                         type: string
                       username:
                         description: |-
@@ -1745,8 +2380,7 @@ spec:
                     conditions represent the observations of pgAdmin's current state.
                     Known .status.conditions.type is: "PersistentVolumeResizing"
                   items:
-                    description: "Condition contains details for one aspect of the current state of this API Resource.\n---\nThis struct is intended for direct use as an array at the field path .status.conditions.  For example,\n\n\n\ttype FooStatus struct{\n\t    // Represents the observations of a foo's current state.\n\t    // Known .status.conditions.type are: \"Available\", \"Progressing\", and\
-                      \ \"Degraded\"\n\t    // +patchMergeKey=type\n\t    // +patchStrategy=merge\n\t    // +listType=map\n\t    // +listMapKey=type\n\t    Conditions []metav1.Condition `json:\"conditions,omitempty\" patchStrategy:\"merge\" patchMergeKey:\"type\" protobuf:\"bytes,1,rep,name=conditions\"`\n\n\n\t    // other fields\n\t}"
+                    description: Condition contains details for one aspect of the current state of this API Resource.
                     properties:
                       lastTransitionTime:
                         description: |-
@@ -1787,12 +2421,7 @@ spec:
                           - Unknown
                         type: string
                       type:
-                        description: |-
-                          type of condition in CamelCase or in foo.example.com/CamelCase.
-                          ---
-                          Many .condition.type values are consistent across resources like Available, but because arbitrary conditions can be
-                          useful (see .node.status.conditions), the ability to deconflict is important.
-                          The regex it matches is (dns1123SubdomainFmt/)?(qualifiedNameFmt)
+                        description: type of condition in CamelCase or in foo.example.com/CamelCase.
                         maxLength: 316
                         pattern: ^([a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*/)?(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])$
                         type: string
diff --git a/kustomize/install/crd/bases/postgres-operator.crunchydata.com_pgupgrades.yaml b/kustomize/install/crd/bases/postgres-operator.crunchydata.com_pgupgrades.yaml
index ad180c42..e8c3190f 100644
--- a/kustomize/install/crd/bases/postgres-operator.crunchydata.com_pgupgrades.yaml
+++ b/kustomize/install/crd/bases/postgres-operator.crunchydata.com_pgupgrades.yaml
@@ -2,11 +2,10 @@ apiVersion: apiextensions.k8s.io/v1
 kind: CustomResourceDefinition
 metadata:
   annotations:
-    controller-gen.kubebuilder.io/version: v0.15.0
-  labels:
-    app.kubernetes.io/name: pgo
-    app.kubernetes.io/version: 5.7.4
+    controller-gen.kubebuilder.io/version: v0.17.2
   name: pgupgrades.postgres-operator.crunchydata.com
+  labels:
+    app.kubernetes.io/version: 5.8.0
 spec:
   group: postgres-operator.crunchydata.com
   names:
@@ -309,7 +308,7 @@ spec:
                                       pod labels will be ignored. The default value is empty.
                                       The same key is forbidden to exist in both matchLabelKeys and labelSelector.
                                       Also, matchLabelKeys cannot be set when labelSelector isn't set.
-                                      This is an alpha field and requires enabling MatchLabelKeysInPodAffinity feature gate.
+                                      This is a beta field and requires enabling MatchLabelKeysInPodAffinity feature gate (enabled by default).
                                     items:
                                       type: string
                                     type: array
@@ -324,7 +323,7 @@ spec:
                                       pod labels will be ignored. The default value is empty.
                                       The same key is forbidden to exist in both mismatchLabelKeys and labelSelector.
                                       Also, mismatchLabelKeys cannot be set when labelSelector isn't set.
-                                      This is an alpha field and requires enabling MatchLabelKeysInPodAffinity feature gate.
+                                      This is a beta field and requires enabling MatchLabelKeysInPodAffinity feature gate (enabled by default).
                                     items:
                                       type: string
                                     type: array
@@ -485,7 +484,7 @@ spec:
                                   pod labels will be ignored. The default value is empty.
                                   The same key is forbidden to exist in both matchLabelKeys and labelSelector.
                                   Also, matchLabelKeys cannot be set when labelSelector isn't set.
-                                  This is an alpha field and requires enabling MatchLabelKeysInPodAffinity feature gate.
+                                  This is a beta field and requires enabling MatchLabelKeysInPodAffinity feature gate (enabled by default).
                                 items:
                                   type: string
                                 type: array
@@ -500,7 +499,7 @@ spec:
                                   pod labels will be ignored. The default value is empty.
                                   The same key is forbidden to exist in both mismatchLabelKeys and labelSelector.
                                   Also, mismatchLabelKeys cannot be set when labelSelector isn't set.
-                                  This is an alpha field and requires enabling MatchLabelKeysInPodAffinity feature gate.
+                                  This is a beta field and requires enabling MatchLabelKeysInPodAffinity feature gate (enabled by default).
                                 items:
                                   type: string
                                 type: array
@@ -654,7 +653,7 @@ spec:
                                       pod labels will be ignored. The default value is empty.
                                       The same key is forbidden to exist in both matchLabelKeys and labelSelector.
                                       Also, matchLabelKeys cannot be set when labelSelector isn't set.
-                                      This is an alpha field and requires enabling MatchLabelKeysInPodAffinity feature gate.
+                                      This is a beta field and requires enabling MatchLabelKeysInPodAffinity feature gate (enabled by default).
                                     items:
                                       type: string
                                     type: array
@@ -669,7 +668,7 @@ spec:
                                       pod labels will be ignored. The default value is empty.
                                       The same key is forbidden to exist in both mismatchLabelKeys and labelSelector.
                                       Also, mismatchLabelKeys cannot be set when labelSelector isn't set.
-                                      This is an alpha field and requires enabling MatchLabelKeysInPodAffinity feature gate.
+                                      This is a beta field and requires enabling MatchLabelKeysInPodAffinity feature gate (enabled by default).
                                     items:
                                       type: string
                                     type: array
@@ -830,7 +829,7 @@ spec:
                                   pod labels will be ignored. The default value is empty.
                                   The same key is forbidden to exist in both matchLabelKeys and labelSelector.
                                   Also, matchLabelKeys cannot be set when labelSelector isn't set.
-                                  This is an alpha field and requires enabling MatchLabelKeysInPodAffinity feature gate.
+                                  This is a beta field and requires enabling MatchLabelKeysInPodAffinity feature gate (enabled by default).
                                 items:
                                   type: string
                                 type: array
@@ -845,7 +844,7 @@ spec:
                                   pod labels will be ignored. The default value is empty.
                                   The same key is forbidden to exist in both mismatchLabelKeys and labelSelector.
                                   Also, mismatchLabelKeys cannot be set when labelSelector isn't set.
-                                  This is an alpha field and requires enabling MatchLabelKeysInPodAffinity feature gate.
+                                  This is a beta field and requires enabling MatchLabelKeysInPodAffinity feature gate (enabled by default).
                                 items:
                                   type: string
                                 type: array
@@ -926,8 +925,9 @@ spec:
                   type: object
                 fromPostgresVersion:
                   description: The major version of PostgreSQL before the upgrade.
+                  format: int32
                   maximum: 17
-                  minimum: 10
+                  minimum: 11
                   type: integer
                 image:
                   description: The image name to use for major PostgreSQL upgrades.
@@ -941,12 +941,13 @@ spec:
                     - Always
                     - Never
                     - IfNotPresent
+                  maxLength: 15
                   type: string
                 imagePullSecrets:
                   description: |-
                     The image pull secrets used to pull from a private registry.
                     Changing this value causes all running PGUpgrade pods to restart.
-                    https://k8s.io/docs/tasks/configure-pod-container/pull-image-private-registry/
+                    https://kubernetes.io/docs/tasks/configure-pod-container/pull-image-private-registry
                   items:
                     description: |-
                       LocalObjectReference contains enough information to let you locate the
@@ -954,11 +955,23 @@ spec:
                     properties:
                       name:
                         default: ""
-                        description: 'Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names'
+                        description: |-
+                          Name of the referent.
+                          This field is effectively required, but due to backwards compatibility is
+                          allowed to be empty. Instances of this type with an empty value here are
+                          almost certainly wrong.
+                          More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names
                         type: string
                     type: object
                     x-kubernetes-map-type: atomic
                   type: array
+                jobs:
+                  description: |-
+                    The number of simultaneous processes pg_upgrade should use.
+                    More info: https://www.postgresql.org/docs/current/pgupgrade.html
+                  format: int32
+                  minimum: 0
+                  type: integer
                 metadata:
                   description: Metadata contains metadata for custom resources
                   properties:
@@ -972,14 +985,14 @@ spec:
                       type: object
                   type: object
                 postgresClusterName:
-                  description: The name of the cluster to be updated
+                  description: The name of the Postgres cluster to upgrade.
                   minLength: 1
                   type: string
                 priorityClassName:
                   description: |-
                     Priority class name for the PGUpgrade pod. Changing this
                     value causes PGUpgrade pod to restart.
-                    More info: https://kubernetes.io/docs/concepts/scheduling-eviction/pod-priority-preemption/
+                    More info: https://kubernetes.io/docs/concepts/scheduling-eviction/pod-priority-preemption
                   type: string
                 resources:
                   description: Resource requirements for the PGUpgrade container.
@@ -989,11 +1002,9 @@ spec:
                         Claims lists the names of resources, defined in spec.resourceClaims,
                         that are used by this container.
 
-
                         This is an alpha field and requires enabling the
                         DynamicResourceAllocation feature gate.
 
-
                         This field is immutable. It can only be set for containers.
                       items:
                         description: ResourceClaim references one entry in PodSpec.ResourceClaims.
@@ -1004,6 +1015,12 @@ spec:
                               the Pod where this field is used. It makes that resource available
                               inside a container.
                             type: string
+                          request:
+                            description: |-
+                              Request is the name chosen for a request in the referenced claim.
+                              If empty, everything from the claim is made available, otherwise
+                              only the result of this request.
+                            type: string
                         required:
                           - name
                         type: object
@@ -1036,15 +1053,11 @@ spec:
                         More info: https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/
                       type: object
                   type: object
-                toPostgresImage:
-                  description: |-
-                    The image name to use for PostgreSQL containers after upgrade.
-                    When omitted, the value comes from an operator environment variable.
-                  type: string
                 toPostgresVersion:
                   description: The major version of PostgreSQL to be upgraded to.
+                  format: int32
                   maximum: 17
-                  minimum: 10
+                  minimum: 11
                   type: integer
                 tolerations:
                   description: |-
@@ -1087,19 +1100,35 @@ spec:
                         type: string
                     type: object
                   type: array
+                transferMethod:
+                  description: |-
+                    The method pg_upgrade should use to transfer files to the new cluster.
+                    More info: https://www.postgresql.org/docs/current/pgupgrade.html
+                  enum:
+                    - Clone
+                    - Copy
+                    - CopyFileRange
+                    - Link
+                  maxLength: 15
+                  type: string
               required:
                 - fromPostgresVersion
                 - postgresClusterName
                 - toPostgresVersion
               type: object
+              x-kubernetes-validations:
+                - rule: self.fromPostgresVersion < self.toPostgresVersion
+                - message: Only Copy or Link before PostgreSQL 12
+                  rule: '!has(self.transferMethod) || (self.toPostgresVersion < 12 ? self.transferMethod in ["Copy","Link"] : true)'
+                - message: Only Clone, Copy, or Link before PostgreSQL 17
+                  rule: '!has(self.transferMethod) || (self.toPostgresVersion < 17 ? self.transferMethod in ["Clone","Copy","Link"] : true)'
             status:
               description: PGUpgradeStatus defines the observed state of PGUpgrade
               properties:
                 conditions:
                   description: conditions represent the observations of PGUpgrade's current state.
                   items:
-                    description: "Condition contains details for one aspect of the current state of this API Resource.\n---\nThis struct is intended for direct use as an array at the field path .status.conditions.  For example,\n\n\n\ttype FooStatus struct{\n\t    // Represents the observations of a foo's current state.\n\t    // Known .status.conditions.type are: \"Available\", \"Progressing\", and\
-                      \ \"Degraded\"\n\t    // +patchMergeKey=type\n\t    // +patchStrategy=merge\n\t    // +listType=map\n\t    // +listMapKey=type\n\t    Conditions []metav1.Condition `json:\"conditions,omitempty\" patchStrategy:\"merge\" patchMergeKey:\"type\" protobuf:\"bytes,1,rep,name=conditions\"`\n\n\n\t    // other fields\n\t}"
+                    description: Condition contains details for one aspect of the current state of this API Resource.
                     properties:
                       lastTransitionTime:
                         description: |-
@@ -1140,12 +1169,7 @@ spec:
                           - Unknown
                         type: string
                       type:
-                        description: |-
-                          type of condition in CamelCase or in foo.example.com/CamelCase.
-                          ---
-                          Many .condition.type values are consistent across resources like Available, but because arbitrary conditions can be
-                          useful (see .node.status.conditions), the ability to deconflict is important.
-                          The regex it matches is (dns1123SubdomainFmt/)?(qualifiedNameFmt)
+                        description: type of condition in CamelCase or in foo.example.com/CamelCase.
                         maxLength: 316
                         pattern: ^([a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*/)?(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])$
                         type: string
diff --git a/kustomize/install/crd/bases/postgres-operator.crunchydata.com_postgresclusters.yaml b/kustomize/install/crd/bases/postgres-operator.crunchydata.com_postgresclusters.yaml
index cd5de8bb..ad20f580 100644
--- a/kustomize/install/crd/bases/postgres-operator.crunchydata.com_postgresclusters.yaml
+++ b/kustomize/install/crd/bases/postgres-operator.crunchydata.com_postgresclusters.yaml
@@ -2,11 +2,10 @@ apiVersion: apiextensions.k8s.io/v1
 kind: CustomResourceDefinition
 metadata:
   annotations:
-    controller-gen.kubebuilder.io/version: v0.15.0
-  labels:
-    app.kubernetes.io/name: pgo
-    app.kubernetes.io/version: 5.7.4
+    controller-gen.kubebuilder.io/version: v0.17.2
   name: postgresclusters.postgres-operator.crunchydata.com
+  labels:
+    app.kubernetes.io/version: 5.8.0
 spec:
   group: postgres-operator.crunchydata.com
   names:
@@ -41,6 +40,81 @@ spec:
             spec:
               description: PostgresClusterSpec defines the desired state of PostgresCluster
               properties:
+                authentication:
+                  properties:
+                    rules:
+                      description: 'More info: https://www.postgresql.org/docs/current/auth-pg-hba-conf.html'
+                      items:
+                        properties:
+                          connection:
+                            description: |-
+                              The connection transport this rule matches. Typical values are:
+                               1. "host" for network connections that may or may not be encrypted.
+                               2. "hostssl" for network connections encrypted using TLS.
+                               3. "hostgssenc" for network connections encrypted using GSSAPI.
+                            maxLength: 20
+                            minLength: 1
+                            pattern: ^[-a-z0-9]+$
+                            type: string
+                          databases:
+                            description: Which databases this rule matches. When omitted or empty, this rule matches all databases.
+                            items:
+                              maxLength: 63
+                              minLength: 1
+                              type: string
+                            maxItems: 20
+                            type: array
+                            x-kubernetes-list-type: atomic
+                          hba:
+                            description: One line of the "pg_hba.conf" file. Changes to this value will be automatically reloaded without validation.
+                            maxLength: 100
+                            minLength: 1
+                            pattern: ^[[:print:]]+$
+                            type: string
+                            x-kubernetes-validations:
+                              - message: cannot include other files
+                                rule: '!self.trim().startsWith("include")'
+                          method:
+                            description: |-
+                              The authentication method to use when a connection matches this rule.
+                              The special value "reject" refuses connections that match this rule.
+                              More info: https://www.postgresql.org/docs/current/auth-methods.html
+                            maxLength: 20
+                            minLength: 1
+                            pattern: ^[-a-z0-9]+$
+                            type: string
+                            x-kubernetes-validations:
+                              - message: the "trust" method is unsafe
+                                rule: self != "trust"
+                          options:
+                            additionalProperties:
+                              anyOf:
+                                - type: integer
+                                - type: string
+                              x-kubernetes-int-or-string: true
+                            maxProperties: 20
+                            type: object
+                            x-kubernetes-map-type: atomic
+                          users:
+                            description: Which user names this rule matches. When omitted or empty, this rule matches all users.
+                            items:
+                              maxLength: 63
+                              minLength: 1
+                              type: string
+                            maxItems: 20
+                            type: array
+                            x-kubernetes-list-type: atomic
+                        type: object
+                        x-kubernetes-map-type: atomic
+                        x-kubernetes-validations:
+                          - message: '"hba" cannot be combined with other fields'
+                            rule: 'has(self.hba) ? !has(self.connection) && !has(self.databases) && !has(self.method) && !has(self.options) && !has(self.users) : true'
+                          - message: '"connection" and "method" are required'
+                            rule: 'has(self.hba) ? true : has(self.connection) && has(self.method)'
+                      maxItems: 10
+                      type: array
+                      x-kubernetes-list-type: atomic
+                  type: object
                 backups:
                   description: PostgreSQL backup configuration
                   properties:
@@ -54,21 +128,20 @@ spec:
                             PostgreSQL Operator:
                             https://pgbackrest.org/configuration.html
                           items:
-                            description: Projection that may be projected along with other supported volume types
+                            description: |-
+                              Projection that may be projected along with other supported volume types.
+                              Exactly one of these fields must be set.
                             properties:
                               clusterTrustBundle:
                                 description: |-
                                   ClusterTrustBundle allows a pod to access the `.spec.trustBundle` field
                                   of ClusterTrustBundle objects in an auto-updating file.
 
-
                                   Alpha, gated by the ClusterTrustBundleProjection feature gate.
 
-
                                   ClusterTrustBundle objects can either be selected by name, or by the
                                   combination of signer name and a label selector.
 
-
                                   Kubelet performs aggressive normalization of the PEM contents written
                                   into the pod filesystem.  Esoteric PEM features such as inter-block
                                   comments and block headers are stripped.  Certificates are deduplicated.
@@ -191,7 +264,12 @@ spec:
                                     x-kubernetes-list-type: atomic
                                   name:
                                     default: ""
-                                    description: 'Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names'
+                                    description: |-
+                                      Name of the referent.
+                                      This field is effectively required, but due to backwards compatibility is
+                                      allowed to be empty. Instances of this type with an empty value here are
+                                      almost certainly wrong.
+                                      More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names
                                     type: string
                                   optional:
                                     description: optional specify whether the ConfigMap or its keys must be defined
@@ -303,7 +381,12 @@ spec:
                                     x-kubernetes-list-type: atomic
                                   name:
                                     default: ""
-                                    description: 'Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names'
+                                    description: |-
+                                      Name of the referent.
+                                      This field is effectively required, but due to backwards compatibility is
+                                      allowed to be empty. Instances of this type with an empty value here are
+                                      almost certainly wrong.
+                                      More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names
                                     type: string
                                   optional:
                                     description: optional field specify whether the Secret or its key must be defined
@@ -626,7 +709,7 @@ spec:
                                                   pod labels will be ignored. The default value is empty.
                                                   The same key is forbidden to exist in both matchLabelKeys and labelSelector.
                                                   Also, matchLabelKeys cannot be set when labelSelector isn't set.
-                                                  This is an alpha field and requires enabling MatchLabelKeysInPodAffinity feature gate.
+                                                  This is a beta field and requires enabling MatchLabelKeysInPodAffinity feature gate (enabled by default).
                                                 items:
                                                   type: string
                                                 type: array
@@ -641,7 +724,7 @@ spec:
                                                   pod labels will be ignored. The default value is empty.
                                                   The same key is forbidden to exist in both mismatchLabelKeys and labelSelector.
                                                   Also, mismatchLabelKeys cannot be set when labelSelector isn't set.
-                                                  This is an alpha field and requires enabling MatchLabelKeysInPodAffinity feature gate.
+                                                  This is a beta field and requires enabling MatchLabelKeysInPodAffinity feature gate (enabled by default).
                                                 items:
                                                   type: string
                                                 type: array
@@ -802,7 +885,7 @@ spec:
                                               pod labels will be ignored. The default value is empty.
                                               The same key is forbidden to exist in both matchLabelKeys and labelSelector.
                                               Also, matchLabelKeys cannot be set when labelSelector isn't set.
-                                              This is an alpha field and requires enabling MatchLabelKeysInPodAffinity feature gate.
+                                              This is a beta field and requires enabling MatchLabelKeysInPodAffinity feature gate (enabled by default).
                                             items:
                                               type: string
                                             type: array
@@ -817,7 +900,7 @@ spec:
                                               pod labels will be ignored. The default value is empty.
                                               The same key is forbidden to exist in both mismatchLabelKeys and labelSelector.
                                               Also, mismatchLabelKeys cannot be set when labelSelector isn't set.
-                                              This is an alpha field and requires enabling MatchLabelKeysInPodAffinity feature gate.
+                                              This is a beta field and requires enabling MatchLabelKeysInPodAffinity feature gate (enabled by default).
                                             items:
                                               type: string
                                             type: array
@@ -971,7 +1054,7 @@ spec:
                                                   pod labels will be ignored. The default value is empty.
                                                   The same key is forbidden to exist in both matchLabelKeys and labelSelector.
                                                   Also, matchLabelKeys cannot be set when labelSelector isn't set.
-                                                  This is an alpha field and requires enabling MatchLabelKeysInPodAffinity feature gate.
+                                                  This is a beta field and requires enabling MatchLabelKeysInPodAffinity feature gate (enabled by default).
                                                 items:
                                                   type: string
                                                 type: array
@@ -986,7 +1069,7 @@ spec:
                                                   pod labels will be ignored. The default value is empty.
                                                   The same key is forbidden to exist in both mismatchLabelKeys and labelSelector.
                                                   Also, mismatchLabelKeys cannot be set when labelSelector isn't set.
-                                                  This is an alpha field and requires enabling MatchLabelKeysInPodAffinity feature gate.
+                                                  This is a beta field and requires enabling MatchLabelKeysInPodAffinity feature gate (enabled by default).
                                                 items:
                                                   type: string
                                                 type: array
@@ -1147,7 +1230,7 @@ spec:
                                               pod labels will be ignored. The default value is empty.
                                               The same key is forbidden to exist in both matchLabelKeys and labelSelector.
                                               Also, matchLabelKeys cannot be set when labelSelector isn't set.
-                                              This is an alpha field and requires enabling MatchLabelKeysInPodAffinity feature gate.
+                                              This is a beta field and requires enabling MatchLabelKeysInPodAffinity feature gate (enabled by default).
                                             items:
                                               type: string
                                             type: array
@@ -1162,7 +1245,7 @@ spec:
                                               pod labels will be ignored. The default value is empty.
                                               The same key is forbidden to exist in both mismatchLabelKeys and labelSelector.
                                               Also, mismatchLabelKeys cannot be set when labelSelector isn't set.
-                                              This is an alpha field and requires enabling MatchLabelKeysInPodAffinity feature gate.
+                                              This is a beta field and requires enabling MatchLabelKeysInPodAffinity feature gate (enabled by default).
                                             items:
                                               type: string
                                             type: array
@@ -1256,11 +1339,9 @@ spec:
                                     Claims lists the names of resources, defined in spec.resourceClaims,
                                     that are used by this container.
 
-
                                     This is an alpha field and requires enabling the
                                     DynamicResourceAllocation feature gate.
 
-
                                     This field is immutable. It can only be set for containers.
                                   items:
                                     description: ResourceClaim references one entry in PodSpec.ResourceClaims.
@@ -1271,6 +1352,12 @@ spec:
                                           the Pod where this field is used. It makes that resource available
                                           inside a container.
                                         type: string
+                                      request:
+                                        description: |-
+                                          Request is the name chosen for a request in the referenced claim.
+                                          If empty, everything from the claim is made available, otherwise
+                                          only the result of this request.
+                                        type: string
                                     required:
                                       - name
                                     type: object
@@ -1656,7 +1743,7 @@ spec:
                                                   pod labels will be ignored. The default value is empty.
                                                   The same key is forbidden to exist in both matchLabelKeys and labelSelector.
                                                   Also, matchLabelKeys cannot be set when labelSelector isn't set.
-                                                  This is an alpha field and requires enabling MatchLabelKeysInPodAffinity feature gate.
+                                                  This is a beta field and requires enabling MatchLabelKeysInPodAffinity feature gate (enabled by default).
                                                 items:
                                                   type: string
                                                 type: array
@@ -1671,7 +1758,7 @@ spec:
                                                   pod labels will be ignored. The default value is empty.
                                                   The same key is forbidden to exist in both mismatchLabelKeys and labelSelector.
                                                   Also, mismatchLabelKeys cannot be set when labelSelector isn't set.
-                                                  This is an alpha field and requires enabling MatchLabelKeysInPodAffinity feature gate.
+                                                  This is a beta field and requires enabling MatchLabelKeysInPodAffinity feature gate (enabled by default).
                                                 items:
                                                   type: string
                                                 type: array
@@ -1832,7 +1919,7 @@ spec:
                                               pod labels will be ignored. The default value is empty.
                                               The same key is forbidden to exist in both matchLabelKeys and labelSelector.
                                               Also, matchLabelKeys cannot be set when labelSelector isn't set.
-                                              This is an alpha field and requires enabling MatchLabelKeysInPodAffinity feature gate.
+                                              This is a beta field and requires enabling MatchLabelKeysInPodAffinity feature gate (enabled by default).
                                             items:
                                               type: string
                                             type: array
@@ -1847,7 +1934,7 @@ spec:
                                               pod labels will be ignored. The default value is empty.
                                               The same key is forbidden to exist in both mismatchLabelKeys and labelSelector.
                                               Also, mismatchLabelKeys cannot be set when labelSelector isn't set.
-                                              This is an alpha field and requires enabling MatchLabelKeysInPodAffinity feature gate.
+                                              This is a beta field and requires enabling MatchLabelKeysInPodAffinity feature gate (enabled by default).
                                             items:
                                               type: string
                                             type: array
@@ -2001,7 +2088,7 @@ spec:
                                                   pod labels will be ignored. The default value is empty.
                                                   The same key is forbidden to exist in both matchLabelKeys and labelSelector.
                                                   Also, matchLabelKeys cannot be set when labelSelector isn't set.
-                                                  This is an alpha field and requires enabling MatchLabelKeysInPodAffinity feature gate.
+                                                  This is a beta field and requires enabling MatchLabelKeysInPodAffinity feature gate (enabled by default).
                                                 items:
                                                   type: string
                                                 type: array
@@ -2016,7 +2103,7 @@ spec:
                                                   pod labels will be ignored. The default value is empty.
                                                   The same key is forbidden to exist in both mismatchLabelKeys and labelSelector.
                                                   Also, mismatchLabelKeys cannot be set when labelSelector isn't set.
-                                                  This is an alpha field and requires enabling MatchLabelKeysInPodAffinity feature gate.
+                                                  This is a beta field and requires enabling MatchLabelKeysInPodAffinity feature gate (enabled by default).
                                                 items:
                                                   type: string
                                                 type: array
@@ -2177,7 +2264,7 @@ spec:
                                               pod labels will be ignored. The default value is empty.
                                               The same key is forbidden to exist in both matchLabelKeys and labelSelector.
                                               Also, matchLabelKeys cannot be set when labelSelector isn't set.
-                                              This is an alpha field and requires enabling MatchLabelKeysInPodAffinity feature gate.
+                                              This is a beta field and requires enabling MatchLabelKeysInPodAffinity feature gate (enabled by default).
                                             items:
                                               type: string
                                             type: array
@@ -2192,7 +2279,7 @@ spec:
                                               pod labels will be ignored. The default value is empty.
                                               The same key is forbidden to exist in both mismatchLabelKeys and labelSelector.
                                               Also, mismatchLabelKeys cannot be set when labelSelector isn't set.
-                                              This is an alpha field and requires enabling MatchLabelKeysInPodAffinity feature gate.
+                                              This is a beta field and requires enabling MatchLabelKeysInPodAffinity feature gate (enabled by default).
                                             items:
                                               type: string
                                             type: array
@@ -2285,11 +2372,9 @@ spec:
                                     Claims lists the names of resources, defined in spec.resourceClaims,
                                     that are used by this container.
 
-
                                     This is an alpha field and requires enabling the
                                     DynamicResourceAllocation feature gate.
 
-
                                     This field is immutable. It can only be set for containers.
                                   items:
                                     description: ResourceClaim references one entry in PodSpec.ResourceClaims.
@@ -2300,6 +2385,12 @@ spec:
                                           the Pod where this field is used. It makes that resource available
                                           inside a container.
                                         type: string
+                                      request:
+                                        description: |-
+                                          Request is the name chosen for a request in the referenced claim.
+                                          If empty, everything from the claim is made available, otherwise
+                                          only the result of this request.
+                                        type: string
                                     required:
                                       - name
                                     type: object
@@ -2377,7 +2468,12 @@ spec:
                                   x-kubernetes-list-type: atomic
                                 name:
                                   default: ""
-                                  description: 'Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names'
+                                  description: |-
+                                    Name of the referent.
+                                    This field is effectively required, but due to backwards compatibility is
+                                    allowed to be empty. Instances of this type with an empty value here are
+                                    almost certainly wrong.
+                                    More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names
                                   type: string
                                 optional:
                                   description: optional specify whether the ConfigMap or its keys must be defined
@@ -2429,7 +2525,12 @@ spec:
                                   x-kubernetes-list-type: atomic
                                 name:
                                   default: ""
-                                  description: 'Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names'
+                                  description: |-
+                                    Name of the referent.
+                                    This field is effectively required, but due to backwards compatibility is
+                                    allowed to be empty. Instances of this type with an empty value here are
+                                    almost certainly wrong.
+                                    More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names
                                   type: string
                                 optional:
                                   description: optional field specify whether the Secret or its key must be defined
@@ -2543,7 +2644,6 @@ spec:
                                       Keys that don't exist in the incoming pod labels will
                                       be ignored. A null or empty list means only match against labelSelector.
 
-
                                       This is a beta field and requires the MatchLabelKeysInPodTopologySpread feature gate to be enabled (enabled by default).
                                     items:
                                       type: string
@@ -2583,7 +2683,6 @@ spec:
                                       Valid values are integers greater than 0.
                                       When value is not nil, WhenUnsatisfiable must be DoNotSchedule.
 
-
                                       For example, in a 3-zone cluster, MaxSkew is set to 2, MinDomains is set to 5 and pods with the same
                                       labelSelector spread as 2/2/2:
                                       | zone1 | zone2 | zone3 |
@@ -2601,7 +2700,6 @@ spec:
                                       - Honor: only nodes matching nodeAffinity/nodeSelector are included in the calculations.
                                       - Ignore: nodeAffinity/nodeSelector are ignored. All nodes are included in the calculations.
 
-
                                       If this value is nil, the behavior is equivalent to the Honor policy.
                                       This is a beta-level feature default enabled by the NodeInclusionPolicyInPodTopologySpread feature flag.
                                     type: string
@@ -2613,7 +2711,6 @@ spec:
                                       has a toleration, are included.
                                       - Ignore: node taints are ignored. All nodes are included.
 
-
                                       If this value is nil, the behavior is equivalent to the Ignore policy.
                                       This is a beta-level feature default enabled by the NodeInclusionPolicyInPodTopologySpread feature flag.
                                     type: string
@@ -2744,7 +2841,6 @@ spec:
                                           More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#access-modes-1
                                         items:
                                           type: string
-                                        minItems: 1
                                         type: array
                                         x-kubernetes-list-type: atomic
                                       dataSource:
@@ -2854,11 +2950,7 @@ spec:
                                               If Requests is omitted for a container, it defaults to Limits if that is explicitly specified,
                                               otherwise to an implementation-defined value. Requests cannot exceed Limits.
                                               More info: https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/
-                                            required:
-                                              - storage
                                             type: object
-                                        required:
-                                          - requests
                                         type: object
                                       selector:
                                         description: selector is a label query over volumes to consider for binding.
@@ -2922,7 +3014,7 @@ spec:
                                           set to a Pending state, as reflected by the modifyVolumeStatus field, until such as a resource
                                           exists.
                                           More info: https://kubernetes.io/docs/concepts/storage/volume-attributes-classes/
-                                          (Alpha) Using this field requires the VolumeAttributesClass feature gate to be enabled.
+                                          (Beta) Using this field requires the VolumeAttributesClass feature gate to be enabled (off by default).
                                         type: string
                                       volumeMode:
                                         description: |-
@@ -2932,10 +3024,13 @@ spec:
                                       volumeName:
                                         description: volumeName is the binding reference to the PersistentVolume backing this claim.
                                         type: string
-                                    required:
-                                      - accessModes
-                                      - resources
                                     type: object
+                                    x-kubernetes-map-type: atomic
+                                    x-kubernetes-validations:
+                                      - message: missing accessModes
+                                        rule: 0 < size(self.accessModes)
+                                      - message: missing storage request
+                                        rule: has(self.resources.requests.storage)
                                 required:
                                   - volumeClaimSpec
                                 type: object
@@ -3218,7 +3313,7 @@ spec:
                                                   pod labels will be ignored. The default value is empty.
                                                   The same key is forbidden to exist in both matchLabelKeys and labelSelector.
                                                   Also, matchLabelKeys cannot be set when labelSelector isn't set.
-                                                  This is an alpha field and requires enabling MatchLabelKeysInPodAffinity feature gate.
+                                                  This is a beta field and requires enabling MatchLabelKeysInPodAffinity feature gate (enabled by default).
                                                 items:
                                                   type: string
                                                 type: array
@@ -3233,7 +3328,7 @@ spec:
                                                   pod labels will be ignored. The default value is empty.
                                                   The same key is forbidden to exist in both mismatchLabelKeys and labelSelector.
                                                   Also, mismatchLabelKeys cannot be set when labelSelector isn't set.
-                                                  This is an alpha field and requires enabling MatchLabelKeysInPodAffinity feature gate.
+                                                  This is a beta field and requires enabling MatchLabelKeysInPodAffinity feature gate (enabled by default).
                                                 items:
                                                   type: string
                                                 type: array
@@ -3394,7 +3489,7 @@ spec:
                                               pod labels will be ignored. The default value is empty.
                                               The same key is forbidden to exist in both matchLabelKeys and labelSelector.
                                               Also, matchLabelKeys cannot be set when labelSelector isn't set.
-                                              This is an alpha field and requires enabling MatchLabelKeysInPodAffinity feature gate.
+                                              This is a beta field and requires enabling MatchLabelKeysInPodAffinity feature gate (enabled by default).
                                             items:
                                               type: string
                                             type: array
@@ -3409,7 +3504,7 @@ spec:
                                               pod labels will be ignored. The default value is empty.
                                               The same key is forbidden to exist in both mismatchLabelKeys and labelSelector.
                                               Also, mismatchLabelKeys cannot be set when labelSelector isn't set.
-                                              This is an alpha field and requires enabling MatchLabelKeysInPodAffinity feature gate.
+                                              This is a beta field and requires enabling MatchLabelKeysInPodAffinity feature gate (enabled by default).
                                             items:
                                               type: string
                                             type: array
@@ -3563,7 +3658,7 @@ spec:
                                                   pod labels will be ignored. The default value is empty.
                                                   The same key is forbidden to exist in both matchLabelKeys and labelSelector.
                                                   Also, matchLabelKeys cannot be set when labelSelector isn't set.
-                                                  This is an alpha field and requires enabling MatchLabelKeysInPodAffinity feature gate.
+                                                  This is a beta field and requires enabling MatchLabelKeysInPodAffinity feature gate (enabled by default).
                                                 items:
                                                   type: string
                                                 type: array
@@ -3578,7 +3673,7 @@ spec:
                                                   pod labels will be ignored. The default value is empty.
                                                   The same key is forbidden to exist in both mismatchLabelKeys and labelSelector.
                                                   Also, mismatchLabelKeys cannot be set when labelSelector isn't set.
-                                                  This is an alpha field and requires enabling MatchLabelKeysInPodAffinity feature gate.
+                                                  This is a beta field and requires enabling MatchLabelKeysInPodAffinity feature gate (enabled by default).
                                                 items:
                                                   type: string
                                                 type: array
@@ -3739,7 +3834,7 @@ spec:
                                               pod labels will be ignored. The default value is empty.
                                               The same key is forbidden to exist in both matchLabelKeys and labelSelector.
                                               Also, matchLabelKeys cannot be set when labelSelector isn't set.
-                                              This is an alpha field and requires enabling MatchLabelKeysInPodAffinity feature gate.
+                                              This is a beta field and requires enabling MatchLabelKeysInPodAffinity feature gate (enabled by default).
                                             items:
                                               type: string
                                             type: array
@@ -3754,7 +3849,7 @@ spec:
                                               pod labels will be ignored. The default value is empty.
                                               The same key is forbidden to exist in both mismatchLabelKeys and labelSelector.
                                               Also, mismatchLabelKeys cannot be set when labelSelector isn't set.
-                                              This is an alpha field and requires enabling MatchLabelKeysInPodAffinity feature gate.
+                                              This is a beta field and requires enabling MatchLabelKeysInPodAffinity feature gate (enabled by default).
                                             items:
                                               type: string
                                             type: array
@@ -3875,11 +3970,9 @@ spec:
                                     Claims lists the names of resources, defined in spec.resourceClaims,
                                     that are used by this container.
 
-
                                     This is an alpha field and requires enabling the
                                     DynamicResourceAllocation feature gate.
 
-
                                     This field is immutable. It can only be set for containers.
                                   items:
                                     description: ResourceClaim references one entry in PodSpec.ResourceClaims.
@@ -3890,6 +3983,12 @@ spec:
                                           the Pod where this field is used. It makes that resource available
                                           inside a container.
                                         type: string
+                                      request:
+                                        description: |-
+                                          Request is the name chosen for a request in the referenced claim.
+                                          If empty, everything from the claim is made available, otherwise
+                                          only the result of this request.
+                                        type: string
                                     required:
                                       - name
                                     type: object
@@ -3981,11 +4080,9 @@ spec:
                                         Claims lists the names of resources, defined in spec.resourceClaims,
                                         that are used by this container.
 
-
                                         This is an alpha field and requires enabling the
                                         DynamicResourceAllocation feature gate.
 
-
                                         This field is immutable. It can only be set for containers.
                                       items:
                                         description: ResourceClaim references one entry in PodSpec.ResourceClaims.
@@ -3996,6 +4093,12 @@ spec:
                                               the Pod where this field is used. It makes that resource available
                                               inside a container.
                                             type: string
+                                          request:
+                                            description: |-
+                                              Request is the name chosen for a request in the referenced claim.
+                                              If empty, everything from the claim is made available, otherwise
+                                              only the result of this request.
+                                            type: string
                                         required:
                                           - name
                                         type: object
@@ -4040,11 +4143,9 @@ spec:
                                         Claims lists the names of resources, defined in spec.resourceClaims,
                                         that are used by this container.
 
-
                                         This is an alpha field and requires enabling the
                                         DynamicResourceAllocation feature gate.
 
-
                                         This field is immutable. It can only be set for containers.
                                       items:
                                         description: ResourceClaim references one entry in PodSpec.ResourceClaims.
@@ -4055,6 +4156,12 @@ spec:
                                               the Pod where this field is used. It makes that resource available
                                               inside a container.
                                             type: string
+                                          request:
+                                            description: |-
+                                              Request is the name chosen for a request in the referenced claim.
+                                              If empty, everything from the claim is made available, otherwise
+                                              only the result of this request.
+                                            type: string
                                         required:
                                           - name
                                         type: object
@@ -4106,22 +4213,22 @@ spec:
                 config:
                   properties:
                     files:
+                      description: Files to mount under "/etc/postgres".
                       items:
-                        description: Projection that may be projected along with other supported volume types
+                        description: |-
+                          Projection that may be projected along with other supported volume types.
+                          Exactly one of these fields must be set.
                         properties:
                           clusterTrustBundle:
                             description: |-
                               ClusterTrustBundle allows a pod to access the `.spec.trustBundle` field
                               of ClusterTrustBundle objects in an auto-updating file.
 
-
                               Alpha, gated by the ClusterTrustBundleProjection feature gate.
 
-
                               ClusterTrustBundle objects can either be selected by name, or by the
                               combination of signer name and a label selector.
 
-
                               Kubelet performs aggressive normalization of the PEM contents written
                               into the pod filesystem.  Esoteric PEM features such as inter-block
                               comments and block headers are stripped.  Certificates are deduplicated.
@@ -4244,7 +4351,12 @@ spec:
                                 x-kubernetes-list-type: atomic
                               name:
                                 default: ""
-                                description: 'Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names'
+                                description: |-
+                                  Name of the referent.
+                                  This field is effectively required, but due to backwards compatibility is
+                                  allowed to be empty. Instances of this type with an empty value here are
+                                  almost certainly wrong.
+                                  More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names
                                 type: string
                               optional:
                                 description: optional specify whether the ConfigMap or its keys must be defined
@@ -4356,7 +4468,12 @@ spec:
                                 x-kubernetes-list-type: atomic
                               name:
                                 default: ""
-                                description: 'Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names'
+                                description: |-
+                                  Name of the referent.
+                                  This field is effectively required, but due to backwards compatibility is
+                                  allowed to be empty. Instances of this type with an empty value here are
+                                  almost certainly wrong.
+                                  More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names
                                 type: string
                               optional:
                                 description: optional field specify whether the Secret or its key must be defined
@@ -4393,6 +4510,53 @@ spec:
                             type: object
                         type: object
                       type: array
+                    parameters:
+                      additionalProperties:
+                        anyOf:
+                          - type: integer
+                          - type: string
+                        x-kubernetes-int-or-string: true
+                      description: |-
+                        Configuration parameters for the PostgreSQL server. Some values will
+                        be reloaded without validation and some cause PostgreSQL to restart.
+                        Some values cannot be changed at all.
+                        More info: https://www.postgresql.org/docs/current/runtime-config.html
+                      maxProperties: 50
+                      type: object
+                      x-kubernetes-map-type: granular
+                      x-kubernetes-validations:
+                        - message: 'cannot change PGDATA path: config_file, data_directory'
+                          rule: '!has(self.config_file) && !has(self.data_directory)'
+                        - message: cannot change external_pid_file
+                          rule: '!has(self.external_pid_file)'
+                        - message: 'cannot change authentication path: hba_file, ident_file'
+                          rule: '!has(self.hba_file) && !has(self.ident_file)'
+                        - message: 'network connectivity is always enabled: listen_addresses'
+                          rule: '!has(self.listen_addresses)'
+                        - message: change port using .spec.port instead
+                          rule: '!has(self.port)'
+                        - message: TLS is always enabled
+                          rule: '!has(self.ssl) && !self.exists(k, k.startsWith("ssl_"))'
+                        - message: domain socket paths cannot be changed
+                          rule: '!self.exists(k, k.startsWith("unix_socket_"))'
+                        - message: wal_level must be "replica" or higher
+                          rule: '!has(self.wal_level) || self.wal_level in ["logical"]'
+                        - message: wal_log_hints are always enabled
+                          rule: '!has(self.wal_log_hints)'
+                        - rule: '!has(self.archive_mode) && !has(self.archive_command) && !has(self.restore_command)'
+                        - rule: '!has(self.recovery_target) && !self.exists(k, k.startsWith("recovery_target_"))'
+                        - message: hot_standby is always enabled
+                          rule: '!has(self.hot_standby)'
+                        - rule: '!has(self.synchronous_standby_names)'
+                        - rule: '!has(self.primary_conninfo) && !has(self.primary_slot_name)'
+                        - message: delayed replication is not supported at this time
+                          rule: '!has(self.recovery_min_apply_delay)'
+                        - message: cluster_name is derived from the PostgresCluster name
+                          rule: '!has(self.cluster_name)'
+                        - message: disabling logging_collector is unsafe
+                          rule: '!has(self.logging_collector)'
+                        - message: log_file_mode cannot be changed
+                          rule: '!has(self.log_file_mode)'
                   type: object
                 customReplicationTLSSecret:
                   description: |-
@@ -4443,7 +4607,12 @@ spec:
                       x-kubernetes-list-type: atomic
                     name:
                       default: ""
-                      description: 'Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names'
+                      description: |-
+                        Name of the referent.
+                        This field is effectively required, but due to backwards compatibility is
+                        allowed to be empty. Instances of this type with an empty value here are
+                        almost certainly wrong.
+                        More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names
                       type: string
                     optional:
                       description: optional field specify whether the Secret or its key must be defined
@@ -4502,7 +4671,12 @@ spec:
                       x-kubernetes-list-type: atomic
                     name:
                       default: ""
-                      description: 'Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names'
+                      description: |-
+                        Name of the referent.
+                        This field is effectively required, but due to backwards compatibility is
+                        allowed to be empty. Instances of this type with an empty value here are
+                        almost certainly wrong.
+                        More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names
                       type: string
                     optional:
                       description: optional field specify whether the Secret or its key must be defined
@@ -4787,7 +4961,7 @@ spec:
                                               pod labels will be ignored. The default value is empty.
                                               The same key is forbidden to exist in both matchLabelKeys and labelSelector.
                                               Also, matchLabelKeys cannot be set when labelSelector isn't set.
-                                              This is an alpha field and requires enabling MatchLabelKeysInPodAffinity feature gate.
+                                              This is a beta field and requires enabling MatchLabelKeysInPodAffinity feature gate (enabled by default).
                                             items:
                                               type: string
                                             type: array
@@ -4802,7 +4976,7 @@ spec:
                                               pod labels will be ignored. The default value is empty.
                                               The same key is forbidden to exist in both mismatchLabelKeys and labelSelector.
                                               Also, mismatchLabelKeys cannot be set when labelSelector isn't set.
-                                              This is an alpha field and requires enabling MatchLabelKeysInPodAffinity feature gate.
+                                              This is a beta field and requires enabling MatchLabelKeysInPodAffinity feature gate (enabled by default).
                                             items:
                                               type: string
                                             type: array
@@ -4963,7 +5137,7 @@ spec:
                                           pod labels will be ignored. The default value is empty.
                                           The same key is forbidden to exist in both matchLabelKeys and labelSelector.
                                           Also, matchLabelKeys cannot be set when labelSelector isn't set.
-                                          This is an alpha field and requires enabling MatchLabelKeysInPodAffinity feature gate.
+                                          This is a beta field and requires enabling MatchLabelKeysInPodAffinity feature gate (enabled by default).
                                         items:
                                           type: string
                                         type: array
@@ -4978,7 +5152,7 @@ spec:
                                           pod labels will be ignored. The default value is empty.
                                           The same key is forbidden to exist in both mismatchLabelKeys and labelSelector.
                                           Also, mismatchLabelKeys cannot be set when labelSelector isn't set.
-                                          This is an alpha field and requires enabling MatchLabelKeysInPodAffinity feature gate.
+                                          This is a beta field and requires enabling MatchLabelKeysInPodAffinity feature gate (enabled by default).
                                         items:
                                           type: string
                                         type: array
@@ -5132,7 +5306,7 @@ spec:
                                               pod labels will be ignored. The default value is empty.
                                               The same key is forbidden to exist in both matchLabelKeys and labelSelector.
                                               Also, matchLabelKeys cannot be set when labelSelector isn't set.
-                                              This is an alpha field and requires enabling MatchLabelKeysInPodAffinity feature gate.
+                                              This is a beta field and requires enabling MatchLabelKeysInPodAffinity feature gate (enabled by default).
                                             items:
                                               type: string
                                             type: array
@@ -5147,7 +5321,7 @@ spec:
                                               pod labels will be ignored. The default value is empty.
                                               The same key is forbidden to exist in both mismatchLabelKeys and labelSelector.
                                               Also, mismatchLabelKeys cannot be set when labelSelector isn't set.
-                                              This is an alpha field and requires enabling MatchLabelKeysInPodAffinity feature gate.
+                                              This is a beta field and requires enabling MatchLabelKeysInPodAffinity feature gate (enabled by default).
                                             items:
                                               type: string
                                             type: array
@@ -5308,7 +5482,7 @@ spec:
                                           pod labels will be ignored. The default value is empty.
                                           The same key is forbidden to exist in both matchLabelKeys and labelSelector.
                                           Also, matchLabelKeys cannot be set when labelSelector isn't set.
-                                          This is an alpha field and requires enabling MatchLabelKeysInPodAffinity feature gate.
+                                          This is a beta field and requires enabling MatchLabelKeysInPodAffinity feature gate (enabled by default).
                                         items:
                                           type: string
                                         type: array
@@ -5323,7 +5497,7 @@ spec:
                                           pod labels will be ignored. The default value is empty.
                                           The same key is forbidden to exist in both mismatchLabelKeys and labelSelector.
                                           Also, mismatchLabelKeys cannot be set when labelSelector isn't set.
-                                          This is an alpha field and requires enabling MatchLabelKeysInPodAffinity feature gate.
+                                          This is a beta field and requires enabling MatchLabelKeysInPodAffinity feature gate (enabled by default).
                                         items:
                                           type: string
                                         type: array
@@ -5409,21 +5583,20 @@ spec:
                             PostgreSQL Operator:
                             https://pgbackrest.org/configuration.html
                           items:
-                            description: Projection that may be projected along with other supported volume types
+                            description: |-
+                              Projection that may be projected along with other supported volume types.
+                              Exactly one of these fields must be set.
                             properties:
                               clusterTrustBundle:
                                 description: |-
                                   ClusterTrustBundle allows a pod to access the `.spec.trustBundle` field
                                   of ClusterTrustBundle objects in an auto-updating file.
 
-
                                   Alpha, gated by the ClusterTrustBundleProjection feature gate.
 
-
                                   ClusterTrustBundle objects can either be selected by name, or by the
                                   combination of signer name and a label selector.
 
-
                                   Kubelet performs aggressive normalization of the PEM contents written
                                   into the pod filesystem.  Esoteric PEM features such as inter-block
                                   comments and block headers are stripped.  Certificates are deduplicated.
@@ -5546,7 +5719,12 @@ spec:
                                     x-kubernetes-list-type: atomic
                                   name:
                                     default: ""
-                                    description: 'Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names'
+                                    description: |-
+                                      Name of the referent.
+                                      This field is effectively required, but due to backwards compatibility is
+                                      allowed to be empty. Instances of this type with an empty value here are
+                                      almost certainly wrong.
+                                      More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names
                                     type: string
                                   optional:
                                     description: optional specify whether the ConfigMap or its keys must be defined
@@ -5658,7 +5836,12 @@ spec:
                                     x-kubernetes-list-type: atomic
                                   name:
                                     default: ""
-                                    description: 'Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names'
+                                    description: |-
+                                      Name of the referent.
+                                      This field is effectively required, but due to backwards compatibility is
+                                      allowed to be empty. Instances of this type with an empty value here are
+                                      almost certainly wrong.
+                                      More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names
                                     type: string
                                   optional:
                                     description: optional field specify whether the Secret or its key must be defined
@@ -5974,7 +6157,7 @@ spec:
                                         set to a Pending state, as reflected by the modifyVolumeStatus field, until such as a resource
                                         exists.
                                         More info: https://kubernetes.io/docs/concepts/storage/volume-attributes-classes/
-                                        (Alpha) Using this field requires the VolumeAttributesClass feature gate to be enabled.
+                                        (Beta) Using this field requires the VolumeAttributesClass feature gate to be enabled (off by default).
                                       type: string
                                     volumeMode:
                                       description: |-
@@ -5985,6 +6168,12 @@ spec:
                                       description: volumeName is the binding reference to the PersistentVolume backing this claim.
                                       type: string
                                   type: object
+                                  x-kubernetes-map-type: atomic
+                                  x-kubernetes-validations:
+                                    - message: missing accessModes
+                                      rule: 0 < size(self.accessModes)
+                                    - message: missing storage request
+                                      rule: has(self.resources.requests.storage)
                               required:
                                 - volumeClaimSpec
                               type: object
@@ -5999,11 +6188,9 @@ spec:
                                 Claims lists the names of resources, defined in spec.resourceClaims,
                                 that are used by this container.
 
-
                                 This is an alpha field and requires enabling the
                                 DynamicResourceAllocation feature gate.
 
-
                                 This field is immutable. It can only be set for containers.
                               items:
                                 description: ResourceClaim references one entry in PodSpec.ResourceClaims.
@@ -6014,6 +6201,12 @@ spec:
                                       the Pod where this field is used. It makes that resource available
                                       inside a container.
                                     type: string
+                                  request:
+                                    description: |-
+                                      Request is the name chosen for a request in the referenced claim.
+                                      If empty, everything from the claim is made available, otherwise
+                                      only the result of this request.
+                                    type: string
                                 required:
                                   - name
                                 type: object
@@ -6097,6 +6290,10 @@ spec:
                         - repo
                         - stanza
                       type: object
+                      x-kubernetes-validations:
+                        - fieldPath: .repo
+                          message: Only S3, GCS or Azure repos can be used as a pgBackRest data source.
+                          rule: '!has(self.repo.volume)'
                     postgresCluster:
                       description: |-
                         Defines a pgBackRest data source that can be used to pre-populate the PostgreSQL data
@@ -6372,7 +6569,7 @@ spec:
                                               pod labels will be ignored. The default value is empty.
                                               The same key is forbidden to exist in both matchLabelKeys and labelSelector.
                                               Also, matchLabelKeys cannot be set when labelSelector isn't set.
-                                              This is an alpha field and requires enabling MatchLabelKeysInPodAffinity feature gate.
+                                              This is a beta field and requires enabling MatchLabelKeysInPodAffinity feature gate (enabled by default).
                                             items:
                                               type: string
                                             type: array
@@ -6387,7 +6584,7 @@ spec:
                                               pod labels will be ignored. The default value is empty.
                                               The same key is forbidden to exist in both mismatchLabelKeys and labelSelector.
                                               Also, mismatchLabelKeys cannot be set when labelSelector isn't set.
-                                              This is an alpha field and requires enabling MatchLabelKeysInPodAffinity feature gate.
+                                              This is a beta field and requires enabling MatchLabelKeysInPodAffinity feature gate (enabled by default).
                                             items:
                                               type: string
                                             type: array
@@ -6548,7 +6745,7 @@ spec:
                                           pod labels will be ignored. The default value is empty.
                                           The same key is forbidden to exist in both matchLabelKeys and labelSelector.
                                           Also, matchLabelKeys cannot be set when labelSelector isn't set.
-                                          This is an alpha field and requires enabling MatchLabelKeysInPodAffinity feature gate.
+                                          This is a beta field and requires enabling MatchLabelKeysInPodAffinity feature gate (enabled by default).
                                         items:
                                           type: string
                                         type: array
@@ -6563,7 +6760,7 @@ spec:
                                           pod labels will be ignored. The default value is empty.
                                           The same key is forbidden to exist in both mismatchLabelKeys and labelSelector.
                                           Also, mismatchLabelKeys cannot be set when labelSelector isn't set.
-                                          This is an alpha field and requires enabling MatchLabelKeysInPodAffinity feature gate.
+                                          This is a beta field and requires enabling MatchLabelKeysInPodAffinity feature gate (enabled by default).
                                         items:
                                           type: string
                                         type: array
@@ -6717,7 +6914,7 @@ spec:
                                               pod labels will be ignored. The default value is empty.
                                               The same key is forbidden to exist in both matchLabelKeys and labelSelector.
                                               Also, matchLabelKeys cannot be set when labelSelector isn't set.
-                                              This is an alpha field and requires enabling MatchLabelKeysInPodAffinity feature gate.
+                                              This is a beta field and requires enabling MatchLabelKeysInPodAffinity feature gate (enabled by default).
                                             items:
                                               type: string
                                             type: array
@@ -6732,7 +6929,7 @@ spec:
                                               pod labels will be ignored. The default value is empty.
                                               The same key is forbidden to exist in both mismatchLabelKeys and labelSelector.
                                               Also, mismatchLabelKeys cannot be set when labelSelector isn't set.
-                                              This is an alpha field and requires enabling MatchLabelKeysInPodAffinity feature gate.
+                                              This is a beta field and requires enabling MatchLabelKeysInPodAffinity feature gate (enabled by default).
                                             items:
                                               type: string
                                             type: array
@@ -6893,7 +7090,7 @@ spec:
                                           pod labels will be ignored. The default value is empty.
                                           The same key is forbidden to exist in both matchLabelKeys and labelSelector.
                                           Also, matchLabelKeys cannot be set when labelSelector isn't set.
-                                          This is an alpha field and requires enabling MatchLabelKeysInPodAffinity feature gate.
+                                          This is a beta field and requires enabling MatchLabelKeysInPodAffinity feature gate (enabled by default).
                                         items:
                                           type: string
                                         type: array
@@ -6908,7 +7105,7 @@ spec:
                                           pod labels will be ignored. The default value is empty.
                                           The same key is forbidden to exist in both mismatchLabelKeys and labelSelector.
                                           Also, mismatchLabelKeys cannot be set when labelSelector isn't set.
-                                          This is an alpha field and requires enabling MatchLabelKeysInPodAffinity feature gate.
+                                          This is a beta field and requires enabling MatchLabelKeysInPodAffinity feature gate (enabled by default).
                                         items:
                                           type: string
                                         type: array
@@ -7025,11 +7222,9 @@ spec:
                                 Claims lists the names of resources, defined in spec.resourceClaims,
                                 that are used by this container.
 
-
                                 This is an alpha field and requires enabling the
                                 DynamicResourceAllocation feature gate.
 
-
                                 This field is immutable. It can only be set for containers.
                               items:
                                 description: ResourceClaim references one entry in PodSpec.ResourceClaims.
@@ -7040,6 +7235,12 @@ spec:
                                       the Pod where this field is used. It makes that resource available
                                       inside a container.
                                     type: string
+                                  request:
+                                    description: |-
+                                      Request is the name chosen for a request in the referenced claim.
+                                      If empty, everything from the claim is made available, otherwise
+                                      only the result of this request.
+                                    type: string
                                 required:
                                   - name
                                 type: object
@@ -7211,6 +7412,7 @@ spec:
                     - Always
                     - Never
                     - IfNotPresent
+                  maxLength: 15
                   type: string
                 imagePullSecrets:
                   description: |-
@@ -7224,7 +7426,12 @@ spec:
                     properties:
                       name:
                         default: ""
-                        description: 'Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names'
+                        description: |-
+                          Name of the referent.
+                          This field is effectively required, but due to backwards compatibility is
+                          allowed to be empty. Instances of this type with an empty value here are
+                          almost certainly wrong.
+                          More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names
                         type: string
                     type: object
                     x-kubernetes-map-type: atomic
@@ -7504,7 +7711,7 @@ spec:
                                             pod labels will be ignored. The default value is empty.
                                             The same key is forbidden to exist in both matchLabelKeys and labelSelector.
                                             Also, matchLabelKeys cannot be set when labelSelector isn't set.
-                                            This is an alpha field and requires enabling MatchLabelKeysInPodAffinity feature gate.
+                                            This is a beta field and requires enabling MatchLabelKeysInPodAffinity feature gate (enabled by default).
                                           items:
                                             type: string
                                           type: array
@@ -7519,7 +7726,7 @@ spec:
                                             pod labels will be ignored. The default value is empty.
                                             The same key is forbidden to exist in both mismatchLabelKeys and labelSelector.
                                             Also, mismatchLabelKeys cannot be set when labelSelector isn't set.
-                                            This is an alpha field and requires enabling MatchLabelKeysInPodAffinity feature gate.
+                                            This is a beta field and requires enabling MatchLabelKeysInPodAffinity feature gate (enabled by default).
                                           items:
                                             type: string
                                           type: array
@@ -7680,7 +7887,7 @@ spec:
                                         pod labels will be ignored. The default value is empty.
                                         The same key is forbidden to exist in both matchLabelKeys and labelSelector.
                                         Also, matchLabelKeys cannot be set when labelSelector isn't set.
-                                        This is an alpha field and requires enabling MatchLabelKeysInPodAffinity feature gate.
+                                        This is a beta field and requires enabling MatchLabelKeysInPodAffinity feature gate (enabled by default).
                                       items:
                                         type: string
                                       type: array
@@ -7695,7 +7902,7 @@ spec:
                                         pod labels will be ignored. The default value is empty.
                                         The same key is forbidden to exist in both mismatchLabelKeys and labelSelector.
                                         Also, mismatchLabelKeys cannot be set when labelSelector isn't set.
-                                        This is an alpha field and requires enabling MatchLabelKeysInPodAffinity feature gate.
+                                        This is a beta field and requires enabling MatchLabelKeysInPodAffinity feature gate (enabled by default).
                                       items:
                                         type: string
                                       type: array
@@ -7849,7 +8056,7 @@ spec:
                                             pod labels will be ignored. The default value is empty.
                                             The same key is forbidden to exist in both matchLabelKeys and labelSelector.
                                             Also, matchLabelKeys cannot be set when labelSelector isn't set.
-                                            This is an alpha field and requires enabling MatchLabelKeysInPodAffinity feature gate.
+                                            This is a beta field and requires enabling MatchLabelKeysInPodAffinity feature gate (enabled by default).
                                           items:
                                             type: string
                                           type: array
@@ -7864,7 +8071,7 @@ spec:
                                             pod labels will be ignored. The default value is empty.
                                             The same key is forbidden to exist in both mismatchLabelKeys and labelSelector.
                                             Also, mismatchLabelKeys cannot be set when labelSelector isn't set.
-                                            This is an alpha field and requires enabling MatchLabelKeysInPodAffinity feature gate.
+                                            This is a beta field and requires enabling MatchLabelKeysInPodAffinity feature gate (enabled by default).
                                           items:
                                             type: string
                                           type: array
@@ -8025,7 +8232,7 @@ spec:
                                         pod labels will be ignored. The default value is empty.
                                         The same key is forbidden to exist in both matchLabelKeys and labelSelector.
                                         Also, matchLabelKeys cannot be set when labelSelector isn't set.
-                                        This is an alpha field and requires enabling MatchLabelKeysInPodAffinity feature gate.
+                                        This is a beta field and requires enabling MatchLabelKeysInPodAffinity feature gate (enabled by default).
                                       items:
                                         type: string
                                       type: array
@@ -8040,7 +8247,7 @@ spec:
                                         pod labels will be ignored. The default value is empty.
                                         The same key is forbidden to exist in both mismatchLabelKeys and labelSelector.
                                         Also, mismatchLabelKeys cannot be set when labelSelector isn't set.
-                                        This is an alpha field and requires enabling MatchLabelKeysInPodAffinity feature gate.
+                                        This is a beta field and requires enabling MatchLabelKeysInPodAffinity feature gate (enabled by default).
                                       items:
                                         type: string
                                       type: array
@@ -8187,7 +8394,12 @@ spec:
                                             type: string
                                           name:
                                             default: ""
-                                            description: 'Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names'
+                                            description: |-
+                                              Name of the referent.
+                                              This field is effectively required, but due to backwards compatibility is
+                                              allowed to be empty. Instances of this type with an empty value here are
+                                              almost certainly wrong.
+                                              More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names
                                             type: string
                                           optional:
                                             description: Specify whether the ConfigMap or its key must be defined
@@ -8241,7 +8453,12 @@ spec:
                                             type: string
                                           name:
                                             default: ""
-                                            description: 'Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names'
+                                            description: |-
+                                              Name of the referent.
+                                              This field is effectively required, but due to backwards compatibility is
+                                              allowed to be empty. Instances of this type with an empty value here are
+                                              almost certainly wrong.
+                                              More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names
                                             type: string
                                           optional:
                                             description: Specify whether the Secret or its key must be defined
@@ -8274,7 +8491,12 @@ spec:
                                     properties:
                                       name:
                                         default: ""
-                                        description: 'Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names'
+                                        description: |-
+                                          Name of the referent.
+                                          This field is effectively required, but due to backwards compatibility is
+                                          allowed to be empty. Instances of this type with an empty value here are
+                                          almost certainly wrong.
+                                          More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names
                                         type: string
                                       optional:
                                         description: Specify whether the ConfigMap must be defined
@@ -8289,7 +8511,12 @@ spec:
                                     properties:
                                       name:
                                         default: ""
-                                        description: 'Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names'
+                                        description: |-
+                                          Name of the referent.
+                                          This field is effectively required, but due to backwards compatibility is
+                                          allowed to be empty. Instances of this type with an empty value here are
+                                          almost certainly wrong.
+                                          More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names
                                         type: string
                                       optional:
                                         description: Specify whether the Secret must be defined
@@ -8563,11 +8790,11 @@ spec:
                                       format: int32
                                       type: integer
                                     service:
+                                      default: ""
                                       description: |-
                                         Service is the name of the service to place in the gRPC HealthCheckRequest
                                         (see https://github.com/grpc/grpc/blob/master/doc/health-checking.md).
 
-
                                         If this is not specified, the default behavior is defined by gRPC.
                                       type: string
                                   required:
@@ -8769,11 +8996,11 @@ spec:
                                       format: int32
                                       type: integer
                                     service:
+                                      default: ""
                                       description: |-
                                         Service is the name of the service to place in the gRPC HealthCheckRequest
                                         (see https://github.com/grpc/grpc/blob/master/doc/health-checking.md).
 
-
                                         If this is not specified, the default behavior is defined by gRPC.
                                       type: string
                                   required:
@@ -8916,11 +9143,9 @@ spec:
                                     Claims lists the names of resources, defined in spec.resourceClaims,
                                     that are used by this container.
 
-
                                     This is an alpha field and requires enabling the
                                     DynamicResourceAllocation feature gate.
 
-
                                     This field is immutable. It can only be set for containers.
                                   items:
                                     description: ResourceClaim references one entry in PodSpec.ResourceClaims.
@@ -8931,6 +9156,12 @@ spec:
                                           the Pod where this field is used. It makes that resource available
                                           inside a container.
                                         type: string
+                                      request:
+                                        description: |-
+                                          Request is the name chosen for a request in the referenced claim.
+                                          If empty, everything from the claim is made available, otherwise
+                                          only the result of this request.
+                                        type: string
                                     required:
                                       - name
                                     type: object
@@ -9052,7 +9283,7 @@ spec:
                                 procMount:
                                   description: |-
                                     procMount denotes the type of proc mount to use for the containers.
-                                    The default is DefaultProcMount which uses the container runtime defaults for
+                                    The default value is Default which uses the container runtime defaults for
                                     readonly paths and masked paths.
                                     This requires the ProcMountType feature flag to be enabled.
                                     Note that this field cannot be set when spec.os.name is windows.
@@ -9126,7 +9357,13 @@ spec:
                                         Must be set if type is "Localhost". Must NOT be set for any other type.
                                       type: string
                                     type:
-                                      description: 'type indicates which kind of seccomp profile will be applied. Valid options are: Localhost - a profile defined in a file on the node should be used. RuntimeDefault - the container runtime default profile should be used. Unconfined - no profile should be applied.'
+                                      description: |-
+                                        type indicates which kind of seccomp profile will be applied.
+                                        Valid options are:
+
+                                        Localhost - a profile defined in a file on the node should be used.
+                                        RuntimeDefault - the container runtime default profile should be used.
+                                        Unconfined - no profile should be applied.
                                       type: string
                                   required:
                                     - type
@@ -9202,11 +9439,11 @@ spec:
                                       format: int32
                                       type: integer
                                     service:
+                                      default: ""
                                       description: |-
                                         Service is the name of the service to place in the gRPC HealthCheckRequest
                                         (see https://github.com/grpc/grpc/blob/master/doc/health-checking.md).
 
-
                                         If this is not specified, the default behavior is defined by gRPC.
                                       type: string
                                   required:
@@ -9411,10 +9648,8 @@ spec:
                                       RecursiveReadOnly specifies whether read-only mounts should be handled
                                       recursively.
 
-
                                       If ReadOnly is false, this field has no meaning and must be unspecified.
 
-
                                       If ReadOnly is true, and this field is set to Disabled, the mount is not made
                                       recursively read-only.  If this field is set to IfPossible, the mount is made
                                       recursively read-only, if it is supported by the container runtime.  If this
@@ -9422,11 +9657,9 @@ spec:
                                       supported by the container runtime, otherwise the pod will not be started and
                                       an error will be generated to indicate the reason.
 
-
                                       If this field is set to IfPossible or Enabled, MountPropagation must be set to
                                       None (or be unspecified, which defaults to None).
 
-
                                       If this field is not specified, it is treated as an equivalent of Disabled.
                                     type: string
                                   subPath:
@@ -9471,7 +9704,6 @@ spec:
                               More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#access-modes-1
                             items:
                               type: string
-                            minItems: 1
                             type: array
                             x-kubernetes-list-type: atomic
                           dataSource:
@@ -9581,11 +9813,7 @@ spec:
                                   If Requests is omitted for a container, it defaults to Limits if that is explicitly specified,
                                   otherwise to an implementation-defined value. Requests cannot exceed Limits.
                                   More info: https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/
-                                required:
-                                  - storage
                                 type: object
-                            required:
-                              - requests
                             type: object
                           selector:
                             description: selector is a label query over volumes to consider for binding.
@@ -9649,7 +9877,7 @@ spec:
                               set to a Pending state, as reflected by the modifyVolumeStatus field, until such as a resource
                               exists.
                               More info: https://kubernetes.io/docs/concepts/storage/volume-attributes-classes/
-                              (Alpha) Using this field requires the VolumeAttributesClass feature gate to be enabled.
+                              (Beta) Using this field requires the VolumeAttributesClass feature gate to be enabled (off by default).
                             type: string
                           volumeMode:
                             description: |-
@@ -9659,10 +9887,13 @@ spec:
                           volumeName:
                             description: volumeName is the binding reference to the PersistentVolume backing this claim.
                             type: string
-                        required:
-                          - accessModes
-                          - resources
                         type: object
+                        x-kubernetes-map-type: atomic
+                        x-kubernetes-validations:
+                          - message: missing accessModes
+                            rule: 0 < size(self.accessModes)
+                          - message: missing storage request
+                            rule: has(self.resources.requests.storage)
                       metadata:
                         description: Metadata contains metadata for custom resources
                         properties:
@@ -9712,11 +9943,9 @@ spec:
                               Claims lists the names of resources, defined in spec.resourceClaims,
                               that are used by this container.
 
-
                               This is an alpha field and requires enabling the
                               DynamicResourceAllocation feature gate.
 
-
                               This field is immutable. It can only be set for containers.
                             items:
                               description: ResourceClaim references one entry in PodSpec.ResourceClaims.
@@ -9727,6 +9956,12 @@ spec:
                                     the Pod where this field is used. It makes that resource available
                                     inside a container.
                                   type: string
+                                request:
+                                  description: |-
+                                    Request is the name chosen for a request in the referenced claim.
+                                    If empty, everything from the claim is made available, otherwise
+                                    only the result of this request.
+                                  type: string
                               required:
                                 - name
                               type: object
@@ -9773,11 +10008,9 @@ spec:
                                       Claims lists the names of resources, defined in spec.resourceClaims,
                                       that are used by this container.
 
-
                                       This is an alpha field and requires enabling the
                                       DynamicResourceAllocation feature gate.
 
-
                                       This field is immutable. It can only be set for containers.
                                     items:
                                       description: ResourceClaim references one entry in PodSpec.ResourceClaims.
@@ -9788,6 +10021,12 @@ spec:
                                             the Pod where this field is used. It makes that resource available
                                             inside a container.
                                           type: string
+                                        request:
+                                          description: |-
+                                            Request is the name chosen for a request in the referenced claim.
+                                            If empty, everything from the claim is made available, otherwise
+                                            only the result of this request.
+                                          type: string
                                       required:
                                         - name
                                       type: object
@@ -10012,7 +10251,7 @@ spec:
                                     set to a Pending state, as reflected by the modifyVolumeStatus field, until such as a resource
                                     exists.
                                     More info: https://kubernetes.io/docs/concepts/storage/volume-attributes-classes/
-                                    (Alpha) Using this field requires the VolumeAttributesClass feature gate to be enabled.
+                                    (Beta) Using this field requires the VolumeAttributesClass feature gate to be enabled (off by default).
                                   type: string
                                 volumeMode:
                                   description: |-
@@ -10023,6 +10262,12 @@ spec:
                                   description: volumeName is the binding reference to the PersistentVolume backing this claim.
                                   type: string
                               type: object
+                              x-kubernetes-map-type: atomic
+                              x-kubernetes-validations:
+                                - message: missing accessModes
+                                  rule: 0 < size(self.accessModes)
+                                - message: missing storage request
+                                  rule: has(self.resources.requests.storage)
                             name:
                               description: |-
                                 The name for the tablespace, used as the path name for the volume.
@@ -10145,7 +10390,6 @@ spec:
                                 Keys that don't exist in the incoming pod labels will
                                 be ignored. A null or empty list means only match against labelSelector.
 
-
                                 This is a beta field and requires the MatchLabelKeysInPodTopologySpread feature gate to be enabled (enabled by default).
                               items:
                                 type: string
@@ -10185,7 +10429,6 @@ spec:
                                 Valid values are integers greater than 0.
                                 When value is not nil, WhenUnsatisfiable must be DoNotSchedule.
 
-
                                 For example, in a 3-zone cluster, MaxSkew is set to 2, MinDomains is set to 5 and pods with the same
                                 labelSelector spread as 2/2/2:
                                 | zone1 | zone2 | zone3 |
@@ -10203,7 +10446,6 @@ spec:
                                 - Honor: only nodes matching nodeAffinity/nodeSelector are included in the calculations.
                                 - Ignore: nodeAffinity/nodeSelector are ignored. All nodes are included in the calculations.
 
-
                                 If this value is nil, the behavior is equivalent to the Honor policy.
                                 This is a beta-level feature default enabled by the NodeInclusionPolicyInPodTopologySpread feature flag.
                               type: string
@@ -10215,7 +10457,6 @@ spec:
                                 has a toleration, are included.
                                 - Ignore: node taints are ignored. All nodes are included.
 
-
                                 If this value is nil, the behavior is equivalent to the Ignore policy.
                                 This is a beta-level feature default enabled by the NodeInclusionPolicyInPodTopologySpread feature flag.
                               type: string
@@ -10259,6 +10500,210 @@ spec:
                             - whenUnsatisfiable
                           type: object
                         type: array
+                      volumes:
+                        properties:
+                          temp:
+                            description: |-
+                              An ephemeral volume for temporary files.
+                              More info: https://kubernetes.io/docs/concepts/storage/ephemeral-volumes
+                            properties:
+                              accessModes:
+                                description: |-
+                                  accessModes contains the desired access modes the volume should have.
+                                  More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#access-modes-1
+                                items:
+                                  type: string
+                                type: array
+                                x-kubernetes-list-type: atomic
+                              dataSource:
+                                description: |-
+                                  dataSource field can be used to specify either:
+                                  * An existing VolumeSnapshot object (snapshot.storage.k8s.io/VolumeSnapshot)
+                                  * An existing PVC (PersistentVolumeClaim)
+                                  If the provisioner or an external controller can support the specified data source,
+                                  it will create a new volume based on the contents of the specified data source.
+                                  When the AnyVolumeDataSource feature gate is enabled, dataSource contents will be copied to dataSourceRef,
+                                  and dataSourceRef contents will be copied to dataSource when dataSourceRef.namespace is not specified.
+                                  If the namespace is specified, then dataSourceRef will not be copied to dataSource.
+                                properties:
+                                  apiGroup:
+                                    description: |-
+                                      APIGroup is the group for the resource being referenced.
+                                      If APIGroup is not specified, the specified Kind must be in the core API group.
+                                      For any other third-party types, APIGroup is required.
+                                    type: string
+                                  kind:
+                                    description: Kind is the type of resource being referenced
+                                    type: string
+                                  name:
+                                    description: Name is the name of resource being referenced
+                                    type: string
+                                required:
+                                  - kind
+                                  - name
+                                type: object
+                                x-kubernetes-map-type: atomic
+                              dataSourceRef:
+                                description: |-
+                                  dataSourceRef specifies the object from which to populate the volume with data, if a non-empty
+                                  volume is desired. This may be any object from a non-empty API group (non
+                                  core object) or a PersistentVolumeClaim object.
+                                  When this field is specified, volume binding will only succeed if the type of
+                                  the specified object matches some installed volume populator or dynamic
+                                  provisioner.
+                                  This field will replace the functionality of the dataSource field and as such
+                                  if both fields are non-empty, they must have the same value. For backwards
+                                  compatibility, when namespace isn't specified in dataSourceRef,
+                                  both fields (dataSource and dataSourceRef) will be set to the same
+                                  value automatically if one of them is empty and the other is non-empty.
+                                  When namespace is specified in dataSourceRef,
+                                  dataSource isn't set to the same value and must be empty.
+                                  There are three important differences between dataSource and dataSourceRef:
+                                  * While dataSource only allows two specific types of objects, dataSourceRef
+                                    allows any non-core object, as well as PersistentVolumeClaim objects.
+                                  * While dataSource ignores disallowed values (dropping them), dataSourceRef
+                                    preserves all values, and generates an error if a disallowed value is
+                                    specified.
+                                  * While dataSource only allows local objects, dataSourceRef allows objects
+                                    in any namespaces.
+                                  (Beta) Using this field requires the AnyVolumeDataSource feature gate to be enabled.
+                                  (Alpha) Using the namespace field of dataSourceRef requires the CrossNamespaceVolumeDataSource feature gate to be enabled.
+                                properties:
+                                  apiGroup:
+                                    description: |-
+                                      APIGroup is the group for the resource being referenced.
+                                      If APIGroup is not specified, the specified Kind must be in the core API group.
+                                      For any other third-party types, APIGroup is required.
+                                    type: string
+                                  kind:
+                                    description: Kind is the type of resource being referenced
+                                    type: string
+                                  name:
+                                    description: Name is the name of resource being referenced
+                                    type: string
+                                  namespace:
+                                    description: |-
+                                      Namespace is the namespace of resource being referenced
+                                      Note that when a namespace is specified, a gateway.networking.k8s.io/ReferenceGrant object is required in the referent namespace to allow that namespace's owner to accept the reference. See the ReferenceGrant documentation for details.
+                                      (Alpha) This field requires the CrossNamespaceVolumeDataSource feature gate to be enabled.
+                                    type: string
+                                required:
+                                  - kind
+                                  - name
+                                type: object
+                              resources:
+                                description: |-
+                                  resources represents the minimum resources the volume should have.
+                                  If RecoverVolumeExpansionFailure feature is enabled users are allowed to specify resource requirements
+                                  that are lower than previous value but must still be higher than capacity recorded in the
+                                  status field of the claim.
+                                  More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#resources
+                                properties:
+                                  limits:
+                                    additionalProperties:
+                                      anyOf:
+                                        - type: integer
+                                        - type: string
+                                      pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$
+                                      x-kubernetes-int-or-string: true
+                                    description: |-
+                                      Limits describes the maximum amount of compute resources allowed.
+                                      More info: https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/
+                                    type: object
+                                  requests:
+                                    additionalProperties:
+                                      anyOf:
+                                        - type: integer
+                                        - type: string
+                                      pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$
+                                      x-kubernetes-int-or-string: true
+                                    description: |-
+                                      Requests describes the minimum amount of compute resources required.
+                                      If Requests is omitted for a container, it defaults to Limits if that is explicitly specified,
+                                      otherwise to an implementation-defined value. Requests cannot exceed Limits.
+                                      More info: https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/
+                                    type: object
+                                type: object
+                              selector:
+                                description: selector is a label query over volumes to consider for binding.
+                                properties:
+                                  matchExpressions:
+                                    description: matchExpressions is a list of label selector requirements. The requirements are ANDed.
+                                    items:
+                                      description: |-
+                                        A label selector requirement is a selector that contains values, a key, and an operator that
+                                        relates the key and values.
+                                      properties:
+                                        key:
+                                          description: key is the label key that the selector applies to.
+                                          type: string
+                                        operator:
+                                          description: |-
+                                            operator represents a key's relationship to a set of values.
+                                            Valid operators are In, NotIn, Exists and DoesNotExist.
+                                          type: string
+                                        values:
+                                          description: |-
+                                            values is an array of string values. If the operator is In or NotIn,
+                                            the values array must be non-empty. If the operator is Exists or DoesNotExist,
+                                            the values array must be empty. This array is replaced during a strategic
+                                            merge patch.
+                                          items:
+                                            type: string
+                                          type: array
+                                          x-kubernetes-list-type: atomic
+                                      required:
+                                        - key
+                                        - operator
+                                      type: object
+                                    type: array
+                                    x-kubernetes-list-type: atomic
+                                  matchLabels:
+                                    additionalProperties:
+                                      type: string
+                                    description: |-
+                                      matchLabels is a map of {key,value} pairs. A single {key,value} in the matchLabels
+                                      map is equivalent to an element of matchExpressions, whose key field is "key", the
+                                      operator is "In", and the values array contains only "value". The requirements are ANDed.
+                                    type: object
+                                type: object
+                                x-kubernetes-map-type: atomic
+                              storageClassName:
+                                description: |-
+                                  storageClassName is the name of the StorageClass required by the claim.
+                                  More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#class-1
+                                type: string
+                              volumeAttributesClassName:
+                                description: |-
+                                  volumeAttributesClassName may be used to set the VolumeAttributesClass used by this claim.
+                                  If specified, the CSI driver will create or update the volume with the attributes defined
+                                  in the corresponding VolumeAttributesClass. This has a different purpose than storageClassName,
+                                  it can be changed after the claim is created. An empty string value means that no VolumeAttributesClass
+                                  will be applied to the claim but it's not allowed to reset this field to empty string once it is set.
+                                  If unspecified and the PersistentVolumeClaim is unbound, the default VolumeAttributesClass
+                                  will be set by the persistentvolume controller if it exists.
+                                  If the resource referred to by volumeAttributesClass does not exist, this PersistentVolumeClaim will be
+                                  set to a Pending state, as reflected by the modifyVolumeStatus field, until such as a resource
+                                  exists.
+                                  More info: https://kubernetes.io/docs/concepts/storage/volume-attributes-classes/
+                                  (Beta) Using this field requires the VolumeAttributesClass feature gate to be enabled (off by default).
+                                type: string
+                              volumeMode:
+                                description: |-
+                                  volumeMode defines what type of volume is required by the claim.
+                                  Value of Filesystem is implied when not included in claim spec.
+                                type: string
+                              volumeName:
+                                description: volumeName is the binding reference to the PersistentVolume backing this claim.
+                                type: string
+                            type: object
+                            x-kubernetes-map-type: atomic
+                            x-kubernetes-validations:
+                              - message: missing accessModes
+                                rule: 0 < size(self.accessModes)
+                              - message: missing storage request
+                                rule: has(self.resources.requests.storage)
+                        type: object
                       walVolumeClaimSpec:
                         description: |-
                           Defines a separate PersistentVolumeClaim for PostgreSQL's write-ahead log.
@@ -10270,7 +10715,6 @@ spec:
                               More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#access-modes-1
                             items:
                               type: string
-                            minItems: 1
                             type: array
                             x-kubernetes-list-type: atomic
                           dataSource:
@@ -10380,11 +10824,7 @@ spec:
                                   If Requests is omitted for a container, it defaults to Limits if that is explicitly specified,
                                   otherwise to an implementation-defined value. Requests cannot exceed Limits.
                                   More info: https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/
-                                required:
-                                  - storage
                                 type: object
-                            required:
-                              - requests
                             type: object
                           selector:
                             description: selector is a label query over volumes to consider for binding.
@@ -10448,7 +10888,7 @@ spec:
                               set to a Pending state, as reflected by the modifyVolumeStatus field, until such as a resource
                               exists.
                               More info: https://kubernetes.io/docs/concepts/storage/volume-attributes-classes/
-                              (Alpha) Using this field requires the VolumeAttributesClass feature gate to be enabled.
+                              (Beta) Using this field requires the VolumeAttributesClass feature gate to be enabled (off by default).
                             type: string
                           volumeMode:
                             description: |-
@@ -10458,10 +10898,13 @@ spec:
                           volumeName:
                             description: volumeName is the binding reference to the PersistentVolume backing this claim.
                             type: string
-                        required:
-                          - accessModes
-                          - resources
                         type: object
+                        x-kubernetes-map-type: atomic
+                        x-kubernetes-validations:
+                          - message: missing accessModes
+                            rule: 0 < size(self.accessModes)
+                          - message: missing storage request
+                            rule: has(self.resources.requests.storage)
                     required:
                       - dataVolumeClaimSpec
                     type: object
@@ -10470,13 +10913,552 @@ spec:
                   x-kubernetes-list-map-keys:
                     - name
                   x-kubernetes-list-type: map
-                metadata:
-                  description: Metadata contains metadata for custom resources
+                instrumentation:
+                  description: |-
+                    Configuration for the OpenTelemetry collector container used to collect
+                    logs and metrics.
                   properties:
-                    annotations:
-                      additionalProperties:
-                        type: string
-                      type: object
+                    config:
+                      description: Config is the place for users to configure exporters and provide files.
+                      properties:
+                        detectors:
+                          description: |-
+                            Resource detectors add identifying attributes to logs and metrics. These run in the order they are defined.
+                            More info: https://github.com/open-telemetry/opentelemetry-collector-contrib/blob/-/processor/resourcedetectionprocessor#readme
+                          items:
+                            properties:
+                              attributes:
+                                additionalProperties:
+                                  type: boolean
+                                description: |-
+                                  Attributes to use from this detector. Detectors usually add every attribute
+                                  they know automatically. Names omitted here behave according to detector defaults.
+                                maxProperties: 30
+                                minProperties: 1
+                                type: object
+                                x-kubernetes-map-type: atomic
+                              name:
+                                description: 'Name of the resource detector to enable: `aks`, `eks`, `gcp`, etc.'
+                                maxLength: 20
+                                minLength: 1
+                                type: string
+                            required:
+                              - name
+                            type: object
+                            x-kubernetes-map-type: atomic
+                          maxItems: 10
+                          minItems: 1
+                          type: array
+                          x-kubernetes-list-map-keys:
+                            - name
+                          x-kubernetes-list-type: map
+                        exporters:
+                          description: |-
+                            Exporters allows users to configure OpenTelemetry exporters that exist
+                            in the collector image.
+                          type: object
+                          x-kubernetes-preserve-unknown-fields: true
+                        files:
+                          description: |-
+                            Files allows the user to mount projected volumes into the collector
+                            Pod so that files can be referenced by the collector as needed.
+                          items:
+                            description: |-
+                              Projection that may be projected along with other supported volume types.
+                              Exactly one of these fields must be set.
+                            properties:
+                              clusterTrustBundle:
+                                description: |-
+                                  ClusterTrustBundle allows a pod to access the `.spec.trustBundle` field
+                                  of ClusterTrustBundle objects in an auto-updating file.
+
+                                  Alpha, gated by the ClusterTrustBundleProjection feature gate.
+
+                                  ClusterTrustBundle objects can either be selected by name, or by the
+                                  combination of signer name and a label selector.
+
+                                  Kubelet performs aggressive normalization of the PEM contents written
+                                  into the pod filesystem.  Esoteric PEM features such as inter-block
+                                  comments and block headers are stripped.  Certificates are deduplicated.
+                                  The ordering of certificates within the file is arbitrary, and Kubelet
+                                  may change the order over time.
+                                properties:
+                                  labelSelector:
+                                    description: |-
+                                      Select all ClusterTrustBundles that match this label selector.  Only has
+                                      effect if signerName is set.  Mutually-exclusive with name.  If unset,
+                                      interpreted as "match nothing".  If set but empty, interpreted as "match
+                                      everything".
+                                    properties:
+                                      matchExpressions:
+                                        description: matchExpressions is a list of label selector requirements. The requirements are ANDed.
+                                        items:
+                                          description: |-
+                                            A label selector requirement is a selector that contains values, a key, and an operator that
+                                            relates the key and values.
+                                          properties:
+                                            key:
+                                              description: key is the label key that the selector applies to.
+                                              type: string
+                                            operator:
+                                              description: |-
+                                                operator represents a key's relationship to a set of values.
+                                                Valid operators are In, NotIn, Exists and DoesNotExist.
+                                              type: string
+                                            values:
+                                              description: |-
+                                                values is an array of string values. If the operator is In or NotIn,
+                                                the values array must be non-empty. If the operator is Exists or DoesNotExist,
+                                                the values array must be empty. This array is replaced during a strategic
+                                                merge patch.
+                                              items:
+                                                type: string
+                                              type: array
+                                              x-kubernetes-list-type: atomic
+                                          required:
+                                            - key
+                                            - operator
+                                          type: object
+                                        type: array
+                                        x-kubernetes-list-type: atomic
+                                      matchLabels:
+                                        additionalProperties:
+                                          type: string
+                                        description: |-
+                                          matchLabels is a map of {key,value} pairs. A single {key,value} in the matchLabels
+                                          map is equivalent to an element of matchExpressions, whose key field is "key", the
+                                          operator is "In", and the values array contains only "value". The requirements are ANDed.
+                                        type: object
+                                    type: object
+                                    x-kubernetes-map-type: atomic
+                                  name:
+                                    description: |-
+                                      Select a single ClusterTrustBundle by object name.  Mutually-exclusive
+                                      with signerName and labelSelector.
+                                    type: string
+                                  optional:
+                                    description: |-
+                                      If true, don't block pod startup if the referenced ClusterTrustBundle(s)
+                                      aren't available.  If using name, then the named ClusterTrustBundle is
+                                      allowed not to exist.  If using signerName, then the combination of
+                                      signerName and labelSelector is allowed to match zero
+                                      ClusterTrustBundles.
+                                    type: boolean
+                                  path:
+                                    description: Relative path from the volume root to write the bundle.
+                                    type: string
+                                  signerName:
+                                    description: |-
+                                      Select all ClusterTrustBundles that match this signer name.
+                                      Mutually-exclusive with name.  The contents of all selected
+                                      ClusterTrustBundles will be unified and deduplicated.
+                                    type: string
+                                required:
+                                  - path
+                                type: object
+                              configMap:
+                                description: configMap information about the configMap data to project
+                                properties:
+                                  items:
+                                    description: |-
+                                      items if unspecified, each key-value pair in the Data field of the referenced
+                                      ConfigMap will be projected into the volume as a file whose name is the
+                                      key and content is the value. If specified, the listed keys will be
+                                      projected into the specified paths, and unlisted keys will not be
+                                      present. If a key is specified which is not present in the ConfigMap,
+                                      the volume setup will error unless it is marked optional. Paths must be
+                                      relative and may not contain the '..' path or start with '..'.
+                                    items:
+                                      description: Maps a string key to a path within a volume.
+                                      properties:
+                                        key:
+                                          description: key is the key to project.
+                                          type: string
+                                        mode:
+                                          description: |-
+                                            mode is Optional: mode bits used to set permissions on this file.
+                                            Must be an octal value between 0000 and 0777 or a decimal value between 0 and 511.
+                                            YAML accepts both octal and decimal values, JSON requires decimal values for mode bits.
+                                            If not specified, the volume defaultMode will be used.
+                                            This might be in conflict with other options that affect the file
+                                            mode, like fsGroup, and the result can be other mode bits set.
+                                          format: int32
+                                          type: integer
+                                        path:
+                                          description: |-
+                                            path is the relative path of the file to map the key to.
+                                            May not be an absolute path.
+                                            May not contain the path element '..'.
+                                            May not start with the string '..'.
+                                          type: string
+                                      required:
+                                        - key
+                                        - path
+                                      type: object
+                                    type: array
+                                    x-kubernetes-list-type: atomic
+                                  name:
+                                    default: ""
+                                    description: |-
+                                      Name of the referent.
+                                      This field is effectively required, but due to backwards compatibility is
+                                      allowed to be empty. Instances of this type with an empty value here are
+                                      almost certainly wrong.
+                                      More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names
+                                    type: string
+                                  optional:
+                                    description: optional specify whether the ConfigMap or its keys must be defined
+                                    type: boolean
+                                type: object
+                                x-kubernetes-map-type: atomic
+                              downwardAPI:
+                                description: downwardAPI information about the downwardAPI data to project
+                                properties:
+                                  items:
+                                    description: Items is a list of DownwardAPIVolume file
+                                    items:
+                                      description: DownwardAPIVolumeFile represents information to create the file containing the pod field
+                                      properties:
+                                        fieldRef:
+                                          description: 'Required: Selects a field of the pod: only annotations, labels, name, namespace and uid are supported.'
+                                          properties:
+                                            apiVersion:
+                                              description: Version of the schema the FieldPath is written in terms of, defaults to "v1".
+                                              type: string
+                                            fieldPath:
+                                              description: Path of the field to select in the specified API version.
+                                              type: string
+                                          required:
+                                            - fieldPath
+                                          type: object
+                                          x-kubernetes-map-type: atomic
+                                        mode:
+                                          description: |-
+                                            Optional: mode bits used to set permissions on this file, must be an octal value
+                                            between 0000 and 0777 or a decimal value between 0 and 511.
+                                            YAML accepts both octal and decimal values, JSON requires decimal values for mode bits.
+                                            If not specified, the volume defaultMode will be used.
+                                            This might be in conflict with other options that affect the file
+                                            mode, like fsGroup, and the result can be other mode bits set.
+                                          format: int32
+                                          type: integer
+                                        path:
+                                          description: 'Required: Path is  the relative path name of the file to be created. Must not be absolute or contain the ''..'' path. Must be utf-8 encoded. The first item of the relative path must not start with ''..'''
+                                          type: string
+                                        resourceFieldRef:
+                                          description: |-
+                                            Selects a resource of the container: only resources limits and requests
+                                            (limits.cpu, limits.memory, requests.cpu and requests.memory) are currently supported.
+                                          properties:
+                                            containerName:
+                                              description: 'Container name: required for volumes, optional for env vars'
+                                              type: string
+                                            divisor:
+                                              anyOf:
+                                                - type: integer
+                                                - type: string
+                                              description: Specifies the output format of the exposed resources, defaults to "1"
+                                              pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$
+                                              x-kubernetes-int-or-string: true
+                                            resource:
+                                              description: 'Required: resource to select'
+                                              type: string
+                                          required:
+                                            - resource
+                                          type: object
+                                          x-kubernetes-map-type: atomic
+                                      required:
+                                        - path
+                                      type: object
+                                    type: array
+                                    x-kubernetes-list-type: atomic
+                                type: object
+                              secret:
+                                description: secret information about the secret data to project
+                                properties:
+                                  items:
+                                    description: |-
+                                      items if unspecified, each key-value pair in the Data field of the referenced
+                                      Secret will be projected into the volume as a file whose name is the
+                                      key and content is the value. If specified, the listed keys will be
+                                      projected into the specified paths, and unlisted keys will not be
+                                      present. If a key is specified which is not present in the Secret,
+                                      the volume setup will error unless it is marked optional. Paths must be
+                                      relative and may not contain the '..' path or start with '..'.
+                                    items:
+                                      description: Maps a string key to a path within a volume.
+                                      properties:
+                                        key:
+                                          description: key is the key to project.
+                                          type: string
+                                        mode:
+                                          description: |-
+                                            mode is Optional: mode bits used to set permissions on this file.
+                                            Must be an octal value between 0000 and 0777 or a decimal value between 0 and 511.
+                                            YAML accepts both octal and decimal values, JSON requires decimal values for mode bits.
+                                            If not specified, the volume defaultMode will be used.
+                                            This might be in conflict with other options that affect the file
+                                            mode, like fsGroup, and the result can be other mode bits set.
+                                          format: int32
+                                          type: integer
+                                        path:
+                                          description: |-
+                                            path is the relative path of the file to map the key to.
+                                            May not be an absolute path.
+                                            May not contain the path element '..'.
+                                            May not start with the string '..'.
+                                          type: string
+                                      required:
+                                        - key
+                                        - path
+                                      type: object
+                                    type: array
+                                    x-kubernetes-list-type: atomic
+                                  name:
+                                    default: ""
+                                    description: |-
+                                      Name of the referent.
+                                      This field is effectively required, but due to backwards compatibility is
+                                      allowed to be empty. Instances of this type with an empty value here are
+                                      almost certainly wrong.
+                                      More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names
+                                    type: string
+                                  optional:
+                                    description: optional field specify whether the Secret or its key must be defined
+                                    type: boolean
+                                type: object
+                                x-kubernetes-map-type: atomic
+                              serviceAccountToken:
+                                description: serviceAccountToken is information about the serviceAccountToken data to project
+                                properties:
+                                  audience:
+                                    description: |-
+                                      audience is the intended audience of the token. A recipient of a token
+                                      must identify itself with an identifier specified in the audience of the
+                                      token, and otherwise should reject the token. The audience defaults to the
+                                      identifier of the apiserver.
+                                    type: string
+                                  expirationSeconds:
+                                    description: |-
+                                      expirationSeconds is the requested duration of validity of the service
+                                      account token. As the token approaches expiration, the kubelet volume
+                                      plugin will proactively rotate the service account token. The kubelet will
+                                      start trying to rotate the token if the token is older than 80 percent of
+                                      its time to live or if the token is older than 24 hours.Defaults to 1 hour
+                                      and must be at least 10 minutes.
+                                    format: int64
+                                    type: integer
+                                  path:
+                                    description: |-
+                                      path is the path relative to the mount point of the file to project the
+                                      token into.
+                                    type: string
+                                required:
+                                  - path
+                                type: object
+                            type: object
+                          minItems: 1
+                          type: array
+                          x-kubernetes-list-type: atomic
+                      type: object
+                    image:
+                      description: |-
+                        Image name to use for collector containers. When omitted, the value
+                        comes from an operator environment variable.
+                      type: string
+                    logs:
+                      description: Logs is the place for users to configure the log collection.
+                      properties:
+                        batches:
+                          description: Log records are exported in small batches. Set this field to change their size and frequency.
+                          properties:
+                            maxDelay:
+                              default: 200ms
+                              description: |-
+                                Maximum time to wait before exporting a log record. Higher numbers
+                                allow more records to be deduplicated and compressed before export.
+                              format: duration
+                              maxLength: 20
+                              minLength: 1
+                              pattern: ^((PT)?( *[0-9]+ *(?i:(ms|s|m)|(milli|sec|min)s?))+|0)$
+                              type: string
+                              x-kubernetes-validations:
+                                - rule: duration("0") <= self && self <= duration("5m")
+                            maxRecords:
+                              description: |-
+                                Maximum number of records to include in an exported batch. When present,
+                                batches this size are sent without any further delay.
+                              format: int32
+                              minimum: 1
+                              type: integer
+                            minRecords:
+                              default: 8192
+                              description: |-
+                                Number of records to wait for before exporting a batch. Higher numbers
+                                allow more records to be deduplicated and compressed before export.
+                              format: int32
+                              minimum: 0
+                              type: integer
+                          type: object
+                          x-kubernetes-map-type: atomic
+                          x-kubernetes-validations:
+                            - message: to disable batching, both minRecords and maxDelay must be zero
+                              rule: (has(self.minRecords) && self.minRecords == 0) == (has(self.maxDelay) && self.maxDelay == duration('0'))
+                            - message: minRecords cannot be larger than maxRecords
+                              rule: '!has(self.maxRecords) || self.minRecords <= self.maxRecords'
+                        exporters:
+                          description: The names of exporters that should send logs.
+                          items:
+                            type: string
+                          minItems: 1
+                          type: array
+                          x-kubernetes-list-type: set
+                        retentionPeriod:
+                          description: |-
+                            How long to retain log files locally. An RFC 3339 duration or a number
+                            and unit: `12 hr`, `3d`, `4 weeks`, etc.
+                          format: duration
+                          maxLength: 20
+                          minLength: 1
+                          pattern: ^(PT)?( *[0-9]+ *(?i:(h|hr|d|w|wk)|(hour|day|week)s?))+$
+                          type: string
+                          x-kubernetes-validations:
+                            - message: must be at least one hour
+                              rule: duration("1h") <= self && self <= duration("8760h")
+                      type: object
+                    metrics:
+                      description: Metrics is the place for users to configure metrics collection.
+                      properties:
+                        customQueries:
+                          description: |-
+                            Where users can turn off built-in metrics and also provide their own
+                            custom queries.
+                          properties:
+                            add:
+                              description: User defined queries and metrics.
+                              items:
+                                properties:
+                                  collectionInterval:
+                                    default: 5s
+                                    description: How often the queries should be run.
+                                    format: duration
+                                    maxLength: 20
+                                    minLength: 1
+                                    pattern: ^((PT)?( *[0-9]+ *(?i:(ms|s|m)|(milli|sec|min)s?))+|0)$
+                                    type: string
+                                    x-kubernetes-validations:
+                                      - rule: duration("0") <= self && self <= duration("60m")
+                                  name:
+                                    description: |-
+                                      The name of this batch of queries, which will be used in naming the OTel
+                                      SqlQuery receiver.
+                                    maxLength: 20
+                                    pattern: ^[^\pZ\pC\pS]+$
+                                    type: string
+                                  queries:
+                                    description: A ConfigMap holding the yaml file that contains the queries.
+                                    properties:
+                                      key:
+                                        description: Name of the data field within the ConfigMap.
+                                        maxLength: 253
+                                        minLength: 1
+                                        pattern: ^[-._a-zA-Z0-9]+$
+                                        type: string
+                                        x-kubernetes-validations:
+                                          - message: cannot be "." or start with ".."
+                                            rule: self != "." && !self.startsWith("..")
+                                      name:
+                                        description: Name of the ConfigMap.
+                                        maxLength: 253
+                                        minLength: 1
+                                        pattern: ^[a-z0-9]([-a-z0-9]*[a-z0-9])?([.][a-z0-9]([-a-z0-9]*[a-z0-9])?)*$
+                                        type: string
+                                    required:
+                                      - key
+                                      - name
+                                    type: object
+                                    x-kubernetes-map-type: atomic
+                                required:
+                                  - name
+                                  - queries
+                                type: object
+                              type: array
+                            remove:
+                              description: |-
+                                A list of built-in queries that should be removed. If all queries for a
+                                given SQL statement are removed, the SQL statement will no longer be run.
+                              items:
+                                type: string
+                              type: array
+                          type: object
+                      type: object
+                    resources:
+                      description: Resources holds the resource requirements for the collector container.
+                      properties:
+                        claims:
+                          description: |-
+                            Claims lists the names of resources, defined in spec.resourceClaims,
+                            that are used by this container.
+
+                            This is an alpha field and requires enabling the
+                            DynamicResourceAllocation feature gate.
+
+                            This field is immutable. It can only be set for containers.
+                          items:
+                            description: ResourceClaim references one entry in PodSpec.ResourceClaims.
+                            properties:
+                              name:
+                                description: |-
+                                  Name must match the name of one entry in pod.spec.resourceClaims of
+                                  the Pod where this field is used. It makes that resource available
+                                  inside a container.
+                                type: string
+                              request:
+                                description: |-
+                                  Request is the name chosen for a request in the referenced claim.
+                                  If empty, everything from the claim is made available, otherwise
+                                  only the result of this request.
+                                type: string
+                            required:
+                              - name
+                            type: object
+                          type: array
+                          x-kubernetes-list-map-keys:
+                            - name
+                          x-kubernetes-list-type: map
+                        limits:
+                          additionalProperties:
+                            anyOf:
+                              - type: integer
+                              - type: string
+                            pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$
+                            x-kubernetes-int-or-string: true
+                          description: |-
+                            Limits describes the maximum amount of compute resources allowed.
+                            More info: https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/
+                          type: object
+                        requests:
+                          additionalProperties:
+                            anyOf:
+                              - type: integer
+                              - type: string
+                            pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$
+                            x-kubernetes-int-or-string: true
+                          description: |-
+                            Requests describes the minimum amount of compute resources required.
+                            If Requests is omitted for a container, it defaults to Limits if that is explicitly specified,
+                            otherwise to an implementation-defined value. Requests cannot exceed Limits.
+                            More info: https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/
+                          type: object
+                      type: object
+                  type: object
+                metadata:
+                  description: Metadata contains metadata for custom resources
+                  properties:
+                    annotations:
+                      additionalProperties:
+                        type: string
+                      type: object
                     labels:
                       additionalProperties:
                         type: string
@@ -10498,21 +11480,20 @@ spec:
                                 https://github.com/prometheus-community/postgres_exporter#flags
                                 Changing the values of field causes PostgreSQL and the exporter to restart.
                               items:
-                                description: Projection that may be projected along with other supported volume types
+                                description: |-
+                                  Projection that may be projected along with other supported volume types.
+                                  Exactly one of these fields must be set.
                                 properties:
                                   clusterTrustBundle:
                                     description: |-
                                       ClusterTrustBundle allows a pod to access the `.spec.trustBundle` field
                                       of ClusterTrustBundle objects in an auto-updating file.
 
-
                                       Alpha, gated by the ClusterTrustBundleProjection feature gate.
 
-
                                       ClusterTrustBundle objects can either be selected by name, or by the
                                       combination of signer name and a label selector.
 
-
                                       Kubelet performs aggressive normalization of the PEM contents written
                                       into the pod filesystem.  Esoteric PEM features such as inter-block
                                       comments and block headers are stripped.  Certificates are deduplicated.
@@ -10635,7 +11616,12 @@ spec:
                                         x-kubernetes-list-type: atomic
                                       name:
                                         default: ""
-                                        description: 'Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names'
+                                        description: |-
+                                          Name of the referent.
+                                          This field is effectively required, but due to backwards compatibility is
+                                          allowed to be empty. Instances of this type with an empty value here are
+                                          almost certainly wrong.
+                                          More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names
                                         type: string
                                       optional:
                                         description: optional specify whether the ConfigMap or its keys must be defined
@@ -10747,7 +11733,12 @@ spec:
                                         x-kubernetes-list-type: atomic
                                       name:
                                         default: ""
-                                        description: 'Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names'
+                                        description: |-
+                                          Name of the referent.
+                                          This field is effectively required, but due to backwards compatibility is
+                                          allowed to be empty. Instances of this type with an empty value here are
+                                          almost certainly wrong.
+                                          More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names
                                         type: string
                                       optional:
                                         description: optional field specify whether the Secret or its key must be defined
@@ -10829,7 +11820,12 @@ spec:
                                   x-kubernetes-list-type: atomic
                                 name:
                                   default: ""
-                                  description: 'Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names'
+                                  description: |-
+                                    Name of the referent.
+                                    This field is effectively required, but due to backwards compatibility is
+                                    allowed to be empty. Instances of this type with an empty value here are
+                                    almost certainly wrong.
+                                    More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names
                                   type: string
                                 optional:
                                   description: optional field specify whether the Secret or its key must be defined
@@ -10851,11 +11847,9 @@ spec:
                                     Claims lists the names of resources, defined in spec.resourceClaims,
                                     that are used by this container.
 
-
                                     This is an alpha field and requires enabling the
                                     DynamicResourceAllocation feature gate.
 
-
                                     This field is immutable. It can only be set for containers.
                                   items:
                                     description: ResourceClaim references one entry in PodSpec.ResourceClaims.
@@ -10866,6 +11860,12 @@ spec:
                                           the Pod where this field is used. It makes that resource available
                                           inside a container.
                                         type: string
+                                      request:
+                                        description: |-
+                                          Request is the name chosen for a request in the referenced claim.
+                                          If empty, everything from the claim is made available, otherwise
+                                          only the result of this request.
+                                        type: string
                                     required:
                                       - name
                                     type: object
@@ -10926,6 +11926,36 @@ spec:
                       format: int32
                       minimum: 3
                       type: integer
+                    logging:
+                      description: Patroni log configuration settings.
+                      properties:
+                        level:
+                          default: INFO
+                          description: |-
+                            The Patroni log level.
+                            More info: https://docs.python.org/3/library/logging.html#levels
+                          enum:
+                            - CRITICAL
+                            - ERROR
+                            - WARNING
+                            - INFO
+                            - DEBUG
+                            - NOTSET
+                          maxLength: 10
+                          type: string
+                        storageLimit:
+                          anyOf:
+                            - type: integer
+                            - type: string
+                          description: |-
+                            Limits the total amount of space taken by Patroni log files.
+                            Minimum value is 25MB.
+                            More info: https://kubernetes.io/docs/reference/kubernetes-api/common-definitions/quantity
+                          pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$
+                          x-kubernetes-int-or-string: true
+                      required:
+                        - storageLimit
+                      type: object
                     port:
                       default: 8008
                       description: |-
@@ -10957,6 +11987,7 @@ spec:
                           enum:
                             - Switchover
                             - Failover
+                          maxLength: 15
                           type: string
                       required:
                         - enabled
@@ -10990,7 +12021,7 @@ spec:
                 postgresVersion:
                   description: The major version of PostgreSQL installed in the PostgreSQL image
                   maximum: 17
-                  minimum: 10
+                  minimum: 11
                   type: integer
                 proxy:
                   description: The specification of a proxy that connects to PostgreSQL.
@@ -11267,7 +12298,7 @@ spec:
                                               pod labels will be ignored. The default value is empty.
                                               The same key is forbidden to exist in both matchLabelKeys and labelSelector.
                                               Also, matchLabelKeys cannot be set when labelSelector isn't set.
-                                              This is an alpha field and requires enabling MatchLabelKeysInPodAffinity feature gate.
+                                              This is a beta field and requires enabling MatchLabelKeysInPodAffinity feature gate (enabled by default).
                                             items:
                                               type: string
                                             type: array
@@ -11282,7 +12313,7 @@ spec:
                                               pod labels will be ignored. The default value is empty.
                                               The same key is forbidden to exist in both mismatchLabelKeys and labelSelector.
                                               Also, mismatchLabelKeys cannot be set when labelSelector isn't set.
-                                              This is an alpha field and requires enabling MatchLabelKeysInPodAffinity feature gate.
+                                              This is a beta field and requires enabling MatchLabelKeysInPodAffinity feature gate (enabled by default).
                                             items:
                                               type: string
                                             type: array
@@ -11443,7 +12474,7 @@ spec:
                                           pod labels will be ignored. The default value is empty.
                                           The same key is forbidden to exist in both matchLabelKeys and labelSelector.
                                           Also, matchLabelKeys cannot be set when labelSelector isn't set.
-                                          This is an alpha field and requires enabling MatchLabelKeysInPodAffinity feature gate.
+                                          This is a beta field and requires enabling MatchLabelKeysInPodAffinity feature gate (enabled by default).
                                         items:
                                           type: string
                                         type: array
@@ -11458,7 +12489,7 @@ spec:
                                           pod labels will be ignored. The default value is empty.
                                           The same key is forbidden to exist in both mismatchLabelKeys and labelSelector.
                                           Also, mismatchLabelKeys cannot be set when labelSelector isn't set.
-                                          This is an alpha field and requires enabling MatchLabelKeysInPodAffinity feature gate.
+                                          This is a beta field and requires enabling MatchLabelKeysInPodAffinity feature gate (enabled by default).
                                         items:
                                           type: string
                                         type: array
@@ -11612,7 +12643,7 @@ spec:
                                               pod labels will be ignored. The default value is empty.
                                               The same key is forbidden to exist in both matchLabelKeys and labelSelector.
                                               Also, matchLabelKeys cannot be set when labelSelector isn't set.
-                                              This is an alpha field and requires enabling MatchLabelKeysInPodAffinity feature gate.
+                                              This is a beta field and requires enabling MatchLabelKeysInPodAffinity feature gate (enabled by default).
                                             items:
                                               type: string
                                             type: array
@@ -11627,7 +12658,7 @@ spec:
                                               pod labels will be ignored. The default value is empty.
                                               The same key is forbidden to exist in both mismatchLabelKeys and labelSelector.
                                               Also, mismatchLabelKeys cannot be set when labelSelector isn't set.
-                                              This is an alpha field and requires enabling MatchLabelKeysInPodAffinity feature gate.
+                                              This is a beta field and requires enabling MatchLabelKeysInPodAffinity feature gate (enabled by default).
                                             items:
                                               type: string
                                             type: array
@@ -11788,7 +12819,7 @@ spec:
                                           pod labels will be ignored. The default value is empty.
                                           The same key is forbidden to exist in both matchLabelKeys and labelSelector.
                                           Also, matchLabelKeys cannot be set when labelSelector isn't set.
-                                          This is an alpha field and requires enabling MatchLabelKeysInPodAffinity feature gate.
+                                          This is a beta field and requires enabling MatchLabelKeysInPodAffinity feature gate (enabled by default).
                                         items:
                                           type: string
                                         type: array
@@ -11803,7 +12834,7 @@ spec:
                                           pod labels will be ignored. The default value is empty.
                                           The same key is forbidden to exist in both mismatchLabelKeys and labelSelector.
                                           Also, mismatchLabelKeys cannot be set when labelSelector isn't set.
-                                          This is an alpha field and requires enabling MatchLabelKeysInPodAffinity feature gate.
+                                          This is a beta field and requires enabling MatchLabelKeysInPodAffinity feature gate (enabled by default).
                                         items:
                                           type: string
                                         type: array
@@ -11909,21 +12940,20 @@ spec:
                                 reloaded.
                                 More info: https://www.pgbouncer.org/config.html#include-directive
                               items:
-                                description: Projection that may be projected along with other supported volume types
+                                description: |-
+                                  Projection that may be projected along with other supported volume types.
+                                  Exactly one of these fields must be set.
                                 properties:
                                   clusterTrustBundle:
                                     description: |-
                                       ClusterTrustBundle allows a pod to access the `.spec.trustBundle` field
                                       of ClusterTrustBundle objects in an auto-updating file.
 
-
                                       Alpha, gated by the ClusterTrustBundleProjection feature gate.
 
-
                                       ClusterTrustBundle objects can either be selected by name, or by the
                                       combination of signer name and a label selector.
 
-
                                       Kubelet performs aggressive normalization of the PEM contents written
                                       into the pod filesystem.  Esoteric PEM features such as inter-block
                                       comments and block headers are stripped.  Certificates are deduplicated.
@@ -12046,7 +13076,12 @@ spec:
                                         x-kubernetes-list-type: atomic
                                       name:
                                         default: ""
-                                        description: 'Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names'
+                                        description: |-
+                                          Name of the referent.
+                                          This field is effectively required, but due to backwards compatibility is
+                                          allowed to be empty. Instances of this type with an empty value here are
+                                          almost certainly wrong.
+                                          More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names
                                         type: string
                                       optional:
                                         description: optional specify whether the ConfigMap or its keys must be defined
@@ -12158,7 +13193,12 @@ spec:
                                         x-kubernetes-list-type: atomic
                                       name:
                                         default: ""
-                                        description: 'Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names'
+                                        description: |-
+                                          Name of the referent.
+                                          This field is effectively required, but due to backwards compatibility is
+                                          allowed to be empty. Instances of this type with an empty value here are
+                                          almost certainly wrong.
+                                          More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names
                                         type: string
                                       optional:
                                         description: optional field specify whether the Secret or its key must be defined
@@ -12278,7 +13318,12 @@ spec:
                                               type: string
                                             name:
                                               default: ""
-                                              description: 'Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names'
+                                              description: |-
+                                                Name of the referent.
+                                                This field is effectively required, but due to backwards compatibility is
+                                                allowed to be empty. Instances of this type with an empty value here are
+                                                almost certainly wrong.
+                                                More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names
                                               type: string
                                             optional:
                                               description: Specify whether the ConfigMap or its key must be defined
@@ -12332,7 +13377,12 @@ spec:
                                               type: string
                                             name:
                                               default: ""
-                                              description: 'Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names'
+                                              description: |-
+                                                Name of the referent.
+                                                This field is effectively required, but due to backwards compatibility is
+                                                allowed to be empty. Instances of this type with an empty value here are
+                                                almost certainly wrong.
+                                                More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names
                                               type: string
                                             optional:
                                               description: Specify whether the Secret or its key must be defined
@@ -12365,7 +13415,12 @@ spec:
                                       properties:
                                         name:
                                           default: ""
-                                          description: 'Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names'
+                                          description: |-
+                                            Name of the referent.
+                                            This field is effectively required, but due to backwards compatibility is
+                                            allowed to be empty. Instances of this type with an empty value here are
+                                            almost certainly wrong.
+                                            More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names
                                           type: string
                                         optional:
                                           description: Specify whether the ConfigMap must be defined
@@ -12380,7 +13435,12 @@ spec:
                                       properties:
                                         name:
                                           default: ""
-                                          description: 'Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names'
+                                          description: |-
+                                            Name of the referent.
+                                            This field is effectively required, but due to backwards compatibility is
+                                            allowed to be empty. Instances of this type with an empty value here are
+                                            almost certainly wrong.
+                                            More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names
                                           type: string
                                         optional:
                                           description: Specify whether the Secret must be defined
@@ -12654,11 +13714,11 @@ spec:
                                         format: int32
                                         type: integer
                                       service:
+                                        default: ""
                                         description: |-
                                           Service is the name of the service to place in the gRPC HealthCheckRequest
                                           (see https://github.com/grpc/grpc/blob/master/doc/health-checking.md).
 
-
                                           If this is not specified, the default behavior is defined by gRPC.
                                         type: string
                                     required:
@@ -12860,11 +13920,11 @@ spec:
                                         format: int32
                                         type: integer
                                       service:
+                                        default: ""
                                         description: |-
                                           Service is the name of the service to place in the gRPC HealthCheckRequest
                                           (see https://github.com/grpc/grpc/blob/master/doc/health-checking.md).
 
-
                                           If this is not specified, the default behavior is defined by gRPC.
                                         type: string
                                     required:
@@ -13007,11 +14067,9 @@ spec:
                                       Claims lists the names of resources, defined in spec.resourceClaims,
                                       that are used by this container.
 
-
                                       This is an alpha field and requires enabling the
                                       DynamicResourceAllocation feature gate.
 
-
                                       This field is immutable. It can only be set for containers.
                                     items:
                                       description: ResourceClaim references one entry in PodSpec.ResourceClaims.
@@ -13022,6 +14080,12 @@ spec:
                                             the Pod where this field is used. It makes that resource available
                                             inside a container.
                                           type: string
+                                        request:
+                                          description: |-
+                                            Request is the name chosen for a request in the referenced claim.
+                                            If empty, everything from the claim is made available, otherwise
+                                            only the result of this request.
+                                          type: string
                                       required:
                                         - name
                                       type: object
@@ -13143,7 +14207,7 @@ spec:
                                   procMount:
                                     description: |-
                                       procMount denotes the type of proc mount to use for the containers.
-                                      The default is DefaultProcMount which uses the container runtime defaults for
+                                      The default value is Default which uses the container runtime defaults for
                                       readonly paths and masked paths.
                                       This requires the ProcMountType feature flag to be enabled.
                                       Note that this field cannot be set when spec.os.name is windows.
@@ -13217,7 +14281,13 @@ spec:
                                           Must be set if type is "Localhost". Must NOT be set for any other type.
                                         type: string
                                       type:
-                                        description: 'type indicates which kind of seccomp profile will be applied. Valid options are: Localhost - a profile defined in a file on the node should be used. RuntimeDefault - the container runtime default profile should be used. Unconfined - no profile should be applied.'
+                                        description: |-
+                                          type indicates which kind of seccomp profile will be applied.
+                                          Valid options are:
+
+                                          Localhost - a profile defined in a file on the node should be used.
+                                          RuntimeDefault - the container runtime default profile should be used.
+                                          Unconfined - no profile should be applied.
                                         type: string
                                     required:
                                       - type
@@ -13293,11 +14363,11 @@ spec:
                                         format: int32
                                         type: integer
                                       service:
+                                        default: ""
                                         description: |-
                                           Service is the name of the service to place in the gRPC HealthCheckRequest
                                           (see https://github.com/grpc/grpc/blob/master/doc/health-checking.md).
 
-
                                           If this is not specified, the default behavior is defined by gRPC.
                                         type: string
                                     required:
@@ -13502,10 +14572,8 @@ spec:
                                         RecursiveReadOnly specifies whether read-only mounts should be handled
                                         recursively.
 
-
                                         If ReadOnly is false, this field has no meaning and must be unspecified.
 
-
                                         If ReadOnly is true, and this field is set to Disabled, the mount is not made
                                         recursively read-only.  If this field is set to IfPossible, the mount is made
                                         recursively read-only, if it is supported by the container runtime.  If this
@@ -13513,11 +14581,9 @@ spec:
                                         supported by the container runtime, otherwise the pod will not be started and
                                         an error will be generated to indicate the reason.
 
-
                                         If this field is set to IfPossible or Enabled, MountPropagation must be set to
                                         None (or be unspecified, which defaults to None).
 
-
                                         If this field is not specified, it is treated as an equivalent of Disabled.
                                       type: string
                                     subPath:
@@ -13599,7 +14665,12 @@ spec:
                               x-kubernetes-list-type: atomic
                             name:
                               default: ""
-                              description: 'Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names'
+                              description: |-
+                                Name of the referent.
+                                This field is effectively required, but due to backwards compatibility is
+                                allowed to be empty. Instances of this type with an empty value here are
+                                almost certainly wrong.
+                                More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names
                               type: string
                             optional:
                               description: optional field specify whether the Secret or its key must be defined
@@ -13664,11 +14735,9 @@ spec:
                                 Claims lists the names of resources, defined in spec.resourceClaims,
                                 that are used by this container.
 
-
                                 This is an alpha field and requires enabling the
                                 DynamicResourceAllocation feature gate.
 
-
                                 This field is immutable. It can only be set for containers.
                               items:
                                 description: ResourceClaim references one entry in PodSpec.ResourceClaims.
@@ -13679,6 +14748,12 @@ spec:
                                       the Pod where this field is used. It makes that resource available
                                       inside a container.
                                     type: string
+                                  request:
+                                    description: |-
+                                      Request is the name chosen for a request in the referenced claim.
+                                      If empty, everything from the claim is made available, otherwise
+                                      only the result of this request.
+                                    type: string
                                 required:
                                   - name
                                 type: object
@@ -13719,12 +14794,31 @@ spec:
                               enum:
                                 - Cluster
                                 - Local
+                              maxLength: 10
                               type: string
                             internalTrafficPolicy:
                               description: 'More info: https://kubernetes.io/docs/concepts/services-networking/service/#traffic-policies'
                               enum:
                                 - Cluster
                                 - Local
+                              maxLength: 10
+                              type: string
+                            ipFamilies:
+                              items:
+                                description: |-
+                                  IPFamily represents the IP Family (IPv4 or IPv6). This type is used
+                                  to express the family of an IP expressed by a type (e.g. service.spec.ipFamilies).
+                                enum:
+                                  - IPv4
+                                  - IPv6
+                                type: string
+                              type: array
+                            ipFamilyPolicy:
+                              description: 'More info: https://kubernetes.io/docs/reference/kubernetes-api/service-resources/service-v1/'
+                              enum:
+                                - SingleStack
+                                - PreferDualStack
+                                - RequireDualStack
                               type: string
                             metadata:
                               description: Metadata contains metadata for custom resources
@@ -13753,6 +14847,7 @@ spec:
                                 - ClusterIP
                                 - NodePort
                                 - LoadBalancer
+                              maxLength: 15
                               type: string
                           type: object
                         sidecars:
@@ -13769,11 +14864,9 @@ spec:
                                         Claims lists the names of resources, defined in spec.resourceClaims,
                                         that are used by this container.
 
-
                                         This is an alpha field and requires enabling the
                                         DynamicResourceAllocation feature gate.
 
-
                                         This field is immutable. It can only be set for containers.
                                       items:
                                         description: ResourceClaim references one entry in PodSpec.ResourceClaims.
@@ -13784,6 +14877,12 @@ spec:
                                               the Pod where this field is used. It makes that resource available
                                               inside a container.
                                             type: string
+                                          request:
+                                            description: |-
+                                              Request is the name chosen for a request in the referenced claim.
+                                              If empty, everything from the claim is made available, otherwise
+                                              only the result of this request.
+                                            type: string
                                         required:
                                           - name
                                         type: object
@@ -13926,7 +15025,6 @@ spec:
                                   Keys that don't exist in the incoming pod labels will
                                   be ignored. A null or empty list means only match against labelSelector.
 
-
                                   This is a beta field and requires the MatchLabelKeysInPodTopologySpread feature gate to be enabled (enabled by default).
                                 items:
                                   type: string
@@ -13966,7 +15064,6 @@ spec:
                                   Valid values are integers greater than 0.
                                   When value is not nil, WhenUnsatisfiable must be DoNotSchedule.
 
-
                                   For example, in a 3-zone cluster, MaxSkew is set to 2, MinDomains is set to 5 and pods with the same
                                   labelSelector spread as 2/2/2:
                                   | zone1 | zone2 | zone3 |
@@ -13984,7 +15081,6 @@ spec:
                                   - Honor: only nodes matching nodeAffinity/nodeSelector are included in the calculations.
                                   - Ignore: nodeAffinity/nodeSelector are ignored. All nodes are included in the calculations.
 
-
                                   If this value is nil, the behavior is equivalent to the Honor policy.
                                   This is a beta-level feature default enabled by the NodeInclusionPolicyInPodTopologySpread feature flag.
                                 type: string
@@ -13996,7 +15092,6 @@ spec:
                                   has a toleration, are included.
                                   - Ignore: node taints are ignored. All nodes are included.
 
-
                                   If this value is nil, the behavior is equivalent to the Ignore policy.
                                   This is a beta-level feature default enabled by the NodeInclusionPolicyInPodTopologySpread feature flag.
                                 type: string
@@ -14052,12 +15147,31 @@ spec:
                       enum:
                         - Cluster
                         - Local
+                      maxLength: 10
                       type: string
                     internalTrafficPolicy:
                       description: 'More info: https://kubernetes.io/docs/concepts/services-networking/service/#traffic-policies'
                       enum:
                         - Cluster
                         - Local
+                      maxLength: 10
+                      type: string
+                    ipFamilies:
+                      items:
+                        description: |-
+                          IPFamily represents the IP Family (IPv4 or IPv6). This type is used
+                          to express the family of an IP expressed by a type (e.g. service.spec.ipFamilies).
+                        enum:
+                          - IPv4
+                          - IPv6
+                        type: string
+                      type: array
+                    ipFamilyPolicy:
+                      description: 'More info: https://kubernetes.io/docs/reference/kubernetes-api/service-resources/service-v1/'
+                      enum:
+                        - SingleStack
+                        - PreferDualStack
+                        - RequireDualStack
                       type: string
                     metadata:
                       description: Metadata contains metadata for custom resources
@@ -14086,6 +15200,7 @@ spec:
                         - ClusterIP
                         - NodePort
                         - LoadBalancer
+                      maxLength: 15
                       type: string
                   type: object
                 service:
@@ -14096,12 +15211,31 @@ spec:
                       enum:
                         - Cluster
                         - Local
+                      maxLength: 10
                       type: string
                     internalTrafficPolicy:
                       description: 'More info: https://kubernetes.io/docs/concepts/services-networking/service/#traffic-policies'
                       enum:
                         - Cluster
                         - Local
+                      maxLength: 10
+                      type: string
+                    ipFamilies:
+                      items:
+                        description: |-
+                          IPFamily represents the IP Family (IPv4 or IPv6). This type is used
+                          to express the family of an IP expressed by a type (e.g. service.spec.ipFamilies).
+                        enum:
+                          - IPv4
+                          - IPv6
+                        type: string
+                      type: array
+                    ipFamilyPolicy:
+                      description: 'More info: https://kubernetes.io/docs/reference/kubernetes-api/service-resources/service-v1/'
+                      enum:
+                        - SingleStack
+                        - PreferDualStack
+                        - RequireDualStack
                       type: string
                     metadata:
                       description: Metadata contains metadata for custom resources
@@ -14130,6 +15264,7 @@ spec:
                         - ClusterIP
                         - NodePort
                         - LoadBalancer
+                      maxLength: 15
                       type: string
                   type: object
                 shutdown:
@@ -14448,7 +15583,7 @@ spec:
                                               pod labels will be ignored. The default value is empty.
                                               The same key is forbidden to exist in both matchLabelKeys and labelSelector.
                                               Also, matchLabelKeys cannot be set when labelSelector isn't set.
-                                              This is an alpha field and requires enabling MatchLabelKeysInPodAffinity feature gate.
+                                              This is a beta field and requires enabling MatchLabelKeysInPodAffinity feature gate (enabled by default).
                                             items:
                                               type: string
                                             type: array
@@ -14463,7 +15598,7 @@ spec:
                                               pod labels will be ignored. The default value is empty.
                                               The same key is forbidden to exist in both mismatchLabelKeys and labelSelector.
                                               Also, mismatchLabelKeys cannot be set when labelSelector isn't set.
-                                              This is an alpha field and requires enabling MatchLabelKeysInPodAffinity feature gate.
+                                              This is a beta field and requires enabling MatchLabelKeysInPodAffinity feature gate (enabled by default).
                                             items:
                                               type: string
                                             type: array
@@ -14624,7 +15759,7 @@ spec:
                                           pod labels will be ignored. The default value is empty.
                                           The same key is forbidden to exist in both matchLabelKeys and labelSelector.
                                           Also, matchLabelKeys cannot be set when labelSelector isn't set.
-                                          This is an alpha field and requires enabling MatchLabelKeysInPodAffinity feature gate.
+                                          This is a beta field and requires enabling MatchLabelKeysInPodAffinity feature gate (enabled by default).
                                         items:
                                           type: string
                                         type: array
@@ -14639,7 +15774,7 @@ spec:
                                           pod labels will be ignored. The default value is empty.
                                           The same key is forbidden to exist in both mismatchLabelKeys and labelSelector.
                                           Also, mismatchLabelKeys cannot be set when labelSelector isn't set.
-                                          This is an alpha field and requires enabling MatchLabelKeysInPodAffinity feature gate.
+                                          This is a beta field and requires enabling MatchLabelKeysInPodAffinity feature gate (enabled by default).
                                         items:
                                           type: string
                                         type: array
@@ -14793,7 +15928,7 @@ spec:
                                               pod labels will be ignored. The default value is empty.
                                               The same key is forbidden to exist in both matchLabelKeys and labelSelector.
                                               Also, matchLabelKeys cannot be set when labelSelector isn't set.
-                                              This is an alpha field and requires enabling MatchLabelKeysInPodAffinity feature gate.
+                                              This is a beta field and requires enabling MatchLabelKeysInPodAffinity feature gate (enabled by default).
                                             items:
                                               type: string
                                             type: array
@@ -14808,7 +15943,7 @@ spec:
                                               pod labels will be ignored. The default value is empty.
                                               The same key is forbidden to exist in both mismatchLabelKeys and labelSelector.
                                               Also, mismatchLabelKeys cannot be set when labelSelector isn't set.
-                                              This is an alpha field and requires enabling MatchLabelKeysInPodAffinity feature gate.
+                                              This is a beta field and requires enabling MatchLabelKeysInPodAffinity feature gate (enabled by default).
                                             items:
                                               type: string
                                             type: array
@@ -14969,7 +16104,7 @@ spec:
                                           pod labels will be ignored. The default value is empty.
                                           The same key is forbidden to exist in both matchLabelKeys and labelSelector.
                                           Also, matchLabelKeys cannot be set when labelSelector isn't set.
-                                          This is an alpha field and requires enabling MatchLabelKeysInPodAffinity feature gate.
+                                          This is a beta field and requires enabling MatchLabelKeysInPodAffinity feature gate (enabled by default).
                                         items:
                                           type: string
                                         type: array
@@ -14984,7 +16119,7 @@ spec:
                                           pod labels will be ignored. The default value is empty.
                                           The same key is forbidden to exist in both mismatchLabelKeys and labelSelector.
                                           Also, mismatchLabelKeys cannot be set when labelSelector isn't set.
-                                          This is an alpha field and requires enabling MatchLabelKeysInPodAffinity feature gate.
+                                          This is a beta field and requires enabling MatchLabelKeysInPodAffinity feature gate (enabled by default).
                                         items:
                                           type: string
                                         type: array
@@ -15074,21 +16209,20 @@ spec:
                                 Files allows the user to mount projected volumes into the pgAdmin
                                 container so that files can be referenced by pgAdmin as needed.
                               items:
-                                description: Projection that may be projected along with other supported volume types
+                                description: |-
+                                  Projection that may be projected along with other supported volume types.
+                                  Exactly one of these fields must be set.
                                 properties:
                                   clusterTrustBundle:
                                     description: |-
                                       ClusterTrustBundle allows a pod to access the `.spec.trustBundle` field
                                       of ClusterTrustBundle objects in an auto-updating file.
 
-
                                       Alpha, gated by the ClusterTrustBundleProjection feature gate.
 
-
                                       ClusterTrustBundle objects can either be selected by name, or by the
                                       combination of signer name and a label selector.
 
-
                                       Kubelet performs aggressive normalization of the PEM contents written
                                       into the pod filesystem.  Esoteric PEM features such as inter-block
                                       comments and block headers are stripped.  Certificates are deduplicated.
@@ -15211,7 +16345,12 @@ spec:
                                         x-kubernetes-list-type: atomic
                                       name:
                                         default: ""
-                                        description: 'Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names'
+                                        description: |-
+                                          Name of the referent.
+                                          This field is effectively required, but due to backwards compatibility is
+                                          allowed to be empty. Instances of this type with an empty value here are
+                                          almost certainly wrong.
+                                          More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names
                                         type: string
                                       optional:
                                         description: optional specify whether the ConfigMap or its keys must be defined
@@ -15323,7 +16462,12 @@ spec:
                                         x-kubernetes-list-type: atomic
                                       name:
                                         default: ""
-                                        description: 'Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names'
+                                        description: |-
+                                          Name of the referent.
+                                          This field is effectively required, but due to backwards compatibility is
+                                          allowed to be empty. Instances of this type with an empty value here are
+                                          almost certainly wrong.
+                                          More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names
                                         type: string
                                       optional:
                                         description: optional field specify whether the Secret or its key must be defined
@@ -15366,17 +16510,26 @@ spec:
                                 More info: https://www.pgadmin.org/docs/pgadmin4/latest/ldap.html
                               properties:
                                 key:
-                                  description: The key of the secret to select from.  Must be a valid secret key.
+                                  description: Name of the data field within the Secret.
+                                  maxLength: 253
+                                  minLength: 1
+                                  pattern: ^[-._a-zA-Z0-9]+$
                                   type: string
+                                  x-kubernetes-validations:
+                                    - message: cannot be "." or start with ".."
+                                      rule: self != "." && !self.startsWith("..")
                                 name:
-                                  default: ""
-                                  description: 'Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names'
+                                  description: Name of the Secret.
+                                  maxLength: 253
+                                  minLength: 1
+                                  pattern: ^[a-z0-9]([-a-z0-9]*[a-z0-9])?([.][a-z0-9]([-a-z0-9]*[a-z0-9])?)*$
                                   type: string
                                 optional:
-                                  description: Specify whether the Secret or its key must be defined
+                                  description: Whether or not the Secret or its data must be defined. Defaults to false.
                                   type: boolean
                               required:
                                 - key
+                                - name
                               type: object
                               x-kubernetes-map-type: atomic
                             settings:
@@ -15571,7 +16724,7 @@ spec:
                                 set to a Pending state, as reflected by the modifyVolumeStatus field, until such as a resource
                                 exists.
                                 More info: https://kubernetes.io/docs/concepts/storage/volume-attributes-classes/
-                                (Alpha) Using this field requires the VolumeAttributesClass feature gate to be enabled.
+                                (Beta) Using this field requires the VolumeAttributesClass feature gate to be enabled (off by default).
                               type: string
                             volumeMode:
                               description: |-
@@ -15582,6 +16735,12 @@ spec:
                               description: volumeName is the binding reference to the PersistentVolume backing this claim.
                               type: string
                           type: object
+                          x-kubernetes-map-type: atomic
+                          x-kubernetes-validations:
+                            - message: missing accessModes
+                              rule: 0 < size(self.accessModes)
+                            - message: missing storage request
+                              rule: has(self.resources.requests.storage)
                         image:
                           description: |-
                             Name of a container image that can run pgAdmin 4. Changing this value causes
@@ -15625,11 +16784,9 @@ spec:
                                 Claims lists the names of resources, defined in spec.resourceClaims,
                                 that are used by this container.
 
-
                                 This is an alpha field and requires enabling the
                                 DynamicResourceAllocation feature gate.
 
-
                                 This field is immutable. It can only be set for containers.
                               items:
                                 description: ResourceClaim references one entry in PodSpec.ResourceClaims.
@@ -15640,6 +16797,12 @@ spec:
                                       the Pod where this field is used. It makes that resource available
                                       inside a container.
                                     type: string
+                                  request:
+                                    description: |-
+                                      Request is the name chosen for a request in the referenced claim.
+                                      If empty, everything from the claim is made available, otherwise
+                                      only the result of this request.
+                                    type: string
                                 required:
                                   - name
                                 type: object
@@ -15680,12 +16843,31 @@ spec:
                               enum:
                                 - Cluster
                                 - Local
+                              maxLength: 10
                               type: string
                             internalTrafficPolicy:
                               description: 'More info: https://kubernetes.io/docs/concepts/services-networking/service/#traffic-policies'
                               enum:
                                 - Cluster
                                 - Local
+                              maxLength: 10
+                              type: string
+                            ipFamilies:
+                              items:
+                                description: |-
+                                  IPFamily represents the IP Family (IPv4 or IPv6). This type is used
+                                  to express the family of an IP expressed by a type (e.g. service.spec.ipFamilies).
+                                enum:
+                                  - IPv4
+                                  - IPv6
+                                type: string
+                              type: array
+                            ipFamilyPolicy:
+                              description: 'More info: https://kubernetes.io/docs/reference/kubernetes-api/service-resources/service-v1/'
+                              enum:
+                                - SingleStack
+                                - PreferDualStack
+                                - RequireDualStack
                               type: string
                             metadata:
                               description: Metadata contains metadata for custom resources
@@ -15714,6 +16896,7 @@ spec:
                                 - ClusterIP
                                 - NodePort
                                 - LoadBalancer
+                              maxLength: 15
                               type: string
                           type: object
                         tolerations:
@@ -15823,7 +17006,6 @@ spec:
                                   Keys that don't exist in the incoming pod labels will
                                   be ignored. A null or empty list means only match against labelSelector.
 
-
                                   This is a beta field and requires the MatchLabelKeysInPodTopologySpread feature gate to be enabled (enabled by default).
                                 items:
                                   type: string
@@ -15863,7 +17045,6 @@ spec:
                                   Valid values are integers greater than 0.
                                   When value is not nil, WhenUnsatisfiable must be DoNotSchedule.
 
-
                                   For example, in a 3-zone cluster, MaxSkew is set to 2, MinDomains is set to 5 and pods with the same
                                   labelSelector spread as 2/2/2:
                                   | zone1 | zone2 | zone3 |
@@ -15881,7 +17062,6 @@ spec:
                                   - Honor: only nodes matching nodeAffinity/nodeSelector are included in the calculations.
                                   - Ignore: nodeAffinity/nodeSelector are ignored. All nodes are included in the calculations.
 
-
                                   If this value is nil, the behavior is equivalent to the Honor policy.
                                   This is a beta-level feature default enabled by the NodeInclusionPolicyInPodTopologySpread feature flag.
                                 type: string
@@ -15893,7 +17073,6 @@ spec:
                                   has a toleration, are included.
                                   - Ignore: node taints are ignored. All nodes are included.
 
-
                                   If this value is nil, the behavior is equivalent to the Ignore policy.
                                   This is a beta-level feature default enabled by the NodeInclusionPolicyInPodTopologySpread feature flag.
                                 type: string
@@ -15957,9 +17136,6 @@ spec:
                           database from this list does NOT revoke access. This field is ignored for
                           the "postgres" user.
                         items:
-                          description: |-
-                            PostgreSQL identifiers are limited in length but may contain any character.
-                            More info: https://www.postgresql.org/docs/current/sql-syntax-lexical.html#SQL-SYNTAX-IDENTIFIERS
                           maxLength: 63
                           minLength: 1
                           type: string
@@ -15999,6 +17175,7 @@ spec:
                             enum:
                               - ASCII
                               - AlphaNumeric
+                            maxLength: 15
                             type: string
                         required:
                           - type
@@ -16065,7 +17242,7 @@ spec:
                           - Unknown
                         type: string
                       type:
-                        description: type of condition in CamelCase.
+                        description: type of condition in CamelCase or in foo.example.com/CamelCase.
                         maxLength: 316
                         pattern: ^([a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*/)?(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])$
                         type: string
diff --git a/kustomize/install/default/kustomization.yaml b/kustomize/install/default/kustomization.yaml
index 6b1da37c..6d166308 100644
--- a/kustomize/install/default/kustomization.yaml
+++ b/kustomize/install/default/kustomization.yaml
@@ -7,7 +7,7 @@ labels:
   includeTemplates: true
   pairs:
     app.kubernetes.io/name: pgo
-    app.kubernetes.io/version: 5.7.4
+    app.kubernetes.io/version: 5.8.0
 - includeSelectors: true
   includeTemplates: true
   pairs:
diff --git a/kustomize/install/manager/kustomization.yaml b/kustomize/install/manager/kustomization.yaml
index 89191c56..e62f78b9 100644
--- a/kustomize/install/manager/kustomization.yaml
+++ b/kustomize/install/manager/kustomization.yaml
@@ -8,4 +8,4 @@ resources:
 
 images:
   - name: postgres-operator
-    newName: image-postgres-operator-5.7
+    newName: image-postgres-operator-5.8
diff --git a/kustomize/install/manager/manager.yaml b/kustomize/install/manager/manager.yaml
index f4fbb352..3bab4369 100644
--- a/kustomize/install/manager/manager.yaml
+++ b/kustomize/install/manager/manager.yaml
@@ -23,10 +23,6 @@ spec:
           valueFrom: { fieldRef: { fieldPath: metadata.namespace } }
         - name: CRUNCHY_DEBUG
           value: "true"
-        - name: RELATED_IMAGE_POSTGRES_15
-          value: image-crunchy-postgres-15
-        - name: RELATED_IMAGE_POSTGRES_15_GIS_3.3
-          value: image-crunchy-postgres-15-gis-3.3
         - name: RELATED_IMAGE_POSTGRES_16
           value: image-crunchy-postgres-16
         - name: RELATED_IMAGE_POSTGRES_16_GIS_3.3
@@ -37,8 +33,8 @@ spec:
           value: image-crunchy-postgres-17
         - name: RELATED_IMAGE_POSTGRES_17_GIS_3.4
           value: image-crunchy-postgres-17-gis-3.4
-        - name: RELATED_IMAGE_PGADMIN
-          value: image-pgadmin-v4
+        - name: RELATED_IMAGE_POSTGRES_17_GIS_3.5
+          value: image-crunchy-postgres-17-gis-3.5
         - name: RELATED_IMAGE_PGBACKREST
           value: image-pgbackrest
         - name: RELATED_IMAGE_PGBOUNCER
@@ -49,6 +45,8 @@ spec:
           value: image-crunchy-upgrade
         - name: RELATED_IMAGE_STANDALONE_PGADMIN
           value: image-pgadmin
+        - name: RELATED_IMAGE_COLLECTOR
+          value: image-collector
         securityContext:
           seccompProfile:
             type: RuntimeDefault
@@ -56,6 +54,9 @@ spec:
           capabilities: { drop: [ALL] }
           readOnlyRootFilesystem: true
           runAsNonRoot: true
+        ports:
+        - containerPort: 8443
+          name: metrics
         livenessProbe:
           httpGet:
             path: /readyz
diff --git a/kustomize/install/rbac/cluster/role.yaml b/kustomize/install/rbac/cluster/role.yaml
index 1119eb0d..aa19cdac 100644
--- a/kustomize/install/rbac/cluster/role.yaml
+++ b/kustomize/install/rbac/cluster/role.yaml
@@ -5,7 +5,7 @@ metadata:
   name: postgres-operator
 rules:
 - apiGroups:
-  - ''
+  - ""
   resources:
   - configmaps
   - persistentvolumeclaims
@@ -20,7 +20,7 @@ rules:
   - patch
   - watch
 - apiGroups:
-  - ''
+  - ""
   resources:
   - endpoints
   verbs:
@@ -32,21 +32,21 @@ rules:
   - patch
   - watch
 - apiGroups:
-  - ''
+  - ""
   resources:
   - endpoints/restricted
   - pods/exec
   verbs:
   - create
 - apiGroups:
-  - ''
+  - ""
   resources:
   - events
   verbs:
   - create
   - patch
 - apiGroups:
-  - ''
+  - ""
   resources:
   - pods
   verbs:
@@ -67,6 +67,18 @@ rules:
   - list
   - patch
   - watch
+- apiGroups:
+  - authentication.k8s.io
+  resources:
+  - tokenreviews
+  verbs:
+  - create
+- apiGroups:
+  - authorization.k8s.io
+  resources:
+  - subjectaccessreviews
+  verbs:
+  - create
 - apiGroups:
   - batch
   resources:
diff --git a/kustomize/install/singlenamespace/kustomization.yaml b/kustomize/install/singlenamespace/kustomization.yaml
index 01039ddc..d8e0ccf3 100644
--- a/kustomize/install/singlenamespace/kustomization.yaml
+++ b/kustomize/install/singlenamespace/kustomization.yaml
@@ -7,7 +7,7 @@ labels:
   includeTemplates: true
   pairs:
     app.kubernetes.io/name: pgo
-    app.kubernetes.io/version: 5.7.4
+    app.kubernetes.io/version: 5.8.0
 - includeSelectors: true
   includeTemplates: true
   pairs:

From 295f2872a54d3ca33d505ddcab459b4c52049c3a Mon Sep 17 00:00:00 2001
From: Benjamin Blattberg <ben.blattberg@crunchydata.com>
Date: Wed, 2 Apr 2025 11:28:00 -0500
Subject: [PATCH 3/9] Update Postgres Helm Chart to include instrumentation
 (#299)

* Update postgres.yaml

* Update values.yaml

* Update postgres.yaml

* Apply suggestions from code review

Co-authored-by: Drew Sessler <36803518+dsessler7@users.noreply.github.com>

---------

Co-authored-by: Drew Sessler <36803518+dsessler7@users.noreply.github.com>
---
 helm/postgres/templates/postgres.yaml | 20 ++++++++++++++++++++
 helm/postgres/values.yaml             | 17 +++++++++++++++++
 2 files changed, 37 insertions(+)

diff --git a/helm/postgres/templates/postgres.yaml b/helm/postgres/templates/postgres.yaml
index 53261360..f4a861a4 100644
--- a/helm/postgres/templates/postgres.yaml
+++ b/helm/postgres/templates/postgres.yaml
@@ -185,6 +185,26 @@ spec:
 {{ toYaml .Values.monitoringConfig | indent 8 }}
         {{- end }}
   {{- end }}
+  {{- if .Values.instrumentation }}
+  instrumentation:
+    config:
+    {{- if .Values.instrumentationConfig }}
+{{ toYaml .Values.instrumentationConfig | indent 6 }}
+    {{- end }}
+    image: {{ default "" .Values.instrumentationImage | quote }}
+    logs:
+    {{- if .Values.instrumentationLogs }}
+{{ toYaml .Values.instrumentationLogs | indent 6 }}
+    {{- end }}
+    metrics:
+    {{- if .Values.instrumentationMetrics }}
+{{ toYaml .Values.instrumentationMetrics | indent 6 }}
+    {{- end }}
+    resources:
+    {{- if .Values.instrumentationResources }}
+{{ toYaml .Values.instrumentationResources | indent 6 }}
+    {{- end }}
+  {{- end }}
   {{- if .Values.shutdown }}
   shutdown: true
   {{- end }}
diff --git a/helm/postgres/values.yaml b/helm/postgres/values.yaml
index f5a096f1..957eda00 100644
--- a/helm/postgres/values.yaml
+++ b/helm/postgres/values.yaml
@@ -39,6 +39,13 @@ postgresVersion: 17
 # below.
 # monitoring: false
 
+# instrumentation enables the ability to monitor the Postgres cluster through an
+# OpenTelemetry collector. This defaults to the value below.
+# This feature is currently behind the feature gates OpenTelemetryLogs and
+# OpenTelemetryMetrics; at least one of these feature gates must be turned
+# on for `instrumentation` to be turned on.
+# instrumentation: false
+
 ###################
 # Image Overrides #
 ###################
@@ -278,6 +285,16 @@ postgresVersion: 17
 # "monitoring" setting.
 # monitoringConfig: {}
 
+# The following "instrumentation_" fields will set the specified parts of the instrumentation
+# spec. To enable instrumentation, you need to set the "instrumentation" setting to "true".
+# This feature is currently behind the feature gates OpenTelemetryMetrics and OpenTelemetryLogs.
+
+# instrumentationConfig: {}
+# instrumentationImage: ""
+# instrumentationLogs: {}
+# instrumentationMetrics: {}
+# instrumentationResources: {}
+
 #######################
 # Kubernetes Settings #
 #######################

From 152ad0afbd0169edb3ffd6bbbf070bb0ca894cbe Mon Sep 17 00:00:00 2001
From: tony-landreth <tony.landreth@crunchydata.com>
Date: Thu, 3 Apr 2025 13:05:36 -0400
Subject: [PATCH 4/9] Updates monitoring example for v5.8

---
 .../grafana/dashboards/kustomization.yaml     |   1 +
 .../grafana/dashboards/pgbouncer_direct.json  | 710 ++++++++++++++++++
 .../grafana/dashboards/pod_details.json       |  71 +-
 .../dashboards/postgresql_details.json        |  26 +-
 .../dashboards/postgresql_overview.json       |   2 +-
 .../dashboards/postgresql_service_health.json |   4 +-
 .../grafana/dashboards/prometheus_alerts.json |   6 +-
 .../grafana/dashboards/query_statistics.json  |   6 +-
 .../monitoring/prometheus/clusterrole.yaml    |   4 +
 .../config/crunchy-alert-rules-pg.yml         |   2 +-
 .../prometheus/config/prometheus.yml          |  47 +-
 11 files changed, 846 insertions(+), 33 deletions(-)
 create mode 100644 kustomize/monitoring/grafana/dashboards/pgbouncer_direct.json

diff --git a/kustomize/monitoring/grafana/dashboards/kustomization.yaml b/kustomize/monitoring/grafana/dashboards/kustomization.yaml
index 8f388d43..5764a226 100644
--- a/kustomize/monitoring/grafana/dashboards/kustomization.yaml
+++ b/kustomize/monitoring/grafana/dashboards/kustomization.yaml
@@ -11,6 +11,7 @@ configMapGenerator:
   - postgresql_service_health.json
   - prometheus_alerts.json
   - query_statistics.json
+  - pgbouncer_direct.json
 
 generatorOptions:
   disableNameSuffixHash: true
diff --git a/kustomize/monitoring/grafana/dashboards/pgbouncer_direct.json b/kustomize/monitoring/grafana/dashboards/pgbouncer_direct.json
new file mode 100644
index 00000000..68c23793
--- /dev/null
+++ b/kustomize/monitoring/grafana/dashboards/pgbouncer_direct.json
@@ -0,0 +1,710 @@
+{
+  "__inputs": [
+    {
+      "name": "DS_PROMETHEUS",
+      "label": "PROMETHEUS",
+      "description": "",
+      "type": "datasource",
+      "pluginId": "prometheus",
+      "pluginName": "Prometheus"
+    }
+  ],
+  "__requires": [
+    {
+      "type": "grafana",
+      "id": "grafana",
+      "name": "Grafana",
+      "version": "7.4.5"
+    },
+    {
+      "type": "panel",
+      "id": "graph",
+      "name": "Graph",
+      "version": ""
+    },
+    {
+      "type": "datasource",
+      "id": "prometheus",
+      "name": "Prometheus",
+      "version": "1.0.0"
+    }
+  ],  
+  "annotations": {
+    "list": [
+      {
+        "builtIn": 1,
+        "datasource": "-- Grafana --",
+        "enable": true,
+        "hide": true,
+        "iconColor": "rgba(0, 211, 255, 1)",
+        "name": "Annotations & Alerts",
+        "type": "dashboard"
+      }
+    ]
+  },
+  "editable": false,
+  "gnetId": null,
+  "graphTooltip": 0,
+  "id": null,
+  "links": [
+    {
+      "asDropdown": false,
+      "icon": "external link",
+      "includeVars": true,
+      "keepTime": true,
+      "tags": [
+      "vendor=crunchydata"
+      ],
+      "title": "",
+      "type": "dashboards"
+    }
+  ],
+  "panels": [
+    {
+    "datasource": "PROMETHEUS",
+    "fieldConfig": {
+      "defaults": {
+      "color": {
+        "mode": "palette-classic"
+      },
+      "custom": {
+        "axisBorderShow": false,
+        "axisCenteredZero": false,
+        "axisColorMode": "text",
+        "axisLabel": "",
+        "axisPlacement": "auto",
+        "barAlignment": 0,
+        "drawStyle": "line",
+        "fillOpacity": 10,
+        "gradientMode": "none",
+        "hideFrom": {
+        "legend": false,
+        "tooltip": false,
+        "viz": false
+        },
+        "insertNulls": false,
+        "lineInterpolation": "linear",
+        "lineWidth": 1,
+        "pointSize": 5,
+        "scaleDistribution": {
+        "type": "linear"
+        },
+        "showPoints": "never",
+        "spanNulls": false,
+        "stacking": {
+        "group": "A",
+        "mode": "none"
+        },
+        "thresholdsStyle": {
+        "mode": "off"
+        }
+      },
+      "links": [],
+      "mappings": [],
+      "thresholds": {
+        "mode": "absolute",
+        "steps": [
+        {
+          "color": "green",
+          "value": null
+        },
+        {
+          "color": "red",
+          "value": 80
+        }
+        ]
+      },
+      "unit": "short"
+      },
+      "overrides": []
+    },
+    "gridPos": {
+      "h": 10,
+      "w": 12,
+      "x": 0,
+      "y": 0
+    },
+    "id": 2,
+    "options": {
+      "legend": {
+      "calcs": [],
+      "displayMode": "list",
+      "placement": "bottom",
+      "showLegend": true
+      },
+      "tooltip": {
+      "mode": "multi",
+      "sort": "none"
+      }
+    },
+    "pluginVersion": "9.5.15",
+    "targets": [
+      {
+      "datasource": {
+        "type": "prometheus",
+        "uid": "${ccp_datasource}"
+      },
+      "editorMode": "code",
+      "expr": "sum(ccp_pgbouncer_pools_client_active{cluster_name=~\"[[cluster_name]]\",pod=~\"[[pgbnode]]\"})",
+      "format": "time_series",
+      "intervalFactor": 1,
+      "legendFormat": "client_active",
+      "range": true,
+      "refId": "A"
+      },
+      {
+      "datasource": {
+        "type": "prometheus",
+        "uid": "${ccp_datasource}"
+      },
+      "editorMode": "code",
+      "expr": "sum(ccp_pgbouncer_pools_client_waiting{cluster_name=~\"[[cluster_name]]\",pod=~\"[[pgbnode]]\"})",
+      "format": "time_series",
+      "intervalFactor": 1,
+      "legendFormat": "client_waiting",
+      "range": true,
+      "refId": "B"
+      },
+      {
+      "datasource": {
+        "type": "prometheus",
+        "uid": "${ccp_datasource}"
+      },
+      "editorMode": "code",
+      "expr": "sum(ccp_pgbouncer_pools_server_active{cluster_name=~\"[[cluster_name]]\",pod=~\"[[pgbnode]]\"})",
+      "format": "time_series",
+      "intervalFactor": 1,
+      "legendFormat": "server_active",
+      "range": true,
+      "refId": "C"
+      },
+      {
+      "datasource": {
+        "type": "prometheus",
+        "uid": "${ccp_datasource}"
+      },
+      "editorMode": "code",
+      "expr": "sum(ccp_pgbouncer_pools_server_idle{cluster_name=~\"[[cluster_name]]\",pod=~\"[[pgbnode]]\"})",
+      "format": "time_series",
+      "intervalFactor": 1,
+      "legendFormat": "server_idle",
+      "range": true,
+      "refId": "D"
+      },
+      {
+      "datasource": {
+        "type": "prometheus",
+        "uid": "${ccp_datasource}"
+      },
+      "editorMode": "code",
+      "expr": "sum(ccp_pgbouncer_pools_server_used{cluster_name=~\"[[cluster_name]]\",pod=~\"[[pgbnode]]\"})",
+      "format": "time_series",
+      "intervalFactor": 1,
+      "legendFormat": "server_used",
+      "range": true,
+      "refId": "E"
+      }
+    ],
+    "title": "PGBouncer Total State Counts",
+    "type": "timeseries"
+    },
+    {
+    "datasource": "PROMETHEUS",
+    "fieldConfig": {
+      "defaults": {
+      "color": {
+        "mode": "palette-classic"
+      },
+      "custom": {
+        "axisBorderShow": false,
+        "axisCenteredZero": false,
+        "axisColorMode": "text",
+        "axisLabel": "",
+        "axisPlacement": "auto",
+        "barAlignment": 0,
+        "drawStyle": "line",
+        "fillOpacity": 10,
+        "gradientMode": "none",
+        "hideFrom": {
+        "legend": false,
+        "tooltip": false,
+        "viz": false
+        },
+        "insertNulls": false,
+        "lineInterpolation": "linear",
+        "lineWidth": 1,
+        "pointSize": 5,
+        "scaleDistribution": {
+        "type": "linear"
+        },
+        "showPoints": "never",
+        "spanNulls": false,
+        "stacking": {
+        "group": "A",
+        "mode": "none"
+        },
+        "thresholdsStyle": {
+        "mode": "off"
+        }
+      },
+      "links": [],
+      "mappings": [],
+      "thresholds": {
+        "mode": "absolute",
+        "steps": [
+        {
+          "color": "green",
+          "value": null
+        },
+        {
+          "color": "red",
+          "value": 80
+        }
+        ]
+      },
+      "unit": "short"
+      },
+      "overrides": []
+    },
+    "gridPos": {
+      "h": 10,
+      "w": 12,
+      "x": 12,
+      "y": 0
+    },
+    "id": 4,
+    "options": {
+      "legend": {
+      "calcs": [],
+      "displayMode": "list",
+      "placement": "bottom",
+      "showLegend": true
+      },
+      "tooltip": {
+      "mode": "multi",
+      "sort": "none"
+      }
+    },
+    "pluginVersion": "9.5.15",
+    "targets": [
+      {
+      "datasource": {
+        "type": "prometheus",
+        "uid": "${ccp_datasource}"
+      },
+      "editorMode": "code",
+      "expr": "ccp_pgbouncer_lists_item_count{cluster_name=~\"[[cluster_name]]\",pod=~\"[[pgbnode]]\"}",
+      "format": "time_series",
+      "intervalFactor": 1,
+      "legendFormat": "{{list}}",
+      "range": true,
+      "refId": "A"
+      }
+    ],
+    "title": "PGBouncer Total Item Counts",
+    "type": "timeseries"
+    },
+    {
+    "datasource": "PROMETHEUS",
+    "fieldConfig": {
+      "defaults": {
+      "color": {
+        "mode": "palette-classic"
+      },
+      "custom": {
+        "axisBorderShow": false,
+        "axisCenteredZero": false,
+        "axisColorMode": "text",
+        "axisLabel": "",
+        "axisPlacement": "auto",
+        "barAlignment": 0,
+        "drawStyle": "line",
+        "fillOpacity": 10,
+        "gradientMode": "none",
+        "hideFrom": {
+        "legend": false,
+        "tooltip": false,
+        "viz": false
+        },
+        "insertNulls": false,
+        "lineInterpolation": "linear",
+        "lineWidth": 1,
+        "pointSize": 5,
+        "scaleDistribution": {
+        "type": "linear"
+        },
+        "showPoints": "never",
+        "spanNulls": false,
+        "stacking": {
+        "group": "A",
+        "mode": "none"
+        },
+        "thresholdsStyle": {
+        "mode": "off"
+        }
+      },
+      "links": [],
+      "mappings": [],
+      "max": 1,
+      "min": 0,
+      "thresholds": {
+        "mode": "absolute",
+        "steps": [
+        {
+          "color": "green",
+          "value": null
+        },
+        {
+          "color": "red",
+          "value": 80
+        }
+        ]
+      },
+      "unit": "percentunit"
+      },
+      "overrides": []
+    },
+    "gridPos": {
+      "h": 10,
+      "w": 8,
+      "x": 0,
+      "y": 10
+    },
+    "id": 6,
+    "options": {
+      "legend": {
+      "calcs": [],
+      "displayMode": "list",
+      "placement": "bottom",
+      "showLegend": true
+      },
+      "tooltip": {
+      "mode": "multi",
+      "sort": "none"
+      }
+    },
+    "pluginVersion": "9.5.15",
+    "targets": [
+      {
+      "datasource": {
+        "type": "prometheus",
+        "uid": "${ccp_datasource}"
+      },
+      "editorMode": "code",
+      "expr": "ccp_pgbouncer_databases_current_connections{cluster_name=~\"[[cluster_name]]\", pod=~\"[[pgbnode]]\", name=~\"[[pool]]\"} / ccp_pgbouncer_databases_pool_size{cluster_name=~\"[[cluster_name]]\", pod=~\"[[pgbnode]]\", name=~\"[[pool]]\"}",
+      "format": "time_series",
+      "intervalFactor": 1,
+      "legendFormat": "{{name}}",
+      "range": true,
+      "refId": "A"
+      }
+    ],
+    "title": "Connection % Used Per Pool ([[pool]])",
+    "type": "timeseries"
+    },
+    {
+    "datasource": "PROMETHEUS",
+    "description": "",
+    "fieldConfig": {
+      "defaults": {
+      "color": {
+        "mode": "palette-classic"
+      },
+      "custom": {
+        "axisBorderShow": false,
+        "axisCenteredZero": false,
+        "axisColorMode": "text",
+        "axisLabel": "",
+        "axisPlacement": "auto",
+        "barAlignment": 0,
+        "drawStyle": "line",
+        "fillOpacity": 10,
+        "gradientMode": "none",
+        "hideFrom": {
+        "legend": false,
+        "tooltip": false,
+        "viz": false
+        },
+        "insertNulls": false,
+        "lineInterpolation": "linear",
+        "lineWidth": 1,
+        "pointSize": 5,
+        "scaleDistribution": {
+        "type": "linear"
+        },
+        "showPoints": "never",
+        "spanNulls": false,
+        "stacking": {
+        "group": "A",
+        "mode": "none"
+        },
+        "thresholdsStyle": {
+        "mode": "off"
+        }
+      },
+      "links": [],
+      "mappings": [],
+      "thresholds": {
+        "mode": "absolute",
+        "steps": [
+        {
+          "color": "green",
+          "value": null
+        },
+        {
+          "color": "red",
+          "value": 80
+        }
+        ]
+      },
+      "unit": "short"
+      },
+      "overrides": []
+    },
+    "gridPos": {
+      "h": 10,
+      "w": 8,
+      "x": 8,
+      "y": 10
+    },
+    "id": 8,
+    "options": {
+      "legend": {
+      "calcs": [],
+      "displayMode": "list",
+      "placement": "bottom",
+      "showLegend": true
+      },
+      "tooltip": {
+      "mode": "multi",
+      "sort": "none"
+      }
+    },
+    "pluginVersion": "9.5.15",
+    "targets": [
+      {
+      "datasource": {
+        "type": "prometheus",
+        "uid": "${ccp_datasource}"
+      },
+      "editorMode": "code",
+      "expr": "sum(ccp_pgbouncer_clients_wait_seconds{cluster_name=~\"[[cluster_name]]\",pod=~\"[[pgbnode]]\", database=~\"[[pool]]\"}) by (pool,state)",
+      "format": "time_series",
+      "intervalFactor": 1,
+      "legendFormat": "{{pool}}",
+      "range": true,
+      "refId": "A"
+      }
+    ],
+    "title": "Client Connection State Counts Per Pool  ([[pool]])",
+    "type": "timeseries"
+    },
+    {
+    "datasource": "PROMETHEUS",
+    "fieldConfig": {
+      "defaults": {
+      "color": {
+        "mode": "palette-classic"
+      },
+      "custom": {
+        "axisBorderShow": false,
+        "axisCenteredZero": false,
+        "axisColorMode": "text",
+        "axisLabel": "",
+        "axisPlacement": "auto",
+        "barAlignment": 0,
+        "drawStyle": "line",
+        "fillOpacity": 10,
+        "gradientMode": "none",
+        "hideFrom": {
+        "legend": false,
+        "tooltip": false,
+        "viz": false
+        },
+        "insertNulls": false,
+        "lineInterpolation": "linear",
+        "lineWidth": 1,
+        "pointSize": 5,
+        "scaleDistribution": {
+        "type": "linear"
+        },
+        "showPoints": "never",
+        "spanNulls": false,
+        "stacking": {
+        "group": "A",
+        "mode": "none"
+        },
+        "thresholdsStyle": {
+        "mode": "off"
+        }
+      },
+      "links": [],
+      "mappings": [],
+      "thresholds": {
+        "mode": "absolute",
+        "steps": [
+        {
+          "color": "green",
+          "value": null
+        },
+        {
+          "color": "red",
+          "value": 80
+        }
+        ]
+      },
+      "unit": "short"
+      },
+      "overrides": []
+    },
+    "gridPos": {
+      "h": 10,
+      "w": 8,
+      "x": 16,
+      "y": 10
+    },
+    "id": 10,
+    "options": {
+      "legend": {
+      "calcs": [],
+      "displayMode": "list",
+      "placement": "bottom",
+      "showLegend": true
+      },
+      "tooltip": {
+      "mode": "multi",
+      "sort": "none"
+      }
+    },
+    "pluginVersion": "9.5.15",
+    "targets": [
+      {
+      "datasource": {
+        "type": "prometheus",
+        "uid": "${ccp_datasource}"
+      },
+      "editorMode": "code",
+      "expr": "sum(ccp_pgbouncer_servers_close_needed{cluster_name=~\"[[cluster_name]]\",pod=~\"[[pgbnode]]\", database=~\"[[pool]]\"}) by (state)",
+      "format": "time_series",
+      "intervalFactor": 1,
+      "legendFormat": "__auto",
+      "range": true,
+      "refId": "A"
+      }
+    ],
+    "title": "Server Connection State Counts Per Pool  ([[pool]])",
+    "type": "timeseries"
+    }
+  ],
+  "refresh": "5m",
+  "schemaVersion": 39,
+  "style": "dark",
+  "tags": [
+    "vendor=crunchydata"
+  ],
+  "templating": {
+    "list": [
+      {
+        "current": {},
+        "datasource": "PROMETHEUS",
+        "definition": "label_values(up{exp_type='pgbouncer'},cluster_name)",
+        "hide": 0,
+        "includeAll": false,
+        "label": null,
+        "multi": false,
+        "name": "cluster_name",
+        "options": [],
+        "query": {
+          "query": "label_values(up{exp_type='pgbouncer'},cluster_name)",
+          "refId": "PrometheusVariableQueryEditor-VariableQuery"
+        },
+        "refresh": 1,
+        "regex": "",
+        "skipUrlSync": false,
+        "sort": 0,
+        "tagValuesQuery": "",
+        "tags": [],
+        "tagsQuery": "",
+        "type": "query",
+        "useTags": false
+      },
+      {
+        "current": {},
+        "datasource": "PROMETHEUS",
+        "definition": "label_values(up{exp_type='pgbouncer'},pod)",
+        "hide": 0,
+        "includeAll": true,
+        "label": null,
+        "multi": false,
+        "name": "pgbnode",
+        "options": [],
+        "query": {
+          "query": "label_values(up{exp_type='pgbouncer'},pod)",
+          "refId": "PrometheusVariableQueryEditor-VariableQuery"
+        },
+        "refresh": 1,
+        "regex": "",
+        "skipUrlSync": false,
+        "sort": 0,
+        "tagValuesQuery": "",
+        "tags": [],
+        "tagsQuery": "",
+        "type": "query",
+        "useTags": false
+      },
+      {
+        "current": {
+          "selected": true,
+          "text": [
+            "All"
+          ],
+          "value": [
+            "$__all"
+          ]      
+        },
+        "datasource": "PROMETHEUS",
+        "definition": "label_values(ccp_pgbouncer_databases_pool_size{cluster_name=\"[[cluster_name]]\", pod=\"[[pgbnode]]\"},name)",
+        "hide": 0,
+        "includeAll": true,
+        "label": null,
+        "multi": false,
+        "name": "pool",
+        "options": [],
+        "query": {
+          "query": "label_values(ccp_pgbouncer_databases_pool_size{cluster_name=\"[[cluster_name]]\", pod=\"[[pgbnode]]\"},name)",
+          "refId": "PrometheusVariableQueryEditor-VariableQuery"
+        },
+        "refresh": 1,
+        "regex": "",
+        "skipUrlSync": false,
+        "sort": 0,
+        "tagValuesQuery": "",
+        "tags": [],
+        "tagsQuery": "",
+        "type": "query",
+        "useTags": false
+      }
+    ]
+  },
+  "time": {
+    "from": "now-1h",
+    "to": "now"
+  },
+  "timepicker": {
+    "time_options": [
+    "5m",
+    "15m",
+    "1h",
+    "6h",
+    "12h",
+    "24h",
+    "2d",
+    "7d",
+    "30d"
+    ]
+  },
+  "timezone": "browser",
+  "title": "PGBouncer",
+  "uid": "a7ff3775-37c9-4072-b0bc-1292f5c5841b",
+  "version": 1
+}
diff --git a/kustomize/monitoring/grafana/dashboards/pod_details.json b/kustomize/monitoring/grafana/dashboards/pod_details.json
index 8ce6d395..dd704806 100644
--- a/kustomize/monitoring/grafana/dashboards/pod_details.json
+++ b/kustomize/monitoring/grafana/dashboards/pod_details.json
@@ -59,6 +59,73 @@
     }
   ],
   "panels": [
+    {
+      "datasource": "PROMETHEUS",
+      "description": "",
+      "fieldConfig": {
+        "defaults": {
+          "color": {
+            "mode": "thresholds"
+          },
+          "mappings": [
+            {
+              "options": {
+                "2": {
+                  "index": 2,
+                  "text": "Primary"
+                },
+                "1": {
+                  "index": 1,
+                  "text": "Replica"
+                }
+              },
+              "type": "value"
+            }
+          ]
+        },
+        "overrides": []
+      },
+      "gridPos": {
+        "h": 2,
+        "w": 24,
+        "x": 0,
+        "y": 0
+      },
+      "id": 17,
+      "options": {
+        "colorMode": "none",
+        "graphMode": "none",
+        "justifyMode": "auto",
+        "orientation": "auto",
+        "reduceOptions": {
+          "calcs": [
+            "last"
+          ],
+          "fields": "",
+          "values": false
+        },
+        "text": {
+          "valueSize": 30
+        },
+        "textMode": "auto"
+      },
+      "pluginVersion": "9.2.20",
+      "targets": [
+        {
+          "datasource": "PROMETHEUS",
+          "editorMode": "code",
+          "exemplar": false,
+          "expr": "ccp_is_in_recovery_status{pod=\"[[pod]]\", pg_cluster=\"[[cluster]]\"}",
+          "format": "table",
+          "instant": true,
+          "legendFormat": "__auto",
+          "range": false,
+          "refId": "A"
+        }
+      ],
+      "title": "Pod Type",
+      "type": "stat"
+    },
     {
       "aliasColors": {
         "% Throttled": "yellow",
@@ -1129,7 +1196,7 @@
         "allValue": null,
         "current": {},
         "datasource": "PROMETHEUS",
-        "definition": "label_values({pg_cluster=\"[[cluster]]\"},pod)",
+        "definition": "label_values({pg_cluster=\"[[cluster]]\", exp_type!=\"pgbouncer\"},pod)",
         "description": null,
         "error": null,
         "hide": 0,
@@ -1139,7 +1206,7 @@
         "name": "pod",
         "options": [],
         "query": {
-          "query": "label_values({pg_cluster=\"[[cluster]]\"},pod)",
+          "query": "label_values({pg_cluster=\"[[cluster]]\", exp_type!=\"pgbouncer\"},pod)",
           "refId": "PROMETHEUS-pod-Variable-Query"
         },
         "refresh": 1,
diff --git a/kustomize/monitoring/grafana/dashboards/postgresql_details.json b/kustomize/monitoring/grafana/dashboards/postgresql_details.json
index bb81b85b..90866777 100644
--- a/kustomize/monitoring/grafana/dashboards/postgresql_details.json
+++ b/kustomize/monitoring/grafana/dashboards/postgresql_details.json
@@ -231,7 +231,7 @@
       "pluginVersion": "7.4.5",
       "targets": [
         {
-          "expr": "sum(pg_stat_activity_count{pg_cluster=\"[[cluster]]\",pod=~\"[[pod]]\",datname=~\"[[datname]]\", state=\"active\"})*100 /sum(pg_settings_max_connections{pg_cluster=\"[[cluster]]\",pod=~\"[[pod]]\"})",
+          "expr": "sum(pg_stat_activity_count{pg_cluster=\"[[cluster]]\",pod=~\"[[pod]]\",datname=~\"[[datname]]\", state=\"active\"})*100 /sum(pg_settings_max_connections{pg_cluster=\"[[cluster]]\",pod=~\"[[pod]]\"}) or sum(ccp_pg_stat_activity_count{pg_cluster=\"[[cluster]]\",pod=~\"[[pod]]\",datname=~\"[[datname]]\", state=\"active\"})*100 /sum(ccp_connection_stats_max_connections{pg_cluster=\"[[cluster]]\",pod=~\"[[pod]]\"})",
           "format": "time_series",
           "hide": false,
           "instant": true,
@@ -313,7 +313,7 @@
       "pluginVersion": "7.4.5",
       "targets": [
         {
-          "expr": "sum(pg_stat_activity_count{pg_cluster=\"[[cluster]]\",pod=~\"[[pod]]\",datname=~\"[[datname]]\",state=\"idle in transaction\"})/sum(pg_settings_max_connections{pg_cluster=\"[[cluster]]\",pod=~\"[[pod]]\"})",
+          "expr": "sum(pg_stat_activity_count{pg_cluster=\"[[cluster]]\",pod=~\"[[pod]]\",datname=~\"[[datname]]\",state=\"idle in transaction\"})/sum(pg_settings_max_connections{pg_cluster=\"[[cluster]]\",pod=~\"[[pod]]\"}) or sum(ccp_pg_stat_activity_count{pg_cluster=\"[[cluster]]\",pod=~\"[[pod]]\",datname=~\"[[datname]]\",state=\"idle in transaction\"})/sum(ccp_connection_stats_max_connections{pg_cluster=\"[[cluster]]\",pod=~\"[[pod]]\"})",
           "format": "time_series",
           "instant": true,
           "interval": "",
@@ -472,7 +472,7 @@
       "pluginVersion": "7.4.5",
       "targets": [
         {
-          "expr": "sum(pg_stat_activity_count{pg_cluster=\"[[cluster]]\",pod=~\"[[pod]]\",datname=~\"[[datname]]\",state=\"idle\"})*100/sum(pg_settings_max_connections{pg_cluster=\"[[cluster]]\",pod=~\"[[pod]]\"})",
+          "expr": "sum(pg_stat_activity_count{pg_cluster=\"[[cluster]]\",pod=~\"[[pod]]\",datname=~\"[[datname]]\",state=\"idle\"})*100/sum(pg_settings_max_connections{pg_cluster=\"[[cluster]]\",pod=~\"[[pod]]\"}) or sum(ccp_pg_stat_activity_count{pg_cluster=\"[[cluster]]\",pod=~\"[[pod]]\",datname=~\"[[datname]]\",state=\"idle\"})*100/sum(ccp_connection_stats_max_connections{pg_cluster=\"[[cluster]]\",pod=~\"[[pod]]\"})",
           "format": "time_series",
           "instant": true,
           "interval": "",
@@ -816,7 +816,7 @@
       "steppedLine": false,
       "targets": [
         {
-          "expr": "sum by (state) (pg_stat_activity_count{pg_cluster=\"[[cluster]]\",pod=~\"[[pod]]\",datname=~\"[[datname]]\",state=\"idle\"})",
+          "expr": "sum by (state) (pg_stat_activity_count{pg_cluster=\"[[cluster]]\",pod=~\"[[pod]]\",datname=~\"[[datname]]\",state=\"idle\"}) or sum by (state) (ccp_pg_stat_activity_count{pg_cluster=\"[[cluster]]\",pod=~\"[[pod]]\",datname=~\"[[datname]]\",state=\"idle\"})",
           "format": "time_series",
           "hide": false,
           "interval": "",
@@ -827,7 +827,7 @@
           "step": 2
         },
         {
-          "expr": "sum by (state) (pg_stat_activity_count{pg_cluster=\"[[cluster]]\",pod=~\"[[pod]]\",datname=~\"[[datname]]\",state=\"idle in transaction\"})",
+          "expr": "sum by (state) (pg_stat_activity_count{pg_cluster=\"[[cluster]]\",pod=~\"[[pod]]\",datname=~\"[[datname]]\",state=\"idle in transaction\"}) or sum by (state) (ccp_pg_stat_activity_count{pg_cluster=\"[[cluster]]\",pod=~\"[[pod]]\",datname=~\"[[datname]]\",state=\"idle in transaction\"})",
           "format": "time_series",
           "interval": "",
           "intervalFactor": 1,
@@ -835,7 +835,7 @@
           "refId": "B"
         },
         {
-          "expr": "sum by (state) (pg_stat_activity_count{pg_cluster=\"[[cluster]]\",pod=~\"[[pod]]\",datname=~\"[[datname]]\",state=\"active\"})",
+          "expr": "sum by (state) (pg_stat_activity_count{pg_cluster=\"[[cluster]]\",pod=~\"[[pod]]\",datname=~\"[[datname]]\",state=\"active\"}) or sum by (state) (ccp_pg_stat_activity_count{pg_cluster=\"[[cluster]]\",pod=~\"[[pod]]\",datname=~\"[[datname]]\",state=\"active\"})",
           "format": "time_series",
           "intervalFactor": 1,
           "legendFormat": "active",
@@ -1696,7 +1696,7 @@
           "format": "time_series",
           "intervalFactor": 2,
           "legendFormat": "Allocated",
-          "metric": "pg_stat_bgwriter_buffers_alloc",
+          "metric": "ccp_stat_bgwriter_buffers_alloc",
           "refId": "A",
           "step": 2
         },
@@ -1705,7 +1705,7 @@
           "format": "time_series",
           "intervalFactor": 2,
           "legendFormat": "Backend",
-          "metric": "pg_stat_bgwriter_buffers_backend",
+          "metric": "ccp_stat_bgwriter_buffers_backend",
           "refId": "B",
           "step": 2
         },
@@ -1714,7 +1714,7 @@
           "format": "time_series",
           "intervalFactor": 2,
           "legendFormat": "FSync",
-          "metric": "pg_stat_bgwriter_buffers_backend_fsync",
+          "metric": "ccp_stat_bgwriter_buffers_backend_fsync",
           "refId": "C",
           "step": 2
         },
@@ -1723,7 +1723,7 @@
           "format": "time_series",
           "intervalFactor": 2,
           "legendFormat": "CheckPoint",
-          "metric": "pg_stat_bgwriter_buffers_checkpoint",
+          "metric": "ccp_stat_bgwriter_buffers_checkpoint",
           "refId": "D",
           "step": 2
         },
@@ -1732,7 +1732,7 @@
           "format": "time_series",
           "intervalFactor": 2,
           "legendFormat": "Clean",
-          "metric": "pg_stat_bgwriter_buffers_clean",
+          "metric": "ccp_stat_bgwriter_buffers_clean",
           "refId": "E",
           "step": 2
         }
@@ -2071,7 +2071,7 @@
         "allValue": ".*",
         "current": {},
         "datasource": "PROMETHEUS",
-        "definition": "label_values({pg_cluster=\"[[cluster]]\"},pod)",
+        "definition": "label_values({pg_cluster=\"[[cluster]]\", exp_type!=\"pgbouncer\"},pod)",
         "description": null,
         "error": null,
         "hide": 0,
@@ -2081,7 +2081,7 @@
         "name": "pod",
         "options": [],
         "query": {
-          "query": "label_values({pg_cluster=\"[[cluster]]\"},pod)",
+          "query": "label_values({pg_cluster=\"[[cluster]]\", exp_type!=\"pgbouncer\"},pod)",
           "refId": "PROMETHEUS-pod-Variable-Query"
         },
         "refresh": 1,
diff --git a/kustomize/monitoring/grafana/dashboards/postgresql_overview.json b/kustomize/monitoring/grafana/dashboards/postgresql_overview.json
index 61c2486f..b965463f 100644
--- a/kustomize/monitoring/grafana/dashboards/postgresql_overview.json
+++ b/kustomize/monitoring/grafana/dashboards/postgresql_overview.json
@@ -163,7 +163,7 @@
       "targets": [
         {
           "$hashKey": "object:243",
-          "expr": "sum(pg_up{pg_cluster=~\"$cluster\"})*100+sum(ccp_is_in_recovery_status{pg_cluster=~\"$cluster\"})",
+          "expr": "sum(pg_up{pg_cluster=~\"$cluster\"})*100+sum(ccp_is_in_recovery_status{pg_cluster=~\"$cluster\"}) or sum(up{pg_cluster=~\"$cluster\"})*100+sum(ccp_is_in_recovery_status{pg_cluster=~\"$cluster\"})",
           "format": "time_series",
           "interval": "",
           "intervalFactor": 1,
diff --git a/kustomize/monitoring/grafana/dashboards/postgresql_service_health.json b/kustomize/monitoring/grafana/dashboards/postgresql_service_health.json
index 2bee1d0b..de4f7fa1 100644
--- a/kustomize/monitoring/grafana/dashboards/postgresql_service_health.json
+++ b/kustomize/monitoring/grafana/dashboards/postgresql_service_health.json
@@ -600,7 +600,7 @@
         "allValue": null,
         "current": {},
         "datasource": "PROMETHEUS",
-        "definition": "label_values({pg_cluster=\"[[cluster]]\"},role)",
+        "definition": "label_values({pg_cluster=\"[[cluster]]\", exp_type!=\"pgbouncer\"},role)",
         "description": null,
         "error": null,
         "hide": 0,
@@ -610,7 +610,7 @@
         "name": "role",
         "options": [],
         "query": {
-          "query": "label_values({pg_cluster=\"[[cluster]]\"},role)",
+          "query": "label_values({pg_cluster=\"[[cluster]]\", exp_type!=\"pgbouncer\"},role)",
           "refId": "PROMETHEUS-role-Variable-Query"
         },
         "refresh": 1,
diff --git a/kustomize/monitoring/grafana/dashboards/prometheus_alerts.json b/kustomize/monitoring/grafana/dashboards/prometheus_alerts.json
index ef8fb41a..f41aa481 100644
--- a/kustomize/monitoring/grafana/dashboards/prometheus_alerts.json
+++ b/kustomize/monitoring/grafana/dashboards/prometheus_alerts.json
@@ -136,7 +136,7 @@
       "pluginVersion": "7.4.5",
       "targets": [
         {
-          "expr": "count(count by (kubernetes_namespace) (pg_up))",
+          "expr": "count(count by (kubernetes_namespace) (pg_up)) or count(count by (kubernetes_namespace) (up))",
           "format": "time_series",
           "instant": true,
           "interval": "",
@@ -208,7 +208,7 @@
       "pluginVersion": "7.4.5",
       "targets": [
         {
-          "expr": "count(count by (pg_cluster) (pg_up))",
+          "expr": "count(count by (pg_cluster) (pg_up)) or count(count by (pg_cluster) (up))",
           "format": "time_series",
           "instant": true,
           "interval": "",
@@ -280,7 +280,7 @@
       "pluginVersion": "7.4.5",
       "targets": [
         {
-          "expr": "count(pg_up)",
+          "expr": "count(pg_up) or count(up)",
           "format": "time_series",
           "instant": true,
           "interval": "",
diff --git a/kustomize/monitoring/grafana/dashboards/query_statistics.json b/kustomize/monitoring/grafana/dashboards/query_statistics.json
index a17b06ed..72f67122 100644
--- a/kustomize/monitoring/grafana/dashboards/query_statistics.json
+++ b/kustomize/monitoring/grafana/dashboards/query_statistics.json
@@ -996,7 +996,7 @@
           "refId": "A"
         }
       ],
-      "title": "Query Total WAL Genterated (Bytes)",
+      "title": "Query Total WAL Generated (Bytes)",
       "transformations": [
         {
           "id": "organize",
@@ -1068,7 +1068,7 @@
         "allValue": null,
         "current": {},
         "datasource": "PROMETHEUS",
-        "definition": "label_values({pg_cluster=\"[[cluster]]\"},role)",
+        "definition": "label_values({pg_cluster=\"[[cluster]]\", exp_type!=\"pgbouncer\"},role)",
         "description": null,
         "error": null,
         "hide": 0,
@@ -1078,7 +1078,7 @@
         "name": "role",
         "options": [],
         "query": {
-          "query": "label_values({pg_cluster=\"[[cluster]]\"},role)",
+          "query": "label_values({pg_cluster=\"[[cluster]]\", exp_type!=\"pgbouncer\"},role)",
           "refId": "StandardVariableQuery"
         },
         "refresh": 2,
diff --git a/kustomize/monitoring/prometheus/clusterrole.yaml b/kustomize/monitoring/prometheus/clusterrole.yaml
index 784b6400..a2ef2748 100644
--- a/kustomize/monitoring/prometheus/clusterrole.yaml
+++ b/kustomize/monitoring/prometheus/clusterrole.yaml
@@ -11,3 +11,7 @@ rules:
   - get
   - list
   - watch
+- nonResourceURLs:
+  - /metrics
+  verbs:
+  - get
diff --git a/kustomize/monitoring/prometheus/config/crunchy-alert-rules-pg.yml b/kustomize/monitoring/prometheus/config/crunchy-alert-rules-pg.yml
index 0ccd9e3d..83f666e4 100644
--- a/kustomize/monitoring/prometheus/config/crunchy-alert-rules-pg.yml
+++ b/kustomize/monitoring/prometheus/config/crunchy-alert-rules-pg.yml
@@ -35,7 +35,7 @@ groups:
 
 ########## POSTGRESQL RULES ##########
   - alert: PGIsUp
-    expr: pg_up < 1
+    expr: "pg_up < 1 or up < 1"
     for: 60s
     labels:
       service: postgresql
diff --git a/kustomize/monitoring/prometheus/config/prometheus.yml b/kustomize/monitoring/prometheus/config/prometheus.yml
index 89a627bb..4c0be18b 100644
--- a/kustomize/monitoring/prometheus/config/prometheus.yml
+++ b/kustomize/monitoring/prometheus/config/prometheus.yml
@@ -10,6 +10,27 @@ global:
   evaluation_interval: 5s
 
 scrape_configs:
+- job_name: 'pgo-metrics'
+  # If you are running CPK v5.7 or earlier, you will need to change the scheme to 'http'
+  # and add a metrics port to the postgres-operator deployment that exposes port 8080.
+  scheme: https
+  authorization:
+    type: Bearer
+    credentials_file: /var/run/secrets/kubernetes.io/serviceaccount/token
+  tls_config:
+    # By default, the operator's metrics server automatically creates self-signed certs
+    # which cannot be verified, so `insecure_skip_verify` is set to `true`. See the
+    # documentation for providing your own signed certificates.
+    insecure_skip_verify: true
+  kubernetes_sd_configs:
+  - role: pod
+    selectors:
+    - role: pod
+      # Our kustomize installer sets this label to "postgres-operator"
+      # but our Helm installer sets this label to the name of the installation
+      # therefore we just check for the existence of this label.
+      label: postgres-operator.crunchydata.com/control-plane
+
 - job_name: 'crunchy-postgres-exporter'
   kubernetes_sd_configs:
   - role: pod
@@ -42,13 +63,12 @@ scrape_configs:
   - source_labels: [__meta_kubernetes_pod_label_postgres_operator_crunchydata_com_role]
     target_label: role
 
-- job_name: 'crunchy-postgres-exporter-v4'
+- job_name: 'crunchy-otel-collector'
   kubernetes_sd_configs:
   - role: pod
     selectors:
     - role: pod
-      label: crunchy-postgres-exporter=true
-
+      label: postgres-operator.crunchydata.com/crunchy-otel-collector=true
   relabel_configs:
   # Keep exporter port and drop all others
   - source_labels: [__meta_kubernetes_pod_container_port_number]
@@ -61,19 +81,30 @@ scrape_configs:
   - source_labels: [__meta_kubernetes_pod_name]
     target_label: pod
   # Convert namespace and cluster name to pg_cluster=namespace:cluster
-  - source_labels: [__meta_kubernetes_namespace,__meta_kubernetes_pod_label_pg_cluster]
+  - source_labels: [__meta_kubernetes_namespace,__meta_kubernetes_pod_label_postgres_operator_crunchydata_com_cluster]
     target_label: pg_cluster
     separator: ":"
     replacement: '$1$2'
   # Convert kubernetes pod ip to ip
   - source_labels: [__meta_kubernetes_pod_ip]
     target_label: ip
-  # Set deployment_name as deployment label
-  - source_labels: [__meta_kubernetes_pod_label_deployment_name]
+  # Convert postgres-operator.crunchydata.com/instance to deployment
+  - source_labels: [__meta_kubernetes_pod_label_postgres_operator_crunchydata_com_instance]
     target_label: deployment
-  # Set label for role
-  - source_labels: [__meta_kubernetes_pod_label_role]
+  # Convert postgres-operator.crunchydata.com/role to role
+  - source_labels: [__meta_kubernetes_pod_label_postgres_operator_crunchydata_com_role]
     target_label: role
+  # The following relabels should make it easier to use pgMonitor dashboards.
+  # Note: The following was added for the pgBouncer dashboard and what labels it requires.
+  # For pgBouncer, `exp_type` should be equal to role.
+  - source_labels: [__meta_kubernetes_pod_label_postgres_operator_crunchydata_com_role]
+    target_label: exp_type
+  # `cluster_name` is equivalent to `pg_cluster`
+  - source_labels: [__meta_kubernetes_namespace,__meta_kubernetes_pod_label_postgres_operator_crunchydata_com_cluster]
+    target_label: cluster_name
+    separator: ":"
+    replacement: '$1$2'
+
 rule_files:
   - /etc/prometheus/alert-rules.d/*.yml
 alerting:

From 0f684e7688f96137f3eebba91d4f443eaaa91021 Mon Sep 17 00:00:00 2001
From: Benjamin Blattberg <ben.blattberg@crunchydata.com>
Date: Fri, 18 Apr 2025 13:51:36 -0500
Subject: [PATCH 5/9] Update for 2025-04 minor release (#302)

---
 helm/install/Chart.yaml                       |  4 +--
 ...crunchydata.com_crunchybridgeclusters.yaml |  2 +-
 ...res-operator.crunchydata.com_pgadmins.yaml |  2 +-
 ...s-operator.crunchydata.com_pgupgrades.yaml |  2 +-
 ...ator.crunchydata.com_postgresclusters.yaml |  2 +-
 helm/install/values.yaml                      | 26 +++++++++---------
 .../images-by-tag/kustomization.yaml          | 27 +++++++++----------
 ...crunchydata.com_crunchybridgeclusters.yaml |  2 +-
 ...res-operator.crunchydata.com_pgadmins.yaml |  2 +-
 ...s-operator.crunchydata.com_pgupgrades.yaml |  2 +-
 ...ator.crunchydata.com_postgresclusters.yaml |  2 +-
 kustomize/install/default/kustomization.yaml  |  2 +-
 kustomize/install/manager/manager.yaml        |  2 +-
 .../singlenamespace/kustomization.yaml        |  2 +-
 14 files changed, 38 insertions(+), 41 deletions(-)

diff --git a/helm/install/Chart.yaml b/helm/install/Chart.yaml
index 2ca0eabc..9834cf9e 100644
--- a/helm/install/Chart.yaml
+++ b/helm/install/Chart.yaml
@@ -4,5 +4,5 @@ description: Installer for PGO, the open source Postgres Operator from Crunchy D
 
 type: application
 # The version below should match the version on the PostgresCluster CRD
-version: 5.8.0
-appVersion: 5.8.0
+version: 5.8.1
+appVersion: 5.8.1
diff --git a/helm/install/crds/postgres-operator.crunchydata.com_crunchybridgeclusters.yaml b/helm/install/crds/postgres-operator.crunchydata.com_crunchybridgeclusters.yaml
index d39a89b2..8f401bdd 100644
--- a/helm/install/crds/postgres-operator.crunchydata.com_crunchybridgeclusters.yaml
+++ b/helm/install/crds/postgres-operator.crunchydata.com_crunchybridgeclusters.yaml
@@ -5,7 +5,7 @@ metadata:
     controller-gen.kubebuilder.io/version: v0.17.2
   name: crunchybridgeclusters.postgres-operator.crunchydata.com
   labels:
-    app.kubernetes.io/version: 5.8.0
+    app.kubernetes.io/version: 5.8.1
 spec:
   group: postgres-operator.crunchydata.com
   names:
diff --git a/helm/install/crds/postgres-operator.crunchydata.com_pgadmins.yaml b/helm/install/crds/postgres-operator.crunchydata.com_pgadmins.yaml
index 48ca7e75..1b922e86 100644
--- a/helm/install/crds/postgres-operator.crunchydata.com_pgadmins.yaml
+++ b/helm/install/crds/postgres-operator.crunchydata.com_pgadmins.yaml
@@ -5,7 +5,7 @@ metadata:
     controller-gen.kubebuilder.io/version: v0.17.2
   name: pgadmins.postgres-operator.crunchydata.com
   labels:
-    app.kubernetes.io/version: 5.8.0
+    app.kubernetes.io/version: 5.8.1
 spec:
   group: postgres-operator.crunchydata.com
   names:
diff --git a/helm/install/crds/postgres-operator.crunchydata.com_pgupgrades.yaml b/helm/install/crds/postgres-operator.crunchydata.com_pgupgrades.yaml
index e8c3190f..115309c6 100644
--- a/helm/install/crds/postgres-operator.crunchydata.com_pgupgrades.yaml
+++ b/helm/install/crds/postgres-operator.crunchydata.com_pgupgrades.yaml
@@ -5,7 +5,7 @@ metadata:
     controller-gen.kubebuilder.io/version: v0.17.2
   name: pgupgrades.postgres-operator.crunchydata.com
   labels:
-    app.kubernetes.io/version: 5.8.0
+    app.kubernetes.io/version: 5.8.1
 spec:
   group: postgres-operator.crunchydata.com
   names:
diff --git a/helm/install/crds/postgres-operator.crunchydata.com_postgresclusters.yaml b/helm/install/crds/postgres-operator.crunchydata.com_postgresclusters.yaml
index ad20f580..b015af2d 100644
--- a/helm/install/crds/postgres-operator.crunchydata.com_postgresclusters.yaml
+++ b/helm/install/crds/postgres-operator.crunchydata.com_postgresclusters.yaml
@@ -5,7 +5,7 @@ metadata:
     controller-gen.kubebuilder.io/version: v0.17.2
   name: postgresclusters.postgres-operator.crunchydata.com
   labels:
-    app.kubernetes.io/version: 5.8.0
+    app.kubernetes.io/version: 5.8.1
 spec:
   group: postgres-operator.crunchydata.com
   names:
diff --git a/helm/install/values.yaml b/helm/install/values.yaml
index 2cf9c7ae..f38b0920 100644
--- a/helm/install/values.yaml
+++ b/helm/install/values.yaml
@@ -2,34 +2,34 @@
 # controllerImages are used to run the operator's controllers.
 # The cluster image defined below runs the PostgresCluster and PGUpgrade controllers.
 controllerImages:
-  cluster: registry.developers.crunchydata.com/crunchydata/postgres-operator:ubi9-5.8.0-0
+  cluster: registry.developers.crunchydata.com/crunchydata/postgres-operator:ubi9-5.8.1-0
 
 # relatedImages are used when an image is omitted from PostgresCluster, PGAdmin or PGUpgrade specs.
 relatedImages:
   postgres_17:
-    image: registry.developers.crunchydata.com/crunchydata/crunchy-postgres:ubi9-17.4-2513
+    image: registry.developers.crunchydata.com/crunchydata/crunchy-postgres:ubi9-17.4-2516
   postgres_17_gis_3.5:
-    image: registry.developers.crunchydata.com/crunchydata/crunchy-postgres-gis:ubi9-17.4-3.5-2513
+    image: registry.developers.crunchydata.com/crunchydata/crunchy-postgres-gis:ubi9-17.4-3.5-2516
   postgres_17_gis_3.4:
-    image: registry.developers.crunchydata.com/crunchydata/crunchy-postgres-gis:ubi9-17.4-3.4-2513
+    image: registry.developers.crunchydata.com/crunchydata/crunchy-postgres-gis:ubi9-17.4-3.4-2516
   postgres_16:
-    image: registry.developers.crunchydata.com/crunchydata/crunchy-postgres:ubi9-16.8-2513
+    image: registry.developers.crunchydata.com/crunchydata/crunchy-postgres:ubi9-16.8-2516
   postgres_16_gis_3.4:
-    image: registry.developers.crunchydata.com/crunchydata/crunchy-postgres-gis:ubi9-16.8-3.4-2513
+    image: registry.developers.crunchydata.com/crunchydata/crunchy-postgres-gis:ubi9-16.8-3.4-2516
   postgres_16_gis_3.3:
-    image: registry.developers.crunchydata.com/crunchydata/crunchy-postgres-gis:ubi9-16.8-3.3-2513
+    image: registry.developers.crunchydata.com/crunchydata/crunchy-postgres-gis:ubi9-16.8-3.3-2516
   pgbackrest:
-    image: registry.developers.crunchydata.com/crunchydata/crunchy-pgbackrest:ubi9-2.54.2-2513
+    image: registry.developers.crunchydata.com/crunchydata/crunchy-pgbackrest:ubi9-2.54.2-2516
   pgbouncer:
-    image: registry.developers.crunchydata.com/crunchydata/crunchy-pgbouncer:ubi9-1.24-2513
+    image: registry.developers.crunchydata.com/crunchydata/crunchy-pgbouncer:ubi9-1.24-2516
   pgexporter:
-    image: registry.developers.crunchydata.com/crunchydata/crunchy-postgres-exporter:ubi9-0.16.0-2513
+    image: registry.developers.crunchydata.com/crunchydata/crunchy-postgres-exporter:ubi9-0.17.1-2516
   pgupgrade:
-    image: registry.developers.crunchydata.com/crunchydata/crunchy-upgrade:ubi9-17.4-2513
+    image: registry.developers.crunchydata.com/crunchydata/crunchy-upgrade:ubi9-17.4-2516
   standalone_pgadmin:
-    image: registry.developers.crunchydata.com/crunchydata/crunchy-pgadmin4:ubi9-9.1-2513
+    image: registry.developers.crunchydata.com/crunchydata/crunchy-pgadmin4:ubi9-9.2-2516
   collector:
-    image: registry.developers.crunchydata.com/crunchydata/postgres-operator:ubi9-5.8.0-0
+    image: registry.developers.crunchydata.com/crunchydata/postgres-operator:ubi9-5.8.1-0
 
 # singleNamespace controls where PGO watches for PostgresClusters. When false,
 # PGO watches for and responds to PostgresClusters in all namespaces. When true,
diff --git a/kustomize/install/components/images-by-tag/kustomization.yaml b/kustomize/install/components/images-by-tag/kustomization.yaml
index 861c3dfe..4affeac2 100644
--- a/kustomize/install/components/images-by-tag/kustomization.yaml
+++ b/kustomize/install/components/images-by-tag/kustomization.yaml
@@ -2,40 +2,37 @@ kind: Component
 images:
 - name: image-pgadmin
   newName: registry.developers.crunchydata.com/crunchydata/crunchy-pgadmin4
-  newTag: ubi9-9.1-2513
+  newTag: ubi9-9.2-2516
 - name: image-pgbackrest
   newName: registry.developers.crunchydata.com/crunchydata/crunchy-pgbackrest
-  newTag: ubi9-2.54.2-2513
+  newTag: ubi9-2.54.2-2516
 - name: image-pgbouncer
   newName: registry.developers.crunchydata.com/crunchydata/crunchy-pgbouncer
-  newTag: ubi9-1.24-2513
+  newTag: ubi9-1.24-2516
 - name: image-postgres-exporter
   newName: registry.developers.crunchydata.com/crunchydata/crunchy-postgres-exporter
-  newTag: ubi9-0.16.0-2513
+  newTag: ubi9-0.17.1-2516
 - name: image-postgres-operator-5.8
   newName: registry.developers.crunchydata.com/crunchydata/postgres-operator
-  newTag: ubi9-5.8.0-0
+  newTag: ubi9-5.8.1-0
 - name: image-crunchy-postgres-16
   newName: registry.developers.crunchydata.com/crunchydata/crunchy-postgres
-  newTag: ubi9-16.8-2513
+  newTag: ubi9-16.8-2516
 - name: image-crunchy-postgres-17
   newName: registry.developers.crunchydata.com/crunchydata/crunchy-postgres
-  newTag: ubi9-17.4-2513
+  newTag: ubi9-17.4-2516
 - name: image-crunchy-upgrade
   newName: registry.developers.crunchydata.com/crunchydata/crunchy-upgrade
-  newTag: ubi9-17.4-2513
+  newTag: ubi9-17.4-2516
 - name: image-crunchy-postgres-16-gis-3.3
   newName: registry.developers.crunchydata.com/crunchydata/crunchy-postgres-gis
-  newTag: ubi9-16.8-3.3-2513
+  newTag: ubi9-16.8-3.3-2516
 - name: image-crunchy-postgres-16-gis-3.4
   newName: registry.developers.crunchydata.com/crunchydata/crunchy-postgres-gis
-  newTag: ubi9-16.8-3.4-2513
+  newTag: ubi9-16.8-3.4-2516
 - name: image-crunchy-postgres-17-gis-3.4
   newName: registry.developers.crunchydata.com/crunchydata/crunchy-postgres-gis
-  newTag: ubi9-17.4-3.4-2513
+  newTag: ubi9-17.4-3.4-2516
 - name: image-crunchy-postgres-17-gis-3.5
   newName: registry.developers.crunchydata.com/crunchydata/crunchy-postgres-gis
-  newTag: ubi9-17.4-3.5-2513
-- name: image-collector
-  newName: registry.developers.crunchydata.com/crunchydata/postgres-operator
-  newTag: ubi9-5.8.0-0
+  newTag: ubi9-17.4-3.5-2516
diff --git a/kustomize/install/crd/bases/postgres-operator.crunchydata.com_crunchybridgeclusters.yaml b/kustomize/install/crd/bases/postgres-operator.crunchydata.com_crunchybridgeclusters.yaml
index d39a89b2..8f401bdd 100644
--- a/kustomize/install/crd/bases/postgres-operator.crunchydata.com_crunchybridgeclusters.yaml
+++ b/kustomize/install/crd/bases/postgres-operator.crunchydata.com_crunchybridgeclusters.yaml
@@ -5,7 +5,7 @@ metadata:
     controller-gen.kubebuilder.io/version: v0.17.2
   name: crunchybridgeclusters.postgres-operator.crunchydata.com
   labels:
-    app.kubernetes.io/version: 5.8.0
+    app.kubernetes.io/version: 5.8.1
 spec:
   group: postgres-operator.crunchydata.com
   names:
diff --git a/kustomize/install/crd/bases/postgres-operator.crunchydata.com_pgadmins.yaml b/kustomize/install/crd/bases/postgres-operator.crunchydata.com_pgadmins.yaml
index 48ca7e75..1b922e86 100644
--- a/kustomize/install/crd/bases/postgres-operator.crunchydata.com_pgadmins.yaml
+++ b/kustomize/install/crd/bases/postgres-operator.crunchydata.com_pgadmins.yaml
@@ -5,7 +5,7 @@ metadata:
     controller-gen.kubebuilder.io/version: v0.17.2
   name: pgadmins.postgres-operator.crunchydata.com
   labels:
-    app.kubernetes.io/version: 5.8.0
+    app.kubernetes.io/version: 5.8.1
 spec:
   group: postgres-operator.crunchydata.com
   names:
diff --git a/kustomize/install/crd/bases/postgres-operator.crunchydata.com_pgupgrades.yaml b/kustomize/install/crd/bases/postgres-operator.crunchydata.com_pgupgrades.yaml
index e8c3190f..115309c6 100644
--- a/kustomize/install/crd/bases/postgres-operator.crunchydata.com_pgupgrades.yaml
+++ b/kustomize/install/crd/bases/postgres-operator.crunchydata.com_pgupgrades.yaml
@@ -5,7 +5,7 @@ metadata:
     controller-gen.kubebuilder.io/version: v0.17.2
   name: pgupgrades.postgres-operator.crunchydata.com
   labels:
-    app.kubernetes.io/version: 5.8.0
+    app.kubernetes.io/version: 5.8.1
 spec:
   group: postgres-operator.crunchydata.com
   names:
diff --git a/kustomize/install/crd/bases/postgres-operator.crunchydata.com_postgresclusters.yaml b/kustomize/install/crd/bases/postgres-operator.crunchydata.com_postgresclusters.yaml
index ad20f580..b015af2d 100644
--- a/kustomize/install/crd/bases/postgres-operator.crunchydata.com_postgresclusters.yaml
+++ b/kustomize/install/crd/bases/postgres-operator.crunchydata.com_postgresclusters.yaml
@@ -5,7 +5,7 @@ metadata:
     controller-gen.kubebuilder.io/version: v0.17.2
   name: postgresclusters.postgres-operator.crunchydata.com
   labels:
-    app.kubernetes.io/version: 5.8.0
+    app.kubernetes.io/version: 5.8.1
 spec:
   group: postgres-operator.crunchydata.com
   names:
diff --git a/kustomize/install/default/kustomization.yaml b/kustomize/install/default/kustomization.yaml
index 6d166308..7c0d7111 100644
--- a/kustomize/install/default/kustomization.yaml
+++ b/kustomize/install/default/kustomization.yaml
@@ -7,7 +7,7 @@ labels:
   includeTemplates: true
   pairs:
     app.kubernetes.io/name: pgo
-    app.kubernetes.io/version: 5.8.0
+    app.kubernetes.io/version: 5.8.1
 - includeSelectors: true
   includeTemplates: true
   pairs:
diff --git a/kustomize/install/manager/manager.yaml b/kustomize/install/manager/manager.yaml
index 3bab4369..1828e059 100644
--- a/kustomize/install/manager/manager.yaml
+++ b/kustomize/install/manager/manager.yaml
@@ -46,7 +46,7 @@ spec:
         - name: RELATED_IMAGE_STANDALONE_PGADMIN
           value: image-pgadmin
         - name: RELATED_IMAGE_COLLECTOR
-          value: image-collector
+          value: image-postgres-operator-5.8
         securityContext:
           seccompProfile:
             type: RuntimeDefault
diff --git a/kustomize/install/singlenamespace/kustomization.yaml b/kustomize/install/singlenamespace/kustomization.yaml
index d8e0ccf3..fc190a64 100644
--- a/kustomize/install/singlenamespace/kustomization.yaml
+++ b/kustomize/install/singlenamespace/kustomization.yaml
@@ -7,7 +7,7 @@ labels:
   includeTemplates: true
   pairs:
     app.kubernetes.io/name: pgo
-    app.kubernetes.io/version: 5.8.0
+    app.kubernetes.io/version: 5.8.1
 - includeSelectors: true
   includeTemplates: true
   pairs:

From 395b659d475c1804c00c689b3c1b66a657fbe13d Mon Sep 17 00:00:00 2001
From: Dan T <96055340+Dan0x54@users.noreply.github.com>
Date: Tue, 6 May 2025 18:47:48 +0100
Subject: [PATCH 6/9] Added Helm support for Affinity and Tolerations (#304)

* Added support for tolerations / affinity to Helm chart with consistent flow control
---
 helm/install/templates/manager.yaml | 8 ++++++++
 helm/install/values.yaml            | 6 ++++++
 2 files changed, 14 insertions(+)

diff --git a/helm/install/templates/manager.yaml b/helm/install/templates/manager.yaml
index 8bae42ba..7e7066fc 100644
--- a/helm/install/templates/manager.yaml
+++ b/helm/install/templates/manager.yaml
@@ -64,3 +64,11 @@ spec:
             port: 8081
           initialDelaySeconds: 5
           periodSeconds: 10
+      {{- if .Values.tolerations }}
+      tolerations:
+        {{- toYaml .Values.tolerations | nindent 8 }}
+      {{- end }}
+      {{- if .Values.affinity }}
+      affinity:
+        {{- toYaml .Values.affinity | nindent 8 }}
+      {{- end }}
diff --git a/helm/install/values.yaml b/helm/install/values.yaml
index f38b0920..a66d1efd 100644
--- a/helm/install/values.yaml
+++ b/helm/install/values.yaml
@@ -87,3 +87,9 @@ resources:
 # envOverride:
 #   - name: PG_DEBUG
 #     value: "true"
+
+# tolerations allows you to define pod tolerations for the operator pods.
+tolerations: []
+
+# affinity allows you to define pod affinity and anti-affinity rules for the operator pods.
+affinity: {}
\ No newline at end of file

From 37732f45fbbdc09aa8302b0972277a2dc4085169 Mon Sep 17 00:00:00 2001
From: jmckulk <joseph.mckulka@crunchydata.com>
Date: Thu, 15 May 2025 15:38:42 -0400
Subject: [PATCH 7/9] update for release

---
 helm/install/Chart.yaml                       |  4 +--
 ...crunchydata.com_crunchybridgeclusters.yaml |  2 +-
 ...res-operator.crunchydata.com_pgadmins.yaml |  2 +-
 ...s-operator.crunchydata.com_pgupgrades.yaml |  2 +-
 ...ator.crunchydata.com_postgresclusters.yaml | 30 +++++++++++++++----
 helm/install/templates/manager.yaml           |  2 +-
 helm/install/values.yaml                      | 30 +++++++++----------
 .../images-by-tag/kustomization.yaml          | 24 +++++++--------
 ...crunchydata.com_crunchybridgeclusters.yaml |  2 +-
 ...res-operator.crunchydata.com_pgadmins.yaml |  2 +-
 ...s-operator.crunchydata.com_pgupgrades.yaml |  2 +-
 ...ator.crunchydata.com_postgresclusters.yaml | 30 +++++++++++++++----
 kustomize/install/default/kustomization.yaml  |  2 +-
 .../singlenamespace/kustomization.yaml        |  2 +-
 14 files changed, 86 insertions(+), 50 deletions(-)

diff --git a/helm/install/Chart.yaml b/helm/install/Chart.yaml
index 9834cf9e..48285eed 100644
--- a/helm/install/Chart.yaml
+++ b/helm/install/Chart.yaml
@@ -4,5 +4,5 @@ description: Installer for PGO, the open source Postgres Operator from Crunchy D
 
 type: application
 # The version below should match the version on the PostgresCluster CRD
-version: 5.8.1
-appVersion: 5.8.1
+version: 5.8.2
+appVersion: 5.8.2
diff --git a/helm/install/crds/postgres-operator.crunchydata.com_crunchybridgeclusters.yaml b/helm/install/crds/postgres-operator.crunchydata.com_crunchybridgeclusters.yaml
index 8f401bdd..d9111933 100644
--- a/helm/install/crds/postgres-operator.crunchydata.com_crunchybridgeclusters.yaml
+++ b/helm/install/crds/postgres-operator.crunchydata.com_crunchybridgeclusters.yaml
@@ -5,7 +5,7 @@ metadata:
     controller-gen.kubebuilder.io/version: v0.17.2
   name: crunchybridgeclusters.postgres-operator.crunchydata.com
   labels:
-    app.kubernetes.io/version: 5.8.1
+    app.kubernetes.io/version: 5.8.2
 spec:
   group: postgres-operator.crunchydata.com
   names:
diff --git a/helm/install/crds/postgres-operator.crunchydata.com_pgadmins.yaml b/helm/install/crds/postgres-operator.crunchydata.com_pgadmins.yaml
index 1b922e86..349adf16 100644
--- a/helm/install/crds/postgres-operator.crunchydata.com_pgadmins.yaml
+++ b/helm/install/crds/postgres-operator.crunchydata.com_pgadmins.yaml
@@ -5,7 +5,7 @@ metadata:
     controller-gen.kubebuilder.io/version: v0.17.2
   name: pgadmins.postgres-operator.crunchydata.com
   labels:
-    app.kubernetes.io/version: 5.8.1
+    app.kubernetes.io/version: 5.8.2
 spec:
   group: postgres-operator.crunchydata.com
   names:
diff --git a/helm/install/crds/postgres-operator.crunchydata.com_pgupgrades.yaml b/helm/install/crds/postgres-operator.crunchydata.com_pgupgrades.yaml
index 115309c6..fc1bb6b2 100644
--- a/helm/install/crds/postgres-operator.crunchydata.com_pgupgrades.yaml
+++ b/helm/install/crds/postgres-operator.crunchydata.com_pgupgrades.yaml
@@ -5,7 +5,7 @@ metadata:
     controller-gen.kubebuilder.io/version: v0.17.2
   name: pgupgrades.postgres-operator.crunchydata.com
   labels:
-    app.kubernetes.io/version: 5.8.1
+    app.kubernetes.io/version: 5.8.2
 spec:
   group: postgres-operator.crunchydata.com
   names:
diff --git a/helm/install/crds/postgres-operator.crunchydata.com_postgresclusters.yaml b/helm/install/crds/postgres-operator.crunchydata.com_postgresclusters.yaml
index b015af2d..df686ff6 100644
--- a/helm/install/crds/postgres-operator.crunchydata.com_postgresclusters.yaml
+++ b/helm/install/crds/postgres-operator.crunchydata.com_postgresclusters.yaml
@@ -5,7 +5,7 @@ metadata:
     controller-gen.kubebuilder.io/version: v0.17.2
   name: postgresclusters.postgres-operator.crunchydata.com
   labels:
-    app.kubernetes.io/version: 5.8.1
+    app.kubernetes.io/version: 5.8.2
 spec:
   group: postgres-operator.crunchydata.com
   names:
@@ -41,9 +41,19 @@ spec:
               description: PostgresClusterSpec defines the desired state of PostgresCluster
               properties:
                 authentication:
+                  description: Authentication settings for the PostgreSQL server
                   properties:
                     rules:
-                      description: 'More info: https://www.postgresql.org/docs/current/auth-pg-hba-conf.html'
+                      description: |-
+                        Postgres compares every new connection to these rules in the order they are
+                        defined. The first rule that matches determines if and how the connection
+                        must then authenticate. Connections that match no rules are disconnected.
+
+                        When this is omitted or empty, Postgres accepts encrypted connections to any
+                        database from users that have a password. To refuse all network connections,
+                        set this to one rule that matches "host" connections to the "reject" method.
+
+                        More info: https://www.postgresql.org/docs/current/auth-pg-hba-conf.html
                       items:
                         properties:
                           connection:
@@ -78,6 +88,7 @@ spec:
                             description: |-
                               The authentication method to use when a connection matches this rule.
                               The special value "reject" refuses connections that match this rule.
+
                               More info: https://www.postgresql.org/docs/current/auth-methods.html
                             maxLength: 20
                             minLength: 1
@@ -92,6 +103,7 @@ spec:
                                 - type: integer
                                 - type: string
                               x-kubernetes-int-or-string: true
+                            description: Additional settings for this rule or its authentication method.
                             maxProperties: 20
                             type: object
                             x-kubernetes-map-type: atomic
@@ -108,9 +120,15 @@ spec:
                         x-kubernetes-map-type: atomic
                         x-kubernetes-validations:
                           - message: '"hba" cannot be combined with other fields'
-                            rule: 'has(self.hba) ? !has(self.connection) && !has(self.databases) && !has(self.method) && !has(self.options) && !has(self.users) : true'
+                            rule: '[has(self.hba), has(self.connection) || has(self.databases) || has(self.method) || has(self.options) || has(self.users)].exists_one(b,b)'
                           - message: '"connection" and "method" are required'
-                            rule: 'has(self.hba) ? true : has(self.connection) && has(self.method)'
+                            rule: has(self.hba) || (has(self.connection) && has(self.method))
+                          - message: the "ldap" method requires an "ldapbasedn", "ldapprefix", or "ldapsuffix" option
+                            rule: has(self.hba) || self.method != "ldap" || (has(self.options) && ["ldapbasedn","ldapprefix","ldapsuffix"].exists(k, k in self.options))
+                          - message: cannot use "ldapbasedn", "ldapbinddn", "ldapbindpasswd", "ldapsearchattribute", or "ldapsearchfilter" options with "ldapprefix" or "ldapsuffix" options
+                            rule: has(self.hba) || self.method != "ldap" || !has(self.options) || [["ldapprefix","ldapsuffix"], ["ldapbasedn","ldapbinddn","ldapbindpasswd","ldapsearchattribute","ldapsearchfilter"]].exists_one(a, a.exists(k, k in self.options))
+                          - message: the "radius" method requires "radiusservers" and "radiussecrets" options
+                            rule: has(self.hba) || self.method != "radius" || (has(self.options) && ["radiusservers","radiussecrets"].all(k, k in self.options))
                       maxItems: 10
                       type: array
                       x-kubernetes-list-type: atomic
@@ -4211,6 +4229,7 @@ spec:
                       type: object
                   type: object
                 config:
+                  description: General configuration of the PostgreSQL server
                   properties:
                     files:
                       description: Files to mount under "/etc/postgres".
@@ -6291,8 +6310,7 @@ spec:
                         - stanza
                       type: object
                       x-kubernetes-validations:
-                        - fieldPath: .repo
-                          message: Only S3, GCS or Azure repos can be used as a pgBackRest data source.
+                        - message: Only S3, GCS or Azure repos can be used as a pgBackRest data source.
                           rule: '!has(self.repo.volume)'
                     postgresCluster:
                       description: |-
diff --git a/helm/install/templates/manager.yaml b/helm/install/templates/manager.yaml
index 7e7066fc..fa04aa40 100644
--- a/helm/install/templates/manager.yaml
+++ b/helm/install/templates/manager.yaml
@@ -71,4 +71,4 @@ spec:
       {{- if .Values.affinity }}
       affinity:
         {{- toYaml .Values.affinity | nindent 8 }}
-      {{- end }}
+      {{- end }}
\ No newline at end of file
diff --git a/helm/install/values.yaml b/helm/install/values.yaml
index a66d1efd..07fd34fb 100644
--- a/helm/install/values.yaml
+++ b/helm/install/values.yaml
@@ -2,34 +2,34 @@
 # controllerImages are used to run the operator's controllers.
 # The cluster image defined below runs the PostgresCluster and PGUpgrade controllers.
 controllerImages:
-  cluster: registry.developers.crunchydata.com/crunchydata/postgres-operator:ubi9-5.8.1-0
+  cluster: registry.developers.crunchydata.com/crunchydata/postgres-operator:ubi9-5.8.2-0
 
 # relatedImages are used when an image is omitted from PostgresCluster, PGAdmin or PGUpgrade specs.
 relatedImages:
   postgres_17:
-    image: registry.developers.crunchydata.com/crunchydata/crunchy-postgres:ubi9-17.4-2516
+    image: registry.developers.crunchydata.com/crunchydata/crunchy-postgres:ubi9-17.5-2520
   postgres_17_gis_3.5:
-    image: registry.developers.crunchydata.com/crunchydata/crunchy-postgres-gis:ubi9-17.4-3.5-2516
+    image: registry.developers.crunchydata.com/crunchydata/crunchy-postgres-gis:ubi9-17.5-3.5-2520
   postgres_17_gis_3.4:
-    image: registry.developers.crunchydata.com/crunchydata/crunchy-postgres-gis:ubi9-17.4-3.4-2516
+    image: registry.developers.crunchydata.com/crunchydata/crunchy-postgres-gis:ubi9-17.5-3.4-2520
   postgres_16:
-    image: registry.developers.crunchydata.com/crunchydata/crunchy-postgres:ubi9-16.8-2516
+    image: registry.developers.crunchydata.com/crunchydata/crunchy-postgres:ubi9-16.9-2520
   postgres_16_gis_3.4:
-    image: registry.developers.crunchydata.com/crunchydata/crunchy-postgres-gis:ubi9-16.8-3.4-2516
+    image: registry.developers.crunchydata.com/crunchydata/crunchy-postgres-gis:ubi9-16.9-3.4-2520
   postgres_16_gis_3.3:
-    image: registry.developers.crunchydata.com/crunchydata/crunchy-postgres-gis:ubi9-16.8-3.3-2516
+    image: registry.developers.crunchydata.com/crunchydata/crunchy-postgres-gis:ubi9-16.9-3.3-2520
   pgbackrest:
-    image: registry.developers.crunchydata.com/crunchydata/crunchy-pgbackrest:ubi9-2.54.2-2516
+    image: registry.developers.crunchydata.com/crunchydata/crunchy-pgbackrest:ubi9-2.54.2-2520
   pgbouncer:
-    image: registry.developers.crunchydata.com/crunchydata/crunchy-pgbouncer:ubi9-1.24-2516
+    image: registry.developers.crunchydata.com/crunchydata/crunchy-pgbouncer:ubi9-1.24-2520
   pgexporter:
-    image: registry.developers.crunchydata.com/crunchydata/crunchy-postgres-exporter:ubi9-0.17.1-2516
+    image: registry.developers.crunchydata.com/crunchydata/crunchy-postgres-exporter:ubi9-0.17.1-2520
   pgupgrade:
-    image: registry.developers.crunchydata.com/crunchydata/crunchy-upgrade:ubi9-17.4-2516
+    image: registry.developers.crunchydata.com/crunchydata/crunchy-upgrade:ubi9-17.5-2520
   standalone_pgadmin:
-    image: registry.developers.crunchydata.com/crunchydata/crunchy-pgadmin4:ubi9-9.2-2516
+    image: registry.developers.crunchydata.com/crunchydata/crunchy-pgadmin4:ubi9-9.2-2520
   collector:
-    image: registry.developers.crunchydata.com/crunchydata/postgres-operator:ubi9-5.8.1-0
+    image: registry.developers.crunchydata.com/crunchydata/postgres-operator:ubi9-5.8.2-0
 
 # singleNamespace controls where PGO watches for PostgresClusters. When false,
 # PGO watches for and responds to PostgresClusters in all namespaces. When true,
@@ -89,7 +89,7 @@ resources:
 #     value: "true"
 
 # tolerations allows you to define pod tolerations for the operator pods.
-tolerations: []
+# tolerations: []
 
 # affinity allows you to define pod affinity and anti-affinity rules for the operator pods.
-affinity: {}
\ No newline at end of file
+# affinity: {}
diff --git a/kustomize/install/components/images-by-tag/kustomization.yaml b/kustomize/install/components/images-by-tag/kustomization.yaml
index 4affeac2..6855d30f 100644
--- a/kustomize/install/components/images-by-tag/kustomization.yaml
+++ b/kustomize/install/components/images-by-tag/kustomization.yaml
@@ -2,37 +2,37 @@ kind: Component
 images:
 - name: image-pgadmin
   newName: registry.developers.crunchydata.com/crunchydata/crunchy-pgadmin4
-  newTag: ubi9-9.2-2516
+  newTag: ubi9-9.2-2520
 - name: image-pgbackrest
   newName: registry.developers.crunchydata.com/crunchydata/crunchy-pgbackrest
-  newTag: ubi9-2.54.2-2516
+  newTag: ubi9-2.54.2-2520
 - name: image-pgbouncer
   newName: registry.developers.crunchydata.com/crunchydata/crunchy-pgbouncer
-  newTag: ubi9-1.24-2516
+  newTag: ubi9-1.24-2520
 - name: image-postgres-exporter
   newName: registry.developers.crunchydata.com/crunchydata/crunchy-postgres-exporter
-  newTag: ubi9-0.17.1-2516
+  newTag: ubi9-0.17.1-2520
 - name: image-postgres-operator-5.8
   newName: registry.developers.crunchydata.com/crunchydata/postgres-operator
-  newTag: ubi9-5.8.1-0
+  newTag: ubi9-5.8.2-0
 - name: image-crunchy-postgres-16
   newName: registry.developers.crunchydata.com/crunchydata/crunchy-postgres
-  newTag: ubi9-16.8-2516
+  newTag: ubi9-16.9-2520
 - name: image-crunchy-postgres-17
   newName: registry.developers.crunchydata.com/crunchydata/crunchy-postgres
-  newTag: ubi9-17.4-2516
+  newTag: ubi9-17.5-2520
 - name: image-crunchy-upgrade
   newName: registry.developers.crunchydata.com/crunchydata/crunchy-upgrade
-  newTag: ubi9-17.4-2516
+  newTag: ubi9-17.5-2520
 - name: image-crunchy-postgres-16-gis-3.3
   newName: registry.developers.crunchydata.com/crunchydata/crunchy-postgres-gis
-  newTag: ubi9-16.8-3.3-2516
+  newTag: ubi9-16.9-3.3-2520
 - name: image-crunchy-postgres-16-gis-3.4
   newName: registry.developers.crunchydata.com/crunchydata/crunchy-postgres-gis
-  newTag: ubi9-16.8-3.4-2516
+  newTag: ubi9-16.9-3.4-2520
 - name: image-crunchy-postgres-17-gis-3.4
   newName: registry.developers.crunchydata.com/crunchydata/crunchy-postgres-gis
-  newTag: ubi9-17.4-3.4-2516
+  newTag: ubi9-17.5-3.4-2520
 - name: image-crunchy-postgres-17-gis-3.5
   newName: registry.developers.crunchydata.com/crunchydata/crunchy-postgres-gis
-  newTag: ubi9-17.4-3.5-2516
+  newTag: ubi9-17.5-3.5-2520
diff --git a/kustomize/install/crd/bases/postgres-operator.crunchydata.com_crunchybridgeclusters.yaml b/kustomize/install/crd/bases/postgres-operator.crunchydata.com_crunchybridgeclusters.yaml
index 8f401bdd..d9111933 100644
--- a/kustomize/install/crd/bases/postgres-operator.crunchydata.com_crunchybridgeclusters.yaml
+++ b/kustomize/install/crd/bases/postgres-operator.crunchydata.com_crunchybridgeclusters.yaml
@@ -5,7 +5,7 @@ metadata:
     controller-gen.kubebuilder.io/version: v0.17.2
   name: crunchybridgeclusters.postgres-operator.crunchydata.com
   labels:
-    app.kubernetes.io/version: 5.8.1
+    app.kubernetes.io/version: 5.8.2
 spec:
   group: postgres-operator.crunchydata.com
   names:
diff --git a/kustomize/install/crd/bases/postgres-operator.crunchydata.com_pgadmins.yaml b/kustomize/install/crd/bases/postgres-operator.crunchydata.com_pgadmins.yaml
index 1b922e86..349adf16 100644
--- a/kustomize/install/crd/bases/postgres-operator.crunchydata.com_pgadmins.yaml
+++ b/kustomize/install/crd/bases/postgres-operator.crunchydata.com_pgadmins.yaml
@@ -5,7 +5,7 @@ metadata:
     controller-gen.kubebuilder.io/version: v0.17.2
   name: pgadmins.postgres-operator.crunchydata.com
   labels:
-    app.kubernetes.io/version: 5.8.1
+    app.kubernetes.io/version: 5.8.2
 spec:
   group: postgres-operator.crunchydata.com
   names:
diff --git a/kustomize/install/crd/bases/postgres-operator.crunchydata.com_pgupgrades.yaml b/kustomize/install/crd/bases/postgres-operator.crunchydata.com_pgupgrades.yaml
index 115309c6..fc1bb6b2 100644
--- a/kustomize/install/crd/bases/postgres-operator.crunchydata.com_pgupgrades.yaml
+++ b/kustomize/install/crd/bases/postgres-operator.crunchydata.com_pgupgrades.yaml
@@ -5,7 +5,7 @@ metadata:
     controller-gen.kubebuilder.io/version: v0.17.2
   name: pgupgrades.postgres-operator.crunchydata.com
   labels:
-    app.kubernetes.io/version: 5.8.1
+    app.kubernetes.io/version: 5.8.2
 spec:
   group: postgres-operator.crunchydata.com
   names:
diff --git a/kustomize/install/crd/bases/postgres-operator.crunchydata.com_postgresclusters.yaml b/kustomize/install/crd/bases/postgres-operator.crunchydata.com_postgresclusters.yaml
index b015af2d..df686ff6 100644
--- a/kustomize/install/crd/bases/postgres-operator.crunchydata.com_postgresclusters.yaml
+++ b/kustomize/install/crd/bases/postgres-operator.crunchydata.com_postgresclusters.yaml
@@ -5,7 +5,7 @@ metadata:
     controller-gen.kubebuilder.io/version: v0.17.2
   name: postgresclusters.postgres-operator.crunchydata.com
   labels:
-    app.kubernetes.io/version: 5.8.1
+    app.kubernetes.io/version: 5.8.2
 spec:
   group: postgres-operator.crunchydata.com
   names:
@@ -41,9 +41,19 @@ spec:
               description: PostgresClusterSpec defines the desired state of PostgresCluster
               properties:
                 authentication:
+                  description: Authentication settings for the PostgreSQL server
                   properties:
                     rules:
-                      description: 'More info: https://www.postgresql.org/docs/current/auth-pg-hba-conf.html'
+                      description: |-
+                        Postgres compares every new connection to these rules in the order they are
+                        defined. The first rule that matches determines if and how the connection
+                        must then authenticate. Connections that match no rules are disconnected.
+
+                        When this is omitted or empty, Postgres accepts encrypted connections to any
+                        database from users that have a password. To refuse all network connections,
+                        set this to one rule that matches "host" connections to the "reject" method.
+
+                        More info: https://www.postgresql.org/docs/current/auth-pg-hba-conf.html
                       items:
                         properties:
                           connection:
@@ -78,6 +88,7 @@ spec:
                             description: |-
                               The authentication method to use when a connection matches this rule.
                               The special value "reject" refuses connections that match this rule.
+
                               More info: https://www.postgresql.org/docs/current/auth-methods.html
                             maxLength: 20
                             minLength: 1
@@ -92,6 +103,7 @@ spec:
                                 - type: integer
                                 - type: string
                               x-kubernetes-int-or-string: true
+                            description: Additional settings for this rule or its authentication method.
                             maxProperties: 20
                             type: object
                             x-kubernetes-map-type: atomic
@@ -108,9 +120,15 @@ spec:
                         x-kubernetes-map-type: atomic
                         x-kubernetes-validations:
                           - message: '"hba" cannot be combined with other fields'
-                            rule: 'has(self.hba) ? !has(self.connection) && !has(self.databases) && !has(self.method) && !has(self.options) && !has(self.users) : true'
+                            rule: '[has(self.hba), has(self.connection) || has(self.databases) || has(self.method) || has(self.options) || has(self.users)].exists_one(b,b)'
                           - message: '"connection" and "method" are required'
-                            rule: 'has(self.hba) ? true : has(self.connection) && has(self.method)'
+                            rule: has(self.hba) || (has(self.connection) && has(self.method))
+                          - message: the "ldap" method requires an "ldapbasedn", "ldapprefix", or "ldapsuffix" option
+                            rule: has(self.hba) || self.method != "ldap" || (has(self.options) && ["ldapbasedn","ldapprefix","ldapsuffix"].exists(k, k in self.options))
+                          - message: cannot use "ldapbasedn", "ldapbinddn", "ldapbindpasswd", "ldapsearchattribute", or "ldapsearchfilter" options with "ldapprefix" or "ldapsuffix" options
+                            rule: has(self.hba) || self.method != "ldap" || !has(self.options) || [["ldapprefix","ldapsuffix"], ["ldapbasedn","ldapbinddn","ldapbindpasswd","ldapsearchattribute","ldapsearchfilter"]].exists_one(a, a.exists(k, k in self.options))
+                          - message: the "radius" method requires "radiusservers" and "radiussecrets" options
+                            rule: has(self.hba) || self.method != "radius" || (has(self.options) && ["radiusservers","radiussecrets"].all(k, k in self.options))
                       maxItems: 10
                       type: array
                       x-kubernetes-list-type: atomic
@@ -4211,6 +4229,7 @@ spec:
                       type: object
                   type: object
                 config:
+                  description: General configuration of the PostgreSQL server
                   properties:
                     files:
                       description: Files to mount under "/etc/postgres".
@@ -6291,8 +6310,7 @@ spec:
                         - stanza
                       type: object
                       x-kubernetes-validations:
-                        - fieldPath: .repo
-                          message: Only S3, GCS or Azure repos can be used as a pgBackRest data source.
+                        - message: Only S3, GCS or Azure repos can be used as a pgBackRest data source.
                           rule: '!has(self.repo.volume)'
                     postgresCluster:
                       description: |-
diff --git a/kustomize/install/default/kustomization.yaml b/kustomize/install/default/kustomization.yaml
index 7c0d7111..e7ba6cea 100644
--- a/kustomize/install/default/kustomization.yaml
+++ b/kustomize/install/default/kustomization.yaml
@@ -7,7 +7,7 @@ labels:
   includeTemplates: true
   pairs:
     app.kubernetes.io/name: pgo
-    app.kubernetes.io/version: 5.8.1
+    app.kubernetes.io/version: 5.8.2
 - includeSelectors: true
   includeTemplates: true
   pairs:
diff --git a/kustomize/install/singlenamespace/kustomization.yaml b/kustomize/install/singlenamespace/kustomization.yaml
index fc190a64..a4a9c565 100644
--- a/kustomize/install/singlenamespace/kustomization.yaml
+++ b/kustomize/install/singlenamespace/kustomization.yaml
@@ -7,7 +7,7 @@ labels:
   includeTemplates: true
   pairs:
     app.kubernetes.io/name: pgo
-    app.kubernetes.io/version: 5.8.1
+    app.kubernetes.io/version: 5.8.2
 - includeSelectors: true
   includeTemplates: true
   pairs:

From edaf5c2e59a2df70b25a2e121aa8b16a874121ea Mon Sep 17 00:00:00 2001
From: jmckulk <joseph.mckulka@crunchydata.com>
Date: Thu, 15 May 2025 15:46:49 -0400
Subject: [PATCH 8/9] fix whitespace

---
 helm/install/templates/manager.yaml | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/helm/install/templates/manager.yaml b/helm/install/templates/manager.yaml
index fa04aa40..7e7066fc 100644
--- a/helm/install/templates/manager.yaml
+++ b/helm/install/templates/manager.yaml
@@ -71,4 +71,4 @@ spec:
       {{- if .Values.affinity }}
       affinity:
         {{- toYaml .Values.affinity | nindent 8 }}
-      {{- end }}
\ No newline at end of file
+      {{- end }}

From 4f8d0d9413b34f18ea098856dd90e58a76a344d6 Mon Sep 17 00:00:00 2001
From: andrewlecuyer <andrew.lecuyer@crunchydata.com>
Date: Thu, 22 May 2025 14:30:57 +0000
Subject: [PATCH 9/9] Update Examples for the Latest Version of Keycloak

The Keycloak example now works with the latest version of Keycloak.  This includes using
the new env vars and settings that are now available in the latest version of Keycloak.

The PostgresCluster's created for the Keycloak examples (which includes any PostgresCluster's
created for use with Keycloak in the Crunchy Postgres for Kubernetes documentation) have
also been updated to set the "autoCreateUserSchema" annotation to "true".  Without this setting,
Keycloak will crash on startup when attempting to use the public schema.
---
 kustomize/keycloak/keycloak.yaml | 20 ++++++++++----------
 kustomize/keycloak/postgres.yaml |  2 ++
 kustomize/postgres/postgres.yaml |  4 +++-
 3 files changed, 15 insertions(+), 11 deletions(-)

diff --git a/kustomize/keycloak/keycloak.yaml b/kustomize/keycloak/keycloak.yaml
index bfa66376..c6306b72 100644
--- a/kustomize/keycloak/keycloak.yaml
+++ b/kustomize/keycloak/keycloak.yaml
@@ -19,24 +19,24 @@ spec:
         args: ["start-dev"]
         name: keycloak
         env:
-        - name: DB_VENDOR
+        - name: KC_DB
           value: "postgres"
-        - name: DB_ADDR
+        - name: KC_DB_URL_HOST
           valueFrom: { secretKeyRef: { name: keycloakdb-pguser-keycloakdb, key: host } }
-        - name: DB_PORT
+        - name: KC_DB_URL_PORT
           valueFrom: { secretKeyRef: { name: keycloakdb-pguser-keycloakdb, key: port } }
-        - name: DB_DATABASE
+        - name: KC_DB_URL_DATABASE
           valueFrom: { secretKeyRef: { name: keycloakdb-pguser-keycloakdb, key: dbname } }
-        - name: DB_USER
+        - name: KC_DB_USERNAME
           valueFrom: { secretKeyRef: { name: keycloakdb-pguser-keycloakdb, key: user } }
-        - name: DB_PASSWORD
+        - name: KC_DB_PASSWORD
           valueFrom: { secretKeyRef: { name: keycloakdb-pguser-keycloakdb, key: password } }
-        - name: KEYCLOAK_ADMIN
+        - name: KC_BOOTSTRAP_ADMIN_USERNAME
           value: "admin"
-        - name: KEYCLOAK_ADMIN_PASSWORD
+        - name: KC_BOOTSTRAP_ADMIN_PASSWORD
           value: "admin"
-        - name: KC_PROXY
-          value: "edge"
+        - name: KC_PROXY_HEADERS
+          value: "xforwarded"
         ports:
         - name: http
           containerPort: 8080
diff --git a/kustomize/keycloak/postgres.yaml b/kustomize/keycloak/postgres.yaml
index 67624313..e2b8c0d9 100644
--- a/kustomize/keycloak/postgres.yaml
+++ b/kustomize/keycloak/postgres.yaml
@@ -2,6 +2,8 @@ apiVersion: postgres-operator.crunchydata.com/v1beta1
 kind: PostgresCluster
 metadata:
   name: keycloakdb
+  annotations:
+    postgres-operator.crunchydata.com/autoCreateUserSchema: "true"
 spec:
   postgresVersion: 17
   instances:
diff --git a/kustomize/postgres/postgres.yaml b/kustomize/postgres/postgres.yaml
index a832aa5a..53328559 100644
--- a/kustomize/postgres/postgres.yaml
+++ b/kustomize/postgres/postgres.yaml
@@ -2,10 +2,12 @@ apiVersion: postgres-operator.crunchydata.com/v1beta1
 kind: PostgresCluster
 metadata:
   name: hippo
+  annotations:
+    postgres-operator.crunchydata.com/autoCreateUserSchema: "true"
 spec:
   postgresVersion: 17
   users:
-    - name: rhino
+    - name: hippo
       databases:
         - zoo
   instances:
