Merge branch 'master' into trent--pooler-priority

This commit is contained in:
Trent Schmidt 2026-07-28 13:13:37 -07:00 committed by GitHub
commit af993ec626
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
39 changed files with 136 additions and 437 deletions

View File

@ -9,7 +9,7 @@ assignees: ''
Please, answer some short questions which should help us to understand your problem / question better? Please, answer some short questions which should help us to understand your problem / question better?
- **Which image of the operator are you using?** e.g. ghcr.io/zalando/postgres-operator:v1.15.1 - **Which image of the operator are you using?** e.g. ghcr.io/zalando/postgres-operator:v2.0.0
- **Where do you run it - cloud or metal? Kubernetes or OpenShift?** [AWS K8s | GCP ... | Bare Metal K8s] - **Where do you run it - cloud or metal? Kubernetes or OpenShift?** [AWS K8s | GCP ... | Bare Metal K8s]
- **Are you running Postgres Operator in production?** [yes | no] - **Are you running Postgres Operator in production?** [yes | no]
- **Type of issue?** [Bug report, question, feature request, etc.] - **Type of issue?** [Bug report, question, feature request, etc.]

View File

@ -20,12 +20,13 @@ pipelines with no access to Kubernetes API directly, promoting infrastructure as
* Pod protection during bootstrap phase and configurable maintenance windows * Pod protection during bootstrap phase and configurable maintenance windows
* Restore and cloning Postgres clusters on AWS, GCS and Azure * Restore and cloning Postgres clusters on AWS, GCS and Azure
* Additionally logical backups to S3 or GCS bucket can be configured * Additionally logical backups to S3 or GCS bucket can be configured
* Standby cluster from S3 or GCS WAL archive * Standby cluster from S3 or GCS WAL archive or remote host
* Configurable for non-cloud environments * Configurable for non-cloud environments
* Basic credential and user management on K8s, eases application deployments * Basic credential and user management on K8s, eases application deployments
* Support for custom TLS certificates * Support for custom TLS certificates
* UI to create and edit Postgres cluster manifests * UI to create and edit Postgres cluster manifests
* Compatible with OpenShift * Compatible with OpenShift
* Multi-arch support
### PostgreSQL features ### PostgreSQL features
@ -63,23 +64,21 @@ production for over five years.
| Release | Postgres versions | K8s versions | Golang | | Release | Postgres versions | K8s versions | Golang |
| :-------- | :---------------: | :---------------: | :-----: | | :-------- | :---------------: | :---------------: | :-----: |
| next | 14 → 18 | 1.27+ | 1.26.4 | | v2.0.0 | 14 → 18 | 1.27+ | 1.26.4 |
| v1.15.1 | 13 → 17 | 1.27+ | 1.25.3 | | v1.15.1 | 13 → 17 | 1.27+ | 1.25.3 |
| v1.14.0 | 13 → 17 | 1.27+ | 1.23.4 | | v1.14.0 | 13 → 17 | 1.27+ | 1.23.4 |
| v1.13.0 | 12 → 16 | 1.27+ | 1.22.5 | | v1.13.0 | 12 → 16 | 1.27+ | 1.22.5 |
| v1.12.0 | 11 → 16 | 1.27+ | 1.22.3 | | v1.12.0 | 11 → 16 | 1.27+ | 1.22.3 |
| v1.11.0 | 11 → 16 | 1.27+ | 1.21.7 | | v1.11.0 | 11 → 16 | 1.27+ | 1.21.7 |
| v1.10.1 | 10 → 15 | 1.21+ | 1.19.8 |
## Getting started ## Getting started
For a quick first impression follow the instructions of this For a quick first impression follow the instructions of this
[tutorial](docs/quickstart.md). [tutorial](docs/quickstart.md).
## Supported setups of Postgres and Applications ## Migrating from v1 to v2 operator
![Features](docs/diagrams/neutral_operator_dark.png#gh-dark-mode-only) If you have been using Postgres Operator since v1.x (thank you), make sure you have read the [migration docs](docs/migrate.md) before deploying a v2 operator.
![Features](docs/diagrams/neutral_operator_light.png#gh-light-mode-only)
## Documentation ## Documentation

View File

@ -1,7 +1,7 @@
apiVersion: v2 apiVersion: v2
name: postgres-operator-ui name: postgres-operator-ui
version: 1.15.1 version: 2.0.0
appVersion: 1.15.1 appVersion: 2.0.0
home: https://github.com/zalando/postgres-operator home: https://github.com/zalando/postgres-operator
description: Postgres Operator UI provides a graphical interface for a convenient database-as-a-service user experience description: Postgres Operator UI provides a graphical interface for a convenient database-as-a-service user experience
keywords: keywords:

View File

@ -1,9 +1,32 @@
apiVersion: v1 apiVersion: v1
entries: entries:
postgres-operator-ui: postgres-operator-ui:
- apiVersion: v2
appVersion: 2.0.0
created: "2026-07-28T16:30:58.763571+02:00"
description: Postgres Operator UI provides a graphical interface for a convenient
database-as-a-service user experience
digest: 80098eb9290d77fcaaf813347386c3b7d34de0d4e846b50ac177d4ac4a9e2ecb
home: https://github.com/zalando/postgres-operator
keywords:
- postgres
- operator
- ui
- cloud-native
- patroni
- spilo
maintainers:
- email: opensource@zalando.de
name: Zalando
name: postgres-operator-ui
sources:
- https://github.com/zalando/postgres-operator
urls:
- postgres-operator-ui-2.0.0.tgz
version: 2.0.0
- apiVersion: v2 - apiVersion: v2
appVersion: 1.15.1 appVersion: 1.15.1
created: "2025-12-11T12:44:25.470723322+01:00" created: "2026-07-28T16:30:58.7632+02:00"
description: Postgres Operator UI provides a graphical interface for a convenient description: Postgres Operator UI provides a graphical interface for a convenient
database-as-a-service user experience database-as-a-service user experience
digest: 4bbb750934366038d692711f924151182b7be131b6822d011f5a4e51cf609482 digest: 4bbb750934366038d692711f924151182b7be131b6822d011f5a4e51cf609482
@ -26,7 +49,7 @@ entries:
version: 1.15.1 version: 1.15.1
- apiVersion: v2 - apiVersion: v2
appVersion: 1.14.0 appVersion: 1.14.0
created: "2025-12-11T12:44:25.468680645+01:00" created: "2026-07-28T16:30:58.76293+02:00"
description: Postgres Operator UI provides a graphical interface for a convenient description: Postgres Operator UI provides a graphical interface for a convenient
database-as-a-service user experience database-as-a-service user experience
digest: e87ed898079a852957a67a4caf3fbd27b9098e413f5d961b7a771a6ae8b3e17c digest: e87ed898079a852957a67a4caf3fbd27b9098e413f5d961b7a771a6ae8b3e17c
@ -49,7 +72,7 @@ entries:
version: 1.14.0 version: 1.14.0
- apiVersion: v2 - apiVersion: v2
appVersion: 1.13.0 appVersion: 1.13.0
created: "2025-12-11T12:44:25.466716836+01:00" created: "2026-07-28T16:30:58.762624+02:00"
description: Postgres Operator UI provides a graphical interface for a convenient description: Postgres Operator UI provides a graphical interface for a convenient
database-as-a-service user experience database-as-a-service user experience
digest: e0444e516b50f82002d1a733527813c51759a627cefdd1005cea73659f824ea8 digest: e0444e516b50f82002d1a733527813c51759a627cefdd1005cea73659f824ea8
@ -72,7 +95,7 @@ entries:
version: 1.13.0 version: 1.13.0
- apiVersion: v2 - apiVersion: v2
appVersion: 1.12.2 appVersion: 1.12.2
created: "2025-12-11T12:44:25.464739895+01:00" created: "2026-07-28T16:30:58.762247+02:00"
description: Postgres Operator UI provides a graphical interface for a convenient description: Postgres Operator UI provides a graphical interface for a convenient
database-as-a-service user experience database-as-a-service user experience
digest: cbcef400c23ccece27d97369ad629278265c013e0a45c0b7f33e7568a082fedd digest: cbcef400c23ccece27d97369ad629278265c013e0a45c0b7f33e7568a082fedd
@ -95,7 +118,7 @@ entries:
version: 1.12.2 version: 1.12.2
- apiVersion: v2 - apiVersion: v2
appVersion: 1.11.0 appVersion: 1.11.0
created: "2025-12-11T12:44:25.462698399+01:00" created: "2026-07-28T16:30:58.761377+02:00"
description: Postgres Operator UI provides a graphical interface for a convenient description: Postgres Operator UI provides a graphical interface for a convenient
database-as-a-service user experience database-as-a-service user experience
digest: a45f2284045c2a9a79750a36997386444f39b01ac722b17c84b431457577a3a2 digest: a45f2284045c2a9a79750a36997386444f39b01ac722b17c84b431457577a3a2
@ -116,27 +139,4 @@ entries:
urls: urls:
- postgres-operator-ui-1.11.0.tgz - postgres-operator-ui-1.11.0.tgz
version: 1.11.0 version: 1.11.0
- apiVersion: v2 generated: "2026-07-28T16:30:58.760884+02:00"
appVersion: 1.10.1
created: "2025-12-11T12:44:25.460357063+01:00"
description: Postgres Operator UI provides a graphical interface for a convenient
database-as-a-service user experience
digest: 2e5e7a82aebee519ec57c6243eb8735124aa4585a3a19c66ffd69638fbeb11ce
home: https://github.com/zalando/postgres-operator
keywords:
- postgres
- operator
- ui
- cloud-native
- patroni
- spilo
maintainers:
- email: opensource@zalando.de
name: Zalando
name: postgres-operator-ui
sources:
- https://github.com/zalando/postgres-operator
urls:
- postgres-operator-ui-1.10.1.tgz
version: 1.10.1
generated: "2025-12-11T12:44:25.45732896+01:00"

View File

@ -88,7 +88,7 @@ spec:
"17", "17",
"16", "16",
"15", "15",
"14", "14"
] ]
} }
{{- if .Values.extraEnvs }} {{- if .Values.extraEnvs }}

View File

@ -8,7 +8,7 @@ replicaCount: 1
image: image:
registry: ghcr.io registry: ghcr.io
repository: zalando/postgres-operator-ui repository: zalando/postgres-operator-ui
tag: v1.15.1 tag: v2.0.0
pullPolicy: "IfNotPresent" pullPolicy: "IfNotPresent"
# Optionally specify an array of imagePullSecrets. # Optionally specify an array of imagePullSecrets.

View File

@ -1,7 +1,7 @@
apiVersion: v2 apiVersion: v2
name: postgres-operator name: postgres-operator
version: 1.15.1 version: 2.0.0
appVersion: 1.15.1 appVersion: 2.0.0
home: https://github.com/zalando/postgres-operator home: https://github.com/zalando/postgres-operator
description: Postgres Operator creates and manages PostgreSQL clusters running in Kubernetes description: Postgres Operator creates and manages PostgreSQL clusters running in Kubernetes
keywords: keywords:

View File

@ -139,7 +139,7 @@ spec:
type: boolean type: boolean
type: object type: object
docker_image: docker_image:
default: ghcr.io/zalando/spilo-18:4.1-p1 default: ghcr.io/zalando/spilo-18:4.1-p2
type: string type: string
enable_crd_registration: enable_crd_registration:
default: true default: true
@ -228,24 +228,7 @@ spec:
type: string type: string
type: array type: array
infrastructure_roles_secret_name: infrastructure_roles_secret_name:
description: |-
NamespacedName comprises a resource name, with a mandatory namespace,
rendered as "<namespace>/<name>". Being a type captures intent and
helps make sure that UIDs, namespaced names and non-namespaced names
do not get conflated in code. For most use cases, namespace and name
will already have been format validated at the API entry point, so we
don't do that here. Where that's not the case (e.g. in testing),
consider using NamespacedNameOrDie() in testing.go in this package.
from: https://github.com/kubernetes/apimachinery/blob/master/pkg/types/namespacedname.go
properties:
name:
type: string type: string
namespace:
type: string
required:
- name
type: object
infrastructure_roles_secrets: infrastructure_roles_secrets:
description: namespaced name of the secret containing infrastructure description: namespaced name of the secret containing infrastructure
roles names and passwords roles names and passwords
@ -267,14 +250,7 @@ spec:
description: |- description: |-
Name of a secret which describes the role, and optionally name of a Name of a secret which describes the role, and optionally name of a
configmap with an extra information configmap with an extra information
properties:
name:
type: string type: string
namespace:
type: string
required:
- name
type: object
template: template:
type: boolean type: boolean
userkey: userkey:
@ -460,14 +436,7 @@ spec:
default: postgres-operator default: postgres-operator
description: namespaced name of the secret containing the OAuth2 description: namespaced name of the secret containing the OAuth2
token to pass to the teams API token to pass to the teams API
properties:
name:
type: string type: string
namespace:
type: string
required:
- name
type: object
pdb_master_label_selector: pdb_master_label_selector:
default: true default: true
type: boolean type: boolean
@ -487,14 +456,7 @@ spec:
pod_environment_configmap: pod_environment_configmap:
description: namespaced name of the ConfigMap with environment description: namespaced name of the ConfigMap with environment
variables to populate on every pod variables to populate on every pod
properties:
name:
type: string type: string
namespace:
type: string
required:
- name
type: object
pod_environment_secret: pod_environment_secret:
type: string type: string
pod_management_policy: pod_management_policy:
@ -646,7 +608,7 @@ spec:
logical_backup_cronjob_environment_secret: logical_backup_cronjob_environment_secret:
type: string type: string
logical_backup_docker_image: logical_backup_docker_image:
default: ghcr.io/zalando/postgres-operator/logical-backup:v1.15.1 default: ghcr.io/zalando/postgres-operator/logical-backup:v2.0.0
type: string type: string
logical_backup_failed_jobs_history_limit: logical_backup_failed_jobs_history_limit:
default: 3 default: 3

View File

@ -1,9 +1,31 @@
apiVersion: v1 apiVersion: v1
entries: entries:
postgres-operator: postgres-operator:
- apiVersion: v2
appVersion: 2.0.0
created: "2026-07-28T16:30:13.110262+02:00"
description: Postgres Operator creates and manages PostgreSQL clusters running
in Kubernetes
digest: 2622899b573e4c46cd2a70677d5941a9e5da24c7db2a0ff774ddc49ad9d5c544
home: https://github.com/zalando/postgres-operator
keywords:
- postgres
- operator
- cloud-native
- patroni
- spilo
maintainers:
- email: opensource@zalando.de
name: Zalando
name: postgres-operator
sources:
- https://github.com/zalando/postgres-operator
urls:
- postgres-operator-2.0.0.tgz
version: 2.0.0
- apiVersion: v2 - apiVersion: v2
appVersion: 1.15.1 appVersion: 1.15.1
created: "2025-12-17T14:48:33.832345061+01:00" created: "2026-07-28T16:30:13.108848+02:00"
description: Postgres Operator creates and manages PostgreSQL clusters running description: Postgres Operator creates and manages PostgreSQL clusters running
in Kubernetes in Kubernetes
digest: 9f3edc3d796105c02c04eaae28a78e58fb08c1847a9de012245fd6ac2c0d2c00 digest: 9f3edc3d796105c02c04eaae28a78e58fb08c1847a9de012245fd6ac2c0d2c00
@ -25,7 +47,7 @@ entries:
version: 1.15.1 version: 1.15.1
- apiVersion: v2 - apiVersion: v2
appVersion: 1.15.0 appVersion: 1.15.0
created: "2025-12-17T14:48:33.826117296+01:00" created: "2026-07-28T16:30:13.108147+02:00"
description: Postgres Operator creates and manages PostgreSQL clusters running description: Postgres Operator creates and manages PostgreSQL clusters running
in Kubernetes in Kubernetes
digest: 002dd47647bf51fbba023bd1762d807be478cf37de7a44b80cd01ac1f20bd94a digest: 002dd47647bf51fbba023bd1762d807be478cf37de7a44b80cd01ac1f20bd94a
@ -47,7 +69,7 @@ entries:
version: 1.15.0 version: 1.15.0
- apiVersion: v2 - apiVersion: v2
appVersion: 1.14.0 appVersion: 1.14.0
created: "2025-12-17T14:48:33.819729144+01:00" created: "2026-07-28T16:30:13.107421+02:00"
description: Postgres Operator creates and manages PostgreSQL clusters running description: Postgres Operator creates and manages PostgreSQL clusters running
in Kubernetes in Kubernetes
digest: 36e1571f3f455b213f16cdda7b1158648e8e84deb804ba47ed6b9b6d19263ba8 digest: 36e1571f3f455b213f16cdda7b1158648e8e84deb804ba47ed6b9b6d19263ba8
@ -69,7 +91,7 @@ entries:
version: 1.14.0 version: 1.14.0
- apiVersion: v2 - apiVersion: v2
appVersion: 1.13.0 appVersion: 1.13.0
created: "2025-12-17T14:48:33.81038602+01:00" created: "2026-07-28T16:30:13.106643+02:00"
description: Postgres Operator creates and manages PostgreSQL clusters running description: Postgres Operator creates and manages PostgreSQL clusters running
in Kubernetes in Kubernetes
digest: a839601689aea0a7e6bc0712a5244d435683cf3314c95794097ff08540e1dfef digest: a839601689aea0a7e6bc0712a5244d435683cf3314c95794097ff08540e1dfef
@ -91,7 +113,7 @@ entries:
version: 1.13.0 version: 1.13.0
- apiVersion: v2 - apiVersion: v2
appVersion: 1.12.2 appVersion: 1.12.2
created: "2025-12-17T14:48:33.803256825+01:00" created: "2026-07-28T16:30:13.105204+02:00"
description: Postgres Operator creates and manages PostgreSQL clusters running description: Postgres Operator creates and manages PostgreSQL clusters running
in Kubernetes in Kubernetes
digest: 65858d14a40d7fd90c32bd9fc60021acc9555c161079f43a365c70171eaf21d8 digest: 65858d14a40d7fd90c32bd9fc60021acc9555c161079f43a365c70171eaf21d8
@ -113,7 +135,7 @@ entries:
version: 1.12.2 version: 1.12.2
- apiVersion: v2 - apiVersion: v2
appVersion: 1.11.0 appVersion: 1.11.0
created: "2025-12-17T14:48:33.797369053+01:00" created: "2026-07-28T16:30:13.104449+02:00"
description: Postgres Operator creates and manages PostgreSQL clusters running description: Postgres Operator creates and manages PostgreSQL clusters running
in Kubernetes in Kubernetes
digest: 3914b5e117bda0834f05c9207f007e2ac372864cf6e86dcc2e1362bbe46c14d9 digest: 3914b5e117bda0834f05c9207f007e2ac372864cf6e86dcc2e1362bbe46c14d9
@ -133,26 +155,4 @@ entries:
urls: urls:
- postgres-operator-1.11.0.tgz - postgres-operator-1.11.0.tgz
version: 1.11.0 version: 1.11.0
- apiVersion: v2 generated: "2026-07-28T16:30:13.103286+02:00"
appVersion: 1.10.1
created: "2025-12-17T14:48:33.791368349+01:00"
description: Postgres Operator creates and manages PostgreSQL clusters running
in Kubernetes
digest: cc3baa41753da92466223d0b334df27e79c882296577b404a8e9071411fcf19c
home: https://github.com/zalando/postgres-operator
keywords:
- postgres
- operator
- cloud-native
- patroni
- spilo
maintainers:
- email: opensource@zalando.de
name: Zalando
name: postgres-operator
sources:
- https://github.com/zalando/postgres-operator
urls:
- postgres-operator-1.10.1.tgz
version: 1.10.1
generated: "2025-12-17T14:48:33.785159183+01:00"

Binary file not shown.

View File

@ -1,7 +1,7 @@
image: image:
registry: ghcr.io registry: ghcr.io
repository: zalando/postgres-operator repository: zalando/postgres-operator
tag: v1.15.1 tag: v2.0.0
pullPolicy: "IfNotPresent" pullPolicy: "IfNotPresent"
# Optionally specify an array of imagePullSecrets. # Optionally specify an array of imagePullSecrets.
@ -41,7 +41,7 @@ configGeneral:
# etcd connection string for Patroni. Empty uses K8s-native DCS. # etcd connection string for Patroni. Empty uses K8s-native DCS.
etcd_host: "" etcd_host: ""
# Spilo docker image # Spilo docker image
docker_image: ghcr.io/zalando/spilo-18:4.1-p1 docker_image: ghcr.io/zalando/spilo-18:4.1-p2
# key name for annotation to ignore globally configured instance limits # key name for annotation to ignore globally configured instance limits
# ignore_instance_limits_annotation_key: "" # ignore_instance_limits_annotation_key: ""
@ -385,7 +385,7 @@ configLogicalBackup:
# logical_backup_memory_request: "" # logical_backup_memory_request: ""
# image for pods of the logical backup job (example runs pg_dumpall) # image for pods of the logical backup job (example runs pg_dumpall)
logical_backup_docker_image: "ghcr.io/zalando/postgres-operator/logical-backup:v1.15.1" logical_backup_docker_image: "ghcr.io/zalando/postgres-operator/logical-backup:v2.0.0"
# path of google cloud service account json file # path of google cloud service account json file
# logical_backup_google_application_credentials: "" # logical_backup_google_application_credentials: ""

View File

@ -734,9 +734,9 @@ that cannot be overridden to guarantee core functionality. Only variables with
shipping to be specified differently. There are three ways to specify extra shipping to be specified differently. There are three ways to specify extra
environment variables (or override existing ones) for database pods: environment variables (or override existing ones) for database pods:
* [Via ConfigMap](#via-configmap) * [Globally via ConfigMap](#via-configmap)
* [Via Secret](#via-secret) * [Globally via Secret](#via-secret)
* [Via Postgres Cluster Manifest](#via-postgres-cluster-manifest) * [Locally via Postgres Cluster Manifest](#via-postgres-cluster-manifest)
The first two options must be referenced from the operator configuration The first two options must be referenced from the operator configuration
making them global settings for all Postgres cluster the operator watches. making them global settings for all Postgres cluster the operator watches.
@ -745,10 +745,10 @@ environment variables. Another case could be to provide custom cloud
provider or backup settings. provider or backup settings.
The last options allows for specifying environment variables individual to The last options allows for specifying environment variables individual to
every cluster via the `env` section in the manifest. For example, if you use every cluster via the `env` or `envFrom` section in the manifest. For example,
individual backup locations for each of your clusters. Or you want to disable if you use individual backup locations for each of your clusters. Or you want
WAL archiving for a certain cluster by setting `WAL_S3_BUCKET`, `WAL_GS_BUCKET` to disable WAL archiving for a certain cluster by setting `WAL_S3_BUCKET`,
or `AZURE_STORAGE_ACCOUNT` to an empty string. `WAL_GS_BUCKET` or `AZURE_STORAGE_ACCOUNT` to an empty string.
The operator will give precedence to environment variables in the following The operator will give precedence to environment variables in the following
order (e.g. a variable defined in 4. overrides a variable with the same name order (e.g. a variable defined in 4. overrides a variable with the same name
@ -762,6 +762,9 @@ in 5.):
6. Pod environment config map via operator config 6. Pod environment config map via operator config
7. WAL and logical backup settings from operator config 7. WAL and logical backup settings from operator config
The `envFrom` section is treated separately and allows for a very flexible
local configuration referencing a ConfigMap or a Secret.
### Via ConfigMap ### Via ConfigMap
The ConfigMap with the additional settings is referenced in the operator's The ConfigMap with the additional settings is referenced in the operator's
@ -1574,7 +1577,7 @@ make docker
# build in image in minikube docker env # build in image in minikube docker env
eval $(minikube docker-env) eval $(minikube docker-env)
docker buildx build --load -t ghcr.io/zalando/postgres-operator-ui:v1.15.1 . docker buildx build --load -t ghcr.io/zalando/postgres-operator-ui:v2.0.0 .
# apply UI manifests next to a running Postgres Operator # apply UI manifests next to a running Postgres Operator
kubectl apply -f manifests/ kubectl apply -f manifests/

Binary file not shown.

Before

Width:  |  Height:  |  Size: 253 KiB

View File

@ -1,101 +0,0 @@
\documentclass{article}
\usepackage{tikz}
\usepackage[graphics,tightpage,active]{preview}
\usetikzlibrary{arrows, shadows.blur, positioning, fit, calc, backgrounds}
\usepackage{lscape}
\pagenumbering{gobble}
\PreviewEnvironment{tikzpicture}
\PreviewEnvironment{equation}
\PreviewEnvironment{equation*}
\newlength{\imagewidth}
\newlength{\imagescale}
\pagestyle{empty}
\thispagestyle{empty}
\begin{document}
\begin{center}
\begin{tikzpicture}[
scale=0.5,transform shape,
font=\sffamily,
every matrix/.style={ampersand replacement=\&,column sep=2cm,row sep=2cm},
operator/.style={draw,solid,thick,circle,fill=red!20,inner sep=.3cm, blur shadow={shadow blur steps=5,shadow blur extra rounding=1.3pt}},
component/.style={draw,solid,thick,rounded corners,fill=yellow!20,inner sep=.3cm, blur shadow={shadow blur steps=5,shadow blur extra rounding=1.3pt}},
border/.style={draw,dashed,rounded corners,fill=gray!20,inner sep=.3cm, blur shadow={shadow blur steps=5,shadow blur extra rounding=1.3pt}},
pod/.style={draw,solid,thick,rounded corners,fill=blue!20, inner sep=.3cm, blur shadow={shadow blur steps=5,shadow blur extra rounding=1.3pt}},
service/.style={draw,solid,thick,rounded corners,fill=blue!20, inner sep=.3cm, blur shadow={shadow blur steps=5,shadow blur extra rounding=1.3pt}},
endpoint/.style={draw,solid,thick,rounded corners,fill=blue!20, blur shadow={shadow blur steps=5,shadow blur extra rounding=1.3pt}},
secret/.style={draw,solid,thick,rounded corners,fill=blue!20, blur shadow={shadow blur steps=5,shadow blur extra rounding=1.3pt}},
pvc/.style={draw,solid,thick,rounded corners,fill=blue!20, inner sep=.3cm, blur shadow={shadow blur steps=5,shadow blur extra rounding=1.3pt}},
label/.style={rectangle,inner sep=0,outer sep=0},
to/.style={->,>=stealth',shorten >=1pt,semithick,font=\sffamily\footnotesize},
every node/.style={align=center}]
% Position the nodes using a matrix layout
\matrix{
\& \node[component] (crd) {CRD}; \\
\& \node[operator] (operator) {Operator}; \\
\path
node[service] (service-master) {Master}
node[label, right of=service-master] (service-middle) {}
node[label, below of=service-middle] (services-label) {Services}
node[service, right=.5cm of service-master] (service-replica) {Replica}
node[border, behind path,
fit=(service-master)(service-replica)(services-label)
] (services) {};
\&
\node[component] (sts) {Statefulset}; \& \node[component] (pdb) {Pod Disruption Budget}; \\
\path
node[service] (master-endpoint) {Master}
node[service, right=.5cm of master-endpoint] (replica-endpoint) {Replica}
node[label, right of=master-endpoint] (endpoint-middle) {}
node[label, below of=endpoint-middle] (endpoint-label) {Endpoints}
node[border, behind path,
fit=(master-endpoint)(replica-endpoint)(endpoint-label)
] (endpoints) {}; \&
\node[component] (pod-template) {Pod Template}; \&
\node[border] (secrets) {
\begin{tikzpicture}[]
\node[secret] (users-secret) at (0, 0) {Users};
\node[secret] (robots-secret) at (2, 0) {Robots};
\node[secret] (standby-secret) at (4, 0) {Standby};
\end{tikzpicture} \\
Secrets
}; \\ \&
\path
node[pod] (replica1-pod) {Replica}
node[pod, left=.5cm of replica1-pod] (master-pod) {Master}
node[pod, right=.5cm of replica1-pod] (replica2-pod) {Replica}
node[label, below of=replica1-pod] (pod-label) {Pods}
node[border, behind path,
fit=(master-pod)(replica1-pod)(replica2-pod)(pod-label)
] (pods) {}; \\ \&
\path
node[pvc] (replica1-pvc) {Replica}
node[pvc, left=.5cm of replica1-pvc] (master-pvc) {Master}
node[pvc, right=.5cm of replica1-pvc] (replica2-pvc) {Replica}
node[label, below of=replica1-pvc] (pvc-label) {Persistent Volume Claims}
node[border, behind path,
fit=(master-pvc)(replica1-pvc)(replica2-pvc)(pvc-label)
] (pvcs) {}; \&
\\ \& \\
};
% Draw the arrows between the nodes and label them.
\draw[to] (crd) -- node[midway,above] {} node[midway,below] {} (operator);
\draw[to] (operator) -- node[midway,above] {} node[midway,below] {} (sts);
\draw[to] (operator) -- node[midway,above] {} node[midway,below] {} (secrets);
\draw[to] (operator) -| node[midway,above] {} node[midway,below] {} (pdb);
\draw[to] (service-master) -- node[midway,above] {} node[midway,below] {} (master-endpoint);
\draw[to] (service-replica) -- node[midway,above] {} node[midway,below] {} (replica-endpoint);
\draw[to] (master-pod) -- node[midway,above] {} node[midway,below] {} (master-pvc);
\draw[to] (replica1-pod) -- node[midway,above] {} node[midway,below] {} (replica1-pvc);
\draw[to] (replica2-pod) -- node[midway,above] {} node[midway,below] {} (replica2-pvc);
\draw[to] (operator) -| node[midway,above] {} node[midway,below] {} (services);
\draw[to] (sts) -- node[midway,above] {} node[midway,below] {} (pod-template);
\draw[to] (pod-template) -- node[midway,above] {} node[midway,below] {} (pods);
\end{tikzpicture}
\end{center}
\end{document}

Binary file not shown.

Before

Width:  |  Height:  |  Size: 236 KiB

View File

@ -1,92 +0,0 @@
\documentclass{article}
\usepackage{tikz}
\usepackage[graphics,tightpage,active]{preview}
\usetikzlibrary{arrows, shadows.blur, positioning, fit, calc, backgrounds}
\usepackage{lscape}
\pagenumbering{gobble}
\PreviewEnvironment{tikzpicture}
\PreviewEnvironment{equation}
\PreviewEnvironment{equation*}
\newlength{\imagewidth}
\newlength{\imagescale}
\pagestyle{empty}
\thispagestyle{empty}
\begin{document}
\begin{center}
\begin{tikzpicture}[
scale=0.5,transform shape,
font=\sffamily,
every matrix/.style={ampersand replacement=\&,column sep=2cm,row sep=2cm},
pod/.style={draw,solid,thick,circle,fill=red!20,inner sep=.3cm, blur shadow={shadow blur steps=5,shadow blur extra rounding=1.3pt}},
component/.style={draw,solid,thick,rounded corners,fill=yellow!20,inner sep=.3cm, blur shadow={shadow blur steps=5,shadow blur extra rounding=1.3pt}},
border/.style={draw,dashed,rounded corners,fill=gray!20,inner sep=.3cm, blur shadow={shadow blur steps=5,shadow blur extra rounding=1.3pt}},
volume/.style={draw,solid,thick,rounded corners,fill=blue!20, inner sep=.3cm, blur shadow={shadow blur steps=5,shadow blur extra rounding=1.3pt}},
sidecar/.style={draw,solid,thick,rounded corners,fill=blue!20, inner sep=.3cm, blur shadow={shadow blur steps=5,shadow blur extra rounding=1.3pt}},
k8s-label/.style={draw,solid,thick,rounded corners,fill=blue!20, minimum width=1.5cm, inner sep=.3cm, blur shadow={shadow blur steps=5,shadow blur extra rounding=1.3pt}},
affinity/.style={draw,solid,thick,rounded corners,fill=blue!20, minimum width=2cm, inner sep=.3cm, blur shadow={shadow blur steps=5,shadow blur extra rounding=1.3pt}},
label/.style={rectangle,inner sep=0,outer sep=0},
to/.style={->,>=stealth',shorten >=1pt,semithick,font=\sffamily\footnotesize},
every node/.style={align=center}]
% Position the nodes using a matrix layout
\matrix{
\path
node[k8s-label] (app-label) {App}
node[k8s-label, right=.25cm of app-label] (role-label) {Role}
node[k8s-label, right=.25cm of role-label] (custom-label) {Custom}
node[label, below of=role-label] (k8s-label-label) {K8s Labels}
node[border, behind path,
fit=(app-label)(role-label)(custom-label)(k8s-label-label)
] (k8s-labels) {}; \& \&
\path
node[affinity] (affinity) {Affinity}
node[label, right=.25cm of affinity] (affinity-middle) {}
node[affinity, right=.25cm of affinity-middle] (anti-affinity) {Anti-affinity}
node[label, below of=affinity-middle] (affinity-label) {Assigning to nodes}
node[border, behind path,
fit=(affinity)(anti-affinity)(affinity-label)
] (affinity) {}; \\
\& \node[pod] (pod) {Pod}; \& \\
\path
node[volume, minimum width={width("shm-volume")}] (data-volume) {Data}
node[volume, right=.25cm of data-volume, minimum width={width("shm-volume")}] (tokens-volume) {Tokens}
node[volume, right=.25cm of tokens-volume] (shm-volume) {/dev/shm}
node[label, below of=tokens-volume] (volumes-label) {Volumes}
node[border, behind path,
fit=(data-volume)(shm-volume)(tokens-volume)(volumes-label)
] (volumes) {}; \&
\node[component] (spilo) {Spilo}; \&
\node[sidecar] (scalyr) {Scalyr}; \& \\ \&
\path
node[component] (patroni) {Patroni}
node[component, below=.25cm of patroni] (postgres) {PostgreSQL}
node[border, behind path,
fit=(postgres)(patroni)
] (spilo-components) {}; \&
\path
node[sidecar] (custom-sidecar1) {User defined}
node[label, right=.25cm of custom-sidecar1] (sidecars-middle) {}
node[sidecar, right=.25cm of sidecars-middle] (custom-sidecar2) {User defined}
node[label, below of=sidecars-middle] (sidecars-label) {Custom sidecars}
node[border, behind path,
fit=(custom-sidecar1)(custom-sidecar2)(sidecars-label)
] (sidecars) {};
\\ \& \\
};
% Draw the arrows between the nodes and label them.
\draw[to] (pod) to [bend left=25] (volumes);
\draw[to] (pod) to [bend left=25] (k8s-labels);
\draw[to] (pod) to [bend right=25] (affinity);
\draw[to] (pod) to [bend right=25] (scalyr);
\draw[to] (pod) to [bend right=25] (sidecars);
\draw[to] (pod) -- node[midway,above] {} node[midway,below] {} (spilo);
\draw[to] (spilo) -- node[midway,above] {} node[midway,below] {} (spilo-components);
\end{tikzpicture}
\end{center}
\end{document}

View File

@ -47,15 +47,8 @@ flexibility to complement it with other tools like [ZMON](https://opensource.zal
Here is a diagram, that summarizes what would be created by the operator, when a Here is a diagram, that summarizes what would be created by the operator, when a
new Postgres cluster CRD is submitted: new Postgres cluster CRD is submitted:
![postgresql-operator](diagrams/operator.png "K8s resources, created by operator") ![Features](diagrams/neutral_operator_dark.png#gh-dark-mode-only)
![Features](diagrams/neutral_operator_light.png#gh-light-mode-only)
This picture is not complete without an overview of what is inside a single
cluster pod, so let's zoom in:
![pod](diagrams/pod.png "Database pod components")
These two diagrams should help you to understand the basics of what kind of
functionality the operator provides.
## Status ## Status

View File

@ -2,6 +2,12 @@
Version 2.0 changes some default settings and removes deprecated fields. Please read the following sections before upgrading the Postgres Operator deployment. Version 2.0 changes some default settings and removes deprecated fields. Please read the following sections before upgrading the Postgres Operator deployment.
## scram-sha-256 by default
The new operator will default password encryption to `scram-sha-256`. Unless you configure `password_encryption: md5` in the manifest under `spec.postgresql.parameters` the operator will encrypt existing passwords in the secrets with `scram-sha-256` and alter the database passwords. Make sure that your used clients and drivers support `scram-sha-256` as pods will get rotated in rolling fashion after updating to Postgres Operator v2.
The default Spilo image (`spilo-18:4.1-p2`) still configures the pg_hba.conf file to allow `md5` passwords but Postgres will validate `scram-sha-256` passwords correctly. Passwords of users that are not managed by the operator and are still `md5` encrypted need be altered before the next tagged Spilo image which will drop `md5` completely.
## K8s Endpoints are deprecated ## K8s Endpoints are deprecated
If your current operator v1.x deployment is relying on K8s endpoints (the default setup) for Patroni to manage the HA state you have to start planning to switch to configmaps, because endpoints are deprecated from K8s 1.33 onwards. The default of the corresponding parameter `kubernetes_use_configmaps` is changing to `true` with v2.0 of the operator. This means you have to explicity set it to `false` in your configuration before you start the upgrade. If your current operator v1.x deployment is relying on K8s endpoints (the default setup) for Patroni to manage the HA state you have to start planning to switch to configmaps, because endpoints are deprecated from K8s 1.33 onwards. The default of the corresponding parameter `kubernetes_use_configmaps` is changing to `true` with v2.0 of the operator. This means you have to explicity set it to `false` in your configuration before you start the upgrade.
@ -16,7 +22,6 @@ We explicitly warn you to go straight to configmap-based HA management with data
4. The orphaned endpoints, which use the same names like the new configmaps, have to be deleted by you or your K8s garbage collection. 4. The orphaned endpoints, which use the same names like the new configmaps, have to be deleted by you or your K8s garbage collection.
## Dropped manifest fields ## Dropped manifest fields
We removed some deprecated fields from the Postgresql CRD. Please, make sure that you do not specify them in any of your cluster manifests. If you do, switch to the listed alternative: We removed some deprecated fields from the Postgresql CRD. Please, make sure that you do not specify them in any of your cluster manifests. If you do, switch to the listed alternative:

View File

@ -839,7 +839,7 @@ grouped under the `logical_backup` key.
runs `pg_dumpall` on a replica if possible and uploads compressed results to runs `pg_dumpall` on a replica if possible and uploads compressed results to
an S3 bucket under the key `/<configured-s3-bucket-prefix>/<pg_cluster_name>/<cluster_k8s_uuid>/logical_backups`. an S3 bucket under the key `/<configured-s3-bucket-prefix>/<pg_cluster_name>/<cluster_k8s_uuid>/logical_backups`.
The default image is the same image built with the Zalando-internal CI The default image is the same image built with the Zalando-internal CI
pipeline. Default: "ghcr.io/zalando/postgres-operator/logical-backup:v1.15.1" pipeline. Default: "ghcr.io/zalando/postgres-operator/logical-backup:v2.0.0"
* **logical_backup_google_application_credentials** * **logical_backup_google_application_credentials**
Specifies the path of the google cloud service account json file. Default is empty. Specifies the path of the google cloud service account json file. Default is empty.

View File

@ -8,7 +8,7 @@ IFS=$'\n\t'
readonly cluster_name="postgres-operator-e2e-tests" readonly cluster_name="postgres-operator-e2e-tests"
readonly kubeconfig_path="${HOME}/kind-config-${cluster_name}" readonly kubeconfig_path="${HOME}/kind-config-${cluster_name}"
readonly spilo_image="ghcr.io/zalando/spilo-18:4.1-p1" readonly spilo_image="ghcr.io/zalando/spilo-18:4.1-p2"
readonly e2e_test_runner_image="ghcr.io/zalando/postgres-operator-e2e-tests-runner:latest" readonly e2e_test_runner_image="ghcr.io/zalando/postgres-operator-e2e-tests-runner:latest"
export GOPATH=${GOPATH-~/go} export GOPATH=${GOPATH-~/go}

View File

@ -14,7 +14,7 @@ from kubernetes.client.rest import ApiException
SPILO_CURRENT = "ghcr.io/zalando/spilo-e2e:dev-18.3" SPILO_CURRENT = "ghcr.io/zalando/spilo-e2e:dev-18.3"
SPILO_LAZY = "ghcr.io/zalando/spilo-e2e:dev-18.4" SPILO_LAZY = "ghcr.io/zalando/spilo-e2e:dev-18.4"
SPILO_FULL_IMAGE = "ghcr.io/zalando/spilo-18:4.1-p1" SPILO_FULL_IMAGE = "ghcr.io/zalando/spilo-18:4.1-p2"
def to_selector(labels): def to_selector(labels):
return ",".join(["=".join(lbl) for lbl in labels.items()]) return ",".join(["=".join(lbl) for lbl in labels.items()])

View File

@ -10,7 +10,7 @@ metadata:
# "delete-date": "2020-08-31" # can only be deleted on that day if "delete-date "key is configured # "delete-date": "2020-08-31" # can only be deleted on that day if "delete-date "key is configured
# "delete-clustername": "acid-test-cluster" # can only be deleted when name matches if "delete-clustername" key is configured # "delete-clustername": "acid-test-cluster" # can only be deleted when name matches if "delete-clustername" key is configured
spec: spec:
dockerImage: ghcr.io/zalando/spilo-18:4.1-p1 dockerImage: ghcr.io/zalando/spilo-18:4.1-p2
teamId: "acid" teamId: "acid"
numberOfInstances: 2 numberOfInstances: 2
users: # Application/Robot users users: # Application/Robot users

View File

@ -35,7 +35,7 @@ data:
default_memory_request: 100Mi default_memory_request: 100Mi
# delete_annotation_date_key: delete-date # delete_annotation_date_key: delete-date
# delete_annotation_name_key: delete-clustername # delete_annotation_name_key: delete-clustername
docker_image: ghcr.io/zalando/spilo-18:4.1-p1 docker_image: ghcr.io/zalando/spilo-18:4.1-p2
# downscaler_annotations: "deployment-time,downscaler/*" # downscaler_annotations: "deployment-time,downscaler/*"
enable_admin_role_for_users: "true" enable_admin_role_for_users: "true"
enable_crd_registration: "true" enable_crd_registration: "true"
@ -87,7 +87,7 @@ data:
# logical_backup_cpu_limit: "" # logical_backup_cpu_limit: ""
# logical_backup_cpu_request: "" # logical_backup_cpu_request: ""
logical_backup_cronjob_environment_secret: "" logical_backup_cronjob_environment_secret: ""
logical_backup_docker_image: "ghcr.io/zalando/postgres-operator/logical-backup:v1.15.1" logical_backup_docker_image: "ghcr.io/zalando/postgres-operator/logical-backup:v2.0.0"
# logical_backup_google_application_credentials: "" # logical_backup_google_application_credentials: ""
logical_backup_job_prefix: "logical-backup-" logical_backup_job_prefix: "logical-backup-"
# logical_backup_memory_limit: "" # logical_backup_memory_limit: ""

View File

@ -139,7 +139,7 @@ spec:
type: boolean type: boolean
type: object type: object
docker_image: docker_image:
default: ghcr.io/zalando/spilo-18:4.1-p1 default: ghcr.io/zalando/spilo-18:4.1-p2
type: string type: string
enable_crd_registration: enable_crd_registration:
default: true default: true
@ -228,24 +228,7 @@ spec:
type: string type: string
type: array type: array
infrastructure_roles_secret_name: infrastructure_roles_secret_name:
description: |-
NamespacedName comprises a resource name, with a mandatory namespace,
rendered as "<namespace>/<name>". Being a type captures intent and
helps make sure that UIDs, namespaced names and non-namespaced names
do not get conflated in code. For most use cases, namespace and name
will already have been format validated at the API entry point, so we
don't do that here. Where that's not the case (e.g. in testing),
consider using NamespacedNameOrDie() in testing.go in this package.
from: https://github.com/kubernetes/apimachinery/blob/master/pkg/types/namespacedname.go
properties:
name:
type: string type: string
namespace:
type: string
required:
- name
type: object
infrastructure_roles_secrets: infrastructure_roles_secrets:
description: namespaced name of the secret containing infrastructure description: namespaced name of the secret containing infrastructure
roles names and passwords roles names and passwords
@ -267,14 +250,7 @@ spec:
description: |- description: |-
Name of a secret which describes the role, and optionally name of a Name of a secret which describes the role, and optionally name of a
configmap with an extra information configmap with an extra information
properties:
name:
type: string type: string
namespace:
type: string
required:
- name
type: object
template: template:
type: boolean type: boolean
userkey: userkey:
@ -460,14 +436,7 @@ spec:
default: postgres-operator default: postgres-operator
description: namespaced name of the secret containing the OAuth2 description: namespaced name of the secret containing the OAuth2
token to pass to the teams API token to pass to the teams API
properties:
name:
type: string type: string
namespace:
type: string
required:
- name
type: object
pdb_master_label_selector: pdb_master_label_selector:
default: true default: true
type: boolean type: boolean
@ -487,14 +456,7 @@ spec:
pod_environment_configmap: pod_environment_configmap:
description: namespaced name of the ConfigMap with environment description: namespaced name of the ConfigMap with environment
variables to populate on every pod variables to populate on every pod
properties:
name:
type: string type: string
namespace:
type: string
required:
- name
type: object
pod_environment_secret: pod_environment_secret:
type: string type: string
pod_management_policy: pod_management_policy:
@ -646,7 +608,7 @@ spec:
logical_backup_cronjob_environment_secret: logical_backup_cronjob_environment_secret:
type: string type: string
logical_backup_docker_image: logical_backup_docker_image:
default: ghcr.io/zalando/postgres-operator/logical-backup:v1.15.1 default: ghcr.io/zalando/postgres-operator/logical-backup:v2.0.0
type: string type: string
logical_backup_failed_jobs_history_limit: logical_backup_failed_jobs_history_limit:
default: 3 default: 3

View File

@ -19,7 +19,7 @@ spec:
serviceAccountName: postgres-operator serviceAccountName: postgres-operator
containers: containers:
- name: postgres-operator - name: postgres-operator
image: ghcr.io/zalando/postgres-operator:v1.15.1 image: ghcr.io/zalando/postgres-operator:v2.0.0
imagePullPolicy: IfNotPresent imagePullPolicy: IfNotPresent
resources: resources:
requests: requests:

View File

@ -3,7 +3,7 @@ kind: OperatorConfiguration
metadata: metadata:
name: postgresql-operator-default-configuration name: postgresql-operator-default-configuration
configuration: configuration:
docker_image: ghcr.io/zalando/spilo-18:4.1-p1 docker_image: ghcr.io/zalando/spilo-18:4.1-p2
# enable_crd_registration: true # enable_crd_registration: true
# crd_categories: # crd_categories:
# - all # - all
@ -182,7 +182,7 @@ configuration:
# logical_backup_cpu_request: "" # logical_backup_cpu_request: ""
# logical_backup_memory_limit: "" # logical_backup_memory_limit: ""
# logical_backup_memory_request: "" # logical_backup_memory_request: ""
logical_backup_docker_image: "ghcr.io/zalando/postgres-operator/logical-backup:v1.15.1" logical_backup_docker_image: "ghcr.io/zalando/postgres-operator/logical-backup:v2.0.0"
# logical_backup_google_application_credentials: "" # logical_backup_google_application_credentials: ""
logical_backup_job_prefix: "logical-backup-" logical_backup_job_prefix: "logical-backup-"
logical_backup_provider: "s3" logical_backup_provider: "s3"

View File

@ -5,6 +5,7 @@ theme: readthedocs
nav: nav:
- Concepts: 'index.md' - Concepts: 'index.md'
- Quickstart: 'quickstart.md' - Quickstart: 'quickstart.md'
- Migration from v1: 'migrate.md'
- Postgres Operator UI: 'operator-ui.md' - Postgres Operator UI: 'operator-ui.md'
- Admin guide: 'administrator.md' - Admin guide: 'administrator.md'
- User guide: 'user.md' - User guide: 'user.md'

View File

@ -353,7 +353,7 @@ type OperatorLogicalBackupConfiguration struct {
// +kubebuilder:validation:Pattern=`^(\d+|\*)(/\d+)?(\s+(\d+|\*)(/\d+)?){4}$` // +kubebuilder:validation:Pattern=`^(\d+|\*)(/\d+)?(\s+(\d+|\*)(/\d+)?){4}$`
// +kubebuilder:default="30 00 * * *" // +kubebuilder:default="30 00 * * *"
Schedule string `json:"logical_backup_schedule,omitempty"` Schedule string `json:"logical_backup_schedule,omitempty"`
// +kubebuilder:default="ghcr.io/zalando/postgres-operator/logical-backup:v1.15.1" // +kubebuilder:default="ghcr.io/zalando/postgres-operator/logical-backup:v2.0.0"
DockerImage string `json:"logical_backup_docker_image,omitempty"` DockerImage string `json:"logical_backup_docker_image,omitempty"`
// +kubebuilder:validation:Enum=az;gcs;s3 // +kubebuilder:validation:Enum=az;gcs;s3
// +kubebuilder:default=s3 // +kubebuilder:default=s3
@ -411,7 +411,7 @@ type OperatorConfigurationData struct {
EtcdHost string `json:"etcd_host,omitempty"` EtcdHost string `json:"etcd_host,omitempty"`
// +kubebuilder:default=true // +kubebuilder:default=true
KubernetesUseConfigMaps *bool `json:"kubernetes_use_configmaps,omitempty"` KubernetesUseConfigMaps *bool `json:"kubernetes_use_configmaps,omitempty"`
// +kubebuilder:default="ghcr.io/zalando/spilo-18:4.1-p1" // +kubebuilder:default="ghcr.io/zalando/spilo-18:4.1-p2"
DockerImage string `json:"docker_image,omitempty"` DockerImage string `json:"docker_image,omitempty"`
// +kubebuilder:validation:Minimum=1 // +kubebuilder:validation:Minimum=1
// +kubebuilder:default=8 // +kubebuilder:default=8

View File

@ -139,7 +139,7 @@ spec:
type: boolean type: boolean
type: object type: object
docker_image: docker_image:
default: ghcr.io/zalando/spilo-18:4.1-p1 default: ghcr.io/zalando/spilo-18:4.1-p2
type: string type: string
enable_crd_registration: enable_crd_registration:
default: true default: true
@ -228,24 +228,7 @@ spec:
type: string type: string
type: array type: array
infrastructure_roles_secret_name: infrastructure_roles_secret_name:
description: |-
NamespacedName comprises a resource name, with a mandatory namespace,
rendered as "<namespace>/<name>". Being a type captures intent and
helps make sure that UIDs, namespaced names and non-namespaced names
do not get conflated in code. For most use cases, namespace and name
will already have been format validated at the API entry point, so we
don't do that here. Where that's not the case (e.g. in testing),
consider using NamespacedNameOrDie() in testing.go in this package.
from: https://github.com/kubernetes/apimachinery/blob/master/pkg/types/namespacedname.go
properties:
name:
type: string type: string
namespace:
type: string
required:
- name
type: object
infrastructure_roles_secrets: infrastructure_roles_secrets:
description: namespaced name of the secret containing infrastructure description: namespaced name of the secret containing infrastructure
roles names and passwords roles names and passwords
@ -267,14 +250,7 @@ spec:
description: |- description: |-
Name of a secret which describes the role, and optionally name of a Name of a secret which describes the role, and optionally name of a
configmap with an extra information configmap with an extra information
properties:
name:
type: string type: string
namespace:
type: string
required:
- name
type: object
template: template:
type: boolean type: boolean
userkey: userkey:
@ -460,14 +436,7 @@ spec:
default: postgres-operator default: postgres-operator
description: namespaced name of the secret containing the OAuth2 description: namespaced name of the secret containing the OAuth2
token to pass to the teams API token to pass to the teams API
properties:
name:
type: string type: string
namespace:
type: string
required:
- name
type: object
pdb_master_label_selector: pdb_master_label_selector:
default: true default: true
type: boolean type: boolean
@ -487,14 +456,7 @@ spec:
pod_environment_configmap: pod_environment_configmap:
description: namespaced name of the ConfigMap with environment description: namespaced name of the ConfigMap with environment
variables to populate on every pod variables to populate on every pod
properties:
name:
type: string type: string
namespace:
type: string
required:
- name
type: object
pod_environment_secret: pod_environment_secret:
type: string type: string
pod_management_policy: pod_management_policy:
@ -646,7 +608,7 @@ spec:
logical_backup_cronjob_environment_secret: logical_backup_cronjob_environment_secret:
type: string type: string
logical_backup_docker_image: logical_backup_docker_image:
default: ghcr.io/zalando/postgres-operator/logical-backup:v1.15.1 default: ghcr.io/zalando/postgres-operator/logical-backup:v2.0.0
type: string type: string
logical_backup_failed_jobs_history_limit: logical_backup_failed_jobs_history_limit:
default: 3 default: 3

View File

@ -1692,8 +1692,8 @@ func newCronJob(image, schedule string, vars []v1.EnvVar, mounts []v1.VolumeMoun
func TestCompareLogicalBackupJob(t *testing.T) { func TestCompareLogicalBackupJob(t *testing.T) {
img1 := "ghcr.io/zalando/postgres-operator/logical-backup:v1.14.0" img1 := "ghcr.io/zalando/postgres-operator/logical-backup:v1.15.1"
img2 := "ghcr.io/zalando/postgres-operator/logical-backup:v1.15.1" img2 := "ghcr.io/zalando/postgres-operator/logical-backup:v2.0.0"
clientSet := fake.NewSimpleClientset() clientSet := fake.NewSimpleClientset()
acidClientSet := fakeacidv1.NewSimpleClientset() acidClientSet := fakeacidv1.NewSimpleClientset()

View File

@ -36,7 +36,7 @@ func (c *Controller) importConfigurationFromCRD(fromCRD *acidv1.OperatorConfigur
result.EnableTeamIdClusternamePrefix = fromCRD.EnableTeamIdClusternamePrefix result.EnableTeamIdClusternamePrefix = fromCRD.EnableTeamIdClusternamePrefix
result.EtcdHost = fromCRD.EtcdHost result.EtcdHost = fromCRD.EtcdHost
result.KubernetesUseConfigMaps = util.CoalesceBool(fromCRD.KubernetesUseConfigMaps, util.True()) result.KubernetesUseConfigMaps = util.CoalesceBool(fromCRD.KubernetesUseConfigMaps, util.True())
result.DockerImage = util.Coalesce(fromCRD.DockerImage, "ghcr.io/zalando/spilo-18:4.1-p1") result.DockerImage = util.Coalesce(fromCRD.DockerImage, "ghcr.io/zalando/spilo-18:4.1-p2")
result.Workers = util.CoalesceUInt32(fromCRD.Workers, 8) result.Workers = util.CoalesceUInt32(fromCRD.Workers, 8)
result.MinInstances = fromCRD.MinInstances result.MinInstances = fromCRD.MinInstances
result.MaxInstances = fromCRD.MaxInstances result.MaxInstances = fromCRD.MaxInstances
@ -184,7 +184,7 @@ func (c *Controller) importConfigurationFromCRD(fromCRD *acidv1.OperatorConfigur
// logical backup config // logical backup config
result.LogicalBackupSchedule = util.Coalesce(fromCRD.LogicalBackup.Schedule, "30 00 * * *") result.LogicalBackupSchedule = util.Coalesce(fromCRD.LogicalBackup.Schedule, "30 00 * * *")
result.LogicalBackupDockerImage = util.Coalesce(fromCRD.LogicalBackup.DockerImage, "ghcr.io/zalando/postgres-operator/logical-backup:v1.15.1") result.LogicalBackupDockerImage = util.Coalesce(fromCRD.LogicalBackup.DockerImage, "ghcr.io/zalando/postgres-operator/logical-backup:v2.0.0")
result.LogicalBackupProvider = util.Coalesce(fromCRD.LogicalBackup.BackupProvider, "s3") result.LogicalBackupProvider = util.Coalesce(fromCRD.LogicalBackup.BackupProvider, "s3")
result.LogicalBackupAzureStorageAccountName = fromCRD.LogicalBackup.AzureStorageAccountName result.LogicalBackupAzureStorageAccountName = fromCRD.LogicalBackup.AzureStorageAccountName
result.LogicalBackupAzureStorageAccountKey = fromCRD.LogicalBackup.AzureStorageAccountKey result.LogicalBackupAzureStorageAccountKey = fromCRD.LogicalBackup.AzureStorageAccountKey

View File

@ -23,6 +23,11 @@ import (
// consider using NamespacedNameOrDie() in testing.go in this package. // consider using NamespacedNameOrDie() in testing.go in this package.
// //
// from: https://github.com/kubernetes/apimachinery/blob/master/pkg/types/namespacedname.go // from: https://github.com/kubernetes/apimachinery/blob/master/pkg/types/namespacedname.go
//
// NamespacedName marshals to and unmarshals from a plain JSON string
// ("<namespace>/<name>") via its custom MarshalJSON/UnmarshalJSON, so its CRD
// schema must be a string rather than the struct controller-gen would infer.
// +kubebuilder:validation:Type=string
type NamespacedName struct { type NamespacedName struct {
Namespace string `json:"namespace,omitempty"` Namespace string `json:"namespace,omitempty"`
Name string `json:"name"` Name string `json:"name"`

View File

@ -128,7 +128,7 @@ type Scalyr struct {
// LogicalBackup defines configuration for logical backup // LogicalBackup defines configuration for logical backup
type LogicalBackup struct { type LogicalBackup struct {
LogicalBackupSchedule string `name:"logical_backup_schedule" default:"30 00 * * *"` LogicalBackupSchedule string `name:"logical_backup_schedule" default:"30 00 * * *"`
LogicalBackupDockerImage string `name:"logical_backup_docker_image" default:"ghcr.io/zalando/postgres-operator/logical-backup:v1.15.1"` LogicalBackupDockerImage string `name:"logical_backup_docker_image" default:"ghcr.io/zalando/postgres-operator/logical-backup:v2.0.0"`
LogicalBackupProvider string `name:"logical_backup_provider" default:"s3"` LogicalBackupProvider string `name:"logical_backup_provider" default:"s3"`
LogicalBackupAzureStorageAccountName string `name:"logical_backup_azure_storage_account_name" default:""` LogicalBackupAzureStorageAccountName string `name:"logical_backup_azure_storage_account_name" default:""`
LogicalBackupAzureStorageContainer string `name:"logical_backup_azure_storage_container" default:""` LogicalBackupAzureStorageContainer string `name:"logical_backup_azure_storage_container" default:""`
@ -182,7 +182,7 @@ type Config struct {
EtcdHost string `name:"etcd_host" default:""` // special values: the empty string "" means Patroni will use K8s as a DCS EtcdHost string `name:"etcd_host" default:""` // special values: the empty string "" means Patroni will use K8s as a DCS
EnableMaintenanceWindows *bool `name:"enable_maintenance_windows" default:"true"` EnableMaintenanceWindows *bool `name:"enable_maintenance_windows" default:"true"`
MaintenanceWindows []string `name:"maintenance_windows"` MaintenanceWindows []string `name:"maintenance_windows"`
DockerImage string `name:"docker_image" default:"ghcr.io/zalando/spilo-18:4.1-p1"` DockerImage string `name:"docker_image" default:"ghcr.io/zalando/spilo-18:4.1-p2"`
SidecarImages map[string]string `name:"sidecar_docker_images"` // deprecated in favour of SidecarContainers SidecarImages map[string]string `name:"sidecar_docker_images"` // deprecated in favour of SidecarContainers
SidecarContainers []v1.Container `name:"sidecars"` SidecarContainers []v1.Container `name:"sidecars"`
PodServiceAccountName string `name:"pod_service_account_name" default:"postgres-pod"` PodServiceAccountName string `name:"pod_service_account_name" default:"postgres-pod"`

View File

@ -1,6 +1,6 @@
{ {
"name": "postgres-operator-ui", "name": "postgres-operator-ui",
"version": "1.15.1", "version": "2.0.0",
"description": "PostgreSQL Operator UI", "description": "PostgreSQL Operator UI",
"main": "src/app.js", "main": "src/app.js",
"config": { "config": {

View File

@ -18,7 +18,7 @@ spec:
serviceAccountName: postgres-operator-ui serviceAccountName: postgres-operator-ui
containers: containers:
- name: "service" - name: "service"
image: ghcr.io/zalando/postgres-operator-ui:v1.15.1 image: ghcr.io/zalando/postgres-operator-ui:v2.0.0
ports: ports:
- containerPort: 8081 - containerPort: 8081
protocol: "TCP" protocol: "TCP"

View File

@ -35,7 +35,7 @@ default_operator_ui_config='{
"17", "17",
"16", "16",
"15", "15",
"14", "14"
], ],
"static_network_whitelist": { "static_network_whitelist": {
"localhost": ["172.0.0.1/32"] "localhost": ["172.0.0.1/32"]