diff --git a/apis/installer/v1alpha1/ace_ace_types.go b/apis/installer/v1alpha1/ace_ace_types.go index 7f9999fa2..cddf2bf78 100644 --- a/apis/installer/v1alpha1/ace_ace_types.go +++ b/apis/installer/v1alpha1/ace_ace_types.go @@ -315,6 +315,15 @@ 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"` + Version string `json:"version"` + Replicas int `json:"replicas"` + Resources core.ResourceRequirements `json:"resources"` } type DBSettings struct { diff --git a/apis/installer/v1alpha1/zz_generated.deepcopy.go b/apis/installer/v1alpha1/zz_generated.deepcopy.go index 0d829ae2e..1120712cb 100644 --- a/apis/installer/v1alpha1/zz_generated.deepcopy.go +++ b/apis/installer/v1alpha1/zz_generated.deepcopy.go @@ -8981,6 +8981,22 @@ 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) +} + +// 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 @@ -11311,6 +11327,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 8fdd7fc54..c77e7a749 100644 --- a/charts/ace/README.md +++ b/charts/ace/README.md @@ -131,6 +131,12 @@ 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 | | false | +| settings.pgpool.version | | "4.5.0" | +| settings.pgpool.replicas | | 2 | +| 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..25e5f8a72 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:5432" (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/pgpool.yaml b/charts/ace/templates/db/pgpool.yaml new file mode 100644 index 000000000..881b21b70 --- /dev/null +++ b/charts/ace/templates/db/pgpool.yaml @@ -0,0 +1,67 @@ +{{- 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: "{{ .Values.settings.pgpool.version }}" + replicas: {{ .Values.settings.pgpool.replicas }} + postgresRef: + name: {{ include "ace.fullname" . }}-db + namespace: {{ .Release.Namespace }} + syncUsers: true + deletionPolicy: {{ .Values.settings.db.deletionPolicy }} + 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 }} +--- +apiVersion: appcatalog.appscode.com/v1alpha1 +kind: AppBinding +metadata: + name: {{ include "ace.fullname" . }}-pgpool + namespace: {{ .Release.Namespace }} + labels: + {{- include "ace.labels" . | nindent 4 }} +spec: + type: kubedb.com/pgpool + appRef: + apiGroup: kubedb.com + kind: Pgpool + name: {{ include "ace.fullname" . }}-pgpool + namespace: {{ .Release.Namespace }} + clientConfig: + service: + name: {{ include "ace.fullname" . }}-pgpool + scheme: postgresql + port: 5432 +{{- end }} \ No newline at end of file diff --git a/charts/ace/values.openapiv3_schema.yaml b/charts/ace/values.openapiv3_schema.yaml index 9abb223f2..1aa423163 100644 --- a/charts/ace/values.openapiv3_schema.yaml +++ b/charts/ace/values.openapiv3_schema.yaml @@ -24481,6 +24481,53 @@ properties: - apiURL - preSharedKey type: object + pgpool: + properties: + 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 + version: + type: string + required: + - enabled + - replicas + - resources + - version + type: object platform: properties: appName: diff --git a/charts/ace/values.yaml b/charts/ace/values.yaml index a1399098a..f03d512b1 100644 --- a/charts/ace/values.yaml +++ b/charts/ace/values.yaml @@ -270,6 +270,16 @@ settings: username: postgres password: "xyz" logSQL: false + pgpool: + enabled: false + version: "4.5.0" + replicas: 2 + resources: + limits: + memory: 512Mi + requests: + memory: 256Mi + cpu: 250m cache: version: "7.2.4" cacheInterval: 60