diff --git a/apis/installer/v1alpha1/ace_ace_types.go b/apis/installer/v1alpha1/ace_ace_types.go
index 35c037c5a..3a2f9bbf5 100644
--- a/apis/installer/v1alpha1/ace_ace_types.go
+++ b/apis/installer/v1alpha1/ace_ace_types.go
@@ -395,6 +395,16 @@ type Settings struct {
Firebase FirebaseSettings `json:"firebase"`
// +optional
Marketplace *MarketplaceSettings `json:"marketplace,omitempty"`
+ // +optional
+ PgPool *PgPoolSettings `json:"pgpool,omitempty"`
+}
+
+type PgPoolSettings struct {
+ Enabled bool `json:"enabled"`
+ Replicas int `json:"replicas"`
+ Resources core.ResourceRequirements `json:"resources"`
+ // +optional
+ Config map[string]string `json:"config,omitempty"`
}
type DBSettings struct {
diff --git a/apis/installer/v1alpha1/zz_generated.deepcopy.go b/apis/installer/v1alpha1/zz_generated.deepcopy.go
index 5be877f4b..4686c3b9a 100644
--- a/apis/installer/v1alpha1/zz_generated.deepcopy.go
+++ b/apis/installer/v1alpha1/zz_generated.deepcopy.go
@@ -9296,6 +9296,29 @@ func (in *PersistenceSpec) DeepCopy() *PersistenceSpec {
return out
}
+// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
+func (in *PgPoolSettings) DeepCopyInto(out *PgPoolSettings) {
+ *out = *in
+ in.Resources.DeepCopyInto(&out.Resources)
+ if in.Config != nil {
+ in, out := &in.Config, &out.Config
+ *out = make(map[string]string, len(*in))
+ for key, val := range *in {
+ (*out)[key] = val
+ }
+ }
+}
+
+// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new PgPoolSettings.
+func (in *PgPoolSettings) DeepCopy() *PgPoolSettings {
+ if in == nil {
+ return nil
+ }
+ out := new(PgPoolSettings)
+ in.DeepCopyInto(out)
+ return out
+}
+
// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
func (in *PlacementSpec) DeepCopyInto(out *PlacementSpec) {
*out = *in
@@ -11810,6 +11833,11 @@ func (in *Settings) DeepCopyInto(out *Settings) {
*out = new(MarketplaceSettings)
(*in).DeepCopyInto(*out)
}
+ if in.PgPool != nil {
+ in, out := &in.PgPool, &out.PgPool
+ *out = new(PgPoolSettings)
+ (*in).DeepCopyInto(*out)
+ }
}
// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new Settings.
diff --git a/charts/ace/README.md b/charts/ace/README.md
index 7c3b205b3..0b8c9e614 100644
--- a/charts/ace/README.md
+++ b/charts/ace/README.md
@@ -141,6 +141,14 @@ The following table lists the configurable parameters of the `ace` chart and the
| settings.db.auth.username | | postgres |
| settings.db.auth.password | | "xyz" |
| settings.db.logSQL | | false |
+| settings.pgpool.enabled | | true |
+| settings.pgpool.replicas | | 1 |
+| settings.pgpool.config.num_init_children | | "10" |
+| settings.pgpool.config.max_pool | | "40" |
+| settings.pgpool.config.client_idle_limit | | "120" |
+| settings.pgpool.resources.limits.memory | | 512Mi |
+| settings.pgpool.resources.requests.memory | | 256Mi |
+| settings.pgpool.resources.requests.cpu | | 250m |
| settings.cache.version | | "7.2.4" |
| settings.cache.cacheInterval | | 60 |
| settings.cache.persistence.size | | 10Gi |
diff --git a/charts/ace/templates/_helpers.tpl b/charts/ace/templates/_helpers.tpl
index f1560fba6..ef7444458 100644
--- a/charts/ace/templates/_helpers.tpl
+++ b/charts/ace/templates/_helpers.tpl
@@ -173,8 +173,12 @@ Returns the ServiceMonitor labels
Determine database host name
*/}}
{{- define "settings.database.host" -}}
+{{- if .Values.settings.pgpool.enabled -}}
+{{- printf "%s-pgpool.%s.svc:9999" (include "ace.fullname" .) .Release.Namespace -}}
+{{- else -}}
{{- printf "%s-db.%s.svc:5432" (include "ace.fullname" .) .Release.Namespace -}}
{{- end -}}
+{{- end -}}
{{- define "settings.oauth2JWTSecret" -}}
{{ .Values.settings.security.oauth2JWTSecret | default (randAlphaNum 43) }}
diff --git a/charts/ace/templates/db/db-config.yaml b/charts/ace/templates/db/db-config.yaml
index eb78464f7..d3967d9e4 100644
--- a/charts/ace/templates/db/db-config.yaml
+++ b/charts/ace/templates/db/db-config.yaml
@@ -12,7 +12,7 @@ metadata:
type: Opaque
stringData:
user.conf: |
- max_connections=110
+ max_connections=400
{{- if .Values.pgoutbox.enabled }}
wal_level=logical
max_wal_senders=50
diff --git a/charts/ace/templates/db/pgpool.yaml b/charts/ace/templates/db/pgpool.yaml
new file mode 100644
index 000000000..55ec1e4e9
--- /dev/null
+++ b/charts/ace/templates/db/pgpool.yaml
@@ -0,0 +1,76 @@
+{{- if .Values.settings.pgpool.enabled }}
+apiVersion: kubedb.com/v1alpha2
+kind: Pgpool
+metadata:
+ name: {{ include "ace.fullname" . }}-pgpool
+ namespace: {{ .Release.Namespace }}
+ labels:
+ {{- include "ace.labels" . | nindent 4 }}
+spec:
+ version: "4.6.0"
+ replicas: {{ .Values.settings.pgpool.replicas }}
+ postgresRef:
+ name: {{ include "ace.fullname" . }}-db
+ namespace: {{ .Release.Namespace }}
+ syncUsers: true
+ deletionPolicy: {{ .Values.settings.db.deletionPolicy }}
+ {{- if .Values.settings.pgpool.config }}
+ configuration:
+ inline:
+ pgpool.conf: |
+ {{- range $k, $v := .Values.settings.pgpool.config }}
+ {{ $k }}={{ $v }}
+ {{- end }}
+ {{- end }}
+ podTemplate:
+ spec:
+ containers:
+ - name: pgpool
+ resources:
+ {{- toYaml .Values.settings.pgpool.resources | nindent 10 }}
+ {{- if eq (include "distro.openshift" $) "true" }}
+ securityContext:
+ runAsGroup: {{ .Values.securityContext.runAsUser }}
+ runAsUser: {{ .Values.securityContext.runAsUser }}
+ capabilities:
+ drop:
+ - ALL
+ runAsNonRoot: true
+ seccompProfile:
+ type: RuntimeDefault
+ securityContext:
+ fsGroup: {{ .Values.securityContext.runAsUser }}
+ runAsUser: {{ .Values.securityContext.runAsUser }}
+ runAsGroup: {{ .Values.securityContext.runAsUser }}
+ {{- end }}
+{{- if .Values.global.monitoring }}
+ monitor:
+ agent: {{ .Values.global.monitoring.agent }}
+ prometheus:
+ serviceMonitor:
+ interval: 30s
+ labels:
+ {{- toYaml .Values.global.monitoring.serviceMonitor.labels | nindent 10 }}
+{{- end }}
+{{- end }}
+
+---
+
+apiVersion: catalog.kubedb.com/v1alpha1
+kind: PgpoolVersion
+metadata:
+ name: 4.6.0
+spec:
+ exporter:
+ image: ghcr.io/appscode-images/pgpool2_exporter:v1.2.2
+ gitSyncer:
+ image: registry.k8s.io/git-sync/git-sync:v4.4.2
+ pgpool:
+ image: ghcr.io/appscode-images/pgpool2:4.6.0
+ securityContext:
+ runAsAnyNonRoot: true
+ runAsUser: 70
+ updateConstraints:
+ allowlist:
+ - '>= 4.6.0, <= 4.6.0'
+ version: 4.6.0
\ No newline at end of file
diff --git a/charts/ace/templates/platform/setup-config.yaml b/charts/ace/templates/platform/setup-config.yaml
index 2d9bb626b..e6bfb3dfd 100644
--- a/charts/ace/templates/platform/setup-config.yaml
+++ b/charts/ace/templates/platform/setup-config.yaml
@@ -18,7 +18,7 @@ stringData:
reloadPlatformAccounts: true
{{- end }}
importerServiceAccount: {{ include "appscode.serviceAccountName" . }}-importer
- syncPersesAccounts: true
+ syncPersesAccounts: {{ index .Values "perses" "enabled" | default false }}
{{- with .Values.setupJob.config }}
{{- . | toYaml | nindent 4 }}
{{- end }}
diff --git a/charts/ace/values.openapiv3_schema.yaml b/charts/ace/values.openapiv3_schema.yaml
index 3c0652810..53fde534a 100644
--- a/charts/ace/values.openapiv3_schema.yaml
+++ b/charts/ace/values.openapiv3_schema.yaml
@@ -24690,6 +24690,54 @@ properties:
required:
- encryptionKey
type: object
+ pgpool:
+ properties:
+ config:
+ additionalProperties:
+ type: string
+ type: object
+ enabled:
+ type: boolean
+ replicas:
+ type: integer
+ resources:
+ properties:
+ claims:
+ items:
+ properties:
+ name:
+ type: string
+ request:
+ type: string
+ required:
+ - name
+ type: object
+ type: array
+ x-kubernetes-list-map-keys:
+ - name
+ x-kubernetes-list-type: map
+ limits:
+ additionalProperties:
+ anyOf:
+ - type: integer
+ - type: string
+ pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$
+ x-kubernetes-int-or-string: true
+ type: object
+ requests:
+ additionalProperties:
+ anyOf:
+ - type: integer
+ - type: string
+ pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$
+ x-kubernetes-int-or-string: true
+ type: object
+ type: object
+ required:
+ - enabled
+ - replicas
+ - resources
+ type: object
platform:
properties:
appName:
diff --git a/charts/ace/values.yaml b/charts/ace/values.yaml
index 9cfd8aec9..45fce654c 100644
--- a/charts/ace/values.yaml
+++ b/charts/ace/values.yaml
@@ -295,6 +295,19 @@ settings:
username: postgres
password: "xyz"
logSQL: false
+ pgpool:
+ enabled: true
+ replicas: 1
+ config:
+ num_init_children: "10"
+ max_pool: "40"
+ client_idle_limit: "180"
+ resources:
+ limits:
+ memory: 512Mi
+ requests:
+ memory: 256Mi
+ cpu: 250m
cache:
version: "7.2.4"
cacheInterval: 60