use Spilo 2.0-r4 and update docs
This commit is contained in:
		
							parent
							
								
									b7ec5d8d97
								
							
						
					
					
						commit
						77f8c72565
					
				| 
						 | 
				
			
			@ -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`
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -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
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
										
											Binary file not shown.
										
									
								
							| 
						 | 
				
			
			@ -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
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -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
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -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
 | 
			
		||||
BACKUP_NUM_TO_RETAIN: 5
 | 
			
		||||
BACKUP_SCHEDULE:      '00 01 * * *'
 | 
			
		||||
USE_WALG_BACKUP:      false (true for Azure and SSH)
 | 
			
		||||
USE_WALG_RESTORE:     false (true for S3, Azure and SSH)
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
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"`
 | 
			
		||||
 | 
			
		||||
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).
 | 
			
		||||
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.
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -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
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -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
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -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"
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -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
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -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
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -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
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -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"`
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in New Issue