From 4f8da7639e8538446353a513cc16e70e43e5d887 Mon Sep 17 00:00:00 2001 From: Felix Kunde Date: Tue, 5 Nov 2019 18:48:16 +0100 Subject: [PATCH 1/9] pass only default resources to logical backup pod --- pkg/cluster/k8sres.go | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/pkg/cluster/k8sres.go b/pkg/cluster/k8sres.go index 78d128387..e1c8fa598 100644 --- a/pkg/cluster/k8sres.go +++ b/pkg/cluster/k8sres.go @@ -1426,9 +1426,8 @@ func (c *Cluster) generateLogicalBackupJob() (*batchv1beta1.CronJob, error) { c.logger.Debug("Generating logical backup pod template") - // allocate for the backup pod the same amount of resources as for normal DB pods - defaultResources := c.makeDefaultResources() - resourceRequirements, err = generateResourceRequirements(c.Spec.Resources, defaultResources) + // allocate only default resources for the backup pod + resourceRequirements, err = generateResourceRequirements(acidv1.Resources{}, c.makeDefaultResources()) if err != nil { return nil, fmt.Errorf("could not generate resource requirements for logical backup pods: %v", err) } From 1ac298244ca198fc28ff866eefaa8f35c89c92b7 Mon Sep 17 00:00:00 2001 From: Felix Kunde Date: Fri, 15 Nov 2019 15:25:15 +0100 Subject: [PATCH 2/9] document change --- docs/administrator.md | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/docs/administrator.md b/docs/administrator.md index ab5368e7d..a44ec7621 100644 --- a/docs/administrator.md +++ b/docs/administrator.md @@ -406,6 +406,12 @@ of the backup cron job. `cronjobs` resource from the `batch` API group for the operator service account. See [example RBAC](../manifests/operator-service-account-rbac.yaml) +6. Resources of the backup pod are only determined by the configured +[default values](reference/operator_parameters.md#kubernetes-resource-requests) +not by the values specified in the Postgres cluster manifest. This allows for +choosing lower values for CPU and memory requests/limits than for the database +pods. + ## Access to cloud resources from clusters in non-cloud environment To access cloud resources like S3 from a cluster on bare metal you can use From 2fdd11cb8e90d0715ba86a4518817e55ac4314c9 Mon Sep 17 00:00:00 2001 From: Felix Kunde Date: Tue, 26 Nov 2019 10:57:38 +0100 Subject: [PATCH 3/9] remove duplicate config parameter under wrong key --- manifests/postgresql-operator-default-configuration.yaml | 1 - 1 file changed, 1 deletion(-) diff --git a/manifests/postgresql-operator-default-configuration.yaml b/manifests/postgresql-operator-default-configuration.yaml index 94f91f1f0..3b30b7818 100644 --- a/manifests/postgresql-operator-default-configuration.yaml +++ b/manifests/postgresql-operator-default-configuration.yaml @@ -74,7 +74,6 @@ configuration: # log_s3_bucket: "" # wal_s3_bucket: "" logical_backup: - log_s3_bucket: "" logical_backup_docker_image: "registry.opensource.zalan.do/acid/logical-backup" logical_backup_s3_access_key_id: "" logical_backup_s3_bucket: "my-bucket-url" From 81bd4106634d76ad7f4c91014842b6a43c797591 Mon Sep 17 00:00:00 2001 From: Felix Kunde Date: Wed, 4 Jan 2023 17:28:21 +0100 Subject: [PATCH 4/9] remove obsolete docs --- docs/administrator.md | 6 ------ 1 file changed, 6 deletions(-) diff --git a/docs/administrator.md b/docs/administrator.md index dc85b08a6..35e47d526 100644 --- a/docs/administrator.md +++ b/docs/administrator.md @@ -844,12 +844,6 @@ maintaining and troubleshooting, and (c) additional teams, superuser teams or members associated with the owning team. The latter is managed via the [PostgresTeam CRD](user.md#additional-teams-and-members-per-cluster). -6. Resources of the backup pod are only determined by the configured -[default values](reference/operator_parameters.md#kubernetes-resource-requests) -not by the values specified in the Postgres cluster manifest. This allows for -choosing lower values for CPU and memory requests/limits than for the database -pods. - ## Access to cloud resources from clusters in non-cloud environment To access cloud resources like S3 from a cluster on bare metal you can use From 4a7c09ff777f9a2f06762d1dfd9cdfc37fb53b15 Mon Sep 17 00:00:00 2001 From: Felix Kunde Date: Wed, 4 Jan 2023 17:31:26 +0100 Subject: [PATCH 5/9] swap limit and request --- charts/postgres-operator/crds/operatorconfigurations.yaml | 4 ++-- charts/postgres-operator/values.yaml | 2 +- docs/reference/operator_parameters.md | 2 +- manifests/configmap.yaml | 2 +- manifests/operatorconfiguration.crd.yaml | 4 ++-- manifests/postgresql-operator-default-configuration.yaml | 2 +- pkg/apis/acid.zalan.do/v1/crds.go | 4 ++-- 7 files changed, 10 insertions(+), 10 deletions(-) diff --git a/charts/postgres-operator/crds/operatorconfigurations.yaml b/charts/postgres-operator/crds/operatorconfigurations.yaml index 81e5a5dbe..a953245d2 100644 --- a/charts/postgres-operator/crds/operatorconfigurations.yaml +++ b/charts/postgres-operator/crds/operatorconfigurations.yaml @@ -483,10 +483,10 @@ spec: logical_backup_job_prefix: type: string default: "logical-backup-" - logical_backup_memory_request: + logical_backup_memory_limit: type: string pattern: '^(\d+(e\d+)?|\d+(\.\d+)?(e\d+)?[EPTGMK]i?)$' - logical_backup_memory_limit: + logical_backup_memory_request: type: string pattern: '^(\d+(e\d+)?|\d+(\.\d+)?(e\d+)?[EPTGMK]i?)$' logical_backup_provider: diff --git a/charts/postgres-operator/values.yaml b/charts/postgres-operator/values.yaml index 55ea52b52..00c1779c2 100644 --- a/charts/postgres-operator/values.yaml +++ b/charts/postgres-operator/values.yaml @@ -335,8 +335,8 @@ configLogicalBackup: # resources for logical backup pod, if empty configPostgresPodResources will be used # logical_backup_cpu_limit: "" # logical_backup_cpu_request: "" - # logical_backup_memory_request: "" # logical_backup_memory_limit: "" + # logical_backup_memory_request: "" # image for pods of the logical backup job (example runs pg_dumpall) logical_backup_docker_image: "registry.opensource.zalan.do/acid/logical-backup:v1.8.0" diff --git a/docs/reference/operator_parameters.md b/docs/reference/operator_parameters.md index b78bab881..ecdb6cb78 100644 --- a/docs/reference/operator_parameters.md +++ b/docs/reference/operator_parameters.md @@ -720,8 +720,8 @@ grouped under the `logical_backup` key. * **logical_backup_cpu_limit** **logical_backup_cpu_request** - **logical_backup_memory_request** **logical_backup_memory_limit** + **logical_backup_memory_request** Resource configuration for pod template in logical backup cron job. If empty default values from `postgres_pod_resources` will be used. diff --git a/manifests/configmap.yaml b/manifests/configmap.yaml index bcb24964c..94d8ec72a 100644 --- a/manifests/configmap.yaml +++ b/manifests/configmap.yaml @@ -80,8 +80,8 @@ data: logical_backup_docker_image: "registry.opensource.zalan.do/acid/logical-backup:v1.8.2" # logical_backup_google_application_credentials: "" logical_backup_job_prefix: "logical-backup-" - # logical_backup_memory_request: "" # logical_backup_memory_limit: "" + # logical_backup_memory_request: "" logical_backup_provider: "s3" # logical_backup_s3_access_key_id: "" logical_backup_s3_bucket: "my-bucket-url" diff --git a/manifests/operatorconfiguration.crd.yaml b/manifests/operatorconfiguration.crd.yaml index 65c3a8c4d..26bee61ea 100644 --- a/manifests/operatorconfiguration.crd.yaml +++ b/manifests/operatorconfiguration.crd.yaml @@ -481,10 +481,10 @@ spec: logical_backup_job_prefix: type: string default: "logical-backup-" - logical_backup_memory_request: + logical_backup_memory_limit: type: string pattern: '^(\d+(e\d+)?|\d+(\.\d+)?(e\d+)?[EPTGMK]i?)$' - logical_backup_memory_limit: + logical_backup_memory_request: type: string pattern: '^(\d+(e\d+)?|\d+(\.\d+)?(e\d+)?[EPTGMK]i?)$' logical_backup_provider: diff --git a/manifests/postgresql-operator-default-configuration.yaml b/manifests/postgresql-operator-default-configuration.yaml index aec8d34b9..ebb3b352c 100644 --- a/manifests/postgresql-operator-default-configuration.yaml +++ b/manifests/postgresql-operator-default-configuration.yaml @@ -153,8 +153,8 @@ configuration: logical_backup: # logical_backup_cpu_limit: "" # logical_backup_cpu_request: "" - # logical_backup_memory_request: "" # logical_backup_memory_limit: "" + # logical_backup_memory_request: "" logical_backup_docker_image: "registry.opensource.zalan.do/acid/logical-backup:v1.8.2" # logical_backup_google_application_credentials: "" logical_backup_job_prefix: "logical-backup-" diff --git a/pkg/apis/acid.zalan.do/v1/crds.go b/pkg/apis/acid.zalan.do/v1/crds.go index 5ef7fd341..8721f2050 100644 --- a/pkg/apis/acid.zalan.do/v1/crds.go +++ b/pkg/apis/acid.zalan.do/v1/crds.go @@ -1635,11 +1635,11 @@ var OperatorConfigCRDResourceValidation = apiextv1.CustomResourceValidation{ "logical_backup_job_prefix": { Type: "string", }, - "logical_backup_memory_request": { + "logical_backup_memory_limit": { Type: "string", Pattern: "^(\\d+(e\\d+)?|\\d+(\\.\\d+)?(e\\d+)?[EPTGMK]i?)$", }, - "logical_backup_memory_limit": { + "logical_backup_memory_request": { Type: "string", Pattern: "^(\\d+(e\\d+)?|\\d+(\\.\\d+)?(e\\d+)?[EPTGMK]i?)$", }, From 190df18885d9a90b23f224fe37f4b08f3694a907 Mon Sep 17 00:00:00 2001 From: Felix Kunde Date: Wed, 4 Jan 2023 17:33:48 +0100 Subject: [PATCH 6/9] json not name in opconfig api --- pkg/apis/acid.zalan.do/v1/operator_configuration_type.go | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/pkg/apis/acid.zalan.do/v1/operator_configuration_type.go b/pkg/apis/acid.zalan.do/v1/operator_configuration_type.go index 0fe6bbb0c..85cc192c8 100644 --- a/pkg/apis/acid.zalan.do/v1/operator_configuration_type.go +++ b/pkg/apis/acid.zalan.do/v1/operator_configuration_type.go @@ -227,10 +227,10 @@ type OperatorLogicalBackupConfiguration struct { RetentionTime string `json:"logical_backup_s3_retention_time,omitempty"` GoogleApplicationCredentials string `json:"logical_backup_google_application_credentials,omitempty"` JobPrefix string `json:"logical_backup_job_prefix,omitempty"` - CPURequest string `name:"logical_backup_cpu_request"` - MemoryRequest string `name:"logical_backup_memory_request"` - CPULimit string `name:"logical_backup_cpu_limit"` - MemoryLimit string `name:"logical_backup_memory_limit"` + CPURequest string `json:"logical_backup_cpu_request"` + MemoryRequest string `json:"logical_backup_memory_request"` + CPULimit string `json:"logical_backup_cpu_limit"` + MemoryLimit string `json:"logical_backup_memory_limit"` } // PatroniConfiguration defines configuration for Patroni From ea9523c6195d910ee1c258e31eeaa094dc3dfa2e Mon Sep 17 00:00:00 2001 From: Felix Kunde Date: Wed, 4 Jan 2023 17:34:31 +0100 Subject: [PATCH 7/9] and omitempty --- pkg/apis/acid.zalan.do/v1/operator_configuration_type.go | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/pkg/apis/acid.zalan.do/v1/operator_configuration_type.go b/pkg/apis/acid.zalan.do/v1/operator_configuration_type.go index 85cc192c8..822aa855c 100644 --- a/pkg/apis/acid.zalan.do/v1/operator_configuration_type.go +++ b/pkg/apis/acid.zalan.do/v1/operator_configuration_type.go @@ -227,10 +227,10 @@ type OperatorLogicalBackupConfiguration struct { RetentionTime string `json:"logical_backup_s3_retention_time,omitempty"` GoogleApplicationCredentials string `json:"logical_backup_google_application_credentials,omitempty"` JobPrefix string `json:"logical_backup_job_prefix,omitempty"` - CPURequest string `json:"logical_backup_cpu_request"` - MemoryRequest string `json:"logical_backup_memory_request"` - CPULimit string `json:"logical_backup_cpu_limit"` - MemoryLimit string `json:"logical_backup_memory_limit"` + CPURequest string `json:"logical_backup_cpu_request,omitempty"` + MemoryRequest string `json:"logical_backup_memory_request,omitempty"` + CPULimit string `json:"logical_backup_cpu_limit,omitempty"` + MemoryLimit string `json:"logical_backup_memory_limit,omitempty"` } // PatroniConfiguration defines configuration for Patroni From 58bc93af6e8c7ea7f4dc5a15098934b898f01ccd Mon Sep 17 00:00:00 2001 From: Felix Kunde Date: Wed, 4 Jan 2023 17:47:43 +0100 Subject: [PATCH 8/9] fix unit test for stream comparison --- pkg/cluster/streams_test.go | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/pkg/cluster/streams_test.go b/pkg/cluster/streams_test.go index 1e59e0f86..00f18b7a2 100644 --- a/pkg/cluster/streams_test.go +++ b/pkg/cluster/streams_test.go @@ -2,7 +2,6 @@ package cluster import ( "fmt" - "reflect" "strings" "context" @@ -389,7 +388,7 @@ func TestUpdateFabricEventStream(t *testing.T) { assert.NoError(t, err) result := cluster.generateFabricEventStream(appId) - if !reflect.DeepEqual(result.Spec.EventStreams, streams.Items[0].Spec.EventStreams) { + if match, _ := sameStreams(streams.Items[0].Spec.EventStreams, result.Spec.EventStreams); !match { t.Errorf("Malformed FabricEventStream, expected %#v, got %#v", streams.Items[0], result) } } From f6c6e379b830a6b6b916e389f983bf0139074c86 Mon Sep 17 00:00:00 2001 From: Felix Kunde Date: Thu, 5 Jan 2023 14:49:14 +0100 Subject: [PATCH 9/9] define enum for logical_backup_provider --- .../crds/operatorconfigurations.yaml | 4 ++++ charts/postgres-operator/values.yaml | 2 +- docker/logical-backup/dump.sh | 2 +- docs/reference/operator_parameters.md | 22 +++++++++---------- manifests/operatorconfiguration.crd.yaml | 4 ++++ pkg/apis/acid.zalan.do/v1/crds.go | 11 ++++++++++ 6 files changed, 32 insertions(+), 13 deletions(-) diff --git a/charts/postgres-operator/crds/operatorconfigurations.yaml b/charts/postgres-operator/crds/operatorconfigurations.yaml index 8ae5909de..e10296659 100644 --- a/charts/postgres-operator/crds/operatorconfigurations.yaml +++ b/charts/postgres-operator/crds/operatorconfigurations.yaml @@ -497,6 +497,10 @@ spec: pattern: '^(\d+(e\d+)?|\d+(\.\d+)?(e\d+)?[EPTGMK]i?)$' logical_backup_provider: type: string + enum: + - "az" + - "gcs" + - "s3" default: "s3" logical_backup_s3_access_key_id: type: string diff --git a/charts/postgres-operator/values.yaml b/charts/postgres-operator/values.yaml index deee439a9..7766519ab 100644 --- a/charts/postgres-operator/values.yaml +++ b/charts/postgres-operator/values.yaml @@ -350,7 +350,7 @@ configLogicalBackup: # prefix for the backup job name logical_backup_job_prefix: "logical-backup-" - # storage provider - either "s3" or "gcs" + # storage provider - either "s3", "gcs" or "az" logical_backup_provider: "s3" # S3 Access Key ID logical_backup_s3_access_key_id: "" diff --git a/docker/logical-backup/dump.sh b/docker/logical-backup/dump.sh index 0aa723ab5..178577ced 100755 --- a/docker/logical-backup/dump.sh +++ b/docker/logical-backup/dump.sh @@ -126,7 +126,7 @@ function upload { "gcs") gcs_upload ;; - "aws") + "s3") aws_upload $(($(estimate_size) / DUMP_SIZE_COEFF)) aws_delete_outdated ;; diff --git a/docs/reference/operator_parameters.md b/docs/reference/operator_parameters.md index fa122846f..981ba1ab6 100644 --- a/docs/reference/operator_parameters.md +++ b/docs/reference/operator_parameters.md @@ -739,8 +739,17 @@ grouped under the `logical_backup` key. The prefix to be prepended to the name of a k8s CronJob running the backups. Beware the prefix counts towards the name length restrictions imposed by k8s. Empty string is a legitimate value. Operator does not do the actual renaming: It simply creates the job with the new prefix. You will have to delete the old cron job manually. Default: "logical-backup-". * **logical_backup_provider** - Specifies the storage provider to which the backup should be uploaded (`s3` or `gcs`). - Default: "s3" + Specifies the storage provider to which the backup should be uploaded + (`s3`, `gcs` or `az`). Default: "s3" + +* **logical_backup_azure_storage_account_name** + Storage account name used to upload logical backups to when using Azure. Default: "" + +* **logical_backup_azure_storage_container** + Storage container used to upload logical backups to when using Azure. Default: "" + +* **logical_backup_azure_storage_account_key** + Storage account key used to authenticate with Azure when uploading logical backups. Default: "" * **logical_backup_s3_access_key_id** When set, value will be in AWS_ACCESS_KEY_ID env variable. The Default is empty. @@ -772,15 +781,6 @@ grouped under the `logical_backup` key. [reference schedule format](https://kubernetes.io/docs/tasks/job/automated-tasks-with-cron-jobs/#schedule) into account. Default: "30 00 \* \* \*" -* **logical_backup_azure_storage_account_name** - Storage account name used to upload logical backups to when using Azure. Default: "" - -* **logical_backup_azure_storage_container** - Storage container used to upload logical backups to when using Azure. Default: "" - -* **logical_backup_azure_storage_account_key** - Storage account key used to authenticate with Azure when uploading logical backups. Default: "" - ## Debugging the operator Options to aid debugging of the operator itself. Grouped under the `debug` key. diff --git a/manifests/operatorconfiguration.crd.yaml b/manifests/operatorconfiguration.crd.yaml index 05be174b5..14c0106db 100644 --- a/manifests/operatorconfiguration.crd.yaml +++ b/manifests/operatorconfiguration.crd.yaml @@ -495,6 +495,10 @@ spec: pattern: '^(\d+(e\d+)?|\d+(\.\d+)?(e\d+)?[EPTGMK]i?)$' logical_backup_provider: type: string + enum: + - "az" + - "gcs" + - "s3" default: "s3" logical_backup_s3_access_key_id: type: string diff --git a/pkg/apis/acid.zalan.do/v1/crds.go b/pkg/apis/acid.zalan.do/v1/crds.go index 9a52cd7cf..22d82a201 100644 --- a/pkg/apis/acid.zalan.do/v1/crds.go +++ b/pkg/apis/acid.zalan.do/v1/crds.go @@ -1654,6 +1654,17 @@ var OperatorConfigCRDResourceValidation = apiextv1.CustomResourceValidation{ }, "logical_backup_provider": { Type: "string", + Enum: []apiextv1.JSON{ + { + Raw: []byte(`"az"`), + }, + { + Raw: []byte(`"gcs"`), + }, + { + Raw: []byte(`"s3"`), + }, + }, }, "logical_backup_s3_access_key_id": { Type: "string",