Allow custom Postgres pod environment variables
This commit is contained in:
		
							parent
							
								
									87bc47d8d0
								
							
						
					
					
						commit
						e8d9c75949
					
				
							
								
								
									
										32
									
								
								README.md
								
								
								
								
							
							
						
						
									
										32
									
								
								README.md
								
								
								
								
							|  | @ -145,6 +145,38 @@ spec: | |||
| Please be aware that the taint and toleration only ensures that no other pod gets scheduled to a PostgreSQL node  | ||||
| but not that PostgreSQL pods are placed on such a node. This can be achieved by setting a node affinity rule in the ConfigMap. | ||||
| 
 | ||||
| #### Custom Pod Environment Variables | ||||
| 
 | ||||
| It is possible to configure a config map which is 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. The config map with the additional settings is configured in the operator's main config map: | ||||
| 
 | ||||
| **postgres-operator ConfigMap** | ||||
| 
 | ||||
| ``` | ||||
| apiVersion: v1 | ||||
| kind: ConfigMap | ||||
| metadata: | ||||
|   name: postgres-operator | ||||
| data: | ||||
|   # referencing config map with custom settings | ||||
|   pod_environment_configmap: postgres-pod-config | ||||
|   ... | ||||
| ``` | ||||
| 
 | ||||
| **referenced ConfigMap `postgres-pod-config`** | ||||
| 
 | ||||
| ``` | ||||
| apiVersion: v1 | ||||
| kind: ConfigMap | ||||
| metadata: | ||||
|   name: postgres-pod-config | ||||
|   namespace: default | ||||
| data: | ||||
|   MY_CUSTOM_VAR: value | ||||
| ``` | ||||
| 
 | ||||
| This ConfigMap is then added as a source of environment variables to the Postgres StatefulSet/pods. | ||||
| 
 | ||||
| # Setup development environment | ||||
| 
 | ||||
|  |  | |||
|  | @ -362,6 +362,13 @@ func (c *Cluster) generatePodTemplate(resourceRequirements *v1.ResourceRequireme | |||
| 	if cloneDescription.ClusterName != "" { | ||||
| 		envVars = append(envVars, c.generateCloneEnvironment(cloneDescription)...) | ||||
| 	} | ||||
| 
 | ||||
| 	envFromSource := []v1.EnvFromSource{} | ||||
| 	if c.OpConfig.PodEnvironmentConfigMap != "" { | ||||
| 		configMapRef := v1.ConfigMapEnvSource{LocalObjectReference: v1.LocalObjectReference{Name: c.OpConfig.PodEnvironmentConfigMap}} | ||||
| 		envFromSource = append(envFromSource, v1.EnvFromSource{ConfigMapRef: &configMapRef}) | ||||
| 	} | ||||
| 
 | ||||
| 	privilegedMode := true | ||||
| 	containerImage := c.OpConfig.DockerImage | ||||
| 	if dockerImage != nil && *dockerImage != "" { | ||||
|  | @ -393,6 +400,7 @@ func (c *Cluster) generatePodTemplate(resourceRequirements *v1.ResourceRequireme | |||
| 			}, | ||||
| 		}, | ||||
| 		Env: envVars, | ||||
| 		EnvFrom: envFromSource, | ||||
| 		SecurityContext: &v1.SecurityContext{ | ||||
| 			Privileged: &privilegedMode, | ||||
| 		}, | ||||
|  |  | |||
|  | @ -30,6 +30,7 @@ type Resources struct { | |||
| 	DefaultMemoryRequest    string            `name:"default_memory_request" default:"100Mi"` | ||||
| 	DefaultCPULimit         string            `name:"default_cpu_limit" default:"3"` | ||||
| 	DefaultMemoryLimit      string            `name:"default_memory_limit" default:"1Gi"` | ||||
| 	PodEnvironmentConfigMap string            `name:"pod_environment_configmap" default:""` | ||||
| 	NodeEOLLabel            map[string]string `name:"node_eol_label" default:"lifecycle-status:pending-decommission"` | ||||
| 	NodeReadinessLabel      map[string]string `name:"node_readiness_label" default:"lifecycle-status:ready"` | ||||
| } | ||||
|  |  | |||
		Loading…
	
		Reference in New Issue