Add support for pooler load balancer
Signed-off-by: Sergey Shatunov <me@prok.pw>
This commit is contained in:
		
							parent
							
								
									168abfe37b
								
							
						
					
					
						commit
						31d04cbdfc
					
				|  | @ -163,6 +163,8 @@ configLoadBalancer: | |||
|   enable_master_load_balancer: false | ||||
|   # toggles service type load balancer pointing to the replica pod of the cluster | ||||
|   enable_replica_load_balancer: false | ||||
|   # toggles service type load balancer pointing to the pooler pod of the cluster | ||||
|   enable_pooler_load_balancer: false | ||||
|   # defines the DNS name string template for the master load balancer cluster | ||||
|   master_dns_name_format: "{cluster}.{team}.{hostedzone}" | ||||
|   # defines the DNS name string template for the replica load balancer cluster | ||||
|  |  | |||
|  | @ -154,6 +154,8 @@ configLoadBalancer: | |||
|   enable_master_load_balancer: "false" | ||||
|   # toggles service type load balancer pointing to the replica pod of the cluster | ||||
|   enable_replica_load_balancer: "false" | ||||
|   # toggles service type load balancer pointing to the pooler pod of the cluster | ||||
|   enable_pooler_load_balancer: "false" | ||||
|   # defines the DNS name string template for the master load balancer cluster | ||||
|   master_dns_name_format: '{cluster}.{team}.{hostedzone}' | ||||
|   # defines the DNS name string template for the replica load balancer cluster | ||||
|  |  | |||
|  | @ -197,6 +197,8 @@ spec: | |||
|                   type: boolean | ||||
|                 enable_replica_load_balancer: | ||||
|                   type: boolean | ||||
|                 enable_pooler_load_balancer: | ||||
|                   type: boolean | ||||
|                 master_dns_name_format: | ||||
|                   type: string | ||||
|                 replica_dns_name_format: | ||||
|  |  | |||
|  | @ -156,6 +156,8 @@ spec: | |||
|               type: boolean | ||||
|             enableReplicaLoadBalancer: | ||||
|               type: boolean | ||||
|             enablePoolerLoadBalancer: | ||||
|               type: boolean | ||||
|             enableShmVolume: | ||||
|               type: boolean | ||||
|             init_containers:  # deprecated | ||||
|  |  | |||
|  | @ -100,6 +100,7 @@ type LoadBalancerConfiguration struct { | |||
| 	DbHostedZone              string                `json:"db_hosted_zone,omitempty"` | ||||
| 	EnableMasterLoadBalancer  bool                  `json:"enable_master_load_balancer,omitempty"` | ||||
| 	EnableReplicaLoadBalancer bool                  `json:"enable_replica_load_balancer,omitempty"` | ||||
| 	EnablePoolerLoadBalancer  bool                  `json:"enable_pooler_load_balancer,omitempty"` | ||||
| 	CustomServiceAnnotations  map[string]string     `json:"custom_service_annotations,omitempty"` | ||||
| 	MasterDNSNameFormat       config.StringTemplate `json:"master_dns_name_format,omitempty"` | ||||
| 	ReplicaDNSNameFormat      config.StringTemplate `json:"replica_dns_name_format,omitempty"` | ||||
|  |  | |||
|  | @ -41,6 +41,7 @@ type PostgresSpec struct { | |||
| 	// in that case the var evaluates to nil and the value is taken from the operator config
 | ||||
| 	EnableMasterLoadBalancer  *bool `json:"enableMasterLoadBalancer,omitempty"` | ||||
| 	EnableReplicaLoadBalancer *bool `json:"enableReplicaLoadBalancer,omitempty"` | ||||
| 	EnablePoolerLoadBalancer  *bool `json:"enablePoolerLoadBalancer,omitempty"` | ||||
| 
 | ||||
| 	// deprecated load balancer settings maintained for backward compatibility
 | ||||
| 	// see "Load balancers" operator docs
 | ||||
|  |  | |||
|  | @ -525,6 +525,11 @@ func (in *PostgresSpec) DeepCopyInto(out *PostgresSpec) { | |||
| 		*out = new(bool) | ||||
| 		**out = **in | ||||
| 	} | ||||
| 	if in.EnablePoolerLoadBalancer != nil { | ||||
| 		in, out := &in.EnablePoolerLoadBalancer, &out.EnablePoolerLoadBalancer | ||||
| 		*out = new(bool) | ||||
| 		**out = **in | ||||
| 	} | ||||
| 	if in.UseLoadBalancer != nil { | ||||
| 		in, out := &in.UseLoadBalancer, &out.UseLoadBalancer | ||||
| 		*out = new(bool) | ||||
|  |  | |||
|  | @ -2210,6 +2210,14 @@ func (c *Cluster) generateConnectionPoolerDeployment(spec *acidv1.PostgresSpec) | |||
| 	return deployment, nil | ||||
| } | ||||
| 
 | ||||
| func (c *Cluster) shouldCreateLoadBalancerForPoolerService(spec *acidv1.PostgresSpec) bool { | ||||
| 	if spec.EnablePoolerLoadBalancer != nil { | ||||
| 		return *spec.EnablePoolerLoadBalancer | ||||
| 	} | ||||
| 
 | ||||
| 	return c.OpConfig.EnablePoolerLoadBalancer | ||||
| } | ||||
| 
 | ||||
| func (c *Cluster) generateConnectionPoolerService(spec *acidv1.PostgresSpec) *v1.Service { | ||||
| 
 | ||||
| 	// there are two ways to enable connection pooler, either to specify a
 | ||||
|  | @ -2230,12 +2238,17 @@ func (c *Cluster) generateConnectionPoolerService(spec *acidv1.PostgresSpec) *v1 | |||
| 				TargetPort: intstr.IntOrString{StrVal: c.servicePort(Master)}, | ||||
| 			}, | ||||
| 		}, | ||||
| 		Type: v1.ServiceTypeClusterIP, | ||||
| 		Selector: map[string]string{ | ||||
| 			"connection-pooler": c.connectionPoolerName(), | ||||
| 		}, | ||||
| 	} | ||||
| 
 | ||||
| 	if c.shouldCreateLoadBalancerForPoolerService(spec) { | ||||
| 		serviceSpec.Type = v1.ServiceTypeLoadBalancer | ||||
| 	} else { | ||||
| 		serviceSpec.Type = v1.ServiceTypeClusterIP | ||||
| 	} | ||||
| 
 | ||||
| 	service := &v1.Service{ | ||||
| 		ObjectMeta: metav1.ObjectMeta{ | ||||
| 			Name:        c.connectionPoolerName(), | ||||
|  |  | |||
|  | @ -100,6 +100,7 @@ func (c *Controller) importConfigurationFromCRD(fromCRD *acidv1.OperatorConfigur | |||
| 	result.DbHostedZone = fromCRD.LoadBalancer.DbHostedZone | ||||
| 	result.EnableMasterLoadBalancer = fromCRD.LoadBalancer.EnableMasterLoadBalancer | ||||
| 	result.EnableReplicaLoadBalancer = fromCRD.LoadBalancer.EnableReplicaLoadBalancer | ||||
| 	result.EnablePoolerLoadBalancer = fromCRD.LoadBalancer.EnablePoolerLoadBalancer | ||||
| 	result.CustomServiceAnnotations = fromCRD.LoadBalancer.CustomServiceAnnotations | ||||
| 	result.MasterDNSNameFormat = fromCRD.LoadBalancer.MasterDNSNameFormat | ||||
| 	result.ReplicaDNSNameFormat = fromCRD.LoadBalancer.ReplicaDNSNameFormat | ||||
|  |  | |||
|  | @ -135,6 +135,7 @@ type Config struct { | |||
| 	EnableAdminRoleForUsers                bool              `name:"enable_admin_role_for_users" default:"true"` | ||||
| 	EnableMasterLoadBalancer               bool              `name:"enable_master_load_balancer" default:"true"` | ||||
| 	EnableReplicaLoadBalancer              bool              `name:"enable_replica_load_balancer" default:"false"` | ||||
| 	EnablePoolerLoadBalancer               bool              `name:"enable_pooler_load_balancer" default:"false"` | ||||
| 	CustomServiceAnnotations               map[string]string `name:"custom_service_annotations"` | ||||
| 	CustomPodAnnotations                   map[string]string `name:"custom_pod_annotations"` | ||||
| 	EnablePodAntiAffinity                  bool              `name:"enable_pod_antiaffinity" default:"false"` | ||||
|  |  | |||
		Loading…
	
		Reference in New Issue