Skip to content

Commit 7cc1865

Browse files
committed
Add pgpool connection pooling for PostgreSQL
- Add Pgpool and PgpoolVersion (4.6.0) resources to db template - Set max_connections=400 to satisfy pgpool connection formula: max_pool(4) * num_init_children(15) * 2 = 120 <= 397 - Route database traffic through pgpool when enabled - Add PgPoolSettings type and pgpool section in values Signed-off-by: notTabassum <oyshee@appscode.com>
1 parent 4679ce5 commit 7cc1865

8 files changed

Lines changed: 180 additions & 1 deletion

File tree

apis/installer/v1alpha1/ace_ace_types.go

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -395,6 +395,16 @@ type Settings struct {
395395
Firebase FirebaseSettings `json:"firebase"`
396396
// +optional
397397
Marketplace *MarketplaceSettings `json:"marketplace,omitempty"`
398+
// +optional
399+
PgPool *PgPoolSettings `json:"pgpool,omitempty"`
400+
}
401+
402+
type PgPoolSettings struct {
403+
Enabled bool `json:"enabled"`
404+
Replicas int `json:"replicas"`
405+
Resources core.ResourceRequirements `json:"resources"`
406+
// +optional
407+
Config map[string]string `json:"config,omitempty"`
398408
}
399409

400410
type DBSettings struct {

apis/installer/v1alpha1/zz_generated.deepcopy.go

Lines changed: 23 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

charts/ace/README.md

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -141,6 +141,13 @@ The following table lists the configurable parameters of the `ace` chart and the
141141
| settings.db.auth.username | | <code>postgres</code> |
142142
| settings.db.auth.password | | <code>"xyz"</code> |
143143
| settings.db.logSQL | | <code>false</code> |
144+
| settings.pgpool.enabled | | <code>true</code> |
145+
| settings.pgpool.replicas | | <code>1</code> |
146+
| settings.pgpool.config.num_init_children | | <code>"15"</code> |
147+
| settings.pgpool.config.max_pool | | <code>"4"</code> |
148+
| settings.pgpool.resources.limits.memory | | <code>512Mi</code> |
149+
| settings.pgpool.resources.requests.memory | | <code>256Mi</code> |
150+
| settings.pgpool.resources.requests.cpu | | <code>250m</code> |
144151
| settings.cache.version | | <code>"7.2.4"</code> |
145152
| settings.cache.cacheInterval | | <code>60</code> |
146153
| settings.cache.persistence.size | | <code>10Gi</code> |

charts/ace/templates/_helpers.tpl

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -173,8 +173,12 @@ Returns the ServiceMonitor labels
173173
Determine database host name
174174
*/}}
175175
{{- define "settings.database.host" -}}
176+
{{- if .Values.settings.pgpool.enabled -}}
177+
{{- printf "%s-pgpool.%s.svc:9999" (include "ace.fullname" .) .Release.Namespace -}}
178+
{{- else -}}
176179
{{- printf "%s-db.%s.svc:5432" (include "ace.fullname" .) .Release.Namespace -}}
177180
{{- end -}}
181+
{{- end -}}
178182

179183
{{- define "settings.oauth2JWTSecret" -}}
180184
{{ .Values.settings.security.oauth2JWTSecret | default (randAlphaNum 43) }}

charts/ace/templates/db/db-config.yaml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ metadata:
1212
type: Opaque
1313
stringData:
1414
user.conf: |
15-
max_connections=110
15+
max_connections=400
1616
{{- if .Values.pgoutbox.enabled }}
1717
wal_level=logical
1818
max_wal_senders=50
Lines changed: 75 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,75 @@
1+
{{- if .Values.settings.pgpool.enabled }}
2+
apiVersion: kubedb.com/v1alpha2
3+
kind: Pgpool
4+
metadata:
5+
name: {{ include "ace.fullname" . }}-pgpool
6+
namespace: {{ .Release.Namespace }}
7+
labels:
8+
{{- include "ace.labels" . | nindent 4 }}
9+
spec:
10+
version: "4.6.0"
11+
replicas: {{ .Values.settings.pgpool.replicas }}
12+
postgresRef:
13+
name: {{ include "ace.fullname" . }}-db
14+
namespace: {{ .Release.Namespace }}
15+
syncUsers: true
16+
deletionPolicy: {{ .Values.settings.db.deletionPolicy }}
17+
{{- if .Values.settings.pgpool.config }}
18+
configuration:
19+
inline:
20+
{{- range $k, $v := .Values.settings.pgpool.config }}
21+
{{ $k }}: "{{ $v }}"
22+
{{- end }}
23+
{{- end }}
24+
podTemplate:
25+
spec:
26+
containers:
27+
- name: pgpool
28+
resources:
29+
{{- toYaml .Values.settings.pgpool.resources | nindent 10 }}
30+
{{- if eq (include "distro.openshift" $) "true" }}
31+
securityContext:
32+
runAsGroup: {{ .Values.securityContext.runAsUser }}
33+
runAsUser: {{ .Values.securityContext.runAsUser }}
34+
capabilities:
35+
drop:
36+
- ALL
37+
runAsNonRoot: true
38+
seccompProfile:
39+
type: RuntimeDefault
40+
securityContext:
41+
fsGroup: {{ .Values.securityContext.runAsUser }}
42+
runAsUser: {{ .Values.securityContext.runAsUser }}
43+
runAsGroup: {{ .Values.securityContext.runAsUser }}
44+
{{- end }}
45+
{{- if .Values.global.monitoring }}
46+
monitor:
47+
agent: {{ .Values.global.monitoring.agent }}
48+
prometheus:
49+
serviceMonitor:
50+
interval: 30s
51+
labels:
52+
{{- toYaml .Values.global.monitoring.serviceMonitor.labels | nindent 10 }}
53+
{{- end }}
54+
{{- end }}
55+
56+
---
57+
58+
apiVersion: catalog.kubedb.com/v1alpha1
59+
kind: PgpoolVersion
60+
metadata:
61+
name: 4.6.0
62+
spec:
63+
exporter:
64+
image: ghcr.io/appscode-images/pgpool2_exporter:v1.2.2
65+
gitSyncer:
66+
image: registry.k8s.io/git-sync/git-sync:v4.4.2
67+
pgpool:
68+
image: ghcr.io/appscode-images/pgpool2:4.6.0
69+
securityContext:
70+
runAsAnyNonRoot: true
71+
runAsUser: 70
72+
updateConstraints:
73+
allowlist:
74+
- '>= 4.6.0, <= 4.6.0'
75+
version: 4.6.0

charts/ace/values.openapiv3_schema.yaml

Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24690,6 +24690,54 @@ properties:
2469024690
required:
2469124691
- encryptionKey
2469224692
type: object
24693+
pgpool:
24694+
properties:
24695+
config:
24696+
additionalProperties:
24697+
type: string
24698+
type: object
24699+
enabled:
24700+
type: boolean
24701+
replicas:
24702+
type: integer
24703+
resources:
24704+
properties:
24705+
claims:
24706+
items:
24707+
properties:
24708+
name:
24709+
type: string
24710+
request:
24711+
type: string
24712+
required:
24713+
- name
24714+
type: object
24715+
type: array
24716+
x-kubernetes-list-map-keys:
24717+
- name
24718+
x-kubernetes-list-type: map
24719+
limits:
24720+
additionalProperties:
24721+
anyOf:
24722+
- type: integer
24723+
- type: string
24724+
pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$
24725+
x-kubernetes-int-or-string: true
24726+
type: object
24727+
requests:
24728+
additionalProperties:
24729+
anyOf:
24730+
- type: integer
24731+
- type: string
24732+
pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$
24733+
x-kubernetes-int-or-string: true
24734+
type: object
24735+
type: object
24736+
required:
24737+
- enabled
24738+
- replicas
24739+
- resources
24740+
type: object
2469324741
platform:
2469424742
properties:
2469524743
appName:

charts/ace/values.yaml

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -295,6 +295,18 @@ settings:
295295
username: postgres
296296
password: "xyz"
297297
logSQL: false
298+
pgpool:
299+
enabled: true
300+
replicas: 1
301+
config:
302+
num_init_children: "15"
303+
max_pool: "4"
304+
resources:
305+
limits:
306+
memory: 512Mi
307+
requests:
308+
memory: 256Mi
309+
cpu: 250m
298310
cache:
299311
version: "7.2.4"
300312
cacheInterval: 60

0 commit comments

Comments
 (0)