From b8e7c3d1fc0937e9d2e5f78395a42fe2829fc9f9 Mon Sep 17 00:00:00 2001 From: Felix Kunde Date: Tue, 16 Feb 2021 12:12:58 +0100 Subject: [PATCH 1/5] bump tp v1.6.1 --- .../postgres-operator-issue-template.md | 2 +- README.md | 2 +- charts/postgres-operator-ui/Chart.yaml | 4 ++-- charts/postgres-operator-ui/index.yaml | 20 ++++++++---------- .../postgres-operator-ui-1.6.0.tgz | Bin 3878 -> 0 bytes .../postgres-operator-ui-1.6.1.tgz | Bin 0 -> 3885 bytes charts/postgres-operator/Chart.yaml | 4 ++-- .../crds/operatorconfigurations.yaml | 6 +++--- charts/postgres-operator/index.yaml | 20 ++++++++---------- .../postgres-operator-1.6.0.tgz | Bin 19074 -> 0 bytes .../postgres-operator-1.6.1.tgz | Bin 0 -> 19295 bytes charts/postgres-operator/values-crd.yaml | 8 +++---- charts/postgres-operator/values.yaml | 8 +++---- docs/reference/operator_parameters.md | 2 +- manifests/complete-postgres-manifest.yaml | 2 +- manifests/configmap.yaml | 8 +++---- manifests/minimal-fake-pooler-deployment.yaml | 2 +- manifests/operatorconfiguration.crd.yaml | 6 +++--- manifests/postgres-operator.yaml | 2 +- ...gresql-operator-default-configuration.yaml | 6 +++--- pkg/controller/operator_config.go | 4 ++-- pkg/util/config/config.go | 4 ++-- 22 files changed, 53 insertions(+), 57 deletions(-) delete mode 100644 charts/postgres-operator-ui/postgres-operator-ui-1.6.0.tgz create mode 100644 charts/postgres-operator-ui/postgres-operator-ui-1.6.1.tgz delete mode 100644 charts/postgres-operator/postgres-operator-1.6.0.tgz create mode 100644 charts/postgres-operator/postgres-operator-1.6.1.tgz diff --git a/.github/ISSUE_TEMPLATE/postgres-operator-issue-template.md b/.github/ISSUE_TEMPLATE/postgres-operator-issue-template.md index a4dec9409..b96eba1c6 100644 --- a/.github/ISSUE_TEMPLATE/postgres-operator-issue-template.md +++ b/.github/ISSUE_TEMPLATE/postgres-operator-issue-template.md @@ -9,7 +9,7 @@ assignees: '' 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. registry.opensource.zalan.do/acid/postgres-operator:v1.6.0 +- **Which image of the operator are you using?** e.g. registry.opensource.zalan.do/acid/postgres-operator:v1.6.1 - **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] - **Type of issue?** [Bug report, question, feature request, etc.] diff --git a/README.md b/README.md index 7edb60d84..32db8b0ce 100644 --- a/README.md +++ b/README.md @@ -65,7 +65,7 @@ We introduce the major version into the backup path to smoothen the [major versi The new operator configuration can set a compatibility flag *enable_spilo_wal_path_compat* to make Spilo look for wal segments in the current path but also old format paths. This comes at potential performance costs and should be disabled after a few days. -The new Spilo 13 image is: `registry.opensource.zalan.do/acid/spilo-13:2.0-p2` +The newest Spilo 13 image is: `registry.opensource.zalan.do/acid/spilo-13:2.0-p3` The last Spilo 12 image is: `registry.opensource.zalan.do/acid/spilo-12:1.6-p5` diff --git a/charts/postgres-operator-ui/Chart.yaml b/charts/postgres-operator-ui/Chart.yaml index 9be6c84dd..8ff7f6637 100644 --- a/charts/postgres-operator-ui/Chart.yaml +++ b/charts/postgres-operator-ui/Chart.yaml @@ -1,7 +1,7 @@ apiVersion: v1 name: postgres-operator-ui -version: 1.6.0 -appVersion: 1.6.0 +version: 1.6.1 +appVersion: 1.6.1 home: https://github.com/zalando/postgres-operator description: Postgres Operator UI provides a graphical interface for a convenient database-as-a-service user experience keywords: diff --git a/charts/postgres-operator-ui/index.yaml b/charts/postgres-operator-ui/index.yaml index 948a52274..327347744 100644 --- a/charts/postgres-operator-ui/index.yaml +++ b/charts/postgres-operator-ui/index.yaml @@ -2,11 +2,10 @@ apiVersion: v1 entries: postgres-operator-ui: - apiVersion: v1 - appVersion: 1.6.0 - created: "2020-12-18T14:19:25.464717041+01:00" - description: Postgres Operator UI provides a graphical interface for a convenient - database-as-a-service user experience - digest: d7813a235dd1015377c38fd5a14e7679a411c7340a25cfcf5f5294405f9a2eb2 + appVersion: 1.6.1 + created: "2021-02-16T11:50:09.2466631+01:00" + description: Postgres Operator UI provides a graphical interface for a convenient database-as-a-service user experience + digest: 812ffca5385dead377042a45b2ddedec725be66e19b4c8cf5237a8b0c2d19b21 home: https://github.com/zalando/postgres-operator keywords: - postgres @@ -22,13 +21,12 @@ entries: sources: - https://github.com/zalando/postgres-operator urls: - - postgres-operator-ui-1.6.0.tgz - version: 1.6.0 + - postgres-operator-ui-1.6.1.tgz + version: 1.6.1 - apiVersion: v1 appVersion: 1.5.0 - created: "2020-12-18T14:19:25.464015993+01:00" - description: Postgres Operator UI provides a graphical interface for a convenient - database-as-a-service user experience + created: "2021-02-16T11:50:09.246093396+01:00" + description: Postgres Operator UI provides a graphical interface for a convenient database-as-a-service user experience digest: c91ea39e6d51d57f4048fb1b6ec53b40823f2690eb88e4e4f1a036367b9fdd61 home: https://github.com/zalando/postgres-operator keywords: @@ -47,4 +45,4 @@ entries: urls: - postgres-operator-ui-1.5.0.tgz version: 1.5.0 -generated: "2020-12-18T14:19:25.463104102+01:00" +generated: "2021-02-16T11:50:09.245403432+01:00" diff --git a/charts/postgres-operator-ui/postgres-operator-ui-1.6.0.tgz b/charts/postgres-operator-ui/postgres-operator-ui-1.6.0.tgz deleted file mode 100644 index 68a43b51bbf24a28d30963679e0dd8edddaffded..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3878 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 diff --git a/charts/postgres-operator-ui/postgres-operator-ui-1.6.1.tgz b/charts/postgres-operator-ui/postgres-operator-ui-1.6.1.tgz new file mode 100644 index 0000000000000000000000000000000000000000..74ca323c981609a93b12fde156c1761f54d9f7ec GIT binary patch literal 3885 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 literal 0 HcmV?d00001 diff --git a/charts/postgres-operator/Chart.yaml b/charts/postgres-operator/Chart.yaml index e5a66b6e3..857967a48 100644 --- a/charts/postgres-operator/Chart.yaml +++ b/charts/postgres-operator/Chart.yaml @@ -1,7 +1,7 @@ apiVersion: v1 name: postgres-operator -version: 1.6.0 -appVersion: 1.6.0 +version: 1.6.1 +appVersion: 1.6.1 home: https://github.com/zalando/postgres-operator description: Postgres Operator creates and manages PostgreSQL clusters running in Kubernetes keywords: diff --git a/charts/postgres-operator/crds/operatorconfigurations.yaml b/charts/postgres-operator/crds/operatorconfigurations.yaml index ef9b2c84d..4e9231e6b 100644 --- a/charts/postgres-operator/crds/operatorconfigurations.yaml +++ b/charts/postgres-operator/crds/operatorconfigurations.yaml @@ -65,7 +65,7 @@ spec: properties: docker_image: type: string - default: "registry.opensource.zalan.do/acid/spilo-13:2.0-p2" + default: "registry.opensource.zalan.do/acid/spilo-13:2.0-p3" enable_crd_validation: type: boolean default: true @@ -382,7 +382,7 @@ spec: properties: logical_backup_docker_image: type: string - default: "registry.opensource.zalan.do/acid/logical-backup:v1.6.0" + default: "registry.opensource.zalan.do/acid/logical-backup:v1.6.1" logical_backup_google_application_credentials: type: string logical_backup_job_prefix: @@ -511,7 +511,7 @@ spec: default: "pooler" connection_pooler_image: type: string - default: "registry.opensource.zalan.do/acid/pgbouncer:master-12" + default: "registry.opensource.zalan.do/acid/pgbouncer:master-14" connection_pooler_max_db_connections: type: integer default: 60 diff --git a/charts/postgres-operator/index.yaml b/charts/postgres-operator/index.yaml index 6b64fd705..a0f705ec9 100644 --- a/charts/postgres-operator/index.yaml +++ b/charts/postgres-operator/index.yaml @@ -2,11 +2,10 @@ apiVersion: v1 entries: postgres-operator: - apiVersion: v1 - appVersion: 1.6.0 - created: "2020-12-17T16:16:25.639708821+01:00" - description: Postgres Operator creates and manages PostgreSQL clusters running - in Kubernetes - digest: 2f5f527bae0a22b02f2f7b1e2352665cecf489a990e18212444fa34450b97604 + appVersion: 1.6.1 + created: "2021-02-16T11:49:43.295433402+01:00" + description: Postgres Operator creates and manages PostgreSQL clusters running in Kubernetes + digest: ce9cfc0d4838edf307b690b942bd4e1ea73c3b93bb5552ae8ecd2952d55383ea home: https://github.com/zalando/postgres-operator keywords: - postgres @@ -21,13 +20,12 @@ entries: sources: - https://github.com/zalando/postgres-operator urls: - - postgres-operator-1.6.0.tgz - version: 1.6.0 + - postgres-operator-1.6.1.tgz + version: 1.6.1 - apiVersion: v1 appVersion: 1.5.0 - created: "2020-12-17T16:16:25.637262877+01:00" - description: Postgres Operator creates and manages PostgreSQL clusters running - in Kubernetes + created: "2021-02-16T11:49:43.292890391+01:00" + description: Postgres Operator creates and manages PostgreSQL clusters running in Kubernetes digest: 198351d5db52e65cdf383d6f3e1745d91ac1e2a01121f8476f8b1be728b09531 home: https://github.com/zalando/postgres-operator keywords: @@ -45,4 +43,4 @@ entries: urls: - postgres-operator-1.5.0.tgz version: 1.5.0 -generated: "2020-12-17T16:16:25.635647131+01:00" +generated: "2021-02-16T11:49:43.291315248+01:00" diff --git a/charts/postgres-operator/postgres-operator-1.6.0.tgz b/charts/postgres-operator/postgres-operator-1.6.0.tgz deleted file mode 100644 index bf98cd8183d93920720fcfca1bfee716dabe6960..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 19074 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 Date: Tue, 16 Feb 2021 12:17:09 +0100 Subject: [PATCH 2/5] update UI chart --- charts/postgres-operator-ui/index.yaml | 8 ++++---- .../postgres-operator-ui-1.6.1.tgz | Bin 3885 -> 3877 bytes charts/postgres-operator-ui/values.yaml | 2 +- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/charts/postgres-operator-ui/index.yaml b/charts/postgres-operator-ui/index.yaml index 327347744..7706f5bf8 100644 --- a/charts/postgres-operator-ui/index.yaml +++ b/charts/postgres-operator-ui/index.yaml @@ -3,9 +3,9 @@ entries: postgres-operator-ui: - apiVersion: v1 appVersion: 1.6.1 - created: "2021-02-16T11:50:09.2466631+01:00" + created: "2021-02-16T12:16:51.963793476+01:00" description: Postgres Operator UI provides a graphical interface for a convenient database-as-a-service user experience - digest: 812ffca5385dead377042a45b2ddedec725be66e19b4c8cf5237a8b0c2d19b21 + digest: 3d321352f2f1e7bb7450aa8876e3d818aa9f9da9bd4250507386f0490f2c1969 home: https://github.com/zalando/postgres-operator keywords: - postgres @@ -25,7 +25,7 @@ entries: version: 1.6.1 - apiVersion: v1 appVersion: 1.5.0 - created: "2021-02-16T11:50:09.246093396+01:00" + created: "2021-02-16T12:16:51.96319758+01:00" description: Postgres Operator UI provides a graphical interface for a convenient database-as-a-service user experience digest: c91ea39e6d51d57f4048fb1b6ec53b40823f2690eb88e4e4f1a036367b9fdd61 home: https://github.com/zalando/postgres-operator @@ -45,4 +45,4 @@ entries: urls: - postgres-operator-ui-1.5.0.tgz version: 1.5.0 -generated: "2021-02-16T11:50:09.245403432+01:00" +generated: "2021-02-16T12:16:51.962463462+01:00" diff --git a/charts/postgres-operator-ui/postgres-operator-ui-1.6.1.tgz b/charts/postgres-operator-ui/postgres-operator-ui-1.6.1.tgz index 74ca323c981609a93b12fde156c1761f54d9f7ec..c59d20b2f1fe34400f2b4b338a9096373a1d70ea 100644 GIT binary patch delta 3855 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 delta 3863 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 Z?8>g}$`E&6{x1Lk|Npry#F+qA004NMh_(O# diff --git a/charts/postgres-operator-ui/values.yaml b/charts/postgres-operator-ui/values.yaml index 2aef84f1c..926d99b39 100644 --- a/charts/postgres-operator-ui/values.yaml +++ b/charts/postgres-operator-ui/values.yaml @@ -8,7 +8,7 @@ replicaCount: 1 image: registry: registry.opensource.zalan.do repository: acid/postgres-operator-ui - tag: v1.6.0 + tag: v1.6.1 pullPolicy: "IfNotPresent" # Optionally specify an array of imagePullSecrets. From b7ec5d8d973f9f3498dfa6287c23d1617804a150 Mon Sep 17 00:00:00 2001 From: Felix Kunde Date: Wed, 17 Feb 2021 18:40:30 +0100 Subject: [PATCH 3/5] improve docs and manifest examples --- README.md | 4 +- docs/administrator.md | 282 ++++++++++++------ docs/user.md | 33 +- manifests/complete-postgres-manifest.yaml | 28 +- ...gresql-operator-default-configuration.yaml | 1 + 5 files changed, 233 insertions(+), 115 deletions(-) diff --git a/README.md b/README.md index 32db8b0ce..e3c9d97e5 100644 --- a/README.md +++ b/README.md @@ -7,7 +7,7 @@ The Postgres Operator delivers an easy to run highly-available [PostgreSQL](https://www.postgresql.org/) -clusters on Kubernetes (K8s) powered by [Patroni](https://github.com/zalando/spilo). +clusters on Kubernetes (K8s) powered by [Patroni](https://github.com/zalando/patroni). It is configured only through Postgres manifests (CRDs) to ease integration into automated CI/CD pipelines with no access to Kubernetes API directly, promoting infrastructure as code vs manual operations. @@ -24,7 +24,7 @@ pipelines with no access to Kubernetes API directly, promoting infrastructure as * Support for custom TLS certificates * UI to create and edit Postgres cluster manifests * Works well on Amazon AWS, Google Cloud, OpenShift and locally on Kind -* Base support for AWS EBS gp3 migration (iops, throughput pending) +* Support for AWS EBS gp3 migration ### PostgreSQL features diff --git a/docs/administrator.md b/docs/administrator.md index 30b612ded..fb9f774fd 100644 --- a/docs/administrator.md +++ b/docs/administrator.md @@ -135,6 +135,26 @@ Every other Postgres cluster which lacks the annotation will be ignored by this operator. Conversely, operators without a defined `CONTROLLER_ID` will ignore clusters with defined ownership of another operator. +## Understanding rolling update of Spilo pods + +The operator logs reasons for a rolling update with the `info` level and a diff +between the old and new StatefulSet specs with the `debug` level. To benefit +from numerous escape characters in the latter log entry, view it in CLI with +`echo -e`. Note that the resultant message will contain some noise because the +`PodTemplate` used by the operator is yet to be updated with the default values +used internally in K8s. + +The operator also support lazy updates of the Spilo image. That means the pod +template of a PG cluster's stateful set is updated immediately with the new +image, but no rolling update follows. This feature saves you a switchover - and +hence downtime - when you know pods are re-started later anyway, for instance +due to the node rotation. To force a rolling update, disable this mode by +setting the `enable_lazy_spilo_upgrade` to `false` in the operator configuration +and restart the operator pod. With the standard eager rolling updates the +operator checks during Sync all pods run images specified in their respective +statefulsets. The operator triggers a rolling upgrade for PG clusters that +violate this condition. + ## Delete protection via annotations To avoid accidental deletes of Postgres clusters the operator can check the @@ -196,7 +216,6 @@ On the next sync event it should change to `Running`. However, as it is in fact a new resource for K8s, the UID will differ which can trigger a rolling update of the pods because the UID is used as part of backup path to S3. - ## Role-based access control for the operator The manifest [`operator-service-account-rbac.yaml`](../manifests/operator-service-account-rbac.yaml) @@ -393,21 +412,24 @@ spec: ## Custom Pod Environment Variables -It is possible to configure a ConfigMap as well as a Secret which are used by the Postgres pods as -an additional provider for environment variables. One use case is to customize -the Spilo image and configure it with environment variables. Another case could be to provide custom -cloud provider or backup settings. -In general the Operator will give preference to the globally configured variables, to not have the custom -ones interfere with core functionality. Variables with the 'WAL_' and 'LOG_' prefix can be overwritten though, to allow -backup and logshipping to be specified differently. +It is possible to configure a ConfigMap as well as a Secret which are used by +the Postgres pods as an additional provider for environment variables. One use +case is a customized Spilo image configured by extra environment variables. +Another case could be to provide custom cloud provider or backup settings. +In general the Operator will give preference to the globally configured +variables, to not have the custom ones interfere with core functionality. +Variables with the 'WAL_' and 'LOG_' prefix can be overwritten though, to +allow backup and log shipping to be specified differently. ### Via ConfigMap -The ConfigMap with the additional settings is referenced in the operator's main configuration. -A namespace can be specified along with the name. If left out, the configured -default namespace of your K8s client will be used and if the ConfigMap is not -found there, the Postgres cluster's namespace is taken when different: + +The ConfigMap with the additional settings is referenced in the operator's +main configuration. A namespace can be specified along with the name. If left +out, the configured default namespace of your K8s client will be used and if +the ConfigMap is not found there, the Postgres cluster's namespace is taken +when different: **postgres-operator ConfigMap** @@ -446,15 +468,15 @@ data: MY_CUSTOM_VAR: value ``` -The key-value pairs of the ConfigMap are then added as environment variables to the -Postgres StatefulSet/pods. - +The key-value pairs of the ConfigMap are then added as environment variables +to the Postgres StatefulSet/pods. ### Via Secret -The Secret with the additional variables is referenced in the operator's main configuration. -To protect the values of the secret from being exposed in the pod spec they are each referenced -as SecretKeyRef. -This does not allow for the secret to be in a different namespace as the pods though + +The Secret with the additional variables is referenced in the operator's main +configuration. To protect the values of the secret from being exposed in the +pod spec they are each referenced as SecretKeyRef. This does not allow for the +secret to be in a different namespace as the pods though **postgres-operator ConfigMap** @@ -493,8 +515,8 @@ data: MY_CUSTOM_VAR: dmFsdWU= ``` -The key-value pairs of the Secret are all accessible as environment variables to the -Postgres StatefulSet/pods. +The key-value pairs of the Secret are all accessible as environment variables +to the Postgres StatefulSet/pods. ## Limiting the number of min and max instances in clusters @@ -503,8 +525,8 @@ instances permitted by each Postgres cluster managed by the operator. If either `min_instances` or `max_instances` is set to a non-zero value, the operator may adjust the number of instances specified in the cluster manifest to match either the min or the max boundary. For instance, of a cluster manifest has 1 -instance and the `min_instances` is set to 3, the cluster will be created with 3 -instances. By default, both parameters are set to `-1`. +instance and the `min_instances` is set to 3, the cluster will be created with +3 instances. By default, both parameters are set to `-1`. ## Load balancers and allowed IP ranges @@ -579,59 +601,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). - -## Understanding rolling update of Spilo pods - -The operator logs reasons for a rolling update with the `info` level and a diff -between the old and new StatefulSet specs with the `debug` level. To benefit -from numerous escape characters in the latter log entry, view it in CLI with -`echo -e`. Note that the resultant message will contain some noise because the -`PodTemplate` used by the operator is yet to be updated with the default values -used internally in K8s. - -The operator also support lazy updates of the Spilo image. That means the pod -template of a PG cluster's stateful set is updated immediately with the new -image, but no rolling update follows. This feature saves you a switchover - and -hence downtime - when you know pods are re-started later anyway, for instance -due to the node rotation. To force a rolling update, disable this mode by -setting the `enable_lazy_spilo_upgrade` to `false` in the operator configuration -and restart the operator pod. With the standard eager rolling updates the -operator checks during Sync all pods run images specified in their respective -statefulsets. The operator triggers a rolling upgrade for PG clusters that -violate this condition. - -## Logical backups - -The operator can manage K8s cron jobs to run logical backups of Postgres -clusters. The cron job periodically spawns a batch job that runs a single pod. -The backup script within this pod's container can connect to a DB for a logical -backup. The operator updates cron jobs during Sync if the job schedule changes; -the job name acts as the job identifier. These jobs are to be enabled for each -individual Postgres cluster by setting `enableLogicalBackup: true` in its -manifest. Notes: - -1. The [example image](../docker/logical-backup/Dockerfile) implements the -backup via `pg_dumpall` and upload of compressed and encrypted results to an S3 -bucket; the default image ``registry.opensource.zalan.do/acid/logical-backup`` -is the same image built with the Zalando-internal CI pipeline. `pg_dumpall` -requires a `superuser` access to a DB and runs on the replica when possible. - -2. Due to the [limitation of K8s cron jobs](https://kubernetes.io/docs/concepts/workloads/controllers/cron-jobs/#cron-job-limitations) -it is highly advisable to set up additional monitoring for this feature; such -monitoring is outside of the scope of operator responsibilities. - -3. The operator does not remove old backups. - -4. You may use your own image by overwriting the relevant field in the operator -configuration. Any such image must ensure the logical backup is able to finish -[in presence of pod restarts](https://kubernetes.io/docs/concepts/workloads/controllers/jobs-run-to-completion/#handling-pod-and-container-failures) -and [simultaneous invocations](https://kubernetes.io/docs/concepts/workloads/controllers/cron-jobs/#cron-job-limitations) -of the backup cron job. - -5. For that feature to work, your RBAC policy must enable operations on the -`cronjobs` resource from the `batch` API group for the operator service account. -See [example RBAC](../manifests/operator-service-account-rbac.yaml) - ## 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 @@ -649,26 +618,108 @@ A secret can be pre-provisioned in different ways: * Automatically provisioned via a custom K8s controller like [kube-aws-iam-controller](https://github.com/mikkeloscar/kube-aws-iam-controller) -## Google Cloud Platform setup +## WAL archiving and basebackups -To configure the operator on GCP there are some prerequisites that are needed: +Spilo is shipped with [WAL-E](https://github.com/wal-e/wal-e) and its successor +[WAL-G](https://github.com/wal-g/wal-g) to perform WAL archiving. By default, +WAL-E is used because it is more battle-tested. Additionally to the continuous +backup stream a [basebackup](https://www.postgresql.org/docs/13/app-pgbasebackup.html) +is initialized every night and 1am UTC. + +These are the pre-configured settings in the docker image: + +```bash +archive_command: `envdir "{WALE_ENV_DIR}" {WALE_BINARY} wal-push "%p"` +restore_command: `envdir "{{WALE_ENV_DIR}}" /scripts/restore_command.sh "%f" "%p"` + +AWS_ENDPOINT: 'https://s3.AWS_REGION.amazonaws.com:443' +BACKUP_NUM_TO_RETAIN: 5 +BACKUP_SCHEDULE: '00 01 * * *' +USE_WALG_BACKUP: false (not set) +USE_WALG_RESTORE: false (not set) +WALE_S3_ENDPOINT: 'https+path://s3.AWS_REGION.amazonaws.com:443' +WALE_S3_PREFIX: 's3://bucket-name/very/long/path' +``` + +If the prefix is not specified Spilo will generate it from `WAL_S3_BUCKET`. +When the `AWS_REGION` is set you `AWS_ENDPOINT` and `WALE_S3_ENDPOINT` are +generated automatically. + +The backup path has to be specified in the operator configuration. You have to +make sure that Postgres is allowed to send compressed WAL files to the backup +location, e.g. an S3 bucket. If you want to change some settings you have to +overwrite Spilo's [environment variables](https://github.com/zalando/spilo/blob/master/ENVIRONMENT.rst) +using an [extra configmap or secret](#custom-pod-environment-variables). + +### Using AWS S3 or compliant services + +When using AWS you have to reference the S3 backup path, the IAM role and the +AWS region in the configuration. + +**postgres-operator ConfigMap** + +```yaml +apiVersion: v1 +kind: ConfigMap +metadata: + name: postgres-operator +data: + aws_region: eu-central-1 + kube_iam_role: postgres-pod-role + wal_s3_bucket: your-backup-path +``` + +**OperatorConfiguration** + +```yaml +apiVersion: "acid.zalan.do/v1" +kind: OperatorConfiguration +metadata: + name: postgresql-operator-configuration +configuration: + aws_or_gcp: + aws_region: eu-central-1 + kube_iam_role: postgres-pod-role + wal_s3_bucket: your-backup-path +``` + +The referenced IAM role should contain the following privileges: + +```yaml + PostgresPodRole: + Type: "AWS::IAM::Role" + Properties: + RoleName: "postgres-pod-role" + Path: "/" + Policies: + - PolicyName: "SpiloS3Access" + PolicyDocument: + Version: "2012-10-17" + Statement: + - Action: "s3:*" + Effect: "Allow" + Resource: + - "arn:aws:s3:::your-backup-path" + - "arn:aws:s3:::your-backup-path/*" +``` + +### Google Cloud Platform setup + +To configure the operator on GCP these prerequisites that are needed: * A service account with the proper IAM setup to access the GCS bucket for the WAL-E logs * The credentials file for the service account. -The configuration paramaters that we will be using are: +The configuration parameters that we will be using are: * `additional_secret_mount` * `additional_secret_mount_path` * `gcp_credentials` * `wal_gs_bucket` -### Generate a K8s secret resource - -Generate the K8s secret resource that will contain your service account's +1. Generate the K8s secret resource that will contain your service account's credentials. It's highly recommended to use a service account and limit its scope to just the WAL-E bucket. - ```yaml apiVersion: v1 kind: Secret @@ -681,11 +732,9 @@ stringData: ``` -### Setup your operator configuration values - -With the `psql-wale-creds` resource applied to your cluster, ensure that -the operator's configuration is set up like the following: - +2. Setup your operator configuration values. With the `psql-wale-creds` +resource applied to your cluster, ensure that the operator's configuration +is set up like the following: ```yml ... aws_or_gcp: @@ -700,9 +749,8 @@ aws_or_gcp: ... ``` -### Setup pod environment configmap - -To make postgres-operator work with GCS, use following configmap: +3. Setup pod environment configmap that instructs the operator to use WAL-G, +instead of WAL-E, for backup and restore. ```yml apiVersion: v1 kind: ConfigMap @@ -715,9 +763,8 @@ data: USE_WALG_RESTORE: "true" CLONE_USE_WALG_RESTORE: "true" ``` -This configmap will instruct operator to use WAL-G, instead of WAL-E, for backup and restore. -Then provide this configmap in postgres-operator settings: +4. Then provide this configmap in postgres-operator settings: ```yml ... # namespaced name of the ConfigMap with environment variables to populate on every pod @@ -725,6 +772,52 @@ pod_environment_configmap: "postgres-operator-system/pod-env-overrides" ... ``` +## Logical backups + +The operator can manage K8s cron jobs to run logical backups (SQL dumps) of +Postgres clusters. The cron job periodically spawns a batch job that runs a +single pod. The backup script within this pod's container can connect to a DB +for a logical backup. The operator updates cron jobs during Sync if the job +schedule changes; the job name acts as the job identifier. These jobs are to +be enabled for each individual Postgres cluster by updating the manifest: + +```yaml +apiVersion: "acid.zalan.do/v1" +kind: postgresql +metadata: + name: demo-cluster +spec: + enableLogicalBackup: true +``` + +There a few things to consider when using logical backups: + +1. Logical backups should not seen as a proper alternative to basebackups and WAL +archiving which are described above. At the moment, the operator cannot restore +logical backups automatically and you do not get point-in-time recovery but only +snapshots of your data. In its current state, see logical backups as a way to +quickly create SQL dumps that you can easily restore in an empty test cluster. + +2. The [example image](../docker/logical-backup/Dockerfile) implements the backup +via `pg_dumpall` and upload of compressed and encrypted results to an S3 bucket. +`pg_dumpall` requires a `superuser` access to a DB and runs on the replica when +possible. + +3. Due to the [limitation of K8s cron jobs](https://kubernetes.io/docs/concepts/workloads/controllers/cron-jobs/#cron-job-limitations) +it is highly advisable to set up additional monitoring for this feature; such +monitoring is outside of the scope of operator responsibilities. + +4. The operator does not remove old backups. + +5. You may use your own image by overwriting the relevant field in the operator +configuration. Any such image must ensure the logical backup is able to finish +[in presence of pod restarts](https://kubernetes.io/docs/concepts/workloads/controllers/jobs-run-to-completion/#handling-pod-and-container-failures) +and [simultaneous invocations](https://kubernetes.io/docs/concepts/workloads/controllers/cron-jobs/#cron-job-limitations) +of the backup cron job. + +6. For that feature to work, your RBAC policy must enable operations on the +`cronjobs` resource from the `batch` API group for the operator service account. +See [example RBAC](../manifests/operator-service-account-rbac.yaml) ## Sidecars for Postgres clusters @@ -739,6 +832,7 @@ configuration: name: global-sidecar ports: - containerPort: 80 + protocol: TCP volumeMounts: - mountPath: /custom-pgdata-mountpoint name: pgdata @@ -814,7 +908,7 @@ make docker # build in image in minikube docker env eval $(minikube docker-env) -docker build -t registry.opensource.zalan.do/acid/postgres-operator-ui:v1.3.0 . +docker build -t registry.opensource.zalan.do/acid/postgres-operator-ui:v1.6.1 . # apply UI manifests next to a running Postgres Operator kubectl apply -f manifests/ diff --git a/docs/user.md b/docs/user.md index ec5941d9e..6c7f675ad 100644 --- a/docs/user.md +++ b/docs/user.md @@ -30,7 +30,7 @@ spec: databases: foo: zalando postgresql: - version: "12" + version: "13" ``` Once you cloned the Postgres Operator [repository](https://github.com/zalando/postgres-operator) @@ -509,6 +509,25 @@ spec: defaultUsers: true ``` +### Schema `search_path` for default roles + +The schema [`search_path`](https://www.postgresql.org/docs/13/ddl-schemas.html#DDL-SCHEMAS-PATH) +for each role will include the role name and the schemas, this role should have +access to. So `foo_bar_writer` does not have to schema-qualify tables from +schemas `foo_bar_writer, bar`, while `foo_writer` can look up `foo_writer` and +any schema listed under `schemas`. To register the default `public` schema in +the `search_path` (because some extensions are installed there) one has to add +the following (assuming no extra roles are desired only for the public schema): + +```yaml +spec: + preparedDatabases: + foo: + schemas: + public: + defaultRoles: false +``` + ### Database extensions Prepared databases also allow for creating Postgres extensions. They will be @@ -625,6 +644,10 @@ spec: - pci ``` +## In-place major version upgrade + +Starting with Spilo 13, operator supports in-place major version upgrade to a higher major version (e.g. from PG 10 to PG 12). To trigger the upgrade, simply increase the version in the manifest. It is your responsibility to test your applications against the new version before the upgrade; downgrading is not supported. The easiest way to do so is to try the upgrade on the cloned cluster first. For details of how Spilo does the upgrade [see here](https://github.com/zalando/spilo/pull/488), operator implementation is described [in the admin docs](administrator.md#minor-and-major-version-upgrade). + ## How to clone an existing PostgreSQL cluster You can spin up a new cluster as a clone of the existing one, using a `clone` @@ -636,10 +659,6 @@ section in the spec. There are two options here: Note, that cloning can also be used for [major version upgrades](administrator.md#minor-and-major-version-upgrade) of PostgreSQL. -## In-place major version upgrade - -Starting with Spilo 13, operator supports in-place major version upgrade to a higher major version (e.g. from PG 10 to PG 12). To trigger the upgrade, simply increase the version in the manifest. It is your responsibility to test your applications against the new version before the upgrade; downgrading is not supported. The easiest way to do so is to try the upgrade on the cloned cluster first. For details of how Spilo does the upgrade [see here](https://github.com/zalando/spilo/pull/488), operator implementation is described [in the admin docs](administrator.md#minor-and-major-version-upgrade). - ### Clone from S3 Cloning from S3 has the advantage that there is no impact on your production @@ -875,8 +894,8 @@ size of volumes that correspond to the previously running pods is not changed. ## Logical backups -You can enable logical backups from the cluster manifest by adding the following -parameter in the spec section: +You can enable logical backups (SQL dumps) from the cluster manifest by adding +the following parameter in the spec section: ```yaml spec: diff --git a/manifests/complete-postgres-manifest.yaml b/manifests/complete-postgres-manifest.yaml index 8140dbb32..835cb0748 100644 --- a/manifests/complete-postgres-manifest.yaml +++ b/manifests/complete-postgres-manifest.yaml @@ -148,18 +148,22 @@ spec: image: busybox command: [ "/bin/date" ] # sidecars: -# - name: "telegraf-sidecar" -# image: "telegraf:latest" -# resources: -# limits: -# cpu: 500m -# memory: 500Mi -# requests: -# cpu: 100m -# memory: 100Mi -# env: -# - name: "USEFUL_VAR" -# value: "perhaps-true" +# - name: "telegraf-sidecar" +# image: "telegraf:latest" +# ports: +# name: metrics +# containerPort: 8094 +# protocol: TCP +# resources: +# limits: +# cpu: 500m +# memory: 500Mi +# requests: +# cpu: 100m +# memory: 100Mi +# env: +# - name: "USEFUL_VAR" +# value: "perhaps-true" # Custom TLS certificate. Disabled unless tls.secretName has a value. tls: diff --git a/manifests/postgresql-operator-default-configuration.yaml b/manifests/postgresql-operator-default-configuration.yaml index 656fc94c8..cc0ae609a 100644 --- a/manifests/postgresql-operator-default-configuration.yaml +++ b/manifests/postgresql-operator-default-configuration.yaml @@ -21,6 +21,7 @@ configuration: # name: global-sidecar-1 # ports: # - containerPort: 80 + # protocol: TCP workers: 8 users: replication_username: standby From 77f8c7256587d9ae6818e16fe9e36a47620e6c0b Mon Sep 17 00:00:00 2001 From: Felix Kunde Date: Thu, 18 Feb 2021 11:30:03 +0100 Subject: [PATCH 4/5] use Spilo 2.0-r4 and update docs --- README.md | 2 +- .../crds/operatorconfigurations.yaml | 2 +- .../postgres-operator-1.6.1.tgz | Bin 19295 -> 19296 bytes charts/postgres-operator/values-crd.yaml | 2 +- charts/postgres-operator/values.yaml | 2 +- docs/administrator.md | 77 ++++++++++++------ docs/user.md | 3 +- manifests/complete-postgres-manifest.yaml | 2 +- manifests/configmap.yaml | 2 +- manifests/operatorconfiguration.crd.yaml | 2 +- ...gresql-operator-default-configuration.yaml | 2 +- pkg/controller/operator_config.go | 2 +- pkg/util/config/config.go | 2 +- 13 files changed, 62 insertions(+), 38 deletions(-) diff --git a/README.md b/README.md index e3c9d97e5..b29142967 100644 --- a/README.md +++ b/README.md @@ -65,7 +65,7 @@ We introduce the major version into the backup path to smoothen the [major versi The new operator configuration can set a compatibility flag *enable_spilo_wal_path_compat* to make Spilo look for wal segments in the current path but also old format paths. This comes at potential performance costs and should be disabled after a few days. -The newest Spilo 13 image is: `registry.opensource.zalan.do/acid/spilo-13:2.0-p3` +The newest Spilo 13 image is: `registry.opensource.zalan.do/acid/spilo-13:2.0-p4` The last Spilo 12 image is: `registry.opensource.zalan.do/acid/spilo-12:1.6-p5` diff --git a/charts/postgres-operator/crds/operatorconfigurations.yaml b/charts/postgres-operator/crds/operatorconfigurations.yaml index 4e9231e6b..3906f9052 100644 --- a/charts/postgres-operator/crds/operatorconfigurations.yaml +++ b/charts/postgres-operator/crds/operatorconfigurations.yaml @@ -65,7 +65,7 @@ spec: properties: docker_image: type: string - default: "registry.opensource.zalan.do/acid/spilo-13:2.0-p3" + default: "registry.opensource.zalan.do/acid/spilo-13:2.0-p4" enable_crd_validation: type: boolean default: true diff --git a/charts/postgres-operator/postgres-operator-1.6.1.tgz b/charts/postgres-operator/postgres-operator-1.6.1.tgz index 44ad2b99bcc7307d30cfa18ef8ceb12537feabb7..48ffb90147ea471fa347a68f6060fd3077991073 100644 GIT binary patch delta 18474 zcmZtNQ*}zc)En!VE1U8pN8)m&=ALaa^(ASPY}}iT4v3B6L)VVj7V2IORye60Au%a>Y>b zT(V7Z9id!|?oLYc2g* zq_9fSlc5GIDqv;|QWpWTIS=IwK5O`><&cWf)g|$Ch8h@l0WbLkT>Q=O>yp&v3 zt~_g-*)AeXLm-(yzz#BNi3aU+);g=>h)JiQsKrujjHf2-xLaSb0!bX_IF-qobOy;L z9KaQf#bjzXRI=g@udMcuz4XSCg1njtg(K zYBI1zjCT#0^Nd+>miusuFk^{UGB6ZNq;nv&uoLiQU0AV5C%^siXE@0ULxe<{j-+lgk2lwS5EL5tq_)ZD25?b%BSHM!qvti1 zo+g+uOr8$|rpqNLGU~W$Amx+dchrR~I8xV#9TEm;L)IaWEMCUYL|M&47^dSfP*Y;) zhz05oWM|XpDh^-9^~lA$1( ztUmBAF*ihXHfZ=~-d6-HTxm|Un(-&9xy5>81F^uku#p4-l)O3h2HALet~I!NdhT7D zF;gWVkNgoeUh!;kDUPgZ096>0o`mScSBwvncx9UC)iAewHjE-u!qeRD&y(l9+k^9@ z+Vc#3HCeA>?!r2gKK%$gQXzFs`$RjX@xdJ9bHepe3S3J_3?9Y#bhgf|0 zE2SwVrij}zSd98}!Or6PC0J=v8;J&i(G^r+cv-PoIl-uuzK2+!nqzu!SX8NwoN5Y^ zK+TU*9YVv%KkR+Sdi1Ut`x z0CmBL{`Bu~tiL-8)feI=?1LndnOnracBEZ>8VY) zEfa(V1v}qAPlJ6>jG59g@FIdW27Ll+xlAz)IKoNhC?2OV22bQL+mR)(1z8DDzWIUz z;zVJ482pv%DM`2xUD(tzEHTwWa^(hr2Pf2s;w zVkWny5s==78d4}QW4-F<{WREhT?DJ*WLUvXL?sI{sR)2ZA>3G{29g-{oL*@d|CpyM zO`LaO-j2~%|9OLw1kyAjGM<`owT%5@QKy*#s^{HEY`<+QHcZ446#p^z?xWJj+*nB> z{uy}E60*yR{p zXv-!GWIDV2Mw$HivYJ!3nw6}Wo})bF>J`7J?qLsv>J{R);V2u8_`iU~R=0ExC7U5S z1sf=L73jK#5N(T|D9b)>;9YI#k($?FlxhSS^xe^A+C^TnNK+I*usLK^laq`Yk|x#n zBTGJho*`;YGNMsZBOyPyhO>9g;KWWQs&!Od5}Otuu7DBWI;Wmaqj&R)SysuHo$IMq zJpol!$2>?{<{(Wm$lN3S011~6PfISaj8s$3Ls5LzRFH>0s{Je1*Ga@|1%(#@%+k5k zdKUb;k}z^Jo6CshRD1Y`_rJJqn1MMy;|+m!W2k|NT`IV6?p_>P^$`2i#P}SxTjS+P zdZY!1i9g_Nfac6-LwAA_N%l`aE5v_(Fl{gn50)|=N-?Lj)XaoPwmesUz%$Dmn-astm1G%W zKqXUPSs-J|r8`EC;^B^)zDqM|N(qQ|7Uv!OdRL+%3`|NqE^@4A$V_jsf)CEQz+|b` zhC4-)S~$wIwXaE9Rh*h)34vSn znN!gE9?`m|DDvzLdzo5MjkaQCDIE+aJl z=%~c}0UI`&@KA96U8AXg<0UI7NEWiec*{X0J_V?We>^Uro%xN% zG_&}J*Da1?y2s2}e&dGnrYbG}15cg`@UZn~PQgC?76q4pf{H8e-%1;9Qznu zwJ>HrGiNzU2<8de>k{G97f7XN-T^0>fl(l)(h*U^BPh72v432byzuKY$ulcMGc1zxxGjMK z3laUdn_+Itk%1trvRjNRX>!5C)65C@+r9Qvfj-sE8#n`(zy|Y-hus_b0s;f!2=NL!P#miaUQxx?VRpgMX z(eY)+!!#pMEtlqh`(Y+B^a`plaOjt0nEnEBm4}NldPK+mbO@q5-%9 zgIhNi(RhJ9Dd-L_a>=5SlD+%>0a~ zoR+~fIj1@xaCj5n=taUHt+C2!QbU~Sjp1Q!N)jYO4S!Z z&RM9CXuQ+0ipbI^Q+5=8-NUI&2?S!G81Tj{BLso$UyI}w@g&mq%OJ==Nf#4 zL1D^?U#^h>#@pn?WddR?#lpVzM;!@_Cw)8RY-caJ`U+ibu228@dc8sRL)|59X{!7A z_5A!HbN_nh{e5zjLQ*j(6o2?z$?%mD+Lk`=Yr)J|^zBTbo;SIIRW@;_)ZjddG$e8t z2~cUCRPh8pewGL}-$zrNC3~$ax9q-8AJ+`eCF3_V@K2w+0QEj)dmkuRBELtAE9bb_ zJ4bAPbVG5FHIj5PqMD;1cB(s-Cb|y4gt%L{_=4MBQnD+*gf?{^4EGO zUdf`7ktJh}`qV?rjb!j-GB_{fR z1QfBj=#(99Fd{=AjH51Jtx@zudtRwf^c(Wgq!Ypr(~&q73E)y$+nxfn5--t-VDNW7 zSrbt)$YkLz7^Cv?%toN~^MS^$E-sDwvZxmk#D;a=Bm0c{!^ajlq0P<-Wt6}CFD$fa zI*RTffbhWza$!?M@<{1NwC6=U}hx^l2Geh)1`k3#?(fL zjxz7Gw*HmGuF*TcV^+Fnf`Q-c{)@jGB;VSH6{L%xAtBXqs*aut;bu{xzwoVWq#Iaq zv97c5vkqo1Od(zZuxm==fmqx-dkLvQG5PY_41cpv^MNwy-Row^sL(p!N?LoZ^v^eo znFIjyiiw{+jXU9zgl>hkQI2BJ71B!Z#VE+2)ZxqLq>_r)jR*t3eID(}Q^$}Gw(AjZ z7ZVzng5o~Gd%GdJUVsNJ)a$m%-4ZZ~=WNMdLEM=w94=;PQ^i-khtk)K4-{|o9pJj3 z#!+ZEmBzQgzUmc%$&X4p$jDnks7s9F)V;7@=a`MO&fan6_~#<6SMxObK(}E6MR?Md z=yZi+Xih&yrPeNIhIx*;TCf)bnrm}=+y&EoWV7Yq1lGF|V%w8g`FWv*!XF5a>2|uu z@4Mp~qo}>p!}`}V!*(T}c$T`(8a0tkk%UfzL_3YegaX_AaQ5;t$gmFL3oQ4s$l3N~ z*;%O;I(tQ#wc)b^t7PAS3yx>zn1{BeNN5KA-aZGj2m_A+^vy3>2`q|uq)I9`JH~jauu`*9O-HoHo_h-diUv*tLam5_N;F46_NgZ#q#5oX@PtS_0POTP_AGLyXpobdiA@Dbh0}0>zlO z7c@bHKZ?hq$0D`hLp8WIF_xN;jOP?@_d>?`@Sk0oQ0RtMt{SjZ@kQ zXt_J(CZBwhLFPBWyA5} z4a2tO7zugyhE(xUdE zNp(B!gi%>jB!fk(9J6Mjq!E!t>`e)8kl=jsc|8F?pSXq)MO}8}0Juf5f`|_Ou8YAg z5Ntx=_NG<0P7Xy|FjCpvuR)@`T=|*I`h9kdBpz(|ftv*+hBd|d3t%!M0Ef~s#ZzTU zs)BBe#5Jo$z-@k?%e~(_O02G8*nD3>UHgD}_hax=&IL;r*q_&r9}ITS@%*jN6+WA) z&PL`y$E7QMEy|JLYd(QbB}ADWM@~VhFJ*D`4DikXeI`PTKq#k+K zuzI7wr~%vbr8?v#?~ScO??;ZOH=UeiK1H8(c)g_*;FJUs#%Ybjy-h#i2topEvj|JYgn9I2{>M&m%pYD!h7#0Nras!7QoD~E8I7swZ ze_)bTHSm{?{R&_058{$GkK0mC^Xp3zb`^ik1x^sANgb?W1l-T=7watY2vqWD7hB}> z1FAk&ylFpHG0p257fvaw!=6mf#LYfs#@2kZTBSoMYR*w_T-w^o=+VDbP?mY>F5BrY zyM*E%@Fj||djs`^M+$`y#aeBqh(1U+pYMJXj!d95>_-C)TRbhB^jXI(9`F$(Yp)0C z4-lzbp^vzG-YvOBGZ^sLjxyECcGx1l0HybL^#nZ05Xshjd_-hTsO#jviff!K(Zh1C zWoI^xBwaO6p#xv{oH8jQ{CL*z~z$zWb5xTxli+%L4=B*b|d64rv?34&(R~R;|iVhz1!&cW#|kn$MqzRSStsih=s%2ih4Q) zGHDb)DXTH%NijEY(5sLIZnPC9*xpIK@XUx5AIbrkJc(}EkagzwfND>$bogoA$qt}6GBsITgQPt3Mi&s~1v(D;dF&L{%< zDE&{rU9KE?THK5p@F2J)^v!uJJw}^4Fv@cv&7mV~a`?2T1Lhp%3z2!dHH7e1@@#{J z9Ku{012k)Yjn!Sm4)Q2QOhB|j%SQSOTda-W%;#l%?UGRV*_dBi!wJU{jv;3AB`XGPEb3%Nvbz^h=O_CSgJY- z*^IT1ulwX~;(l43O~FEgQ3TASjMy}Vq?U275Z5PDe|hd9&8hjc{|jzF>C7hjG5NV| ze6`y5q3j#@0Sf)-uDSK20B|HIQfO`5t4kYmgM4 zI8R~ly!>^#-*$Y$vDf#)$nfIWZYq<&Qzx#&<2_4*K$Mg{aPF1pmFNh#=0>|H@xxAh zbD*O5J+l}OKS=JpgK}~%AX(wTbnlZ5|F(J^56UBR>Xsrxe;{87iJ(uVr}jMOp~-() z+sqMo>|o}h0FD68aoc!ICn^V7ag1}X>S+*Omao=U;%9+$U{g`u`}YE-#!xF-->rzu zuIniswBhR?9MHDq9b0VJR+CtX@Qf6&Yt>o2v^&9J(_;@tLr*T~f7kASA6Aja;KwJj zDX?F1i6dBw^Kn9y%Z6sMIO<)X#OE>S-5V&(XXJ>WxA?w z5*?jAfR}CmuBUS|TFsWqomNW!7)^6YCt?qUTbw6??f0ZekzqF-2r-! zPF+;2>%m6^ZDpoFXA7ye>Yi0^19j&<3&OPW_`z?B`W3Ot=!PHxG_bR`2Vs|h@5k%Gy}M4x zjuf-u)|2$ohLQq5)HUtJ^+m6@m(TU17vRN#MA3n=k3v|q!|&;J@0n9r2q@ac@8#*C z(mf$0?E4VA-|zV(^X;n<4=GmF!d=K0A5Z7Uqsbd7gcEP4Z#p0PXN;$|LWAQCtr70@ zRyTQ9%Z6i^O(a(D=>APt&NDPEdFX=Ex^81 z5Tb9YU;VFK$J=)!4=u^^y@7=FaW9{P%@OFuo899LW1n`*K8~Sgo1fEnG;dB$PQYhl zuz$4GX1$-K_s-1mul~rwqKmxX1)Jr->Lw~83SoO(2dA(lE|hJT;b3FIr$<|4JvQaK zIgJaXPd$6JP4_}un_1BGBqMaqL&4tq&Ax+2Nlv>1U#2tBWr9JGDzM4utrbQ+RqMl{ z>%*dA$?2y3Fd!{h+)16@oIm>317f_xj0W=49kznrdV{UuyJ_dJZGSY^vV(=~tDb$B zhB;BkC`!H|YJmgQ6qN3m?FL$zf5*kih5lK^5)g<5>xcx;9_&;ETNw#HyJ9;66I`N_ z?TL1cHRO{&Y5Dj@0}-Z+4PlHY)TzB=7`(x^g{F%)*q%#r8mlSS`bOTMY70=ec67dU zZ{VGG?@Om+smrK#MxnJB*{nd9Hz8^=@!*q06)G> zlkIhPjX?u#;CK?fDg@AkiWLa(g~NA`ObHEU8Pq^iXx@DLNUSQnawsZXDbxen2?YHE z4JX)?IubnHmR_!o4>^|3R-xwhwl&TJ6?QsNe374`vAze)@<)>9-{<2bU0Pj5%s@(4 ze>poBBXq~v(CH9Go+4bs4k?A^~yQ+;{VUqz*?IQqhHg<4xKeysm$ zwZb^E@s>0;VYdTY6No7+D}zX!1}j=T_?)!Yz2m!}%(v?=$J(om-AwV>Y9d7Oh9WY( z-H=_yp9vyEs z%}XQLRAy3dOmDA&VYTqI^ zN>0vUa5efP?#z7U<3@~jz>=n%EbH3NnNuO23bGAuPdUcZDdovM0nKI4J#F#Ku*97~ zZB|6h`APnUq!2pVzLK3tKDlkpjxw&531l1S#zajh^TrDnNYo$Di`}iwWkoAA7dX7F z{`r);!`SSV?@<~I`h5KY1W4YbNvVf)={u18fs<9lYaHNh0~K>I1FF)>lH9uPS(p+A zen=GBlLy(QRFnTH;tA?RFCPUQB>Z9}!CBRyb*zVA3%8T>raHj2a~jYkH9F9BIyYqY ztDg;MvDJAimy_{MKBMz13{Ep&c_DV?sgSEv!@_7Ie~%8gcriNwjLwMH z^=&sIo>N}A*}Q!v#q_ji%g26n)Z_%MyAcUt`LXqgqtdZw&IDwm4G!dzD(2VK^fB>n zm&>R0ijz5^Ds7kp84C~-GauJd(>*lb4gkx$x1)Wu-yP(+bqbGtR^qg{Yhvg(F%1$m zYk$^^5fGVqEN9Z|N6q#Z9hw1`k+2 znl6x~l6Jdc{F^gp&$xDu@F^o@s(cbd7e$&itk)e zE1KNQ68#jLgg9^rkkk`(-4?^lzOxl{ljMwk>6|zxDu4-3dWiQW0)R=PW(5dM` zs0#oEyFjdgPt^k^$)O+3B%2-?FPc@l4y&uAsD+)@>$@v?Wdp(ZF(XEw-QT*0fQq6Y zgy4tS8j#U`Y#?3#bS(Jsc^at0RS;Nwb3fYP%ds8P6VO0=Vcn=F{j?GpyHaywLV$B>((FGRL6f!o@8tCz6~N1z z*5R#rZe?vYtZ219M+$A_r3@vyr#3qizL_h4)!E~OFIB1ymaQxuHmSdgQ&4oZK|X7@ z%{tTLHz!yEAw%cl%f%OsRZlXW!jt2zZwJ!-QPH&7L<4NnGRExo64ALXC4d_PX#7g& z>R&9i13oj{vb1v*(?5IPW^>35ig?i{r>H}pBPl^L$mok`m5 zi4WD)7hdC3j1UHYGQx3hA+GIy;lEFBs5HeYq&^>A8qWkLu~3$Z1LiTrCT z?|Ff$*jLuh6m(&uJ>k2k?_Qy!4^L7Z6S0+--x3+qyaK&mdnSIRQ{xPrVvZBQHO;7< zi5zO<%4IQrHi-Hv{L|~$v6PQE+#wp!JYTHn3FWV~>iV z*JI5WF&!FpCmW|0tvyq%uy^&2J1}JGT9D&$j`p`JD}(X36MqATB{?(xY+u!LD-UGV zNt1}S=pKC7*Zro&jyM|yBb|Mu_NbT0L0g7m9QwYCu)GP;SQ z%ZBhxwCzS}53aAv^HIfg&Zw>;LTiEtc+-bqpM9TdST!C^k#1veRQqJRTG_&i<1MDd z)pT8=qdI8H?-jzCS=`07Z-{dy4lCF4pO9D(rvR!U+py6lBY#Y;fOCdV6AHz>m)Krd zTNonB<{};Y)1_fx`5~~hm?6Jekpehm*_GAzjJSL{+oU$&6>w~J%EK< z#6DEi;}*Z+BcoT>LEsWimUgnGY1N7PTr&?$C(Y3hMa%RDy`MxDSUL@At&nX2RyDNl z7IFzy4K=%k5jQE>N{NyiwFE>z#2awKue&4#+aEzY8K|Epsp8kSEk^swfkylPj=tUZ zfh9-NpbwzYYwxF1EbzjAQ=+4JCdXUoy@>4mqxl>%EMaH|oV-yh#|(oUk-Dr?@v*9H z*Abm86w5F48!JO#;$Rc3iEiK6Y(kyIDuyazMbvw zsF1Zj&hMmt8eg@XUKzppc8df0O9Qt_!M94_N8reNUusBOXtxNd2-H%DXOrj`ku%YN zd%J1Vm-WJL-S0fsZSr*QITV#y?j5Hx};B^78RPEP00SVm&6(DbYYhS+~%0y_O( zn1KZ6uz{&paMRNLsf8cM;^4tj=k9fNVca#D4uBR6Ohabl7jaaLNZ!kqP!<`L>%;5| zo^uQq{cPXvn=lMx|N4ia?{eE@Ai>VFfJrj1Ckt6`(A}f#{O3r--LX0Lg{eV%!%zOm z+9n8lRBoVQZZ`^3&3v6^`M1mi`#{(^Lg1Riwn(IBM{^q8SfoZS-_AJJc1otmv$0th z3WMkB9XXAtNR&5p7r2L``>Wr8rZd_h%|?s<+_xFYU`R(F|?I(iAON$ENSj=6d5rX1+bBI_?F(B>O%6oz;u?_tC0V7HxQ* z@6fq9xk>=G|9PFai2wJ%CDg8giFK&pN4xV%nY+9B2&dRUHkc=^+fCJPj(K%8OH1;K z{2-ZGYEc5{DFp#gwwgHMnr{4<27$g-Cy)>+-Hm)>Nq|Z{5SL->gss@6LI#Lgq&mR zED&xmc{18Y|T^}a!vR`A@OhJ89-{So8i%xQflNR_n`$aQ4INwHR;}C zdwtmEgD*{`kH&jB$6g5<5{!$)Jo?jS#%qj+;2aL5{(g_9Z$&{5zw` zRWza#MjTP%I|nhOQX+tpQhnl=Zbzz(h_70}B&QwFk~SYiNvi+hvBSR6c_NbwFS4>YIc0d!(4 zCn?NSaMx~P9Va;us=7jhejcyic|CG=KAWcH{3)i zTdiMnR8}hLcl!8Vi2BZM8lr8EcXs2axad?LR82Z(UH~66eHcEu9IJwT$yg)K#XeSA zq1(ok)ffFY{cZ-<#(>=$#k5Wms2pKM?4J9U|%t z=P&E`Gy_UU#BzR^p?_vOrBlbzNr$-?Bc8L!e6Yz8W=T;E<^=cfE-wx3X>IU%5bAgtWpykEecmr-`JHgqRMF)0H zD(6lCJ(Du_?C%<1Gs*I%|HbB-J*rq!>wog*aaU;yEvQ9E*z?e%!t9+}`d@S^z87Kxlm@tAYe^(jkNUDbxS*SnyXdv4%~m zwZ)$&tAq&JMiF?Qo;dnhAOXX#{YV5c5xC#~vm54P`j>qZ_yESTDQ*2bx&85E_4GA7 zjn}e?Z+j~X^hLm7u%rCwWVO7V*IbS-__t|z=m zoNPLlEud4l%eu&nBxt^YmtdJ`8r`9#dpE)OWjbRXj&l1J;;!9ywM(gbQtxV-@1knm z%@u-puY^tNCHT{RaxZ%AS9)(mje6N8POlJuGF^rN|aR+?NMT7eoe9u*WdLp|8 z21Fl69)Tqd*CA@ajTois@qGvA|OMJn-r&I0bG! z;zd;Tvs-cQ%0Tep#Nh5ijVU?5ee)sZD2@bsUxA!4jgf}Zu@VN|qUe4%`0KdGG9L%g zWM@#R@>lHH-%&c$s+u%!m6yLdMCI#jPqfa#qK-A&6G5ib7AI-4QjY(ESjG?+X@FDh zD99Ik28PR2g18o$!DT=KUh`}5*WWgrj+T2&r~@raW~4b6ITjzeRvf;-r$6AW25Ip2 zIvMLJSUDG+>>gZm`}_)i$lKraZy5lT+Ow*Ymky-X>_j*%Sk3nHQ*MGjx5)oq!3J7g z!3ECFrxupp=+t!VLb%kz(0)REL~K9GMG?(&%n-(Zix1QjLGQK@b+KZvq8fNmiGgy>)*BhPZa$${m{ zke$b9HuL(0>v~CuiTU|?^zVB<@g=;*T_1)(s-tz^n|e_{foIwYKCc(kR?)Dh{hLox z-)6GGMBr|u$-6zLdEl|~(|#&6A?gb01v;E>;AmvYbgrUd6ujA^-_>9%*agV%W!%L! z;P(a!z`g_IWYkaK==G`u?ivHHPLPLHwsoujt>86a0vQZR&Mr0@XGWHmBI`zZ1PeB>qdJm=j@&xtSn-Ccm-j7$0R> z7AKe|&KAQnSJAJ-9@u&gV+}RfK-4HiUTa4pN#f1?i!fPPg=@~&2^EF1W*e6J&kaavfVuvMSSvJ7~ zXNGodO&t^#(PR+E{!7pRv+{tjMY>1iwqyKoEdr?_F#y?Udg3*#x;J+$a3}jV;Z;H?IIP|k92YF&iC_A9y?36%RUqBqweQB9K2eauuNqHjQ|{me2|QO-y3=h(bv+xT`=gS-K7zM<8df z{hh<$KzsIZ;a?g@@yjj2oD?~72{(KTnXTpj%O53P2@(QTzw8B9&DiuB^RJyf1isr0 z)B4nwp@@~Xnfrvq;(f6HA7KPbB9nh?z%Tb3^7p|iiP+o|D*1nT5$Qi(L=N+j0ccZh zyPwbB$;3E|8VP7egV9%4hc@0yf(Y>s!kCRZNH7RIFqs=M#Zu{qG2Kgm3$vr8iZ9j& z5P`f~nkd6)V^j*h@{zalNjh`U{zDuOZ2X8lZ#|fO1Whixo zRT7dhAWd>*c5SmHOCH|SLf^OHV5*g$lg+zgZe1s(=>Y$gqs>M9O@jPr2C8;Bc^j&U zJ$`_7ZVZb*Rv8Yp)5DkF!%XUZC@2nrE6!IT6j#1~ZDThe*9EU_BO$*3)8GJyu)OPY>NR=_qq1<|;ATD%UbOy?^)u5S>B7R-m`1fUdKeq7l zaq+Sbor(asxcSJMnxGH|zJ=l+{-NZ{g18Y4y}cqC-rWR!F?yo3al`||67^4N&5*?Xw?Qj;^h5waQmdJwmXBpIW9MRu zP@fwv3FUV1nTdGn$BKMNy!OiCrZ`n{3_EGCX3fy!BEh$RC^H^3k*6hg-G{7QjDr1# zdmp>FG1?I_c~FVbQzaAdH^}A)sDhQD{KEq2WN)~q^JELqKr&qqPT~0Kxy-&UcN9pI zmj!2-daQcjhGZrXPsyT^Y;L`4r&Ie^3yBnq%8?UyHfXe19IfG9b>4VAsJi6V^aUSWu&b>49`A8p%0QD6)tOwrp~W)E{I-ByKg2 zMK1j~wW1!ngV`q09Jx&?8%P zDcuRajc;H0MIjTXz5o;pwGL+6!bVjD3`UvKs$=6{(I~uyrBBXcygcNGhrW%|uN46gD{5(B%Heo61hd`2#W6@mQNwN zHK_#zXJW-k0VJDxTR-=PpAua~xq({_v$ZKHq_-mz5}AQA7b()`W|5;|3MB^li`M~IK;Kga{dKdLIos0(OO_CM?-|ktEns#Kq5k6%6XDxl0>mI{O96Gs2Xkx zrn64#evw(l%3kMUs<_EbVlM6RI}_TtC)M0X^%)MKKAla1y1RNwgPM=KPO^97JqdqG z*;%i4KS&7wCYTJa9a=|$L%;#icr}aHbbuAzBq`BG91Varw#2nzY#_e0?#fh9i9Ryd z^q)4umr94kIB`5cOnbn*!!^V7yVAyb%LQC*%FYGFvahMrcH+PC5Yl9n#X*S6#Rh0R zaZj8HxXf+iCa>xs*`kU3Jf^pR&K7g3#QY<4)+=U&_#6{ZPD2FYs{UJf#*7ns)&Rx` zUQ_kUd4=GiE`}!uP+eeVs74xNF}7 zC0oleh5}f))`x4+d-rC3632UOG<%;ZV%y#W zK`m3&=!&d$86ABlOLti;jkxNH6}joN73WGNomvhp0dRIMg#5d$!k(Sy)NQap%`<+( z@TC-+;m8z{4PlGDe=5Eup-puZ6Q#8hM2@^e{Lb|1kpiq&Z`E%AVwdKC4U@*#f z;wvfKas&;w(6?BHI+bXhYG67s@*oD3?0~w)C%$rO$g~M1glu3#%>W-mJpyP-e|q-J zWLaAEq^L=1li?9}xQ*{Iz&^6Nt4@M~4)Oq3y1@9N?Vp_ahBl>K={RK0kd-$9tM*EM zyaFw6ae*#R!FTqDI|XUd+d3d-59dmmv#CGL!bej`^1U?erCnDZ`JU-g} zr4)>wsz>05bZjsdVYeRpHLN{?ln)T-*B;W8AK(r;g=l3RHc|Xv0W$~8_(2r{Z3bfj zG;BTq6CC_}NrWV?56^8s9^9xi`8vw62M?+p2Ipy@H_FtQMmh0Js>iVX3zo8Nkn<&Y zTR+xZgJL7nH4CKmBLtp*{haE5Sq062qGNGgx;iZQ2~U`sE6vhUtU1;3k+pGJFk=Q- z(%m)qcVjLsUegtlO-;Ae2jKYfm9w)9uiU5*i;V~?g2;?8O@e{%dndHeBBh!~zUwgq z6wvL{e9yq2=0gv%of~Yd!f8GX%bLrQSd|wSU~M?hY-#-kaK;ZZQ7 zdCoHB5xR^lOzHa&jz=TQLgCkk=l)>hq=%CYp5vh=ly)nZ$27`AuX5#FFuied@D}w- z)7u5C=XQWOO?xz@A4EoP6oeOA{j+pw`!1vs+f^}UA*U($HY!|~LozO+E8JBm6v}Zm z<9Tl8ohPYyGIuj=$NUI?)iA`G6|mQbm#d)teDH=SHceS(!)eT$;27;|nuJre1aUQa z>i{m0=nDhbFO?!Azl*VT%Pl)nN(oxOBnb%P;Ctz+Vb_S* z?lgjPO$(r1g%K2V>~nxi?+v!sv->hhV;_FjpDpD!DsxH>)@yHZqL(pb~3 z301fFAmALYguO$;vPjNzYb-XvQHGBXjxYE2pJ9F5fi7!)sX3T=h-zR1Aa_$M=??p( z-zVRh|6n%T#e|hMtLfNTk&(%qV#?<_!yfObMQ0VygzPUKM3k4FvY0+oN9o zZnxweCAMXDTioV$5!X!KNUk-@%xKZf-|K#YJ!34rw8c7Q9F zINeEqJ}2pbxx+#x7@Z<0!V*H51BlROcOYH-yX!y#3!<`R-rGsn2*Pe4)d19kW|!-1u5snl zu_(X?gzl7J@U&|~BHkN9E7;1KdO)w095a!B#Ek?P%OW0!UhNTi)^}zN1pAqiX05S1 zN)0ezYMbbhVk>40wls z{A~0))a_<0Nrz8R)|>xf67K&h4+of~ryB(7iswNjW7P#+^@``cB@*3zL#X?=QA^2X zt=#&y6S#zsEyP~bVBmD^LD7>5sID&5&ng{U0k9{8A{_4TZev$~YokaKl-1Vh=ra4j zQI*Sv7Otmkqu>Oe>f2EWt?UN5h`aWG(zh}jQ5DByzJia>Uhqud#%PdurACm8xRWnk z0Bz0MhKhb{tLik~9u1Xi8F%~}K%=}UCvJJ=R=I6izqky_4i?MWjXlMp0uYN#v-dDC zvb?Ryx&PqJsmLybs6rJbqw!gm%+1Tcmu{`{Gffh4bMAK4k5xpInp>!|L)-;_HB|%@ zXweWCw?i&&aq`N$+74luQ42B=v)vsRJ{8a`4rr!%P{vqQ5uG1D8-h+n%v@aDRy3If zE|?ZPX1fM?px{u7A*>-hN2&xoo>j6r z?rn&b#>Gx>ZeJex{{HRbGxBI^2lQ{e1wH8@Ac5H2H;M4QeSmB4Y2c>xbNeL{OAi!& zPZZ(jBA?He44iJ^EjjLe$`WSW5v3_>8CYxS}tzL{b5anK2aUFiUjGXQWV~o7<2xi`DkC z&zEc3!6n za}};=Ag!Eyr6_@&vl!*np`IvG;zFD>QoUv;6a(eWPy6CZqtBfKaXZ-}UWgPt9*S*P zbbUoDf5G{j@M{&iB$ir>Rj&~|or9dx;>kWK-zZCd`3WpLDG^_Wn%!|4#j_gKx0N9I ztzTRwo+2GX*GF0z!Z4qEue({~hTQDnuB66NfJ>-}b5^b+^S~o+qyb(*I!Xj89|`jqTD^ouN%r*?<1IF(|6V1UsBL>r`UA<& z4xTrIX9!t$1X%7M;$H^jd-l3LMDaB#P-oz{K_Vh4boyVCOEP35MABzC;zaYm$}3?y z0Tmhz#Pv+k9HPY%-|p}Pm6yN0u8~5{5MjP3&!$C7V7-F>qAAJ$JUAngtF4)0nEX0+ zXe>vulRg_Y81mJL`jE%9tZJFkNp5UlTTjw%ypid!gs{Db$IA(oP%jJgasKe6CVn-^ zFi9J6TMmWNU`;q#UghE+FP<@NEy&_34H#COq|t~uqNWnWT_cyr9Fs>O7AhDBU>sN8s7e*>iRZ>f}`zW zo~LJL@hxMN1ibQzaqgG3I=vC=x@=uB|3w6j`6ZI2FI%5h96iwa}hk@D?ymyzOPZ(h)`)<#qFe;>IA{$QG+rG zRR7-H+U!!62eYO?>l3Q4t5CN?aTTL0z@w}e=KlMMQ}9EFR_IC4TxbX?aOXI03Hg@f zi`(+2WSm#}EL&t6%eyj-E})u!8m}+VLy<0^dyJBBOGj53CBcbJ+)O=n36|7j z2bsY-BC35WMb0u%01hqNkmV>z{-*XPNwrO1fkC*6l{EB(62&rJ)aA>e>{tC|aahy| z35FGXa@0gIa1gB)~t1wHmL{(VvhJcB(CAh#&xp*SuKMj=B~Bnw)<}Ds!^P zVf>d1G3vxg8kM$FNge?O#(^P{N+pc}!|rq~2kFKcpc{H*HdN}mT!l?Sb+kl|IcUqI z-s`0yhwb>&XckXgca@7^cQi=dNm;HzM1)O)G=#iv5v>9}*OZPU8!-9tcL#M(PXp5F zkDzRoqrjabkC^$E0CIXQySWMxxBjQX^ZGFfbH9I@)GfpvQh6;KrciUq3<5JV?u6wS zrre^?zqO%MNpIm~vkr>De?l;Kqiz5jh`m5ruY+=o#hI%honftTIAJl$nvIfAn}s|r zfHpKktRMBmnFz8t1PqWTO0Pq3iqZL@4<|mD*92+3EHPM}tq~imjrr8Ur5K)Gxl&0> zm9U$`(JjI&$c5qcOahuaXP4rz9Wu+qC}kKBMN}B3c}%7%0^amA60#okO)nkF$?=LB zhGC=QhM6;AN6uMBFlgB5YLcLpc&n1mGXe?*oGlfwT|!MWgwVLt({ABO6^a>6v=|KK zQ3VHQ*D-1tSCCE*Mre;op?M!t%*35W5d#x@eqlhnxHGFYeAy$%$6~hJtgJ}VA}m-) zbbzq{OzDsYBe{i=tdadH1^xJpR`=49wZ?;0gpJSgP=8CfEoaY&DiH*W zHV_xlH69)ABV{&{W?$jT8K*riPTYi(Es7ypWk;xWwK3lPw|?aJ=oBmu)d&y?fj(n{I?C7(g5o(8&*5 z^`46=iNM#%0aF)*=Y`MLr}avvjnT4^o{(r{laC^SRqY$0z1>&*yI+(QyN@wGR4U;U z8plIes33ahCel%?wi{>?6e~y=>tKmft&rhSF3RwYS;wzQyxBnV9D7;1fWo=C3bM8n z_!gBPpy(}omGbzr2AgmTr$4b!pZSCKmQ*k>t&S@((vg>4#AAWR2#TERnEvgA^tTD; z?^+DW7$j$*I4UuxM^*Z~=aayhkUf6VjR<0I6OCyP9|Td;FVkWWQC#lP0`RS4xL|62 zX;tcsqev<$KgYADBqh?&ncy)uFflAl02dPZ@ggOeNsqttz83m?&1q3Q&U0Tcxb6n! zOv*&e(Zl=9Nf6wJ>KIhE>sCNVGi#ia*n=zZQqS%?CpE4z=Zc}cR)V3J&g%X(l+F2p zQ6A8Qkw151Qp4>A5H4EPaYxFYD3eVM$CAv-e#7FVgUMnB$;r?@MA1??*dV740R81f zs9G%~R)z)2Tz~fKCb`beELEL&+tIld$Ywvb>EdI%6Nn-h^@F9wZoEc07@w^CQQurd2Rh&Ti3-XWp1|8c62LNoNuBO=6Alawk+buTZ=5K z^OC*rc#8csHq0~nKsgJAJ{tBO!uXSJ->NL$Xo5GZA*1S_dCN6MBWN-12$W%j9(1Cf z_%673!q+6TNmg)=VqZ;y;B3IDewjS|Y$>noRPXQZM8CnHZOuVw*&Dl>aZ>_QXAg@0 zUN0?zeIR=BTDNYjug+4X(#ZQ=%T5H^=d7sSH|-~?NjGasO}{UQ{>k7%NPA-k;$9<< zmBz^2X_PewllrDKpuROt2EZ(vtfk{xyf}2({gZFQ>DLT-h19-@1``@`ELWaFL#hGZ zFtN-=`oM#_i0SkO-SS>mGQT;gE@n%;G)d6e@nv__kJ8fGgyr4DnpCNI))1y;r+Ru~ z6#Oh9KHAnqSZ7HngkSUbtqdzysbpb)oF!RLvu58Bx~!wOi=rF9KLT0gAiT(-e(bP9 zby?yTJRZuKRvuKiDP4zPVt>?$8>31h90D$LpXVH5`{HT(OjmA=VO6xOY*h40)MWb? zc{5UTnL)OE4doZ&Em+*%hO0On`N`T5yF?WPY5=1)8Fkbnhi;m}k9&$mjHxb}ecr03 zN)b=f)vQ|_Yte3sXDLO8Ae*SqU@kI?z8P6rrZP1hwQ^j#v`Ouv`4YlP1NTRM;M_T= z4MO+qSSNBhMI#ian!9f^(215r6PK07F`|2K43{3-pPp#-Hkk&95^+|u9!#*v(mkUM zmDiPD%)A)UIv@C<cshpB89VrAuFK_b`lzwmfGsOO!z*0)tAlMkG^k@%)JSw>W8ZM~x^l z38vGQ-2a-a$5I_#B}x&qU6in(!^pUse#ei$9Qz#eb+ecXHPLibwTzV;o@kqqz=BLO z)|R0hck5oO&96q_b_Jjkw-6b~Kip-5$ZKO6ZR`j)D&SwZN9&1VD{PRC?DASi=hMWv zZV)O<6Pc0lfP_;Gs0qIUBW6YdLd^FdDjE7DQw!?dtlQ_mn%wkh2Ay6a9dFPe-|^xB zs}7-t@{^WVlq}s|$HkPLG%XCndQ<~Zl=NREl1$ed=Rug7Map->Pn@QH;2l00MA*-B z-p7J1PC?NsKPEyAG#VvoXcK0i^3n}`z(X*mhR@WBfMGWI;fpA7R^q>f24Z(vCZl97 z7&>XQPx)YKEDY#?kM{}k4;n5Rt0O&cABUUQ2@7{;kC(%9>;lTZy~?@7yE!*Aal0Bk zpI_z&VjjnTs(DaK8Yg2m3wAA_3;m$BV)#ofVoUBh<7c#>@;y}r>9bdRa?9`g*3peH z9Ww$TfTBJZUh+NCjz8VOLixYdSaXg_JaPo~M*3t2c<;!R`%$cH;m?N(IYsLKo$B%I z@AhUgx6$eC`ztEH=n?5{!R#t85WhBnbBGiV57!!6`?ytZrYMfzhEdjNO5!y#9%SnFCru(U3K28Z1x-|5p3yLwcK*MshoftQrX=D; z1pa27=Pv+;34_E|i+@N~aLfw37 zT^stOw?0_9ATco(U5+LJskDl1i)&`(8>TS$wGNT2txXJVgResL!8G{=IxZEV(qB3n zR2WVRmG`%Rg~tmz%irqY79u4Q`BC=u-#Q`Zw#}dXD&h{kN9rSO4JtiRrFwcj_iBGN zO|z2G*(lE@vY3w`V4gGaH79T*T9H(%G%-$5_PIfw_do9c;hX0m0-2V6?|M!_$LCN; zykGM%>JEo;!rQ_K#VILqK=9S64W;M*i3av@Rp(&^jApo4ag^k>rHVj^?_HMh(&)!` z*Jo}HGnPfQJB+9OVl*4avrMz*>4(jNjy1%{R6(RiifGk4y-{zK3${tyaN(SF9oMIQ zP<5=F8+XAG71 z=~`S55D3fd;*rIB%{4?x=b(>u|5KLzTq4FiLA@ztM6Dzyu>y&1Jf$w~Ys0NM00`Ns zf5`>UxXXF4dz$AtU4R(3q{+bY&4iCKB69xh%@<0*hj+X+}pc_wZfcg3>*Wc>g$5|UM=6@vu*K!VU zptTs)SvuA{jde^$JKd#22D^AG(@R2azu_SAVB5jAErvS3+Km6hQ4DDBocOld$Wor(2Ct^Ji#bb(Dj{)p?)o8VX|^9>2VZ5N*P=2 zmi%|~Ly44Wd}3m17>=2LBCdh?@ZIX>!dgj2>DZ?mG53zAfWN!FD%Pucmq`>^*X@}0 zQ^J_}TT^#XUqXgOtqJYupMX5$?X`c3RN7ksw>^bX=QlOO7pFlpzhkc!Alya??Zq>0E}D-mDZCWbV&N|oE?WdXToGdy$dDkuf!Z8lo z**-gX0X_VQ+}V2v;ZKDkzv;zu$&1(B%eeR5lbUU1h$f4%a**m>0PoAp#oVP=PS>)q^=Gm!}(gBf~im z4tvb-IXa0@Ys)GeqCX0xGX1xVj5*%}$>!L_*BF*y)GDyQNj#o8vaG(139@qad63K? zi-IE$r^y_Pe-gvPu=_g)+~2Bc8nc->-6Lxu@(6KA!)A&e*5G+@=TNyRX#g$^!?ocfjYO*9-fF+MN?a?RMj_{gHEfsYXxvRzZ zGMWwCVga#Er%ufD+l|GS9eKTX8&;9{EfVDkbB~Q)S4qzEO^aRcljN(LmpSN(=pU- zTQhF(Bpm74oQ#XW={5D0h{1+O8bppwYHY?Y>gBS_#bwWKC0QhL~XOoUACh|>Bb)t8eOrEp=Tvno^y33g25oWU+g2gw_5-C zCf%(OZ1}0~`@HSzW8u;JZr%R5MN6>%`T$H5b-DL6eLlg&er`?OdG9;`)#-0#km?kE zlwaYn)}dXFHknrQ?&sC&acLWBTB;Ywfy?z@lFjc=J+sPK&#ML%7f8N2!87n(f$MPz zGwKTgRBm?cB1$&uRNWLaa>yjI)S0idraf8p2v1T>$R-e?T(v0#KLK248f^8aS$I;5 z3rq1UDdfwYl|eenII3D6T^H}>VkG|s4$@7{e05dLC*F^_9FF*?X_4^RQiF$BK>Xp+ z_LSaIC~8pJLzhINK}MjF0h=~5*P2#> zrS)SNsYaPSoQCiD-WnMk_waG;K=*8KMo0hTp*Nw6gNMyFOf0;_0;=xa$D&vKcT%Hi zoEy?Y>e%b&DAX06%*#dEGw3rgPyc9@6?j)cQm-}zLpk{Ypz+9Xv@l>y2{Kw*W+mXn zvmx!TA$9fb$BW4TrOjT9jVf9uyy*!Y)zrJ|?}~9&R(TTr!JlVsyd!Vt0BcJTKAPbc#5sn zc**>ETU|=q4W7ufjH~!%>1BOgo05Yd1eKthFdQ|jcU1n(z))-Y@L0aOp`%8Atyd5o z#ML46dL4-KhkLyFO-4&Q$5JPILll_&45~%e>vB&5 zQN1lCbcCzPzHrLYGr}e>yNPBLe{iRt4*dPlW7yYerH4A_$UYE8Zx0i8LuU#q z^fOrD&9r)}sUKViCOZeu(>^gkMHaK?IaIx9IRkWa`}#T-ZIz~D4Z8M^t{B=J^YoE# zT(qrKySKSE(SODwnoJ0W7h8F~8QV8nx{Z}OtTnv3WPeLFZ#&$4lJQwB0XY1_ym@$2 zpa(s=T+mM*ZywN{Moz~E*2pp|XuK$yEtBQ;DC=~E_4Ww3=?hz#X)S^gZ}O@|W2V&U zr+U)^D|N1pdTyls&88YcutZ$;Gle^pZ|74y4c#8 zIUcoS&ZD9Z&he!)Q0>CB8>@x#WWlfGd5!4p1m*)4PJJZAiozAVT0No)GdBxk57Y?R zt6$MPzwdyA>@_vFM&fWEVr(Idau=3)8AKjbvCnlcGmDe%f(SvWt;+;fzw->87yE<(qZ0iHKJ-3RRs=G&V+-+pno zOzxLwho)PNIcjp=GLrWD8YR8*UmMMrXhRJzWgarB3~*1C?W(ysMBScFxc^Cec)Xo% zULRIo&KeN@M5=dnT}4;5XQtUhZp*IjtQC%3zaL+m(A;)%XRL|@3A=kZd|W;(oVd6< zcmSR*_m{gBzUgl6H>X6ULsx`xF(EycJmi|?M~FW6m#4cEnRAsWvv-@(4X^EsF7pen z5o%@*7-tHTyMkM_-3ert7=w!OrV`TKP2T@*lJ*a(pDIzb&8;YcMO_qiUkyDREYONH zUrRzpKcB?D_&yegylx()xb$Or;;cOQ{97(}w2K&n~x$5PG1I^s~tM{cd! zd2e7~|DVE-C$1dXvD@GSf1_NOm|8j2mcSIn(g_$HD{&4X_jQ`p4U}p#?4G?C_&?5< z7YivZx;aM0nX4G@Zp$SdS7HmJ1#fYgD$u%Tq62PwL!IYxyl!i@9D5w=6rFO#mO$^L z15_D9?dzKF+n8$g)~?IY2NQhYW`)AAJ?_E97ge_*De(6*xW!-7ZF;8pf8ApjQt-@b z)<);=-Ih@*hdEpmafG@FMb^Z!pqdgE+6WZiT-WY8+ZUIrL7(Js>*z@Oa9fh_%jlpb ze(gyRGtUqAD9|(AR7$|Q-pK_!DZrEIiR#C!6u-|^vi~vm6rnOCzpg>6VxraOBa-@j7~N(vt8yZP##}P;m9oZ>%c{Ck-;d|L zP53DnRFw!)wd-(${Vn#=ix1*`e%&50dVezWz$JUFs`Etee%gBaSIA1P2bRrJ^B$#j z2lQ?|tM#E0WtvN;~M-$D+i?oA7)^=u?Z<>&Zl4 z>3u13N9uhja>wX1cj|V2uQ%meKSwU4rY_|=N!(B)-;l+1nr9&n<|+KGyb~ZJ$Ze&e#$$sJ4raQJg>VKrnc08ZHM^*QB z*D~iq&F@^LB2J*-PDOs>FuT^%$aC(cqI9n7ZUMBlLdLH!BAP$EGE#ne??~-y5`TH` zK7P!XlDNABhhDg>&Q06Ww8{ zLsvq%(JEuaGhYDyiSEc~%`{nWXG%^O#c-+ml9j}^gY4VLkGfRFl#pfgsR@R;xON`s z%Vq03*W#BP`{G_J#ye=GK$HZk;37#aM*VBtsS;5k6KN7URy4(2wS6d&eRa56gTf5i z;Qa-&IZYvD@~8ogoUCR^oTM{)EP6H~Vob^-I)+*evP)pn9wf_LQylVJQ5g%4fiQ4} z){d(uiDyoRFtSLZF@a6Q!_@8&at!m_5GtMFyfOnG2km+L;Cgey$354n$~svud6=O* zCt9MGuxNYhi(cU$&0R1^Tw6)_B&hj+8K^Hq>gld>?9ZjygZj3KnlGKv28s!Lu+0(1 z3Iz3=A@hKf7xUPy4x$Ryrhi{c^&)Pzod;%?2UfJIGOkz}%ZkXMR?bb6L^rMU7`brW zF{id}SITjc8A&bb&hSso-5;5vmR~c_40zq%UVi4V6kBBMA^d)`wBe0!JU_lY58ZLO zXznN8uIj>~eX0$R#*FO>z1tv8C@frrTRZ$>D%$-D-9IB(OSIpA z`Hjiz#^YZgE{8_Q*;GwxMkmr|z9=V89j}H$e%~q@X5k;O)*BD`UK_O2Ci0r0N*T3fBvw9JVFda4AB*^+#gt;5wlBJHWX2`j9egQ8;qC_ z$P^bvCfjMmlZT+;nm~|fH##Gd&{vb}`zXjx5~m_KpX3eOvN&Wyxl3x3jcSqDse6%e z+&;4`c^W-Ao+L&;b}Egns;LN#CR(GE80YPYHdY>RIJjinvR>@noKEB1k+nX3@FM_} zX1`iSS70uxBaTSM84I`w?t)q|^rnW42^wu@5GVJ;M5R0e2^*kb^>8)pyZ;leV#@IK z92i+tK5HH=KPv9Y{cW8u^%z+r17GdSP*n+86Mi6HFIiiT-}VASvi#w{67+cI{GIai z-W)F42V=8tKu)It4(Zk1%zl?c2^Ek{TW?w7n`mlWrJ8C(Qj^Ez@VC?|7=h+p>JRBE z@Nf}1$vMtw3ZU>-8C*tD8uZ=eXt9Do4h%6vlT1z#ErK5rqW)H5DY)Bde}J3!^Y#$> zA;fy9$BJC65v%aC?f$tqu&g~!W5`b3>1UmYTyh5ni!Ecb@4!GQX-W4uhb0iGlCLQ` zO|b2b*vU!P&yEZ>H2GytB~$?hTb9>`-)Cs&b@4q&B%>$Fhdf-AUOM_+-$mjb?p* zpotTMXi9^OT2Fnpxq3*5a0lym1Qc+IG$UXrM&qGCOjGOAd%m?*b!lDfj<<`v6%-YTiv--Y{!Y(u#J(Mw zx0$jWq%*^mCWuunJa~vZS28FlR(O3!UaGx!6L|Q;mCg4kmA)KF9+{5n8-D6D-QKmM z@s8>%81!dI>{NeC5EDlQdY`**)f-?Z#vZdr{+{?2SZ3?R&NyU9M zlTmBPvO=z;^+lPBy9elE2z;vfYmglJQA4odn(-o6t!cNiLWo${WxlqvTu}Zu7%OI2 z@3WVRe+ZBTKwO_^iMd|K7bm%(1_Kco*}aoQvnRtIeE$zq+0_~I)+oX{ ztlYZXy<2%=)b{@Nl%jDX%E5loMSJ`mIXD&7u+l@RN9fE@=%gq^<8x{9ke>nt~ z|3Hp)_YImseUBSMv_%U-OJ5Luv)jv>-z4MG%hY4e9!QrQkE2O+84r&j$50 zFNgAt8F7ILA8TeJ=5kdlBS^_b54LlzF6*hH{Zy{84T)Qu2%}q6_zIK2rXHrn;7;&L zwANvg4v6Q%FwCf%jvQ>~%%wMYR*4ek@pHejE#qWaF7U9=b?@?>*qYqw{${`FCyOZD zwa?dO5E*xM=&uv(5xdd=7iGe{p7tTIeMxen=D&hbdD6eTUrPQ#1_@!nhqiB z7+fxRW@<$GxEWBDFOxrr7PL7nIvyETQ}Bem0lDPpI$G z&bbg;@TKdhzocUiOCZ)_jTcaDnl&eyCKt?sTr;#Ct)n*-35Po5c=W@)t*WYEtgVCq znIRFDjH0c}f2|6C1M0;H_**si`>pE(DA6KKWnv~qcLr~s-~E5Iqi2X_45*Cte!;-o zt$+Y8DBZyuPnTlY@S6Ujyr+vtJj&%dx0o1BgJr!1e@aO!P(7iVardE;d*BGSZaUxT zLFz~-RMPa8QEyVv{JOXMVy10Df|bvF$%#MJ7Q0~0y=6{k(AOCHr$Jdjluct8mBfqO zwA~nW0nu#xl9@Q{i@J@P%W}Z;?V4fqVVU>_kqg;ULR)7d3N1F^t$?GmAD-tBi^2PM zrs-fNPOA&&&i1GD*tBqS5}v^jC27+j*)Q7foaGzHG1pG*Gq)$|=yj4ookV}OUtA$e z?tQRh`%n8nQZuolX^&|RN>hp+3R@vC*3H*QvV3$Xb{yt`(rNF;gp)*};-`Ftyp_!R0EYY?WDD)oL4r zCe6+sXPOqq+opX`%y5vjy4Qe~@RpqD(<P_N3#v_pG9K|~uvXle+oPxAQVIDA*BdTh z1@_hQ37h0!`p9}PH8!n8*ej)?LaQzKnw9Nd5F2dI%fZp})1RrEshcYp{)fP$!>Pdj zT;TQ34x>D9>9Z;H)-vty@$-p|6f7)Za2wRTUMEKfDIJlzq;dAKqHfh1o$M9T z$Scvc88}c~Ztw$@#W0Oor4)z0CI%X6yZSsq{}GpZ&#E zVD4*Rpk75UfQ$bQZh}yVS|_w!>64Y-5X!#yPYymh{ZRL9#~_iYCSVqtz)|~nMqfYx~Fa!5K9DFIWl0A2A&jHX_2TqqCY1_42vl08d|v4b4OvXxHO`3Lqc_ z{NcQUW)$nU6ARUY`A97s{IFHJ(KaW$Fx5sy8MmE%g=ANzUv1kWY#|o?qvqD~uR`DC z>~h&ZNG9a>uri4!Ozi{Qo<8@yu>;#1sTc0EZ)8@JxrsJSk+LU~;Jb8vi{N$a z)9)TmpDa~fl0%x6gf@wdh?o*qfO)IW6W!*%|~r4$9v z8jnki7X(RRqUHGSLe#JChtOxG&iSzbPbpemw$!@94AAO~dUadS1sXe|0JfUD*gc6r z_a9-R+Ql3cEtqY3k(e%2Hs9tQ^A}9|4#u=Ijn{r8Hy%2w=?$8`n=LZ3E{j!en8{ux zt#7$%wOX-M)yddT{3%I_g}kOA;=sNJoh{L#bbB<`q1o+1B9)!!<6CFI$0u1N0C3X! zf;#tm^^`u|T;h2Ncm{x|@4HVLneyipjCX==MaJDG@KfdcSKO;>ZY*Mg zB}xtqGnJ{W949CYeN@k32qv0GA9Q}(xK`3Pm{W>U!ZkCiI!4O_HeaR8uSI{F>MVKM zh&bM1ACU5CrivXZou$~UNVF;xLWi9zLL$1ah?}@7qGOYAwz@1h_?)wl0iyl2DJ~UR^@8m8^ApS@C*hYFJc@+tFgJ z5^@=!%3BDrRKQE3v7okP$_>IN@R126v~~Z*ZL6PVR~MCIZ6fxh#Gxe_^d4>2d_?n5 zSo|FtdDTv8ggGO`e9hydwmO7zceoroUPekS|E&f#c%y?oae|o`g*%NeIzdo@#^5UY zs~t+5R^kUUKA2!4E(@tLou6iBss*o?5}#RmGrt=iyPHrAp)vmdX&o1L!S*JadxVLX zxD#s3L#Gxzaa-Mz#+mrnNdA{x{YbJmcCBNT#bg*_j8MrwHUkWY^%gHNj)f2y3GO*q z2bF%85MdpPWcZ#)BP5xlki$jR&j!6I_w0oUgCboIT~n#@eGaqVVOSsnRYe8?ft|E; zYWRTl_7cbABdW_s%+@m|i`~zn0Mdb#np4MWPKWMKrr)9|f=9@W!2mn?Nqg z4}_B*w4<{UV^UB!wXfZkXF_NR=?t#)kv4pI2VG(?2(Vtuf3|MpX!LABg6kWKf0OhpB-&=kYu$nHZrO(>dd75yc={x0 z4i_J^@g>A*1-t(jZ);00`a8!T@yzv?4DWGwJVx6LxjgB4xp8PgDA3nv^pVo<|D>GL z=}%VMwr0UuioF?h@XdNFF;ML`k%( zpohyy2Ype~+{o*qx9jS5%00DIs1 zuh2#D1~+X7cQ*?sGo5pZYSrl0Wq@xz82DmpK`@8_N)5|Sj&r&WI;7AL5j|%jZGU1^ zTwrn%v^7`R=vIwhRqNwh-{VVK60LDD(aMQcJ2j~V+|*Qh_}16dAg0gC=I5#Jp5EV1 ztlZ3WHb%O>XXa<=S%)ZX`cB_|yuOXiRbJJ~*J_?DL+-p6AP#z8yyR~@a%z901FhJv z3he(R)ZcVwTssy-*P8{pd)c{W1|1!_^I3e#@8NF790cef#W3yQ)cawdKuUQqRVok@+0%?Vrc@nZ9 zpj?r3cTnnDK~;)K_eYbZn-6N^zw9^cm5mKRr5{ccB{flLm^vkF3vEQNOz|E31noV( zUdVhGQ%s3TSKd#d`U*WAlb#Qp|Jq+z-)Yal7GG8#k&Uu_U|-&g8uoN!cUL}p&lp~nR|1?jW)}F^iUBhKnn1F zfvb5I^TFheBAewsCPE1K6l8M0v1P*M1)1J^FaLZ#yneBN?gFltKK18YVLUSx+h`pP zZnVPS$e9Vf6nqQZXa~^aMN@99rQ8n*W`rQUN0SKS!+g+W3w+<-53VU9sro;c_OQ0@ zhqie5v4^Hs{AOxHXYAi6?0NWjcmSTfbBf5_KszMl-TwZaF_OYB)|64J7jo7z?Kv1m zZ6q_g1RYz(e}5xQSI0S+fG;aPPHC?AiG+XOB@Wz=ssS&Vr~?G;+1^8cG{pyl# zjYTRli$6&S!MSc|M1^KW({!NiU~g{NKBE!i3J^(!f*q#IiOuw=r=C*%Q6ew<2= zJ=o+fJP<*A4UiZ_E{3eq13;lu$f5nk51{L_&uxbf5Wc)eXntpiy~v`D1T2(Oej8@V zcU}2qrWLkq+^;rJZo1?n#S-pK*zuPu``X9SBj{t!t#d16SX`QtBYl^A|0L8jAxjE^ zg1ZL!*PMKX?n%OW{xNcY>It|n`UgGIm}y+4>HqYTanl8uH0|gk0M@>`)fjYRjr*H+ zj+AGy;Qs+nx+nS4|Kpt^Pemk38y9N2nUn&F5__hQKK&U4jDksbQaGu^S z;2+@)G$fk)f_;Z{B+Y1rx?*VXkL;=fhK1=&raZZEX$RrzMRaqvH*5b_y zEM0?WhW%OC1EotzSCMGsM-@_7D&{$%;E#oNyS8;tMeFW$d+)fWLiJ z<@R|xv4J@vztvF7b*R7f|Kf4X&QH_@n=W`}iTyd$~TG(3%DU#gZXCXQ$AF zUnUk3;+B2{(oqmb@z?_^CPCki*uxb$?%oGtI7^aYH$j{_=C|Kh|bd;#SMU5ApC4QObtlWRt zmXp(zw&LVX6^ErMnt;-BBCkVA|Bk=@t4tH0ok)}I(~{UCrq-vs9MlEAO+`GhTukXw z4~@!n9f~6)F2H}K9s**#I1xOygw?$Ek(L+z)wCe}z`Je^MtO9X@uU9-4Y3>kLqp%m z`RgZTr=D6Ap#HZPI>bD=eBiI`ziZr6`su7X9+!A$^$p%=8+(1L zn~n;jJs3OOk

7!)26KM5v03hRTqXG_3AkvH{R42%;G%)i}s=ai7+y<|&i*Dzh~f zD;8}DWwIjf_GZT{;HTl!@=O~aChllJ^zXJPUxc)CTih;S&NGf<9Ms#f59!xsiTXQR zb4iF>?i_UUy~&fkrFQTKH>b7#xe0VPcmS5}Zx)j@;$oa!reYgs_%b?I#rDY6aRDkB z)>t56+B<+&NdoI16Ow(}OuKMT`Dl&6>F5kuQDq^b13O^5?%?^a6B_$JPG~GZv{&)^ ze>))#M5%3z&`9x$CzI}vT5fiVqMU{0IO52t?E{pEs1*?jQ#I`x1=@fMn@X>$eJ_S) zeEJflz~AOFY;#!(UVuPGSXEDR{2o+{95qD9+&adSnlH@V?LLMxW+0!}SYsjAfhl-g z&kQHDi}`L=+mWVaQLs=WA;Q6)tHVhAFlvuAiBTHTj_?iRezqk%9#4nc zxsDc};a)_RTtyQzo`L-Pw9Jail)a!_GI*{6jMK?;u<-YDpyr!q&pLY<7E+!)USx(v z;W>W3X}CjvW{i=K|54jwg7H{&gUOeb-97!TvO>|7r!UyFT%9nN;{4XLT?YTvNcchw zeb%kSc*vy46gdJgwL zl_E#NWJ-1N7tH&2p0p{13MJ6Rbg0QLVO92tmavZAKs=srgE;FyvIVn=7doknrvs2^r}YDcxrAYGoW?6%#Mf_FZmQGrKQN`qa2_^`W@W6?ZxPrDNXS_8Mgpe8 zEhvicn*hVvM|%yPEGgW26RT!QN-189D6F$Bvf`^=LFvbR#bbeJiKoCui+@SL%FKV0 z0Pz1i35eSrvZbB{>o&lD_7nVWKNmiODn%c_;}GvEmn}dMK$8$o7bj$Hrp(uz7(_*y zBr1lnP9oe9_?g%FJ|ZUL3iCnvKh)QAi|O2L`kGsP=RM^nuF*-k`xE2byZHhHz6;XA1S z$gbu@JV6|tiZgUvZ7PcdWf$erMm0|tjbx9edx9S+- z-{CuFb4@+obgWqX5U$!m9eI`Ow44%|hQ$$pCC#d>#T;+`Na;FQ7EK~c_8 zpjAoXeL#OYq(-qTs_|@V+y(LMm#bJi$0rp(guza3|Q=UjuTKh~B4>5AHVTp@i45dV#gjg0r!flk+|H!>IpeBwJ_z?i@2a}-td%lV zeL`o4=}dGoWfiWXWMOLjSjDweX|u9Li$9Q^3o*-HJLjjaOTs!BQ0anSD{3{?v?n@- zbO{xQ0!1H9jlp%Wd1DrxfJ8kO+TvY2Nu)+n>(W_oOjx@13Rkcc`5@-yh~>pJIiJ9; zK^;I8mHk%#1eQK=y*fm2Z2z(PPwCA4|4N5|#e4EUN{2aHDC9uW2RYDcAR#=vkg8<4 zY>>_gpd1on4ifmrtda~Gm@D3KN`n=c-9D$ik&U1es%2e*zxP~jj#u`yu=(W{;WOZH z8Qo2^R#0hIr7$e{#UnWWySi76TbOU;;rx{|{G>f%oPnP3r;i~O`F)E$|zQ|+AS8QjW2rbot)o7aX zxeox0|89c-r#1+iy_of18zgvYgC1=CutA}Ef3rc+KWtF2wGeq{iM4{C`OjNJtq+lj zCc7~+gZMBAo4PKqJ7mbNL>GZdk5zndp1SSnW~XrU^>F08?{9m7FFS*E$6`hvuI%KV z03hqC-}p+jP63dU*Zr2r{TYEP{{ujau{Oubj&Ixe%Db_a$#%V7ylq6@iT$+Xq*cyP z5#HD!G(D^!Kb&c(RG>U#GOYne;Gt(~+&Mn(Z}01P!lfwEiMK4Xrvk-y<+YLD^5hq- zD)rH3bMleKvR|oy1LJ=apxGdDN~Q&2{O7B$SgcKtQT|0!V0r1@;$D^=VRE@x^v!gf zI1QOMDyt?uEDEd%vrT=!>My{o-e;?TQ>!)6HPS@}CcRb(Ueqgh@YvsjKa+*T68N-U zz@WAod-bAu;m{mk>U<8leFD>x-^l(Mr6y1_n1ESV;ckYea>wbZ8M0Ef51pF5C!sR+ z*N6+~Q6W#1GdqXmH;KiOZ;}pawHXW}Z_k{!pW;*yQmA1VjQOm!mY888!s8q9FRId% ziX;2sH3c^dM4b!X%0&62!8y|en;7k5WkokaGfuvaf?7JELZyXUg=R$8_4uq6#dps~*Q2}6+RkGO`}1yl3%E-aiBAH0XUB}1yI^ad zU!&f`bLm($=VH3I4%X%cB$zpnd{ZGbV1_+#lWn)n>Ji?gJdLI}q_1BDdOF-hsfsi6 z@TC2PkSb0Pl1-Ui;|W5F2zeFqg4OG%S&*=lU1b#m$vn?4--9Y!C&2M5y>gu2r@M%> zfvWm5eH(Y!MG?Xm#U}VKfj}iPhoEtZ@>d&Z8G67vZ%MVzoIPI%f^kwKff)d|yGiH^ zH}U1U?I)U8*}lVu;Hl2Xcb7deYeX)Fv%QJSJQl))nyK6muhc{;eEI%?*se5;7)lPS z>ohX!vz6CCR68Dy^}UBwAlq!HbuOIR5@J0IPWw9D>II`C!yE!&Qb`5HTx5?az;eAK ztWnPkD7}!Nay}hul)k>3EG8E~YjuvoD|Tv__%aq4dyMDkw zX?jN0WpKH2*}irlS(JW6+4Pvypp7{2%dK{phtOr{OQf^D?yR|)4D4e*u79|<3iGKx zBBpb_4V^VT9BWv>o#n@@?SOL9f>XLD#5gs6IVWji$qy!6%+GQLHU`CxK3T>GKNiTn zrtC&YXP)drcqq;+I9|`ei1Dr&%iS^*P_TBScJ1I$Pbk$dk#kf%f0rPOI9I+k;OZLB z<0_a9qDtt;XtuDeEzLV}3E6_ORCeb~n+-r%wo^+4IkiN@%cqtIb^%k$9?f(F3vJJV z>^p77$Jp*yF6Tay#rw;4*otmz?|G;8Cben!T$ming!m9=&AlU8z;H(uuaY;k4OKfv z_BnW1&|jFS8%WhFOJ9ocL$N?M^Cgzr3?tU+iOKt)d>nMaQPU&b%@=zhhyqG|d9hVf zPw4)K)kg0Ua9iF}Nqkf6j50~3`c0+%muF=9vU^9wGXBQ%`DgxGu7*0exR-NBz>L6S zRJeABvfk{4U$u0BGGb)aRg#wOR%P1iCKxf>PP8|w@>$Vrc+w#kR?^Eec)M!?r(fI4-j8LUcJ|UxuMUm|LgB}f5ld# z$NfJlii$+qy5&*gqtaLWZVmpy6)=dz%3T*BDTon&e(C1y^qqq7$$IMbIAPkjf&7pp zlQ%Ylc%rwYT81x|Db!DjYi!gD3W?7^%`vdtUCH)ok8(G*nm(0By5G~+phv6INQtXQ zpN2sgRhRcmOW2~<%7LAA3u@C^y=)xu7H8}v;j@&k&s9c#M}-gWSl!{@sI=(Y3_ZHu zw_JK#AN9sUmM6pG(uR7e5^~T~H$56gX~d|8CF;0ysE-n$ymU+AKZ_o&;paOiQ+ zaAV9pTHi?yTzuWvmuxF)xKG1# h+I=Zb#lm2zL+^GED;|6|0{{TW$C>I`hkybWz@LUMIqm=e diff --git a/charts/postgres-operator/values-crd.yaml b/charts/postgres-operator/values-crd.yaml index 4f4ec3324..a66911f96 100644 --- a/charts/postgres-operator/values-crd.yaml +++ b/charts/postgres-operator/values-crd.yaml @@ -32,7 +32,7 @@ configGeneral: # Select if setup uses endpoints (default), or configmaps to manage leader (DCS=k8s) # kubernetes_use_configmaps: false # Spilo docker image - docker_image: registry.opensource.zalan.do/acid/spilo-13:2.0-p3 + docker_image: registry.opensource.zalan.do/acid/spilo-13:2.0-p4 # max number of instances in Postgres cluster. -1 = no limit min_instances: -1 # min number of instances in Postgres cluster. -1 = no limit diff --git a/charts/postgres-operator/values.yaml b/charts/postgres-operator/values.yaml index 83426eeb2..e55da4b86 100644 --- a/charts/postgres-operator/values.yaml +++ b/charts/postgres-operator/values.yaml @@ -35,7 +35,7 @@ configGeneral: # Select if setup uses endpoints (default), or configmaps to manage leader (DCS=k8s) # kubernetes_use_configmaps: "false" # Spilo docker image - docker_image: registry.opensource.zalan.do/acid/spilo-13:2.0-p3 + docker_image: registry.opensource.zalan.do/acid/spilo-13:2.0-p4 # max number of instances in Postgres cluster. -1 = no limit min_instances: "-1" # min number of instances in Postgres cluster. -1 = no limit diff --git a/docs/administrator.md b/docs/administrator.md index fb9f774fd..a96732259 100644 --- a/docs/administrator.md +++ b/docs/administrator.md @@ -618,38 +618,35 @@ A secret can be pre-provisioned in different ways: * Automatically provisioned via a custom K8s controller like [kube-aws-iam-controller](https://github.com/mikkeloscar/kube-aws-iam-controller) -## WAL archiving and basebackups +## WAL archiving and physical basebackups Spilo is shipped with [WAL-E](https://github.com/wal-e/wal-e) and its successor [WAL-G](https://github.com/wal-g/wal-g) to perform WAL archiving. By default, -WAL-E is used because it is more battle-tested. Additionally to the continuous -backup stream a [basebackup](https://www.postgresql.org/docs/13/app-pgbasebackup.html) -is initialized every night and 1am UTC. +WAL-E is used for backups because it is more battle-tested. In addition to the +continuous backup stream WAL-E/G pushes a physical base backup every night and +01:00 am UTC. These are the pre-configured settings in the docker image: - ```bash -archive_command: `envdir "{WALE_ENV_DIR}" {WALE_BINARY} wal-push "%p"` -restore_command: `envdir "{{WALE_ENV_DIR}}" /scripts/restore_command.sh "%f" "%p"` - -AWS_ENDPOINT: 'https://s3.AWS_REGION.amazonaws.com:443' BACKUP_NUM_TO_RETAIN: 5 BACKUP_SCHEDULE: '00 01 * * *' -USE_WALG_BACKUP: false (not set) -USE_WALG_RESTORE: false (not set) -WALE_S3_ENDPOINT: 'https+path://s3.AWS_REGION.amazonaws.com:443' -WALE_S3_PREFIX: 's3://bucket-name/very/long/path' +USE_WALG_BACKUP: false (true for Azure and SSH) +USE_WALG_RESTORE: false (true for S3, Azure and SSH) ``` -If the prefix is not specified Spilo will generate it from `WAL_S3_BUCKET`. -When the `AWS_REGION` is set you `AWS_ENDPOINT` and `WALE_S3_ENDPOINT` are -generated automatically. +Within Postgres you can check the pre-configured commands for archiving and +restoring WAL files. You can find the log files to the respective commands +under `$HOME/pgdata/pgroot/pg_log/postgres-?.log`. + +```bash +archive_command: `envdir "{WALE_ENV_DIR}" {WALE_BINARY} wal-push "%p"` +restore_command: `envdir "{{WALE_ENV_DIR}}" /scripts/restore_command.sh "%f" "%p"` +``` -The backup path has to be specified in the operator configuration. You have to -make sure that Postgres is allowed to send compressed WAL files to the backup -location, e.g. an S3 bucket. If you want to change some settings you have to -overwrite Spilo's [environment variables](https://github.com/zalando/spilo/blob/master/ENVIRONMENT.rst) -using an [extra configmap or secret](#custom-pod-environment-variables). +Depending on the cloud storage provider different [environment variables](https://github.com/zalando/spilo/blob/master/ENVIRONMENT.rst) +have to be set for Spilo. Not all of them are generated automatically by the +operator by changing its configuration. In this case you have to use an +[extra configmap or secret](#custom-pod-environment-variables). ### Using AWS S3 or compliant services @@ -683,7 +680,8 @@ configuration: wal_s3_bucket: your-backup-path ``` -The referenced IAM role should contain the following privileges: +The referenced IAM role should contain the following privileges to make sure +Postgres can send compressed WAL files to the given S3 bucket: ```yaml PostgresPodRole: @@ -703,6 +701,21 @@ The referenced IAM role should contain the following privileges: - "arn:aws:s3:::your-backup-path/*" ``` +This should produce the following settings for the essential environment +variables: + +```bash +AWS_ENDPOINT: 'https://s3.eu-central-1.amazonaws.com:443' +WAL_S3_BUCKET: '/spilo/{WAL_BUCKET_SCOPE_PREFIX}{SCOPE}{WAL_BUCKET_SCOPE_SUFFIX}/wal/{PGVERSION}' +WALE_S3_ENDPOINT: 'https+path://s3.eu-central-1.amazonaws.com:443' +WALE_S3_PREFIX: 's3://your-backup-path' +WALG_S3_PREFIX: like WALE_S3_PREFIX +``` + +If the prefix is not specified Spilo will generate it from WAL_S3_BUCKET. +When the AWS_REGION is set you AWS_ENDPOINT and WALE_S3_ENDPOINT are +generated automatically. `SCOPE` is the Postgres cluster name. + ### Google Cloud Platform setup To configure the operator on GCP these prerequisites that are needed: @@ -772,6 +785,15 @@ pod_environment_configmap: "postgres-operator-system/pod-env-overrides" ... ``` +### Restoring physical backups + +If cluster members have to be (re)initialized restoring physical backups +happens automatically either from the backup location or by running +[pg_basebackup](https://www.postgresql.org/docs/13/app-pgbasebackup.html) +on one of the other running instances (preferably replicas if they do not lag +behind). You can test restoring backups by [cloning](user.md#how-to-clone-an-existing-postgresql-cluster) +clusters. + ## Logical backups The operator can manage K8s cron jobs to run logical backups (SQL dumps) of @@ -792,11 +814,12 @@ spec: There a few things to consider when using logical backups: -1. Logical backups should not seen as a proper alternative to basebackups and WAL -archiving which are described above. At the moment, the operator cannot restore -logical backups automatically and you do not get point-in-time recovery but only -snapshots of your data. In its current state, see logical backups as a way to -quickly create SQL dumps that you can easily restore in an empty test cluster. +1. Logical backups should not be seen as a proper alternative to basebackups +and WAL archiving which are described above. At the moment, the operator cannot +restore logical backups automatically and you do not get point-in-time recovery +but only snapshots of your data. In its current state, see logical backups as a +way to quickly create SQL dumps that you can easily restore in an empty test +cluster. 2. The [example image](../docker/logical-backup/Dockerfile) implements the backup via `pg_dumpall` and upload of compressed and encrypted results to an S3 bucket. diff --git a/docs/user.md b/docs/user.md index 6c7f675ad..8ba649bdd 100644 --- a/docs/user.md +++ b/docs/user.md @@ -706,7 +706,8 @@ spec: ### Clone directly -Another way to get a fresh copy of your source DB cluster is via basebackup. To +Another way to get a fresh copy of your source DB cluster is via +[pg_basebackup](https://www.postgresql.org/docs/13/app-pgbasebackup.html). To use this feature simply leave out the timestamp field from the clone section. The operator will connect to the service of the source cluster by name. If the cluster is called test, then the connection string will look like host=test diff --git a/manifests/complete-postgres-manifest.yaml b/manifests/complete-postgres-manifest.yaml index 835cb0748..7f7b34d98 100644 --- a/manifests/complete-postgres-manifest.yaml +++ b/manifests/complete-postgres-manifest.yaml @@ -9,7 +9,7 @@ metadata: # "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 spec: - dockerImage: registry.opensource.zalan.do/acid/spilo-13:2.0-p3 + dockerImage: registry.opensource.zalan.do/acid/spilo-13:2.0-p4 teamId: "acid" numberOfInstances: 2 users: # Application/Robot users diff --git a/manifests/configmap.yaml b/manifests/configmap.yaml index 97f038cf6..c35344b4d 100644 --- a/manifests/configmap.yaml +++ b/manifests/configmap.yaml @@ -32,7 +32,7 @@ data: # default_memory_request: 100Mi # delete_annotation_date_key: delete-date # delete_annotation_name_key: delete-clustername - docker_image: registry.opensource.zalan.do/acid/spilo-13:2.0-p3 + docker_image: registry.opensource.zalan.do/acid/spilo-13:2.0-p4 # downscaler_annotations: "deployment-time,downscaler/*" # enable_admin_role_for_users: "true" # enable_crd_validation: "true" diff --git a/manifests/operatorconfiguration.crd.yaml b/manifests/operatorconfiguration.crd.yaml index 00ed5fb56..227ce6689 100644 --- a/manifests/operatorconfiguration.crd.yaml +++ b/manifests/operatorconfiguration.crd.yaml @@ -61,7 +61,7 @@ spec: properties: docker_image: type: string - default: "registry.opensource.zalan.do/acid/spilo-13:2.0-p3" + default: "registry.opensource.zalan.do/acid/spilo-13:2.0-p4" enable_crd_validation: type: boolean default: true diff --git a/manifests/postgresql-operator-default-configuration.yaml b/manifests/postgresql-operator-default-configuration.yaml index cc0ae609a..0c0daa924 100644 --- a/manifests/postgresql-operator-default-configuration.yaml +++ b/manifests/postgresql-operator-default-configuration.yaml @@ -3,7 +3,7 @@ kind: OperatorConfiguration metadata: name: postgresql-operator-default-configuration configuration: - docker_image: registry.opensource.zalan.do/acid/spilo-13:2.0-p3 + docker_image: registry.opensource.zalan.do/acid/spilo-13:2.0-p4 # enable_crd_validation: true # enable_lazy_spilo_upgrade: false enable_pgversion_env_var: true diff --git a/pkg/controller/operator_config.go b/pkg/controller/operator_config.go index ac21733e7..dbdd4afb4 100644 --- a/pkg/controller/operator_config.go +++ b/pkg/controller/operator_config.go @@ -39,7 +39,7 @@ func (c *Controller) importConfigurationFromCRD(fromCRD *acidv1.OperatorConfigur result.EnableSpiloWalPathCompat = fromCRD.EnableSpiloWalPathCompat result.EtcdHost = fromCRD.EtcdHost result.KubernetesUseConfigMaps = fromCRD.KubernetesUseConfigMaps - result.DockerImage = util.Coalesce(fromCRD.DockerImage, "registry.opensource.zalan.do/acid/spilo-13:2.0-p3") + result.DockerImage = util.Coalesce(fromCRD.DockerImage, "registry.opensource.zalan.do/acid/spilo-13:2.0-p4") result.Workers = util.CoalesceUInt32(fromCRD.Workers, 8) result.MinInstances = fromCRD.MinInstances result.MaxInstances = fromCRD.MaxInstances diff --git a/pkg/util/config/config.go b/pkg/util/config/config.go index bb208e822..93fceff01 100644 --- a/pkg/util/config/config.go +++ b/pkg/util/config/config.go @@ -151,7 +151,7 @@ type Config struct { WatchedNamespace string `name:"watched_namespace"` // special values: "*" means 'watch all namespaces', the empty string "" means 'watch a namespace where operator is deployed to' KubernetesUseConfigMaps bool `name:"kubernetes_use_configmaps" default:"false"` EtcdHost string `name:"etcd_host" default:""` // special values: the empty string "" means Patroni will use K8s as a DCS - DockerImage string `name:"docker_image" default:"registry.opensource.zalan.do/acid/spilo-13:2.0-p3"` + DockerImage string `name:"docker_image" default:"registry.opensource.zalan.do/acid/spilo-13:2.0-p4"` SidecarImages map[string]string `name:"sidecar_docker_images"` // deprecated in favour of SidecarContainers SidecarContainers []v1.Container `name:"sidecars"` PodServiceAccountName string `name:"pod_service_account_name" default:"postgres-pod"` From c3b824781291aabff7bad8ff3f40731dfbd0a547 Mon Sep 17 00:00:00 2001 From: Felix Kunde Date: Thu, 18 Feb 2021 13:27:41 +0100 Subject: [PATCH 5/5] minor updates to admin docs --- docs/administrator.md | 22 ++++++++++++++-------- 1 file changed, 14 insertions(+), 8 deletions(-) diff --git a/docs/administrator.md b/docs/administrator.md index a96732259..715b8f74e 100644 --- a/docs/administrator.md +++ b/docs/administrator.md @@ -643,6 +643,13 @@ archive_command: `envdir "{WALE_ENV_DIR}" {WALE_BINARY} wal-push "%p"` restore_command: `envdir "{{WALE_ENV_DIR}}" /scripts/restore_command.sh "%f" "%p"` ``` +You can produce a basebackup manually with the following command and check +if it ends up in your specified WAL backup path: + +```bash +envdir "/run/etc/wal-e.d/env" /scripts/postgres_backup.sh "/home/postgres/pgdata/pgroot/data" +``` + Depending on the cloud storage provider different [environment variables](https://github.com/zalando/spilo/blob/master/ENVIRONMENT.rst) have to be set for Spilo. Not all of them are generated automatically by the operator by changing its configuration. In this case you have to use an @@ -705,16 +712,15 @@ This should produce the following settings for the essential environment variables: ```bash -AWS_ENDPOINT: 'https://s3.eu-central-1.amazonaws.com:443' -WAL_S3_BUCKET: '/spilo/{WAL_BUCKET_SCOPE_PREFIX}{SCOPE}{WAL_BUCKET_SCOPE_SUFFIX}/wal/{PGVERSION}' -WALE_S3_ENDPOINT: 'https+path://s3.eu-central-1.amazonaws.com:443' -WALE_S3_PREFIX: 's3://your-backup-path' -WALG_S3_PREFIX: like WALE_S3_PREFIX +AWS_ENDPOINT='https://s3.eu-central-1.amazonaws.com:443' +WALE_S3_ENDPOINT='https+path://s3.eu-central-1.amazonaws.com:443' +WALE_S3_PREFIX=$WAL_S3_BUCKET/spilo/{WAL_BUCKET_SCOPE_PREFIX}{SCOPE}{WAL_BUCKET_SCOPE_SUFFIX}/wal/{PGVERSION} ``` -If the prefix is not specified Spilo will generate it from WAL_S3_BUCKET. -When the AWS_REGION is set you AWS_ENDPOINT and WALE_S3_ENDPOINT are -generated automatically. `SCOPE` is the Postgres cluster name. +If the prefix is not specified Spilo will generate it from `WAL_S3_BUCKET`. +When the `AWS_REGION` is set `AWS_ENDPOINT` and `WALE_S3_ENDPOINT` are +generated automatically. `WALG_S3_PREFIX` is identical to `WALE_S3_PREFIX`. +`SCOPE` is the Postgres cluster name. ### Google Cloud Platform setup