make Postgres 14 available
This commit is contained in:
		
							parent
							
								
									d3183604a7
								
							
						
					
					
						commit
						3debbe2749
					
				
							
								
								
									
										11
									
								
								README.md
								
								
								
								
							
							
						
						
									
										11
									
								
								README.md
								
								
								
								
							|  | @ -35,7 +35,7 @@ pipelines with no access to Kubernetes API directly, promoting infrastructure as | ||||||
| [pg_basebackup](https://www.postgresql.org/docs/11/app-pgbasebackup.html) / | [pg_basebackup](https://www.postgresql.org/docs/11/app-pgbasebackup.html) / | ||||||
| [WAL-E](https://github.com/wal-e/wal-e) via [Spilo](https://github.com/zalando/spilo) | [WAL-E](https://github.com/wal-e/wal-e) via [Spilo](https://github.com/zalando/spilo) | ||||||
| * Preload libraries: [bg_mon](https://github.com/CyberDem0n/bg_mon), | * Preload libraries: [bg_mon](https://github.com/CyberDem0n/bg_mon), | ||||||
| [pg_stat_statements](https://www.postgresql.org/docs/9.4/pgstatstatements.html), | [pg_stat_statements](https://www.postgresql.org/docs/14/pgstatstatements.html), | ||||||
| [pgextwlist](https://github.com/dimitri/pgextwlist), | [pgextwlist](https://github.com/dimitri/pgextwlist), | ||||||
| [pg_auth_mon](https://github.com/RafiaSabih/pg_auth_mon) | [pg_auth_mon](https://github.com/RafiaSabih/pg_auth_mon) | ||||||
| * Incl. popular Postgres extensions such as | * Incl. popular Postgres extensions such as | ||||||
|  | @ -53,15 +53,10 @@ pipelines with no access to Kubernetes API directly, promoting infrastructure as | ||||||
| The Postgres Operator has been developed at Zalando and is being used in | The Postgres Operator has been developed at Zalando and is being used in | ||||||
| production for over three years. | production for over three years. | ||||||
| 
 | 
 | ||||||
| ## Notes on Postgres 13 support | ## Using Spilo 12 images or lower | ||||||
| 
 |  | ||||||
| If you are new to the operator, you can skip this and just start using the Postgres operator as is, Postgres 13 is ready to go. |  | ||||||
| 
 |  | ||||||
| The Postgres operator supports Postgres 13 with the new Spilo Image that includes also the recent Patroni version to support PG13 settings. |  | ||||||
| More work on optimizing restarts and rolling upgrades is pending. |  | ||||||
| 
 | 
 | ||||||
| If you are already using the Postgres operator in older version with a Spilo 12 Docker image you need to be aware of the changes for the backup path. | If you are already using the Postgres operator in older version with a Spilo 12 Docker image you need to be aware of the changes for the backup path. | ||||||
| We introduce the major version into the backup path to smoothen the [major version upgrade](docs/administrator.md#minor-and-major-version-upgrade) that is now supported manually. | We introduce the major version into the backup path to smoothen the [major version upgrade](docs/administrator.md#minor-and-major-version-upgrade) that is now supported. | ||||||
| 
 | 
 | ||||||
| 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. | 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. | This comes at potential performance costs and should be disabled after a few days. | ||||||
|  |  | ||||||
|  | @ -71,6 +71,7 @@ spec: | ||||||
|                   "resources_visible": true, |                   "resources_visible": true, | ||||||
|                   "users_visible": true, |                   "users_visible": true, | ||||||
|                   "postgresql_versions": [ |                   "postgresql_versions": [ | ||||||
|  |                     "14", | ||||||
|                     "13", |                     "13", | ||||||
|                     "12", |                     "12", | ||||||
|                     "11" |                     "11" | ||||||
|  |  | ||||||
|  | @ -135,10 +135,10 @@ spec: | ||||||
|                     default: "off" |                     default: "off" | ||||||
|                   minimal_major_version: |                   minimal_major_version: | ||||||
|                     type: string |                     type: string | ||||||
|                     default: "9.5" |                     default: "9.6" | ||||||
|                   target_major_version: |                   target_major_version: | ||||||
|                     type: string |                     type: string | ||||||
|                     default: "13" |                     default: "14" | ||||||
|               kubernetes: |               kubernetes: | ||||||
|                 type: object |                 type: object | ||||||
|                 properties: |                 properties: | ||||||
|  |  | ||||||
|  | @ -362,14 +362,12 @@ spec: | ||||||
|                   version: |                   version: | ||||||
|                     type: string |                     type: string | ||||||
|                     enum: |                     enum: | ||||||
|                       - "9.3" |  | ||||||
|                       - "9.4" |  | ||||||
|                       - "9.5" |  | ||||||
|                       - "9.6" |                       - "9.6" | ||||||
|                       - "10" |                       - "10" | ||||||
|                       - "11" |                       - "11" | ||||||
|                       - "12" |                       - "12" | ||||||
|                       - "13" |                       - "13" | ||||||
|  |                       - "14" | ||||||
|                   parameters: |                   parameters: | ||||||
|                     type: object |                     type: object | ||||||
|                     additionalProperties: |                     additionalProperties: | ||||||
|  |  | ||||||
|  | @ -65,9 +65,9 @@ configMajorVersionUpgrade: | ||||||
|   # "off": no upgrade, "manual": manifest triggers action, "full": minimal version violation triggers too |   # "off": no upgrade, "manual": manifest triggers action, "full": minimal version violation triggers too | ||||||
|   major_version_upgrade_mode: "off" |   major_version_upgrade_mode: "off" | ||||||
|   # minimal Postgres major version that will not automatically be upgraded |   # minimal Postgres major version that will not automatically be upgraded | ||||||
|   minimal_major_version: "9.5" |   minimal_major_version: "9.6" | ||||||
|   # target Postgres major version when upgrading clusters automatically |   # target Postgres major version when upgrading clusters automatically | ||||||
|   target_major_version: "13" |   target_major_version: "14" | ||||||
| 
 | 
 | ||||||
| configKubernetes: | configKubernetes: | ||||||
|   # list of additional capabilities for postgres container |   # list of additional capabilities for postgres container | ||||||
|  |  | ||||||
|  | @ -186,12 +186,12 @@ CRD-configuration, they are grouped under the `major_version_upgrade` key. | ||||||
| 
 | 
 | ||||||
| * **minimal_major_version** | * **minimal_major_version** | ||||||
|   The minimal Postgres major version that will not automatically be upgraded |   The minimal Postgres major version that will not automatically be upgraded | ||||||
|   when `major_version_upgrade_mode` is set to `"full"`. The default is `"9.5"`. |   when `major_version_upgrade_mode` is set to `"full"`. The default is `"9.6"`. | ||||||
| 
 | 
 | ||||||
| * **target_major_version** | * **target_major_version** | ||||||
|   The target Postgres major version when upgrading clusters automatically |   The target Postgres major version when upgrading clusters automatically | ||||||
|   which violate the configured allowed `minimal_major_version` when |   which violate the configured allowed `minimal_major_version` when | ||||||
|   `major_version_upgrade_mode` is set to `"full"`. The default is `"13"`. |   `major_version_upgrade_mode` is set to `"full"`. The default is `"14"`. | ||||||
| 
 | 
 | ||||||
| ## Kubernetes resources | ## Kubernetes resources | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
|  | @ -30,7 +30,7 @@ spec: | ||||||
|   databases: |   databases: | ||||||
|     foo: zalando |     foo: zalando | ||||||
|   postgresql: |   postgresql: | ||||||
|     version: "13" |     version: "14" | ||||||
| ``` | ``` | ||||||
| 
 | 
 | ||||||
| Once you cloned the Postgres Operator [repository](https://github.com/zalando/postgres-operator) | Once you cloned the Postgres Operator [repository](https://github.com/zalando/postgres-operator) | ||||||
|  |  | ||||||
|  | @ -766,7 +766,7 @@ class EndToEndTestCase(unittest.TestCase): | ||||||
|         pg_patch_version = { |         pg_patch_version = { | ||||||
|             "spec": { |             "spec": { | ||||||
|                 "postgres": { |                 "postgres": { | ||||||
|                     "version": "13" |                     "version": "14" | ||||||
|                 } |                 } | ||||||
|             } |             } | ||||||
|         } |         } | ||||||
|  |  | ||||||
|  | @ -36,7 +36,7 @@ spec: | ||||||
|           defaultRoles: true |           defaultRoles: true | ||||||
|           defaultUsers: false |           defaultUsers: false | ||||||
|   postgresql: |   postgresql: | ||||||
|     version: "13" |     version: "14" | ||||||
|     parameters:  # Expert section |     parameters:  # Expert section | ||||||
|       shared_buffers: "32MB" |       shared_buffers: "32MB" | ||||||
|       max_connections: "10" |       max_connections: "10" | ||||||
|  |  | ||||||
|  | @ -83,7 +83,7 @@ data: | ||||||
|   # min_instances: "-1" |   # min_instances: "-1" | ||||||
|   # min_cpu_limit: 250m |   # min_cpu_limit: 250m | ||||||
|   # min_memory_limit: 250Mi |   # min_memory_limit: 250Mi | ||||||
|   # minimal_major_version: "9.5" |   # minimal_major_version: "9.6" | ||||||
|   # node_readiness_label: "" |   # node_readiness_label: "" | ||||||
|   # oauth_token_secret_name: postgresql-operator |   # oauth_token_secret_name: postgresql-operator | ||||||
|   # pam_configuration: | |   # pam_configuration: | | ||||||
|  | @ -124,7 +124,7 @@ data: | ||||||
|   spilo_privileged: "false" |   spilo_privileged: "false" | ||||||
|   storage_resize_mode: "pvc" |   storage_resize_mode: "pvc" | ||||||
|   super_username: postgres |   super_username: postgres | ||||||
|   # target_major_version: "13" |   # target_major_version: "14" | ||||||
|   # team_admin_role: "admin" |   # team_admin_role: "admin" | ||||||
|   # team_api_role_configuration: "log_statement:all" |   # team_api_role_configuration: "log_statement:all" | ||||||
|   # teams_api_url: http://fake-teams-api.default.svc.cluster.local |   # teams_api_url: http://fake-teams-api.default.svc.cluster.local | ||||||
|  |  | ||||||
|  | @ -18,4 +18,4 @@ spec: | ||||||
|   preparedDatabases: |   preparedDatabases: | ||||||
|     bar: {} |     bar: {} | ||||||
|   postgresql: |   postgresql: | ||||||
|     version: "13" |     version: "14" | ||||||
|  |  | ||||||
|  | @ -131,10 +131,10 @@ spec: | ||||||
|                     default: "off" |                     default: "off" | ||||||
|                   minimal_major_version: |                   minimal_major_version: | ||||||
|                     type: string |                     type: string | ||||||
|                     default: "9.5" |                     default: "9.6" | ||||||
|                   target_major_version: |                   target_major_version: | ||||||
|                     type: string |                     type: string | ||||||
|                     default: "13" |                     default: "14" | ||||||
|               kubernetes: |               kubernetes: | ||||||
|                 type: object |                 type: object | ||||||
|                 properties: |                 properties: | ||||||
|  |  | ||||||
|  | @ -28,8 +28,8 @@ configuration: | ||||||
|     super_username: postgres |     super_username: postgres | ||||||
|   major_version_upgrade: |   major_version_upgrade: | ||||||
|     major_version_upgrade_mode: "off" |     major_version_upgrade_mode: "off" | ||||||
|     minimal_major_version: "9.5" |     minimal_major_version: "9.6" | ||||||
|     target_major_version: "13" |     target_major_version: "14" | ||||||
|   kubernetes: |   kubernetes: | ||||||
|     # additional_pod_capabilities: |     # additional_pod_capabilities: | ||||||
|     # - "SYS_NICE" |     # - "SYS_NICE" | ||||||
|  |  | ||||||
|  | @ -358,14 +358,12 @@ spec: | ||||||
|                   version: |                   version: | ||||||
|                     type: string |                     type: string | ||||||
|                     enum: |                     enum: | ||||||
|                       - "9.3" |  | ||||||
|                       - "9.4" |  | ||||||
|                       - "9.5" |  | ||||||
|                       - "9.6" |                       - "9.6" | ||||||
|                       - "10" |                       - "10" | ||||||
|                       - "11" |                       - "11" | ||||||
|                       - "12" |                       - "12" | ||||||
|                       - "13" |                       - "13" | ||||||
|  |                       - "14" | ||||||
|                   parameters: |                   parameters: | ||||||
|                     type: object |                     type: object | ||||||
|                     additionalProperties: |                     additionalProperties: | ||||||
|  |  | ||||||
|  | @ -9,7 +9,7 @@ spec: | ||||||
|     size: 1Gi |     size: 1Gi | ||||||
|   numberOfInstances: 1 |   numberOfInstances: 1 | ||||||
|   postgresql: |   postgresql: | ||||||
|     version: "13" |     version: "14" | ||||||
| # Make this a standby cluster and provide the s3 bucket path of source cluster for continuous streaming. | # Make this a standby cluster and provide the s3 bucket path of source cluster for continuous streaming. | ||||||
|   standby: |   standby: | ||||||
|     s3_wal_path: "s3://path/to/bucket/containing/wal/of/source/cluster/" |     s3_wal_path: "s3://path/to/bucket/containing/wal/of/source/cluster/" | ||||||
|  |  | ||||||
|  | @ -504,15 +504,6 @@ var PostgresCRDResourceValidation = apiextv1.CustomResourceValidation{ | ||||||
| 							"version": { | 							"version": { | ||||||
| 								Type: "string", | 								Type: "string", | ||||||
| 								Enum: []apiextv1.JSON{ | 								Enum: []apiextv1.JSON{ | ||||||
| 									{ |  | ||||||
| 										Raw: []byte(`"9.3"`), |  | ||||||
| 									}, |  | ||||||
| 									{ |  | ||||||
| 										Raw: []byte(`"9.4"`), |  | ||||||
| 									}, |  | ||||||
| 									{ |  | ||||||
| 										Raw: []byte(`"9.5"`), |  | ||||||
| 									}, |  | ||||||
| 									{ | 									{ | ||||||
| 										Raw: []byte(`"9.6"`), | 										Raw: []byte(`"9.6"`), | ||||||
| 									}, | 									}, | ||||||
|  | @ -528,6 +519,9 @@ var PostgresCRDResourceValidation = apiextv1.CustomResourceValidation{ | ||||||
| 									{ | 									{ | ||||||
| 										Raw: []byte(`"13"`), | 										Raw: []byte(`"13"`), | ||||||
| 									}, | 									}, | ||||||
|  | 									{ | ||||||
|  | 										Raw: []byte(`"14"`), | ||||||
|  | 									}, | ||||||
| 								}, | 								}, | ||||||
| 							}, | 							}, | ||||||
| 							"parameters": { | 							"parameters": { | ||||||
|  |  | ||||||
|  | @ -44,8 +44,8 @@ type PostgresUsersConfiguration struct { | ||||||
| // MajorVersionUpgradeConfiguration defines how to execute major version upgrades of Postgres.
 | // MajorVersionUpgradeConfiguration defines how to execute major version upgrades of Postgres.
 | ||||||
| type MajorVersionUpgradeConfiguration struct { | type MajorVersionUpgradeConfiguration struct { | ||||||
| 	MajorVersionUpgradeMode string `json:"major_version_upgrade_mode" default:"off"` // off - no actions, manual - manifest triggers action, full - manifest and minimal version violation trigger upgrade
 | 	MajorVersionUpgradeMode string `json:"major_version_upgrade_mode" default:"off"` // off - no actions, manual - manifest triggers action, full - manifest and minimal version violation trigger upgrade
 | ||||||
| 	MinimalMajorVersion     string `json:"minimal_major_version" default:"9.5"` | 	MinimalMajorVersion     string `json:"minimal_major_version" default:"9.6"` | ||||||
| 	TargetMajorVersion      string `json:"target_major_version" default:"13"` | 	TargetMajorVersion      string `json:"target_major_version" default:"14"` | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| // KubernetesMetaConfiguration defines k8s conf required for all Postgres clusters and the operator itself
 | // KubernetesMetaConfiguration defines k8s conf required for all Postgres clusters and the operator itself
 | ||||||
|  |  | ||||||
|  | @ -9,12 +9,12 @@ import ( | ||||||
| 
 | 
 | ||||||
| // VersionMap Map of version numbers
 | // VersionMap Map of version numbers
 | ||||||
| var VersionMap = map[string]int{ | var VersionMap = map[string]int{ | ||||||
| 	"9.5": 90500, |  | ||||||
| 	"9.6": 90600, | 	"9.6": 90600, | ||||||
| 	"10":  100000, | 	"10":  100000, | ||||||
| 	"11":  110000, | 	"11":  110000, | ||||||
| 	"12":  120000, | 	"12":  120000, | ||||||
| 	"13":  130000, | 	"13":  130000, | ||||||
|  | 	"14":  140000, | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| // IsBiggerPostgresVersion Compare two Postgres version numbers
 | // IsBiggerPostgresVersion Compare two Postgres version numbers
 | ||||||
|  | @ -33,7 +33,7 @@ func (c *Cluster) GetDesiredMajorVersionAsInt() int { | ||||||
| func (c *Cluster) GetDesiredMajorVersion() string { | func (c *Cluster) GetDesiredMajorVersion() string { | ||||||
| 
 | 
 | ||||||
| 	if c.Config.OpConfig.MajorVersionUpgradeMode == "full" { | 	if c.Config.OpConfig.MajorVersionUpgradeMode == "full" { | ||||||
| 		// current is 9.5, minimal is 11 allowing 11 to 13 clusters, everything below is upgraded
 | 		// current is 9.6, minimal is 11 allowing 11 to 14 clusters, everything below is upgraded
 | ||||||
| 		if IsBiggerPostgresVersion(c.Spec.PgVersion, c.Config.OpConfig.MinimalMajorVersion) { | 		if IsBiggerPostgresVersion(c.Spec.PgVersion, c.Config.OpConfig.MinimalMajorVersion) { | ||||||
| 			c.logger.Infof("overwriting configured major version %s to %s", c.Spec.PgVersion, c.Config.OpConfig.TargetMajorVersion) | 			c.logger.Infof("overwriting configured major version %s to %s", c.Spec.PgVersion, c.Config.OpConfig.TargetMajorVersion) | ||||||
| 			return c.Config.OpConfig.TargetMajorVersion | 			return c.Config.OpConfig.TargetMajorVersion | ||||||
|  |  | ||||||
|  | @ -56,8 +56,8 @@ func (c *Controller) importConfigurationFromCRD(fromCRD *acidv1.OperatorConfigur | ||||||
| 
 | 
 | ||||||
| 	// major version upgrade config
 | 	// major version upgrade config
 | ||||||
| 	result.MajorVersionUpgradeMode = util.Coalesce(fromCRD.MajorVersionUpgrade.MajorVersionUpgradeMode, "off") | 	result.MajorVersionUpgradeMode = util.Coalesce(fromCRD.MajorVersionUpgrade.MajorVersionUpgradeMode, "off") | ||||||
| 	result.MinimalMajorVersion = util.Coalesce(fromCRD.MajorVersionUpgrade.MinimalMajorVersion, "9.5") | 	result.MinimalMajorVersion = util.Coalesce(fromCRD.MajorVersionUpgrade.MinimalMajorVersion, "9.6") | ||||||
| 	result.TargetMajorVersion = util.Coalesce(fromCRD.MajorVersionUpgrade.TargetMajorVersion, "13") | 	result.TargetMajorVersion = util.Coalesce(fromCRD.MajorVersionUpgrade.TargetMajorVersion, "14") | ||||||
| 
 | 
 | ||||||
| 	// kubernetes config
 | 	// kubernetes config
 | ||||||
| 	result.CustomPodAnnotations = fromCRD.Kubernetes.CustomPodAnnotations | 	result.CustomPodAnnotations = fromCRD.Kubernetes.CustomPodAnnotations | ||||||
|  |  | ||||||
|  | @ -212,8 +212,8 @@ type Config struct { | ||||||
| 	EnablePgVersionEnvVar                  bool              `name:"enable_pgversion_env_var" default:"true"` | 	EnablePgVersionEnvVar                  bool              `name:"enable_pgversion_env_var" default:"true"` | ||||||
| 	EnableSpiloWalPathCompat               bool              `name:"enable_spilo_wal_path_compat" default:"false"` | 	EnableSpiloWalPathCompat               bool              `name:"enable_spilo_wal_path_compat" default:"false"` | ||||||
| 	MajorVersionUpgradeMode                string            `name:"major_version_upgrade_mode" default:"off"` | 	MajorVersionUpgradeMode                string            `name:"major_version_upgrade_mode" default:"off"` | ||||||
| 	MinimalMajorVersion                    string            `name:"minimal_major_version" default:"9.5"` | 	MinimalMajorVersion                    string            `name:"minimal_major_version" default:"9.6"` | ||||||
| 	TargetMajorVersion                     string            `name:"target_major_version" default:"13"` | 	TargetMajorVersion                     string            `name:"target_major_version" default:"14"` | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| // MustMarshal marshals the config or panics
 | // MustMarshal marshals the config or panics
 | ||||||
|  |  | ||||||
|  | @ -66,6 +66,7 @@ spec: | ||||||
|                   "cost_core": 0.0575, |                   "cost_core": 0.0575, | ||||||
|                   "cost_memory": 0.014375, |                   "cost_memory": 0.014375, | ||||||
|                   "postgresql_versions": [ |                   "postgresql_versions": [ | ||||||
|  |                     "14", | ||||||
|                     "13", |                     "13", | ||||||
|                     "12", |                     "12", | ||||||
|                     "11" |                     "11" | ||||||
|  |  | ||||||
|  | @ -308,7 +308,7 @@ def read_versions( | ||||||
|         if uid == 'wal' or defaulting(lambda: UUID(uid)) |         if uid == 'wal' or defaulting(lambda: UUID(uid)) | ||||||
|     ] |     ] | ||||||
| 
 | 
 | ||||||
| BACKUP_VERSION_PREFIXES = ['','9.5/', '9.6/', '10/','11/', '12/', '13/'] | BACKUP_VERSION_PREFIXES = ['', '9.6/', '10/', '11/', '12/', '13/', '14/'] | ||||||
| 
 | 
 | ||||||
| def read_basebackups( | def read_basebackups( | ||||||
|     pg_cluster, |     pg_cluster, | ||||||
|  |  | ||||||
|  | @ -23,6 +23,7 @@ default_operator_ui_config='{ | ||||||
|   "cost_core": 0.0575, |   "cost_core": 0.0575, | ||||||
|   "cost_memory": 0.014375, |   "cost_memory": 0.014375, | ||||||
|   "postgresql_versions": [ |   "postgresql_versions": [ | ||||||
|  |     "14", | ||||||
|     "13", |     "13", | ||||||
|     "12", |     "12", | ||||||
|     "11" |     "11" | ||||||
|  |  | ||||||
		Loading…
	
		Reference in New Issue