diff --git a/addons/postgresql-cluster/15/chart/postgresql-cluster/Chart.yaml b/addons/postgresql-cluster/15/chart/postgresql-cluster/Chart.yaml
new file mode 100644
index 00000000..375ae4fe
--- /dev/null
+++ b/addons/postgresql-cluster/15/chart/postgresql-cluster/Chart.yaml
@@ -0,0 +1,28 @@
+annotations:
+  category: Database
+apiVersion: v2
+appVersion: "15"
+dependencies:
+  - name: common
+    repository: oci://registry.drycc.cc/charts
+    version: ~1.1.1
+description: PostgreSQL (Postgres) is an open source object-relational database known for reliability and data integrity. ACID-compliant, it supports foreign keys, joins, views, triggers and stored procedures.
+engine: gotpl
+home: https://github.com/bitnami/charts/tree/master/bitnami/postgresql
+icon: https://bitnami.com/assets/stacks/postgresql/img/postgresql-stack-220x234.png
+keywords:
+  - postgresql
+  - postgres
+  - database
+  - sql
+  - replication
+  - cluster
+  - patroni
+maintainers:
+  - email: zhang.eamon@hotmail.com
+    name: zhangeamon
+name: postgresql
+sources:
+  - https://github.com/drycc-addons/
+  - https://www.postgresql.org/
+version: 15.3.1
diff --git a/addons/postgresql-cluster/15/chart/postgresql-cluster/README.md b/addons/postgresql-cluster/15/chart/postgresql-cluster/README.md
new file mode 100644
index 00000000..8d44fca1
--- /dev/null
+++ b/addons/postgresql-cluster/15/chart/postgresql-cluster/README.md
@@ -0,0 +1,151 @@
+# ⚠️ Repo Archive Notice
+
+As of Nov 13, 2020, charts in this repo will no longer be updated.
+For more information, see the Helm Charts [Deprecation and Archive Notice](https://github.com/helm/charts#%EF%B8%8F-deprecation-and-archive-notice), and [Update](https://helm.sh/blog/charts-repo-deprecation/).
+
+# Patroni Helm Chart
+
+This directory contains a Kubernetes chart to deploy a five node [Patroni](https://github.com/zalando/patroni/) cluster using a [Spilo](https://github.com/zalando/spilo) and a StatefulSet.
+
+
+## Prerequisites Details
+* Kubernetes 1.9+
+* PV support on the underlying infrastructure
+
+## StatefulSet Details
+* https://kubernetes.io/docs/concepts/workloads/controllers/statefulset/
+
+## StatefulSet Caveats
+* https://kubernetes.io/docs/concepts/workloads/controllers/statefulset/#limitations
+
+
+## Chart Details
+This chart will do the following:
+
+* Implement a HA scalable PostgreSQL 10 cluster using a Kubernetes StatefulSet.
+
+## Installing the Chart
+
+To install the chart with the release name `my-release`:
+
+```console
+$ helm repo add 
+$ helm dependency update
+$ helm install --name my-release postgresql-cluster
+```
+
+To install the chart with randomly generated passwords:
+
+```console
+$ helm install --name my-release postgresql-cluster \
+  --set credentials.superuser="$(< /dev/urandom tr -dc _A-Z-a-z-0-9 | head -c32)",credentials.admin="$(< /dev/urandom tr -dc _A-Z-a-z-0-9 | head -c32)",credentials.standby="$(< /dev/urandom tr -dc _A-Z-a-z-0-9 | head -c32)"
+```
+
+## Connecting to PostgreSQL
+
+Your access point is a cluster IP. In order to access it spin up another pod:
+
+```console
+$ kubectl run -i --tty --rm psql --image=postgres --restart=Never -- bash -il
+```
+
+Then, from inside the pod, connect to PostgreSQL:
+
+```console
+$ psql -U admin -h my-release-patroni.default.svc.cluster.local postgres
+<admin password from values.yaml>
+postgres=>
+```
+
+## Configuration
+
+The following table lists the configurable parameters of the patroni chart and their default values.
+
+|       Parameter                   |           Description                       |                         Default                     |
+|-----------------------------------|---------------------------------------------|-----------------------------------------------------|
+| `nameOverride`                    | Override the name of the chart              | `nil`                                               |
+| `fullnameOverride`                | Override the fullname of the chart          | `nil`                                               |
+| `replicaCount`                    | Amount of pods to spawn                     | `5`                                                 |
+| `image.repository`                | The image to pull                           | `registry.opensource.zalan.do/acid/spilo-10`        |
+| `image.tag`                       | The version of the image to pull            | `1.5-p5`                                            |
+| `image.pullPolicy`                | The pull policy                             | `IfNotPresent`                                      |
+| `credentials.superuser`           | Password of the superuser                   | `tea`                                               |
+| `credentials.admin`               | Password of the admin                       | `cola`                                              |
+| `credentials.standby`             | Password of the replication user            | `pinacolada`                                        |
+| `kubernetes.dcs.enable`           | Using Kubernetes as DCS                     | `true`                                              |
+| `kubernetes.configmaps.enable`    | Using Kubernetes configmaps instead of endpoints | `false`                                        |
+| `etcd.enable`                     | Using etcd as DCS                           | `false`                                             |
+| `etcd.deployChart`                | Deploy etcd chart                           | `false`                                             |
+| `etcd.host`                       | Host name of etcd cluster                   | `nil`                                               |
+| `etcd.discovery`                  | Domain name of etcd cluster                 | `nil`                                               |
+| `zookeeper.enable`                | Using ZooKeeper as DCS                      | `false`                                             |
+| `zookeeper.deployChart`           | Deploy ZooKeeper chart                      | `false`                                             |
+| `zookeeper.hosts`                 | List of ZooKeeper cluster members           | `host1:port1,host2:port,etc...`                     |
+| `consul.enable`                   | Using Consul as DCS                         | `false`                                             |
+| `consul.deployChart`              | Deploy Consul chart                         | `false`                                             |
+| `consul.host`                     | Host name of consul cluster                 | `nil`                                               |
+| `env`                             | Extra custom environment variables          | `{}`                                                |
+| `walE.enable`                     | Use of Wal-E tool for base backup/restore   | `false`                                             |
+| `walE.scheduleCronJob`            | Schedule of Wal-E backups                   | `00 01 * * *`                                       |
+| `walE.retainBackups`              | Number of base backups to retain            | `2`                                                 |
+| `walE.s3Bucket:`                  | Amazon S3 bucket used for wal-e backups     | `nil`                                               |
+| `walE.gcsBucket`                  | GCS storage used for Wal-E backups          | `nil`                                               |
+| `walE.kubernetesSecret`           | K8s secret name for provider bucket         | `nil`                                               |
+| `walE.backupThresholdMegabytes`   | Maximum size of the WAL segments accumulated after the base backup to consider WAL-E restore instead of pg_basebackup | `1024` |
+| `walE.backupThresholdPercentage`  | Maximum ratio (in percents) of the accumulated WAL files to the base backup to consider WAL-E restore instead of pg_basebackup | `30` |
+| `resources`                       | Any resources you wish to assign to the pod | `{}`                                                |
+| `nodeSelector`                    | Node label to use for scheduling            | `{}`                                                |
+| `tolerations`                     | List of node taints to tolerate             | `[]`                                                |
+| `affinityTemplate`                | A template string to use to generate the affinity settings | Anti-affinity preferred on hostname  |
+| `affinity`                        | Affinity settings. Overrides `affinityTemplate` if set. | `{}`                                    |
+| `schedulerName`                   | Alternate scheduler name                    | `nil`                                               |
+| `persistentVolume.accessModes`    | Persistent Volume access modes              | `[ReadWriteOnce]`                                   |
+| `persistentVolume.annotations`    | Annotations for Persistent Volume Claim`    | `{}`                                                |
+| `persistentVolume.mountPath`      | Persistent Volume mount root path           | `/home/postgres/pgdata`                             |
+| `persistentVolume.size`           | Persistent Volume size                      | `2Gi`                                               |
+| `persistentVolume.storageClass`   | Persistent Volume Storage Class             | `volume.alpha.kubernetes.io/storage-class: default` |
+| `persistentVolume.subPath`        | Subdirectory of Persistent Volume to mount  | `""`                                                |
+| `rbac.create`                     | Create required role and rolebindings       | `true`                                              |
+| `serviceAccount.create`           | If true, create a new service account	      | `true`                                              |
+| `serviceAccount.name`             | Service account to be used. If not set and `serviceAccount.create` is `true`, a name is generated using the fullname template | `nil` |
+
+Specify each parameter using the `--set key=value[,key=value]` argument to `helm install`.
+
+Alternatively, a YAML file that specifies the values for the parameters can be provided while installing the chart. For example,
+
+```console
+$ helm install --name my-release -f values.yaml incubator/patroni
+```
+
+> **Tip**: You can use the default [values.yaml](values.yaml)
+
+## Cleanup
+
+To remove the spawned pods you can run a simple `helm delete <release-name>`.
+
+Helm will however preserve created persistent volume claims,
+to also remove them execute the commands below.
+
+```console
+$ release=<release-name>
+$ helm delete $release
+$ kubectl delete pvc -l release=$release
+```
+
+## Internals
+
+Patroni is responsible for electing a PostgreSQL master pod by leveraging the
+DCS of your choice. After election it adds a `spilo-role=master` label to the
+elected master and set the label to `spilo-role=replica` for all replicas.
+Simultaneously it will update the `<release-name>-patroni` endpoint to let the
+service route traffic to the elected master.
+
+```console
+$ kubectl get pods -l spilo-role -L spilo-role
+NAME                   READY     STATUS    RESTARTS   AGE       SPILO-ROLE
+my-release-patroni-0   1/1       Running   0          9m        replica
+my-release-patroni-1   1/1       Running   0          9m        master
+my-release-patroni-2   1/1       Running   0          8m        replica
+my-release-patroni-3   1/1       Running   0          8m        replica
+my-release-patroni-4   1/1       Running   0          8m        replica
+```
diff --git a/addons/postgresql-cluster/15/chart/postgresql-cluster/templates/NOTES.txt b/addons/postgresql-cluster/15/chart/postgresql-cluster/templates/NOTES.txt
new file mode 100644
index 00000000..22a4f2d2
--- /dev/null
+++ b/addons/postgresql-cluster/15/chart/postgresql-cluster/templates/NOTES.txt
@@ -0,0 +1,25 @@
+Patroni can be accessed via port 5432 on the following DNS name from within your cluster:
+{{ template "patroni.fullname" . }}.{{ .Release.Namespace }}.svc.cluster.local
+
+To get your password for superuser run:
+
+    # superuser password
+    PGPASSWORD_SUPERUSER=$(kubectl get secret --namespace {{ .Release.Namespace }} {{ template "patroni.fullname" . }} -o jsonpath="{.data.password-superuser}" | base64 --decode)
+
+    # admin password
+    PGPASSWORD_ADMIN=$(kubectl get secret --namespace {{ .Release.Namespace }} {{ template "patroni.fullname" . }} -o jsonpath="{.data.password-admin}" | base64 --decode)
+
+To connect to your database:
+
+1. Run a postgres pod and connect using the psql cli:
+    # login as superuser
+    kubectl run -i --tty --rm psql --image=postgres \
+      --env "PGPASSWORD=$PGPASSWORD_SUPERUSER" \
+      --command -- psql -U postgres \
+      -h {{ template "patroni.fullname" . }}.{{ .Release.Namespace }}.svc.cluster.local postgres
+
+    # login as admin
+    kubectl run -i -tty --rm psql --image=postgres \
+      --env "PGPASSWORD=$PGPASSWORD_ADMIN" \
+      --command -- psql -U admin \
+      -h {{ template "patroni.fullname" . }}.{{ .Release.Namespace }}.svc.cluster.local postgres
diff --git a/addons/postgresql-cluster/15/chart/postgresql-cluster/templates/_helpers.tpl b/addons/postgresql-cluster/15/chart/postgresql-cluster/templates/_helpers.tpl
new file mode 100644
index 00000000..1e4e50bc
--- /dev/null
+++ b/addons/postgresql-cluster/15/chart/postgresql-cluster/templates/_helpers.tpl
@@ -0,0 +1,180 @@
+{{/* vim: set filetype=mustache: */}}
+{{/*
+Expand the name of the chart.
+*/}}
+{{- define "patroni.name" -}}
+{{- default .Chart.Name .Values.nameOverride | trunc 63 | trimSuffix "-" -}}
+{{- end -}}
+
+{{/*
+Create a default fully qualified app name.
+We truncate at 63 chars because some Kubernetes name fields are limited to this (by the DNS naming spec).
+If release name contains chart name it will be used as a full name.
+*/}}
+{{- define "patroni.fullname" -}}
+{{- if .Values.fullnameOverride -}}
+{{- .Values.fullnameOverride | trunc 63 | trimSuffix "-" -}}
+{{- else -}}
+{{- $name := default .Chart.Name .Values.nameOverride -}}
+{{- if contains $name .Release.Name -}}
+{{- .Release.Name | trunc 63 | trimSuffix "-" -}}
+{{- else -}}
+{{- printf "%s-%s" .Release.Name $name | trunc 63 | trimSuffix "-" -}}
+{{- end -}}
+{{- end -}}
+{{- end -}}
+
+{{/*
+Create chart name and version as used by the chart label.
+*/}}
+{{- define "patroni.chart" -}}
+{{- printf "%s-%s" .Chart.Name .Chart.Version | replace "+" "_" | trunc 63 | trimSuffix "-" -}}
+{{- end -}}
+
+{{/*
+Create the name of the service account to use.
+*/}}
+{{- define "patroni.serviceAccountName" -}}
+{{- if .Values.serviceAccount.create -}}
+    {{ default (include "patroni.fullname" .) .Values.serviceAccount.name }}
+{{- else -}}
+    {{ default "default" .Values.serviceAccount.name }}
+{{- end -}}
+{{- end -}}
+
+{{/*
+Return true if a cronjob object should be created for Postgresql HA patroni ## TODO feature
+*/}}
+{{- define "patroni.createCronJob" -}}
+{{- if and .Values.walG.enabled }}
+    {{- true -}}
+{{- else -}}
+{{- end -}}
+{{- end -}}
+
+{{/*
+Return true if a configmap object should be created for Postgresql HA patroni
+*/}}
+{{- define "patroni.createConfigmap" -}}
+{{- if and .Values.preInitScript }}
+    {{- true -}}
+{{- else -}}
+{{- end -}}
+{{- end -}}
+
+{{/*
+Create patroni envs.
+*/}}
+{{- define "patroni.envs" }}
+{{- if .Values.kubernetes.configmaps.enable }}
+- name: KUBERNETES_USE_CONFIGMAPS
+  value: "true"
+{{- end }}
+{{- if .Values.kubernetes.endpoints.enable }}
+- name: PATRONI_KUBERNETES_USE_ENDPOINTS
+  value: 'true'
+{{- end }}
+- name: PATRONI_KUBERNETES_POD_IP
+  valueFrom:
+    fieldRef:
+      fieldPath: status.podIP
+- name: PATRONI_KUBERNETES_NAMESPACE
+  valueFrom:
+    fieldRef:
+      fieldPath: metadata.namespace
+- name: PATRONI_KUBERNETES_BYPASS_API_SERVICE
+  value: 'true'
+- name: PATRONI_KUBERNETES_LABELS
+  value: '{application: {{ template "patroni.fullname" . }},release: {{ .Release.Name }},cluster-name: {{ template "patroni.fullname" . }}}'
+- name: PATRONI_SUPERUSER_USERNAME
+  value: postgres
+- name: PATRONI_SUPERUSER_PASSWORD
+  valueFrom:
+    secretKeyRef:
+      name: {{ template "patroni.fullname" . }}
+      key: password-superuser
+- name: PATRONI_REPLICATION_USERNAME
+  value: standby
+- name: PATRONI_REPLICATION_PASSWORD
+  valueFrom:
+    secretKeyRef:
+      name: {{ template "patroni.fullname" . }}
+      key: password-replication
+- name: PATRONI_REWIND_USERNAME
+  value: rewinder
+- name: PATRONI_REWIND_PASSWORD
+  valueFrom:
+    secretKeyRef:
+      name: {{ template "patroni.fullname" . }}
+      key: password-rewind
+- name: PATRONI_SCOPE
+  value: {{ template "patroni.fullname" . }}
+- name: PATRONI_NAME
+  valueFrom:
+    fieldRef:
+      fieldPath: metadata.name
+- name: PATRONI_POSTGRESQL_DATA_DIR
+  value: "{{ .Values.persistentVolume.mountPath }}/data"
+- name: PGDATA
+  value: "{{ .Values.persistentVolume.mountPath }}/data"
+- name: PATRONI_POSTGRESQL_PGPASS
+  value: /tmp/pgpass
+- name: PATRONI_POSTGRESQL_LISTEN
+  value: '0.0.0.0:5432'
+- name: PATRONI_RESTAPI_LISTEN
+  value: '0.0.0.0:8008'
+- name: DATABASE_NAME
+  valueFrom:
+    secretKeyRef:
+      name: {{ template "patroni.fullname" . }}
+      key: data-name
+- name: DATABASE_USER
+  valueFrom:
+    secretKeyRef:
+      name: {{ template "patroni.fullname" . }}
+      key: data-user
+- name: DATABASE_PASSWORD
+  valueFrom:
+    secretKeyRef:
+      name: {{ template "patroni.fullname" . }}
+      key: data-password
+{{- end -}}
+
+{{/*
+Create walg envs.
+*/}}
+{{- define "walg.envs" }}
+{{- if .Values.walG.enabled }}
+- name: USE_WALG
+  value: {{ .Values.walG.enabled | quote }}
+{{- if .Values.walG.retainBackups }}
+- name: BACKUP_NUM_TO_RETAIN
+  value: {{ .Values.walG.retainBackups | quote}}
+{{- end }}
+{{- if .Values.walG.backupThresholdMegabytes }}
+- name: WALG_BACKUP_THRESHOLD_MEGABYTES
+  value: {{ .Values.walG.backupThresholdMegabytes | quote }}
+{{- end }}
+{{- if .Values.walG.backupThresholdPercentage }}
+- name: WALE_BACKUP_THRESHOLD_PERCENTAGE
+  value: {{ .Values.walG.backupThresholdPercentage | quote }}
+{{- end }}
+{{- if .Values.walG.s3.used }}
+- name: AWS_ACCESS_KEY_ID
+  value: {{ .Values.walG.s3.awsAccessKeyID | quote }}
+- name: AWS_SECRET_ACCESS_KEY
+  value: {{ .Values.walG.s3.awsSecretAccessKey | quote }}
+- name: WALG_S3_PREFIX
+  value: {{ .Values.walG.s3.walGS3Prefix | quote }}
+- name: AWS_ENDPOINT
+  value: {{ .Values.walG.s3.awsEndpoint | quote }}
+- name: AWS_S3_FORCE_PATH_STYLE
+  value: {{ .Values.walG.s3.awsS3ForcePathStyle | quote }}
+- name: AWS_REGION
+  value: {{ .Values.walG.s3.awsRegion | quote }}
+{{- end }}
+{{- else }}
+- name: USE_WALG
+  value: ""
+{{- end }}
+{{- end }}
diff --git a/addons/postgresql-cluster/15/chart/postgresql-cluster/templates/cm -postgresql.yaml b/addons/postgresql-cluster/15/chart/postgresql-cluster/templates/cm -postgresql.yaml
new file mode 100644
index 00000000..8aba698a
--- /dev/null
+++ b/addons/postgresql-cluster/15/chart/postgresql-cluster/templates/cm -postgresql.yaml	
@@ -0,0 +1,18 @@
+{{- if (include "patroni.createConfigmap" .) }}
+apiVersion: v1
+kind: ConfigMap
+metadata:
+  name: {{ template "common.names.fullname" . }}-postgresql
+  namespace: {{ include "common.names.namespace" . | quote }}
+  labels: {{- include "common.labels.standard" . | nindent 4 }}
+    {{- if .Values.commonLabels }}
+    {{- include "common.tplvalues.render" ( dict "value" .Values.commonLabels "context" $ ) | nindent 4 }}
+    {{- end }}
+    cluster-name: {{ template "patroni.fullname" . }}
+  {{- if .Values.commonAnnotations }}
+  annotations: {{- include "common.tplvalues.render" ( dict "value" .Values.commonAnnotations "context" $ ) | nindent 4 }}
+  {{- end }}
+data:
+  custom_conf.conf: |-
+    {{- include "common.tplvalues.render" ( dict "value" .Values.postgresql.config "context" $ ) | nindent 4 }}
+{{- end -}}
\ No newline at end of file
diff --git a/addons/postgresql-cluster/15/chart/postgresql-cluster/templates/cm-patroni.yaml b/addons/postgresql-cluster/15/chart/postgresql-cluster/templates/cm-patroni.yaml
new file mode 100644
index 00000000..ad4b5849
--- /dev/null
+++ b/addons/postgresql-cluster/15/chart/postgresql-cluster/templates/cm-patroni.yaml
@@ -0,0 +1,20 @@
+{{- if (include "patroni.createConfigmap" .) }}
+apiVersion: v1
+kind: ConfigMap
+metadata:
+  name: {{ template "common.names.fullname" . }}-patroni
+  namespace: {{ include "common.names.namespace" . | quote }}
+  labels: {{- include "common.labels.standard" . | nindent 4 }}
+    {{- if .Values.commonLabels }}
+    {{- include "common.tplvalues.render" ( dict "value" .Values.commonLabels "context" $ ) | nindent 4 }}
+    {{- end }}
+    cluster-name: {{ template "patroni.fullname" . }}
+  {{- if .Values.commonAnnotations }}
+  annotations: {{- include "common.tplvalues.render" ( dict "value" .Values.commonAnnotations "context" $ ) | nindent 4 }}
+  {{- end }}
+data:
+  pre_init.sh: |-
+    {{- include "common.tplvalues.render" ( dict "value" .Values.preInitScript "context" $ ) | nindent 4 }}
+  post_init.sh: |- 
+    {{- include "common.tplvalues.render" ( dict "value" .Values.postInitScript "context" $ ) | nindent 4 }}
+{{- end -}}
\ No newline at end of file
diff --git a/addons/postgresql-cluster/15/chart/postgresql-cluster/templates/cronjob.yaml b/addons/postgresql-cluster/15/chart/postgresql-cluster/templates/cronjob.yaml
new file mode 100644
index 00000000..39c08de3
--- /dev/null
+++ b/addons/postgresql-cluster/15/chart/postgresql-cluster/templates/cronjob.yaml
@@ -0,0 +1,43 @@
+{{- /*
+Copyright VMware, Inc.
+SPDX-License-Identifier: APACHE-2.0
+*/}}
+{{- if (include "patroni.createCronJob" .) }}
+apiVersion: {{ include "common.capabilities.cronjob.apiVersion" . }}
+kind: CronJob
+metadata:
+  name: {{ include "patroni.fullname" . }}-backup
+  namespace: {{ include "common.names.namespace" . | quote }}
+  labels: {{- include "common.labels.standard" . | nindent 4 }}
+    {{- if .Values.commonLabels }}
+    {{- include "common.tplvalues.render" ( dict "value" .Values.commonLabels "context" $ ) | nindent 4 }}
+    {{- end }}
+    application: {{ template "patroni.fullname" . }}
+    cluster-name: {{ template "patroni.fullname" . }}
+  {{- if .Values.commonAnnotations }}
+  annotations: {{- include "common.tplvalues.render" ( dict "value" .Values.commonAnnotations "context" $ ) | nindent 4 }}
+  {{- end }}
+
+spec:
+  schedule: "{{ .Values.walG.scheduleCronJob }}"
+  failedJobsHistoryLimit: 1
+  successfulJobsHistoryLimit: 1
+  jobTemplate:
+    spec:
+      template:
+        spec:
+          restartPolicy: OnFailure              
+          containers:         
+          - name: {{ .Chart.Name }}-backup
+            image: "{{ .Values.image.repository }}:{{ .Values.image.tag }}"
+            imagePullPolicy: {{ .Values.image.pullPolicy | quote }}
+            command:  
+              - /usr/bin/env
+              - bash
+              - -c
+              - |
+                curl "http://${REPLHOST}:9000/pg_backup"
+            env:
+            - name: REPLHOST
+              value: {{ include "patroni.fullname" . }}-repl
+{{- end -}}
\ No newline at end of file
diff --git a/addons/postgresql-cluster/15/chart/postgresql-cluster/templates/networkpolicy.yaml b/addons/postgresql-cluster/15/chart/postgresql-cluster/templates/networkpolicy.yaml
new file mode 100644
index 00000000..8b429517
--- /dev/null
+++ b/addons/postgresql-cluster/15/chart/postgresql-cluster/templates/networkpolicy.yaml
@@ -0,0 +1,42 @@
+{{- if .Values.networkPolicy.enabled }}
+kind: NetworkPolicy
+apiVersion: {{ template "common.capabilities.networkPolicy.apiVersion" . }}
+metadata:
+  name: {{ template "common.names.fullname" . }}
+  namespace: {{ include "common.names.namespace" . | quote }}
+  labels: {{- include "common.labels.standard" . | nindent 4 }}
+    {{- if .Values.commonLabels }}
+    {{- include "common.tplvalues.render" ( dict "value" .Values.commonLabels "context" $ ) | nindent 4 }}
+    {{- end }}
+    app.kubernetes.io/component: patroni
+    cluster-name: {{ template "patroni.fullname" . }}
+  {{- if .Values.commonAnnotations }}
+  annotations: {{- include "common.tplvalues.render" ( dict "value" .Values.commonAnnotations "context" $ ) | nindent 4 }}
+  {{- end }}
+spec:
+  podSelector:
+    matchLabels:
+      {{- include "common.labels.matchLabels" . | nindent 6 }}
+  ingress:
+    # Allow inbound connections
+    - ports:
+      - port: 5432
+      {{- if and .Values.metrics.enabled }}
+      - port: {{ .Values.metrics.containerPort }}
+      {{ end }} ``
+      {{- if or .Values.networkPolicy.allowCurrentNamespace .Values.networkPolicy.allowNamespaces }}
+      from:
+      {{- if .Values.networkPolicy.allowCurrentNamespace }}
+        - namespaceSelector:
+            matchLabels:
+              kubernetes.io/metadata.name: {{ .Release.Namespace }}
+      {{- end }}
+      {{- range $namespace := .Values.networkPolicy.allowNamespaces }}
+      {{- if $namespace }}
+        - namespaceSelector:
+            matchLabels:
+              kubernetes.io/metadata.name: {{ $namespace }}
+      {{- end }}
+      {{- end }}
+  {{- end }}
+{{- end }}
diff --git a/addons/postgresql-cluster/15/chart/postgresql-cluster/templates/role.yaml b/addons/postgresql-cluster/15/chart/postgresql-cluster/templates/role.yaml
new file mode 100644
index 00000000..8dec5309
--- /dev/null
+++ b/addons/postgresql-cluster/15/chart/postgresql-cluster/templates/role.yaml
@@ -0,0 +1,49 @@
+{{- if .Values.rbac.create }}
+apiVersion: rbac.authorization.k8s.io/v1
+kind: Role
+metadata:
+  name: {{ template "patroni.fullname" . }}
+  namespace: {{ include "common.names.namespace" . | quote }}
+  labels:
+    application: {{ template "patroni.fullname" . }}
+    chart: {{ template "patroni.chart" . }}
+    release: {{ .Release.Name }}
+    heritage: {{ .Release.Service }}
+rules:
+- apiGroups: [""]
+  resources: ["configmaps"]
+  verbs:
+  - create
+  - get
+  - list
+  - patch
+  - update
+  - watch
+  # delete is required only for 'patronictl remove'
+  - delete
+- apiGroups: [""]
+  resources: ["services"]
+  verbs:
+  - create
+- apiGroups: [""]
+  resources: ["endpoints"]
+  verbs:
+  - create
+  - get
+  - patch
+  - update
+  # the following three privileges are necessary only when using endpoints
+  - list
+  - watch
+  # delete is required only for for 'patronictl remove'
+  - delete
+  - deletecollection
+- apiGroups: [""]
+  resources: ["pods"]
+  verbs:
+  - get
+  - list
+  - patch
+  - update
+  - watch
+{{- end }}
diff --git a/addons/postgresql-cluster/15/chart/postgresql-cluster/templates/rolebinding.yaml b/addons/postgresql-cluster/15/chart/postgresql-cluster/templates/rolebinding.yaml
new file mode 100644
index 00000000..5e15948f
--- /dev/null
+++ b/addons/postgresql-cluster/15/chart/postgresql-cluster/templates/rolebinding.yaml
@@ -0,0 +1,19 @@
+{{- if .Values.rbac.create }}
+apiVersion: rbac.authorization.k8s.io/v1
+kind: RoleBinding
+metadata:
+  name: {{ template "patroni.fullname" . }}
+  namespace: {{ include "common.names.namespace" . | quote }}
+  labels:
+    application: {{ template "patroni.fullname" . }}
+    chart: {{ template "patroni.chart" . }}
+    release: {{ .Release.Name }}
+    heritage: {{ .Release.Service }}
+subjects:
+  - kind: ServiceAccount
+    name: {{ template "patroni.serviceAccountName" . }}
+roleRef:
+  apiGroup: rbac.authorization.k8s.io
+  kind: Role
+  name: {{ template "patroni.fullname" . }}
+{{- end }}
diff --git a/addons/postgresql-cluster/15/chart/postgresql-cluster/templates/sec.yaml b/addons/postgresql-cluster/15/chart/postgresql-cluster/templates/sec.yaml
new file mode 100644
index 00000000..306e93e7
--- /dev/null
+++ b/addons/postgresql-cluster/15/chart/postgresql-cluster/templates/sec.yaml
@@ -0,0 +1,19 @@
+apiVersion: v1
+kind: Secret
+metadata:
+  name: {{ template "patroni.fullname" . }}
+  namespace: {{ include "common.names.namespace" . | quote }}
+  labels:
+    application: {{ template "patroni.fullname" . }}
+    chart: {{ template "patroni.chart" . }}
+    release: {{ .Release.Name }}
+    heritage: {{ .Release.Service }}
+    cluster-name: {{ template "patroni.fullname" . }}
+type: Opaque
+data:
+  password-superuser: {{ .Values.credentials.superuser | b64enc }}
+  password-rewind: {{ .Values.credentials.rewind | b64enc }}
+  password-replication: {{ .Values.credentials.replication | b64enc }} 
+  data-user: {{ .Values.dataname.username | b64enc }}
+  data-name: {{ .Values.dataname.dbname | b64enc }}
+  data-password: {{ .Values.dataname.password | b64enc }}
diff --git a/addons/postgresql-cluster/15/chart/postgresql-cluster/templates/serviceaccount.yaml b/addons/postgresql-cluster/15/chart/postgresql-cluster/templates/serviceaccount.yaml
new file mode 100644
index 00000000..e1b2ebf6
--- /dev/null
+++ b/addons/postgresql-cluster/15/chart/postgresql-cluster/templates/serviceaccount.yaml
@@ -0,0 +1,12 @@
+{{- if .Values.serviceAccount.create }}
+apiVersion: v1
+kind: ServiceAccount
+metadata:
+  name: {{ template "patroni.serviceAccountName" . }}
+  namespace: {{ include "common.names.namespace" . | quote }}
+  labels:
+    application: {{ template "patroni.fullname" . }}
+    chart: {{ template "patroni.chart" . }}
+    release: {{ .Release.Name }}
+    heritage: {{ .Release.Service }}
+{{- end }}
diff --git a/addons/postgresql-cluster/15/chart/postgresql-cluster/templates/statefulset.yaml b/addons/postgresql-cluster/15/chart/postgresql-cluster/templates/statefulset.yaml
new file mode 100644
index 00000000..0d1ed21a
--- /dev/null
+++ b/addons/postgresql-cluster/15/chart/postgresql-cluster/templates/statefulset.yaml
@@ -0,0 +1,254 @@
+apiVersion: apps/v1
+kind: StatefulSet
+metadata:
+  name: {{ template "patroni.fullname" . }}
+  namespace: {{ include "common.names.namespace" . | quote }}
+  labels:  {{- include "common.labels.standard" . | nindent 4 }}
+    app.kubernetes.io/component: patroni
+    application: {{ template "patroni.fullname" . }}
+    chart: {{ template "patroni.chart" . }}
+    release: {{ .Release.Name }}
+    heritage: {{ .Release.Service }}
+    cluster-name: {{ template "patroni.fullname" . }}
+spec:
+  serviceName: {{ template "patroni.fullname" . }}
+  replicas: {{ .Values.replicaCount }}
+  selector:
+    matchLabels: {{- include "common.labels.matchLabels" . | nindent 6 }}
+      app.kubernetes.io/component: patroni
+      application: {{ template "patroni.fullname" . }}
+      chart: {{ template "patroni.chart" . }}
+      release: {{ .Release.Name }}
+      heritage: {{ .Release.Service }}
+      cluster-name: {{ template "patroni.fullname" . }}
+  template:
+    metadata:
+      name: {{ template "patroni.fullname" . }}
+      labels: {{- include "common.labels.standard" . | nindent 8 }}
+        app.kubernetes.io/component: patroni
+        application: {{ template "patroni.fullname" . }}
+        chart: {{ template "patroni.chart" . }}
+        release: {{ .Release.Name }}
+        heritage: {{ .Release.Service }}
+        cluster-name: {{ template "patroni.fullname" . }}
+    spec:
+      {{- if .Values.patroni.affinity }}
+      affinity: {{- include "common.tplvalues.render" (dict "value" .Values.patroni.affinity "context" $) | nindent 8 }}
+      {{- else }}
+      affinity:
+        podAffinity: {{- include "common.affinities.pods" (dict "type" .Values.patroni.podAffinityPreset "context" $) | nindent 10 }}
+        podAntiAffinity: {{- include "common.affinities.pods" (dict "type" .Values.patroni.podAntiAffinityPreset "context" $) | nindent 10 }}
+        nodeAffinity: {{- include "common.affinities.nodes" (dict "type" .Values.patroni.nodeAffinityPreset.type "key" .Values.patroni.nodeAffinityPreset.key "values" .Values.patroni.nodeAffinityPreset.values) | nindent 10 }}
+      {{- end }}
+      {{- if .Values.patroni.nodeSelector }}
+      nodeSelector: {{- include "common.tplvalues.render" (dict "value" .Values.patroni.nodeSelector "context" $) | nindent 8 }}
+      {{- end }}
+      serviceAccountName: {{ template "patroni.serviceAccountName" . }}
+      # securityContext:
+      #   runAsUser: postgres
+      #   fsGroup: postgres
+      containers:
+      - name: {{ .Chart.Name }}
+        image: "{{ .Values.image.repository }}:{{ .Values.image.tag }}"
+        imagePullPolicy: {{ .Values.image.pullPolicy }}
+        # securityContext: 
+        #   runAsUser: postgres
+        #   fsGroup: postgres
+        env:
+        {{- include "patroni.envs" . | indent 8 }} 
+        {{- if .Values.walG.enabled }}
+        {{- include "walg.envs" . | indent 8 }} 
+        {{- end }}
+        {{- if .Values.env }}
+        {{- range $key, $val := .Values.env }}
+        - name: {{  $key | quote | upper }}
+          value: {{ $val | quote }}
+        {{- end }}
+        {{- end }}
+        readinessProbe:
+          httpGet:
+            scheme: HTTP
+            path: /readiness
+            port: 8008
+          initialDelaySeconds: 3
+          periodSeconds: 10
+          timeoutSeconds: 5
+          successThreshold: 1
+          failureThreshold: 3
+        livenessProbe:
+          failureThreshold: 3                            
+          httpGet:       
+            path: /liveness
+            port: 8008
+            scheme: HTTP   
+          initialDelaySeconds: 10
+          periodSeconds: 10
+          successThreshold: 1
+          timeoutSeconds: 5
+        lifecycle:
+          preStop:
+            exec:
+              command:
+                - /usr/bin/env
+                - bash
+                - -c
+                - |
+                  # switch leader pod if the current pod is the leader
+                  if curl --fail http://localhost:8008/read-write; then
+                    init-stack patronictl switchover --force
+                  fi
+        ports:
+        - containerPort: 8008
+          protocol: TCP
+        - containerPort: 5432
+          protocol: TCP
+        volumeMounts:
+        - name: storage-volume
+          mountPath: "{{ .Values.persistentVolume.mountPath }}"
+        - mountPath: "/opt/drycc/postgresql/scripts/"
+          name: patroni-config
+        - mountPath: "/opt/drycc/postgresql/config/"
+          name: postgresql-config
+          # readOnly: true
+        resources:
+{{ toYaml .Values.resources | indent 10 }}
+      {{- if .Values.metrics.enabled }}
+      - name: metrics
+        image: "{{ .Values.metrics.image.repository }}:{{ .Values.metrics.image.tag }}"
+        imagePullPolicy: {{ .Values.metrics.image.pullPolicy | quote }}
+        {{- if .Values.metrics.containerSecurityContext.enabled }}
+        securityContext: {{- omit .Values.metrics.containerSecurityContext "enabled" | toYaml | nindent 12 }}
+        {{- end }}
+        {{- if .Values.diagnosticMode.enabled }}
+        command: {{- include "common.tplvalues.render" (dict "value" .Values.diagnosticMode.command "context" $) | nindent 12 }}
+        args: {{- include "common.tplvalues.render" (dict "value" .Values.diagnosticMode.args "context" $) | nindent 12 }}
+        {{- else if .Values.metrics.customMetrics }}
+        args: ["--extend.query-path", "/conf/custom-metrics.yaml"]
+        {{- end }}
+        env:
+          - name: DATA_SOURCE_NAME
+            value: {{ printf "postgresql://tea_mon:password@127.0.0.1:5432/%s?sslmode=disable" $.Values.dataname.dbname }}       
+        ports:
+          - name: http-metrics
+            containerPort: {{ .Values.metrics.containerPort }}
+        startupProbe:
+          initialDelaySeconds: 10
+          tcpSocket:
+              port: http-metrics
+          periodSeconds: 10
+          timeoutSeconds: 1
+          failureThreshold: 15
+          successThreshold: 1
+        livenessProbe:
+          initialDelaySeconds: 5
+          httpGet:
+            path: /
+            port: http-metrics
+          periodSeconds: 10
+          timeoutSeconds: 5
+          failureThreshold: 6
+          successThreshold: 1
+        readinessProbe:
+          initialDelaySeconds: 5
+          httpGet:
+            path: /
+            port: http-metrics
+          periodSeconds: 10
+          timeoutSeconds: 5
+          failureThreshold: 6
+          successThreshold: 1
+        {{- if .Values.metrics.resources }}
+        resources: {{- toYaml .Values.metrics.resources | nindent 12 }}
+        {{- end }}
+      {{- end }}
+       {{- if .Values.walG.enabled }}
+      - name: {{ .Chart.Name }}-backup
+        image: "{{ .Values.image.repository }}:{{ .Values.image.tag }}"
+        imagePullPolicy: {{ .Values.image.pullPolicy }}
+        # securityContext: 
+        #   runAsUser: postgres
+        #   fsGroup: postgres
+        command:
+        - /usr/bin/env
+        - bash
+        - -c
+        - | 
+          python3 /opt/drycc/postgresql/pgbackup.py 0.0.0.0 9000 
+        env:
+        {{- include "walg.envs" . | indent 8 }} 
+        - name: PGHOST
+          value: localhost
+        - name: PGPASSWORD
+          valueFrom:
+            secretKeyRef:
+              name: {{ template "patroni.fullname" . }}
+              key: password-superuser
+        - name: PGUSER
+          value: postgres
+        - name: PGDATABASE
+          value: postgres
+        - name: PGPORT
+          value: "5432" 
+        - name: PGDATA
+          value: "{{ .Values.persistentVolume.mountPath }}/data"  
+        ports:
+        - containerPort: 9000
+        volumeMounts:
+        - name: storage-volume
+          mountPath: "{{ .Values.persistentVolume.mountPath }}" 
+      {{- end }}
+     {{- with .Values.nodeSelector }} 
+      nodeSelector:
+{{ toYaml . | indent 8 }}
+    {{- end }}
+    {{- with .Values.tolerations }}
+      tolerations:
+{{ toYaml . | indent 8 }}
+    {{- end }}
+    {{- if .Values.schedulerName }}
+      schedulerName: {{ .Values.schedulerName }}
+    {{- end }}
+    {{- if .Values.affinity }}
+      affinity:
+{{ .Values.affinity | toYaml | indent 8 }}
+    {{- else if .Values.affinityTemplate }}
+      affinity:
+{{ tpl .Values.affinityTemplate . | indent 8 }}
+    {{- end }}
+      volumes:
+      - name: patroni-config
+        configMap:
+          name: {{ template "common.names.fullname" . }}-patroni
+      - name: postgresql-config
+        configMap:
+          name: {{ template "common.names.fullname" . }}-postgresql
+      {{- if not .Values.persistentVolume.enabled }}
+      - name: storage-volume
+        emptyDir: {}
+      {{- end }}
+  {{- if .Values.persistentVolume.enabled }}
+  volumeClaimTemplates:
+    - metadata:
+        name: storage-volume
+        annotations:
+        {{- if .Values.persistentVolume.annotations }}
+{{ toYaml .Values.persistentVolume.annotations | indent 8 }}
+        {{- end }}
+        labels:
+          application: {{ template "patroni.fullname" . }}
+          release: {{ .Release.Name }}
+          heritage: {{ .Release.Service }}
+      spec:
+        accessModes:
+{{ toYaml .Values.persistentVolume.accessModes | indent 8 }}
+        resources:
+          requests:
+            storage: "{{ .Values.persistentVolume.size }}"
+      {{- if .Values.persistentVolume.storageClass }}
+      {{- if (eq "-" .Values.persistentVolume.storageClass) }}
+        storageClassName: ""
+      {{- else }}
+        storageClassName: "{{ .Values.persistentVolume.storageClass }}"
+      {{- end }}
+      {{- end }}
+  {{- end }}
diff --git a/addons/postgresql-cluster/15/chart/postgresql-cluster/templates/svc-config.yaml b/addons/postgresql-cluster/15/chart/postgresql-cluster/templates/svc-config.yaml
new file mode 100644
index 00000000..5f7b0f60
--- /dev/null
+++ b/addons/postgresql-cluster/15/chart/postgresql-cluster/templates/svc-config.yaml
@@ -0,0 +1,11 @@
+# headless service to avoid deletion of patronidemo-config endpoint
+apiVersion: v1
+kind: Service
+metadata:
+  name: {{ template "patroni.fullname" . }}-config
+  labels:
+    application: {{ template "patroni.fullname" . }}
+    release: {{ .Release.Name }}
+    cluster-name: {{ template "patroni.fullname" . }}
+spec:
+  clusterIP: None
diff --git a/addons/postgresql-cluster/15/chart/postgresql-cluster/templates/svc-master.yaml b/addons/postgresql-cluster/15/chart/postgresql-cluster/templates/svc-master.yaml
new file mode 100644
index 00000000..48dba13d
--- /dev/null
+++ b/addons/postgresql-cluster/15/chart/postgresql-cluster/templates/svc-master.yaml
@@ -0,0 +1,24 @@
+apiVersion: v1
+kind: Service
+metadata:
+  name: {{ template "patroni.fullname" . }}-master
+  namespace: {{ include "common.names.namespace" . | quote }}
+  labels: {{- include "common.labels.standard" . | nindent 4 }}
+    app.kubernetes.io/component: patroni
+    application: {{ template "patroni.fullname" . }}
+    chart: {{ template "patroni.chart" . }}
+    release: {{ .Release.Name }}
+    heritage: {{ .Release.Service }}
+    cluster-name: {{ template "patroni.fullname" . }}
+    role: master
+spec:
+  type: LoadBalancer
+  selector:
+    application: {{ template "patroni.fullname" . }}
+    cluster-name: {{ template "patroni.fullname" . }}
+    role: master
+  ports:
+  - name: postgresql
+    port: 5432
+    targetPort: 5432
+    protocol: TCP
\ No newline at end of file
diff --git a/addons/postgresql-cluster/15/chart/postgresql-cluster/templates/svc-metrics.yaml b/addons/postgresql-cluster/15/chart/postgresql-cluster/templates/svc-metrics.yaml
new file mode 100644
index 00000000..862c6a0c
--- /dev/null
+++ b/addons/postgresql-cluster/15/chart/postgresql-cluster/templates/svc-metrics.yaml
@@ -0,0 +1,32 @@
+{{- if .Values.metrics.enabled }}
+apiVersion: v1
+kind: Service
+metadata:
+  name: {{ printf "%s-metrics" (include "patroni.fullname" .) }}
+  namespace: {{ .Release.Namespace | quote }}
+  labels: {{- include "common.labels.standard" . | nindent 4 }}
+    app.kubernetes.io/component: patroni
+    app.kubernetes.io/component: metrics
+    {{- if .Values.commonLabels }}
+    {{- include "common.tplvalues.render" ( dict "value" .Values.commonLabels "context" $ ) | nindent 4 }}
+    {{- end }}
+  annotations:
+    {{- if .Values.commonAnnotations }}
+    {{- include "common.tplvalues.render" ( dict "value" .Values.commonAnnotations "context" $ ) | nindent 4 }}
+    {{- end }}
+    {{- if .Values.metrics.service.annotations }}
+    {{- include "common.tplvalues.render" ( dict "value" .Values.metrics.service.annotations "context" $ ) | nindent 4 }}
+    {{- end }}
+spec:
+  type: ClusterIP
+  sessionAffinity: {{ .Values.metrics.service.sessionAffinity }}
+  {{- if .Values.metrics.service.clusterIP }}
+  clusterIP: {{ .Values.metrics.service.clusterIP }}
+  {{- end }}
+  ports:
+    - name: http-metrics
+      port: {{ .Values.metrics.service.ports.metrics }}
+      targetPort: http-metrics
+  selector: {{- include "common.labels.matchLabels" . | nindent 4 }}
+    app.kubernetes.io/component: patroni
+{{- end }}
diff --git a/addons/postgresql-cluster/15/chart/postgresql-cluster/templates/svc-relp.yaml b/addons/postgresql-cluster/15/chart/postgresql-cluster/templates/svc-relp.yaml
new file mode 100644
index 00000000..ba50b3bd
--- /dev/null
+++ b/addons/postgresql-cluster/15/chart/postgresql-cluster/templates/svc-relp.yaml
@@ -0,0 +1,26 @@
+apiVersion: v1
+kind: Service
+metadata:
+  name: {{ template "patroni.fullname" . }}-repl
+  namespace: {{ include "common.names.namespace" . | quote }}
+  labels: {{- include "common.labels.standard" . | nindent 4 }}
+    app.kubernetes.io/component: patroni
+    application: {{ template "patroni.fullname" . }}
+    chart: {{ template "patroni.chart" . }}
+    release: {{ .Release.Name }}
+    heritage: {{ .Release.Service }}
+    cluster-name: {{ template "patroni.fullname" . }}
+    role: replica
+spec:
+  type: LoadBalancer
+  selector:
+    application: {{ template "patroni.fullname" . }}
+    cluster-name: {{ template "patroni.fullname" . }}
+    role: replica
+  ports:
+  - name: postgresql
+    port: 5432
+    targetPort: 5432
+  - name: pgbackup
+    port: 9000
+    targetPort: 9000
\ No newline at end of file
diff --git a/addons/postgresql-cluster/15/chart/postgresql-cluster/templates/svc.yaml b/addons/postgresql-cluster/15/chart/postgresql-cluster/templates/svc.yaml
new file mode 100644
index 00000000..77ffd855
--- /dev/null
+++ b/addons/postgresql-cluster/15/chart/postgresql-cluster/templates/svc.yaml
@@ -0,0 +1,18 @@
+apiVersion: v1
+kind: Service
+metadata:
+  name: {{ template "patroni.fullname" . }}
+  namespace: {{ include "common.names.namespace" . | quote }}
+  labels: {{- include "common.labels.standard" . | nindent 4 }}
+    app.kubernetes.io/component: patroni
+    application: {{ template "patroni.fullname" . }}
+    chart: {{ template "patroni.chart" . }}
+    release: {{ .Release.Name }}
+    heritage: {{ .Release.Service }}
+    cluster-name: {{ template "patroni.fullname" . }}
+spec:
+  type: LoadBalancer
+  ports:
+    - port: 5432
+      targetPort: 5432
+      protocol: TCP
\ No newline at end of file
diff --git a/addons/postgresql-cluster/15/chart/postgresql-cluster/values.yaml b/addons/postgresql-cluster/15/chart/postgresql-cluster/values.yaml
new file mode 100644
index 00000000..451cb0ba
--- /dev/null
+++ b/addons/postgresql-cluster/15/chart/postgresql-cluster/values.yaml
@@ -0,0 +1,345 @@
+replicaCount: 3
+diagnosticMode: 
+  enable: false
+
+service:
+ type: LoadBalancer
+
+image:
+  # Image was built from registry.drycc.cc/drycc-addons/patroni:3.2
+  # https://github.com/zalando/spilo/tree/master/postgres-appliance
+  repository: registry.drycc.cc/drycc-addons/postgresql-patroni
+  tag: 15
+  # IfNotPresent , Always
+  pullPolicy: 'IfNotPresent'
+
+# Credentials used by Patroni , passwd
+# https://github.com/zalando/patroni/blob/master/docs/SETTINGS.rst#postgresql
+# https://github.com/zalando/spilo/blob/master/ENVIRONMENT.rst
+credentials:
+  superuser: tea
+  rewind: cola
+  replication: reppasswd
+
+dataname:
+  dbname: db1
+  username: us1
+  password: 111w
+
+# Distribution Configuration stores
+# Please note that only one of the following stores should be enabled.
+kubernetes:
+  endpoints:
+    enable: true
+  configmaps:
+    enable: false
+
+# Extra custom environment variables.
+env: {}
+
+#
+#custom patroni.yaml used by patroni boot
+# configuration: {}
+preInitScript: |
+  mkdir -p /home/postgres/pgdata/log
+  ln -sf /dev/stdout "/home/postgres/pgdata/log/postgresql.csv"
+  cat > /opt/drycc/postgresql/patroni.yml <<__EOF__
+  log:
+    level: INFO
+  restapi:
+    listen: 0.0.0.0:8008
+    connect_address: 0.0.0.0:8008
+    authentication:
+      username: NzUwNjg3MTEtMDgzOS00YTNkLWEyNjAt
+      password: YjJjMDNjYjQtMDA0Ny00NTgwLTgwYjMt
+  bootstrap:
+    dcs:
+      ttl: 30
+      loop_wait: 10
+      retry_timeout: 10
+      maximum_lag_on_failover: 1048576
+      postgresql:
+        use_pg_rewind: true
+        use_slots: true
+        pg_hba:
+        - local all all  peer
+        - host all tea_mon 127.0.0.1/32  trust
+        - host all all 0.0.0.0/0 scram-sha-256
+        - host replication ${PATRONI_REPLICATION_USERNAME} 0.0.0.0/0 scram-sha-256
+        - host replication postgres 0.0.0.0/0 scram-sha-256
+        custom_conf: '/opt/drycc/postgresql/config/custom_conf.conf'
+        parameters:
+          wal_level: hot_standby
+          hot_standby: "on"
+          max_connections: 1005
+          max_worker_processes: 8
+          wal_keep_segments: 1024
+          max_wal_senders: 10
+          max_replication_slots: 10
+          max_prepared_transactions: 0
+          max_locks_per_transaction: 64
+          wal_log_hints: "on"
+          track_commit_timestamp: "off"
+          archive_mode: "on"
+          archive_timeout: 300s
+          archive_command: sh /opt/drycc/postgresql/walbackup.sh %p
+          # timescaledb.license: 'timescale'
+          shared_preload_libraries: 'auto_explain,pg_stat_statements'
+          log_destination: 'csvlog'
+          log_filename: postgresql.log
+          logging_collector: on
+          log_directory: /home/postgres/pgdata/log
+          log_min_messages: 'info'
+          log_min_duration_statement: 1000
+          log_lock_waits: on
+          log_statement: 'ddl' 
+    initdb:
+      - auth-host: scram-sha-256
+      - auth-local: trust
+      - encoding: UTF8
+      - locale: en_US.UTF-8
+      - data-checksums
+    post_bootstrap: sh /opt/drycc/postgresql/scripts/post_init.sh
+  restapi:
+    connect_address: '${PATRONI_KUBERNETES_POD_IP}:8008'
+  postgresql:
+    connect_address: '${PATRONI_KUBERNETES_POD_IP}:5432'
+    authentication:
+      superuser:
+        username: postgres
+        password: '${PATRONI_SUPERUSER_PASSWORD}'
+      replication:
+        username: standby
+        password: '${PATRONI_REPLICATION_PASSWORD}'
+      rewind:  # Has no effect on postgres 10 and lower
+        username: rewinder
+        password: '${PATRONI_REWIND_USERNAME}'
+  watchdog:
+    mode: off
+  __EOF__
+
+postInitScript: |
+  #!/bin/bash
+  set -Eeu
+  # Create monitor user
+  psql -w -c  "CREATE USER tea_mon WITH ROLE pg_monitor"
+  # Create init database & user 
+  if [[( -n "$DATABASE_USER") &&  ( -n "$DATABASE_PASSWORD") && ( -n "$DATABASE_NAME")]]; then
+    echo "Creating user ${DATABASE_USER}"
+    psql -w -c "create user ${DATABASE_USER} WITH LOGIN ENCRYPTED PASSWORD '${DATABASE_PASSWORD}'"
+    echo "Creating database ${DATABASE_NAME} "
+    psql -w -c "CREATE DATABASE ${DATABASE_NAME} OWNER ${DATABASE_USER} CONNECTION LIMIT 1000"
+    psql -w -d ${DATABASE_NAME} -c "create extension postgis ; create extension pg_stat_statements ; create extension pg_buffercache ;"
+    psql -w -c  "CHECKPOINT;CHECKPOINT;"
+  else
+    echo "Skipping user creation"
+    echo "Skipping database creation"
+  fi
+postgresql: 
+  config: |-
+    log_min_duration_statement = 1008
+    max_wal_size = 4GB
+    min_wal_size = 4GB
+    max_connections = 1005
+    max_worker_processes = 8
+    max_wal_senders = 10
+    max_replication_slots = 10
+    max_prepared_transactions = 0
+    max_locks_per_transaction = 64
+
+patroni:
+  ## @param patroni.podAnnotations Additional pod annotations for Postgresql patroni pods
+  ## ref: https://kubernetes.io/docs/concepts/overview/working-with-objects/annotations/
+  ##
+  podAnnotations: {}
+  ## @param patroni.podAffinityPreset Postgresql patroni pod affinity preset. Ignored if `patroni.affinity` is set. Allowed values: `soft` or `hard`
+  ## ref: https://kubernetes.io/docs/concepts/scheduling-eviction/assign-pod-node/#inter-pod-affinity-and-anti-affinity
+  ##
+  podAffinityPreset: ""
+  ## @param patroni.podAntiAffinityPreset Postgresql patroni pod anti-affinity preset. Ignored if `patroni.affinity` is set. Allowed values: `soft` or `hard`
+  ## ref: https://kubernetes.io/docs/concepts/scheduling-eviction/assign-pod-node/#inter-pod-affinity-and-anti-affinity
+  ##
+  podAntiAffinityPreset: soft
+  ## Postgresql Primary node affinity preset
+  ## ref: https://kubernetes.io/docs/concepts/scheduling-eviction/assign-pod-node/#node-affinity
+  ##
+  nodeAffinityPreset:
+    ## @param patroni.nodeAffinityPreset.type Postgresql patroni node affinity preset type. Ignored if `patroni.affinity` is set. Allowed values: `soft` or `hard`
+    ##
+    type: ""
+    ## @param patroni.nodeAffinityPreset.key Postgresql patroni node label key to match Ignored if `patroni.affinity` is set.
+    ## E.g.
+    ## key: "kubernetes.io/e2e-az-name"
+    ##
+    key: ""
+    ## @param patroni.nodeAffinityPreset.values Postgresql patroni node label values to match. Ignored if `patroni.affinity` is set.
+    ## E.g.
+    ## values:
+    ##   - e2e-az1
+    ##   - e2e-az2
+    ##
+    values: []
+  ## @param patroni.affinity Affinity for Postgresql patroni pods assignment
+  ## ref: https://kubernetes.io/docs/concepts/configuration/assign-pod-node/#affinity-and-anti-affinity
+  ## Note: podAffinityPreset, podAntiAffinityPreset, and  nodeAffinityPreset will be ignored when it's set
+  ##
+  affinity: {}
+  ## @param patroni.nodeSelector Node labels for Postgresql patroni pods assignment
+  ## ref: https://kubernetes.io/docs/user-guide/node-selection/
+  ##
+  nodeSelector: {}
+
+## Postgresql Prometheus exporter parameters
+##
+metrics:
+  enabled: false 
+  image:
+    repository: registry.drycc.cc/drycc-addons/postgres-exporter
+    tag: "0"
+    # IfNotPresent , Always
+    pullPolicy: 'IfNotPresent'
+  ## @param metrics.customMetrics Define additional custom metrics
+  ## ref: https://github.com/wrouesnel/postgres_exporter#adding-new-metrics-via-a-config-file
+  ## customMetrics:
+  ##   pg_database:
+  ##     query: "SELECT d.datname AS name, CASE WHEN pg_catalog.has_database_privilege(d.datname, 'CONNECT') THEN pg_catalog.pg_database_size(d.datname) ELSE 0 END AS size_bytes FROM pg_catalog.pg_database d where datname not in ('template0', 'template1', 'postgres')"
+  ##     metrics:
+  ##       - name:
+  ##           usage: "LABEL"
+  ##           description: "Name of the database"
+  ##       - size_bytes:
+  ##           usage: "GAUGE"
+  ##           description: "Size of the database in bytes"
+  ##
+  service:
+    ports:
+      metrics: 9187
+    clusterIP: ""
+    ## @param metrics.service.sessionAffinity Control where client requests go, to the same pod or round-robin
+    ## Values: ClientIP or None
+    ## ref: https://kubernetes.io/docs/user-guide/services/
+    ##
+    sessionAffinity: None                                                                                                                                                                                                                                                 
+    ## @param metrics.service.annotations [object] Annotations for Prometheus to auto-discover the metrics endpoint
+    ##
+    annotations:
+      prometheus.io/scrape: "true"
+      prometheus.io/port: "{{ .Values.metrics.service.ports.metrics }}"
+
+  customMetrics: {} 
+  containerPort: 9187
+  containerSecurityContext:
+    enabled: false
+    runAsUser: 1001
+    runAsNonRoot: true
+  customLivenessProbe: {}
+  customReadinessProbe:
+    enabled: true 
+  resources: 
+    limits:
+      cpu: 100m
+      memory: 512Mi
+      # hugepages-2Mi: 4Mi
+    requests:
+      cpu: 100m
+      memory: 512Mi
+walG:
+  # Specifies whether Wal-E should be enabled
+  enabled: true
+  # Cron schedule for doing base backups
+  scheduleCronJob: "*/5 * * * *"
+  # Amount of base backups to retain
+  retainBackups: 2
+  # Name of the secret that holds the credentials to the bucket
+  kubernetesSecret:
+  # Maximum size of the WAL segments accumulated after the base backup to
+  # consider WAL-E restore instead of pg_basebackup
+  backupThresholdMegabytes: 1024
+  # Maximum ratio (in percents) of the accumulated WAL files to the base backup
+  # to consider WAL-E restore instead of pg_basebackup
+  backupThresholdPercentage: 30
+  s3:
+    used: true
+    awsAccessKeyID: "minioadmin"
+    awsSecretAccessKey: "minioadmin"
+    walGS3Prefix: "s3://pg1"
+    awsEndpoint: "http://10.10.2.11:9000"
+    awsS3ForcePathStyle: "true"
+    awsRegion: dx-1
+
+persistentVolume:
+  enabled: false
+  size: 10G
+  ## database data Persistent Volume Storage Class
+  ## If defined, storageClassName: <storageClass>
+  ## If set to "-", storageClassName: "", which disables dynamic provisioning
+  ## If undefined (the default) or set to null, no storageClassName spec is
+  ##   set, choosing the default provisioner.  (gp2 on AWS, standard on
+  ##   GKE, AWS & OpenStack)
+  ##
+  # storageClass: "-"
+  subPath: ""
+  mountPath: "/home/postgres/pgdata"
+  annotations: {}
+  accessModes:
+    - ReadWriteOnce
+
+resources: 
+  # If you do want to specify resources, uncomment the following
+  # lines, adjust them as necessary, and remove the curly braces after 'resources:'.
+  limits:
+    cpu: 100m
+    memory: 512Mi
+    # hugepages-2Mi: 4Mi
+  requests:
+    cpu: 100m
+    memory: 512Mi
+
+# https://kubernetes.io/docs/concepts/configuration/assign-pod-node/#nodeselector
+nodeSelector: {}
+
+# https://kubernetes.io/docs/concepts/configuration/taint-and-toleration/
+tolerations: []
+
+# https://kubernetes.io/docs/concepts/configuration/assign-pod-node/#affinity-and-anti-affinity
+affinityTemplate: |
+  podAntiAffinity:
+    preferredDuringSchedulingIgnoredDuringExecution:
+    - weight: 100
+      podAffinityTerm:
+        topologyKey: "kubernetes.io/hostname"
+        labelSelector:
+          matchLabels:
+            application:  {{ template "patroni.name" . }}
+            release: {{ .Release.Name | quote }}
+affinity: {}
+
+## Use an alternate scheduler, e.g. "stork".
+## ref: https://kubernetes.io/docs/tasks/administer-cluster/configure-multiple-schedulers/
+##
+# schedulerName:
+
+rbac:
+  # Specifies whether RBAC resources should be created
+  create: true
+
+serviceAccount:
+  # Specifies whether a ServiceAccount should be created
+  create: true
+  # The name of the ServiceAccount to use.
+  # If not set and create is true, a name is generated using the fullname template
+  name:
+## Postgresql Nework Policy configuration
+##
+networkPolicy:
+  ## @param networkPolicy.enabled Enable creation of NetworkPolicy resources
+  ##
+  enabled: false 
+  ## @param networkPolicy.allowExternal The Policy model to apply.
+  ## When set to false, only pods with the correct
+  ## client label will have network access to the port Postgresql is listening
+  ## on. When true, Postgresql will accept connections from any source
+  ## (with the correct destination port).
+  ##
+  allowCurrentNamespace: true
+  allowNamespaces: []
\ No newline at end of file
diff --git a/addons/postgresql-cluster/15/meta.yaml b/addons/postgresql-cluster/15/meta.yaml
new file mode 100644
index 00000000..f7e21529
--- /dev/null
+++ b/addons/postgresql-cluster/15/meta.yaml
@@ -0,0 +1,20 @@
+name: postgresql-cluster
+version: 15.0
+id: 5cfb0abf-276c-445b-9060-9aa964ede87d
+description: "postgresql-cluster"
+displayName: "postgresql-cluster-15.0"
+metadata:
+  displayName: "postgresql-cluster-15.0"
+  provider:
+    name: drycc
+    supportURL: https://www.postgresql.org/
+  documentationURL: https://github.com/drycc-addons/drycc-docker-postgresql-cluster
+tags: postgresql-cluster
+bindable: true
+instances_retrievable: true
+bindings_retrievable: true
+plan_updateable: true
+allow_parameters:
+- name: "networkPolicy.allowNamespaces"
+  description: "networkPolicy allowNamespaces config for values.yaml"
+archive: false
\ No newline at end of file
diff --git a/addons/postgresql-cluster/15/plans/standard-10/bind.yaml b/addons/postgresql-cluster/15/plans/standard-10/bind.yaml
new file mode 100644
index 00000000..d48323b0
--- /dev/null
+++ b/addons/postgresql-cluster/15/plans/standard-10/bind.yaml
@@ -0,0 +1,31 @@
+credential:
+{{- if (eq .Values.service.type "LoadBalancer") }}
+  - name: host
+    valueFrom:
+      serviceRef:
+        name: {{ template "common.names.fullname" . }}-master
+        jsonpath: '{.spec.clusterIPs[*]}'
+  - name: hostrepl
+    valueFrom:
+      serviceRef:
+        name: {{ template "common.names.fullname" . }}-repl
+        jsonpath: '{.spec.clusterIPs[*]}'
+  - name: database
+    valueFrom:
+      secretKeyRef:
+        name: {{ template "common.names.fullname" . }}
+        jsonpath: '{ .data.data-name }' 
+  - name: password
+    valueFrom:
+      secretKeyRef:
+        name: {{ template "common.names.fullname" . }}
+        jsonpath: '{ .data.data-password }' 
+  - name: username
+    valueFrom:
+      secretKeyRef:
+        name: {{ template "common.names.fullname" . }}
+        jsonpath: '{ .data.data-user }' 
+  - name: port
+    value: 5432
+{{- end }}
+
diff --git a/addons/postgresql-cluster/15/plans/standard-10/create-instance-schema.json b/addons/postgresql-cluster/15/plans/standard-10/create-instance-schema.json
new file mode 100644
index 00000000..66ebbaa0
--- /dev/null
+++ b/addons/postgresql-cluster/15/plans/standard-10/create-instance-schema.json
@@ -0,0 +1,12 @@
+{
+  "$schema": "http://json-schema.org/draft-04/schema#",
+  "type": "object",
+  "properties": {
+    "imagePullPolicy": {
+      "type": "string",
+      "enum": ["Always", "IfNotPresent", "Never"],
+      "default": "IfNotPresent",
+      "title": "Image pull policy"
+    }
+  }
+}
\ No newline at end of file
diff --git a/addons/postgresql-cluster/15/plans/standard-10/meta.yaml b/addons/postgresql-cluster/15/plans/standard-10/meta.yaml
new file mode 100644
index 00000000..f5c2257b
--- /dev/null
+++ b/addons/postgresql-cluster/15/plans/standard-10/meta.yaml
@@ -0,0 +1,6 @@
+name: "standard-10"
+id: 83c3b52e-2685-4362-9ea1-42e170060c78
+description: "Postgresql Cluster standard-10 plan: Disk 10Gi ,vCPUs 1 , RAM 2G , DB MAX Connection 600"
+displayName: "standard-10"
+bindable: true
+maximum_polling_duration: 1800
diff --git a/addons/postgresql-cluster/15/plans/standard-10/values.yaml b/addons/postgresql-cluster/15/plans/standard-10/values.yaml
new file mode 100644
index 00000000..b6037e16
--- /dev/null
+++ b/addons/postgresql-cluster/15/plans/standard-10/values.yaml
@@ -0,0 +1,76 @@
+## @param fullnameOverride String to fully override common.names.fullname template
+##
+fullnameOverride: hb-postgresql-cluster-standard-10
+
+postgresql:
+  config: |-
+    # Connectivity
+    max_connections = 980
+    superuser_reserved_connections = 3
+
+    # Memory Settings
+    shared_buffers = '256 MB'
+    work_mem = '32 MB'
+    maintenance_work_mem = '320 MB'
+    huge_pages = off
+    effective_cache_size = '1 GB'
+    effective_io_concurrency = 100 # concurrent IO only really activated if OS supports posix_fadvise function
+    random_page_cost = 1.25 # speed of random disk access relative to sequential access (1.0)
+
+    # Monitoring
+    track_io_timing=on        # measure exact block IO times
+    track_functions=pl        # track execution times of pl-language procedures if any
+
+    # Replication
+    max_wal_senders = 10
+    synchronous_commit = on
+
+    # Checkpointing: 
+    checkpoint_timeout  = '15 min' 
+    checkpoint_completion_target = 0.9
+    max_wal_size = '1024 MB'
+    min_wal_size = '512 MB'
+
+    # WAL writing
+    wal_compression = on
+    wal_buffers = -1    # auto-tuned by Postgres till maximum of segment size (16MB by default)
+    wal_writer_delay = 200ms
+    wal_writer_flush_after = 1MB
+    wal_keep_size = '3650 MB'
+
+    # Background writer
+    bgwriter_delay = 200ms
+    bgwriter_lru_maxpages = 100
+    bgwriter_lru_multiplier = 2.0
+    bgwriter_flush_after = 0
+
+    # Parallel queries: 
+    max_worker_processes = 2
+    max_parallel_workers_per_gather = 1
+    max_parallel_maintenance_workers = 1
+    max_parallel_workers = 2
+    parallel_leader_participation = on
+
+    # Advanced features 
+    enable_partitionwise_join = on 
+    enable_partitionwise_aggregate = on
+    jit = on
+    max_slot_wal_keep_size = '1000 MB'
+    track_wal_io_timing = on
+    maintenance_io_concurrency = 100
+
+resources: 
+  # If you do want to specify resources, uncomment the following
+  # lines, adjust them as necessary, and remove the curly braces after 'resources:'.
+  limits:
+    cpu: 1000m
+    memory: 2Gi
+    # hugepages-2Mi: 4Mi
+  requests:
+    cpu: 1000m
+    memory: 2Gi
+
+persistentVolume:
+  enabled: true
+  size: 10G
+
diff --git a/addons/postgresql-cluster/15/plans/standard-100/bind.yaml b/addons/postgresql-cluster/15/plans/standard-100/bind.yaml
new file mode 100644
index 00000000..619e1429
--- /dev/null
+++ b/addons/postgresql-cluster/15/plans/standard-100/bind.yaml
@@ -0,0 +1,30 @@
+credential:
+{{- if (eq .Values.service.type "LoadBalancer") }}
+  - name: host
+    valueFrom:
+      serviceRef:
+        name: {{ template "common.names.fullname" . }}-master
+        jsonpath: '{.spec.clusterIPs[*]}'
+  - name: hostrepl
+    valueFrom:
+      serviceRef:
+        name: {{ template "common.names.fullname" . }}-repl
+        jsonpath: '{.spec.clusterIPs[*]}'
+  - name: database
+    valueFrom:
+      secretKeyRef:
+        name: {{ template "common.names.fullname" . }}
+        jsonpath: '{ .data.data-name }' 
+  - name: password
+    valueFrom:
+      secretKeyRef:
+        name: {{ template "common.names.fullname" . }}
+        jsonpath: '{ .data.data-password }' 
+  - name: username
+    valueFrom:
+      secretKeyRef:
+        name: {{ template "common.names.fullname" . }}
+        jsonpath: '{ .data.data-user }' 
+  - name: port
+    value: 5432
+{{- end }}
\ No newline at end of file
diff --git a/addons/postgresql-cluster/15/plans/standard-100/create-instance-schema.json b/addons/postgresql-cluster/15/plans/standard-100/create-instance-schema.json
new file mode 100644
index 00000000..66ebbaa0
--- /dev/null
+++ b/addons/postgresql-cluster/15/plans/standard-100/create-instance-schema.json
@@ -0,0 +1,12 @@
+{
+  "$schema": "http://json-schema.org/draft-04/schema#",
+  "type": "object",
+  "properties": {
+    "imagePullPolicy": {
+      "type": "string",
+      "enum": ["Always", "IfNotPresent", "Never"],
+      "default": "IfNotPresent",
+      "title": "Image pull policy"
+    }
+  }
+}
\ No newline at end of file
diff --git a/addons/postgresql-cluster/15/plans/standard-100/meta.yaml b/addons/postgresql-cluster/15/plans/standard-100/meta.yaml
new file mode 100644
index 00000000..8b3352c9
--- /dev/null
+++ b/addons/postgresql-cluster/15/plans/standard-100/meta.yaml
@@ -0,0 +1,6 @@
+name: "standard-100"
+id: c44160a6-5ec4-49e5-af1e-a1c1676871cf
+description: "Mysql Cluster standard-100 plan: Disk 100Gi ,vCPUs 4 , RAM 16G , DB MAX Connection 2000"
+displayName: "standard-100"
+bindable: true
+maximum_polling_duration: 1800
diff --git a/addons/postgresql-cluster/15/plans/standard-100/values.yaml b/addons/postgresql-cluster/15/plans/standard-100/values.yaml
new file mode 100644
index 00000000..c937e07a
--- /dev/null
+++ b/addons/postgresql-cluster/15/plans/standard-100/values.yaml
@@ -0,0 +1,76 @@
+## @param fullnameOverride String to fully override common.names.fullname template
+##
+fullnameOverride: hb-postgresql-cluster-standard-100
+
+postgresql:
+  config: |-
+    # Connectivity
+    max_connections = 2000
+    superuser_reserved_connections = 3
+
+    # Memory Settings
+    shared_buffers = '4096 MB'
+    work_mem = '32 MB'
+    maintenance_work_mem = '320 MB'
+    huge_pages = off
+    effective_cache_size = '11 GB'
+    effective_io_concurrency = 100 # concurrent IO only really activated if OS supports posix_fadvise function
+    random_page_cost = 1.25 # speed of random disk access relative to sequential access (1.0)
+
+    # Monitoring
+    track_io_timing=on        # measure exact block IO times
+    track_functions=pl        # track execution times of pl-language procedures if any
+
+    # Replication
+    max_wal_senders = 10
+    synchronous_commit = on
+
+    # Checkpointing: 
+    checkpoint_timeout  = '15 min' 
+    checkpoint_completion_target = 0.9
+    max_wal_size = '1024 MB'
+    min_wal_size = '512 MB'
+
+    # WAL writing
+    wal_compression = on
+    wal_buffers = -1    # auto-tuned by Postgres till maximum of segment size (16MB by default)
+    wal_writer_delay = 200ms
+    wal_writer_flush_after = 1MB
+    wal_keep_size = '3650 MB'
+
+
+    # Background writer
+    bgwriter_delay = 200ms
+    bgwriter_lru_maxpages = 100
+    bgwriter_lru_multiplier = 2.0
+    bgwriter_flush_after = 0
+
+    # Parallel queries: 
+    max_worker_processes = 4
+    max_parallel_workers_per_gather = 2
+    max_parallel_maintenance_workers = 2
+    max_parallel_workers = 4
+    parallel_leader_participation = on
+
+    # Advanced features 
+    enable_partitionwise_join = on 
+    enable_partitionwise_aggregate = on
+    jit = on
+    max_slot_wal_keep_size = '1000 MB'
+    track_wal_io_timing = on
+    maintenance_io_concurrency = 100
+
+resources: 
+  # If you do want to specify resources, uncomment the following
+  # lines, adjust them as necessary, and remove the curly braces after 'resources:'.
+  limits:
+    cpu: 4000m
+    memory: 16Gi
+    # hugepages-2Mi: 4Mi
+  requests:
+    cpu: 4000m
+    memory: 16Gi
+
+persistentVolume:
+  enabled: true
+  size: 100G
diff --git a/addons/postgresql-cluster/15/plans/standard-20/bind.yaml b/addons/postgresql-cluster/15/plans/standard-20/bind.yaml
new file mode 100644
index 00000000..619e1429
--- /dev/null
+++ b/addons/postgresql-cluster/15/plans/standard-20/bind.yaml
@@ -0,0 +1,30 @@
+credential:
+{{- if (eq .Values.service.type "LoadBalancer") }}
+  - name: host
+    valueFrom:
+      serviceRef:
+        name: {{ template "common.names.fullname" . }}-master
+        jsonpath: '{.spec.clusterIPs[*]}'
+  - name: hostrepl
+    valueFrom:
+      serviceRef:
+        name: {{ template "common.names.fullname" . }}-repl
+        jsonpath: '{.spec.clusterIPs[*]}'
+  - name: database
+    valueFrom:
+      secretKeyRef:
+        name: {{ template "common.names.fullname" . }}
+        jsonpath: '{ .data.data-name }' 
+  - name: password
+    valueFrom:
+      secretKeyRef:
+        name: {{ template "common.names.fullname" . }}
+        jsonpath: '{ .data.data-password }' 
+  - name: username
+    valueFrom:
+      secretKeyRef:
+        name: {{ template "common.names.fullname" . }}
+        jsonpath: '{ .data.data-user }' 
+  - name: port
+    value: 5432
+{{- end }}
\ No newline at end of file
diff --git a/addons/postgresql-cluster/15/plans/standard-20/create-instance-schema.json b/addons/postgresql-cluster/15/plans/standard-20/create-instance-schema.json
new file mode 100644
index 00000000..66ebbaa0
--- /dev/null
+++ b/addons/postgresql-cluster/15/plans/standard-20/create-instance-schema.json
@@ -0,0 +1,12 @@
+{
+  "$schema": "http://json-schema.org/draft-04/schema#",
+  "type": "object",
+  "properties": {
+    "imagePullPolicy": {
+      "type": "string",
+      "enum": ["Always", "IfNotPresent", "Never"],
+      "default": "IfNotPresent",
+      "title": "Image pull policy"
+    }
+  }
+}
\ No newline at end of file
diff --git a/addons/postgresql-cluster/15/plans/standard-20/meta.yaml b/addons/postgresql-cluster/15/plans/standard-20/meta.yaml
new file mode 100644
index 00000000..e9580d73
--- /dev/null
+++ b/addons/postgresql-cluster/15/plans/standard-20/meta.yaml
@@ -0,0 +1,6 @@
+name: "standard-20"
+id: edf8bdfe-b1dc-4f41-b042-801153794df7
+description: "Mysql Cluster standard-20 plan: Disk 20Gi ,vCPUs 2 , RAM 4G , DB MAX Connection 1000"
+displayName: "standard-20"
+bindable: true
+maximum_polling_duration: 1800
diff --git a/addons/postgresql-cluster/15/plans/standard-20/values.yaml b/addons/postgresql-cluster/15/plans/standard-20/values.yaml
new file mode 100644
index 00000000..f460d01f
--- /dev/null
+++ b/addons/postgresql-cluster/15/plans/standard-20/values.yaml
@@ -0,0 +1,77 @@
+## @param fullnameOverride String to fully override common.names.fullname template
+##
+fullnameOverride: hb-postgresql-cluster-standard-20
+
+postgresql:
+  config: |-
+    # Connectivity
+    max_connections = 1000
+    superuser_reserved_connections = 3
+
+    # Memory Settings
+    shared_buffers = '1024 MB'
+    work_mem = '32 MB'
+    maintenance_work_mem = '320 MB'
+    huge_pages = off
+    effective_cache_size = '3 GB'
+    effective_io_concurrency = 100 # concurrent IO only really activated if OS supports posix_fadvise function
+    random_page_cost = 1.25 # speed of random disk access relative to sequential access (1.0)
+
+    # Monitoring
+    track_io_timing=on        # measure exact block IO times
+    track_functions=pl        # track execution times of pl-language procedures if any
+
+    # Replication
+    max_wal_senders = 10
+    synchronous_commit = on
+
+    # Checkpointing: 
+    checkpoint_timeout  = '15 min' 
+    checkpoint_completion_target = 0.9
+    max_wal_size = '1024 MB'
+    min_wal_size = '512 MB'
+          
+
+    # WAL writing
+    wal_compression = on
+    wal_buffers = -1    # auto-tuned by Postgres till maximum of segment size (16MB by default)
+    wal_writer_delay = 200ms
+    wal_writer_flush_after = 1MB
+    wal_keep_size = '3650 MB'
+
+
+    # Background writer
+    bgwriter_delay = 200ms
+    bgwriter_lru_maxpages = 100
+    bgwriter_lru_multiplier = 2.0
+    bgwriter_flush_after = 0
+
+    # Parallel queries: 
+    max_worker_processes = 2
+    max_parallel_workers_per_gather = 1
+    max_parallel_maintenance_workers = 1
+    max_parallel_workers = 2
+    parallel_leader_participation = on
+
+    # Advanced features 
+    enable_partitionwise_join = on 
+    enable_partitionwise_aggregate = on
+    jit = on
+    max_slot_wal_keep_size = '1000 MB'
+    track_wal_io_timing = on
+    maintenance_io_concurrency = 100
+
+resources: 
+  # If you do want to specify resources, uncomment the following
+  # lines, adjust them as necessary, and remove the curly braces after 'resources:'.
+  limits:
+    cpu: 2000m
+    memory: 4Gi
+    # hugepages-2Mi: 4Mi
+  requests:
+    cpu: 2000m
+    memory: 4Gi
+
+persistentVolume:
+  enabled: true
+  size: 20G
diff --git a/addons/postgresql-cluster/15/plans/standard-200/bind.yaml b/addons/postgresql-cluster/15/plans/standard-200/bind.yaml
new file mode 100644
index 00000000..619e1429
--- /dev/null
+++ b/addons/postgresql-cluster/15/plans/standard-200/bind.yaml
@@ -0,0 +1,30 @@
+credential:
+{{- if (eq .Values.service.type "LoadBalancer") }}
+  - name: host
+    valueFrom:
+      serviceRef:
+        name: {{ template "common.names.fullname" . }}-master
+        jsonpath: '{.spec.clusterIPs[*]}'
+  - name: hostrepl
+    valueFrom:
+      serviceRef:
+        name: {{ template "common.names.fullname" . }}-repl
+        jsonpath: '{.spec.clusterIPs[*]}'
+  - name: database
+    valueFrom:
+      secretKeyRef:
+        name: {{ template "common.names.fullname" . }}
+        jsonpath: '{ .data.data-name }' 
+  - name: password
+    valueFrom:
+      secretKeyRef:
+        name: {{ template "common.names.fullname" . }}
+        jsonpath: '{ .data.data-password }' 
+  - name: username
+    valueFrom:
+      secretKeyRef:
+        name: {{ template "common.names.fullname" . }}
+        jsonpath: '{ .data.data-user }' 
+  - name: port
+    value: 5432
+{{- end }}
\ No newline at end of file
diff --git a/addons/postgresql-cluster/15/plans/standard-200/create-instance-schema.json b/addons/postgresql-cluster/15/plans/standard-200/create-instance-schema.json
new file mode 100644
index 00000000..66ebbaa0
--- /dev/null
+++ b/addons/postgresql-cluster/15/plans/standard-200/create-instance-schema.json
@@ -0,0 +1,12 @@
+{
+  "$schema": "http://json-schema.org/draft-04/schema#",
+  "type": "object",
+  "properties": {
+    "imagePullPolicy": {
+      "type": "string",
+      "enum": ["Always", "IfNotPresent", "Never"],
+      "default": "IfNotPresent",
+      "title": "Image pull policy"
+    }
+  }
+}
\ No newline at end of file
diff --git a/addons/postgresql-cluster/15/plans/standard-200/meta.yaml b/addons/postgresql-cluster/15/plans/standard-200/meta.yaml
new file mode 100644
index 00000000..89b4292b
--- /dev/null
+++ b/addons/postgresql-cluster/15/plans/standard-200/meta.yaml
@@ -0,0 +1,6 @@
+name: "standard-200"
+id: a2160ac2-6c35-4162-b8a2-8dfb2e01816f
+description: "Mysql Cluster standard-200 plan: Disk 200Gi ,vCPUs 8 , RAM 32G , DB MAX Connection 2000"
+displayName: "standard-200"
+bindable: true
+maximum_polling_duration: 1800
diff --git a/addons/postgresql-cluster/15/plans/standard-200/values.yaml b/addons/postgresql-cluster/15/plans/standard-200/values.yaml
new file mode 100644
index 00000000..9db720e6
--- /dev/null
+++ b/addons/postgresql-cluster/15/plans/standard-200/values.yaml
@@ -0,0 +1,75 @@
+## @param fullnameOverride String to fully override common.names.fullname template
+##
+fullnameOverride: hb-postgresql-cluster-standard-200
+
+postgresql:
+  config: |-
+    # Connectivity
+    max_connections = 2000
+    superuser_reserved_connections = 3
+
+    # Memory Settings
+    shared_buffers = '8192 MB'
+    work_mem = '32 MB'
+    maintenance_work_mem = '420 MB'
+    huge_pages = try   # NB! requires also activation of huge pages via kernel params, see here for more: https://www.postgresql.org/docs/current/static/kernel-resources.html#LINUX-HUGE-PAGES
+    effective_cache_size = '22 GB'
+    effective_io_concurrency = 100 # concurrent IO only really activated if OS supports posix_fadvise function
+    random_page_cost = 1.25 # speed of random disk access relative to sequential access (1.0)
+
+    # Monitoring
+    track_io_timing=on        # measure exact block IO times
+    track_functions=pl        # track execution times of pl-language procedures if any
+
+    # Replication
+    max_wal_senders = 10
+    synchronous_commit = on
+
+    # Checkpointing: 
+    checkpoint_timeout  = '15 min' 
+    checkpoint_completion_target = 0.9
+    max_wal_size = '1024 MB'
+    min_wal_size = '512 MB'
+
+    # WAL writing
+    wal_compression = on
+    wal_buffers = -1    # auto-tuned by Postgres till maximum of segment size (16MB by default)
+    wal_writer_delay = 200ms
+    wal_writer_flush_after = 1MB
+    wal_keep_size = '3650 MB'
+
+    # Background writer
+    bgwriter_delay = 200ms
+    bgwriter_lru_maxpages = 100
+    bgwriter_lru_multiplier = 2.0
+    bgwriter_flush_after = 0
+
+    # Parallel queries: 
+    max_worker_processes = 8
+    max_parallel_workers_per_gather = 4
+    max_parallel_maintenance_workers = 4
+    max_parallel_workers = 8
+    parallel_leader_participation = on
+
+    # Advanced features 
+    enable_partitionwise_join = on 
+    enable_partitionwise_aggregate = on
+    jit = on
+    max_slot_wal_keep_size = '1000 MB'
+    track_wal_io_timing = on
+    maintenance_io_concurrency = 100
+
+resources: 
+  # If you do want to specify resources, uncomment the following
+  # lines, adjust them as necessary, and remove the curly braces after 'resources:'.
+  limits:
+    cpu: 8000m
+    memory: 32Gi
+    # hugepages-2Mi: 4Mi
+  requests:
+    cpu: 8000m
+    memory: 32Gi
+
+persistentVolume:
+  enabled: true
+  size: 200G
diff --git a/addons/postgresql-cluster/15/plans/standard-400/bind.yaml b/addons/postgresql-cluster/15/plans/standard-400/bind.yaml
new file mode 100644
index 00000000..619e1429
--- /dev/null
+++ b/addons/postgresql-cluster/15/plans/standard-400/bind.yaml
@@ -0,0 +1,30 @@
+credential:
+{{- if (eq .Values.service.type "LoadBalancer") }}
+  - name: host
+    valueFrom:
+      serviceRef:
+        name: {{ template "common.names.fullname" . }}-master
+        jsonpath: '{.spec.clusterIPs[*]}'
+  - name: hostrepl
+    valueFrom:
+      serviceRef:
+        name: {{ template "common.names.fullname" . }}-repl
+        jsonpath: '{.spec.clusterIPs[*]}'
+  - name: database
+    valueFrom:
+      secretKeyRef:
+        name: {{ template "common.names.fullname" . }}
+        jsonpath: '{ .data.data-name }' 
+  - name: password
+    valueFrom:
+      secretKeyRef:
+        name: {{ template "common.names.fullname" . }}
+        jsonpath: '{ .data.data-password }' 
+  - name: username
+    valueFrom:
+      secretKeyRef:
+        name: {{ template "common.names.fullname" . }}
+        jsonpath: '{ .data.data-user }' 
+  - name: port
+    value: 5432
+{{- end }}
\ No newline at end of file
diff --git a/addons/postgresql-cluster/15/plans/standard-400/create-instance-schema.json b/addons/postgresql-cluster/15/plans/standard-400/create-instance-schema.json
new file mode 100644
index 00000000..66ebbaa0
--- /dev/null
+++ b/addons/postgresql-cluster/15/plans/standard-400/create-instance-schema.json
@@ -0,0 +1,12 @@
+{
+  "$schema": "http://json-schema.org/draft-04/schema#",
+  "type": "object",
+  "properties": {
+    "imagePullPolicy": {
+      "type": "string",
+      "enum": ["Always", "IfNotPresent", "Never"],
+      "default": "IfNotPresent",
+      "title": "Image pull policy"
+    }
+  }
+}
\ No newline at end of file
diff --git a/addons/postgresql-cluster/15/plans/standard-400/meta.yaml b/addons/postgresql-cluster/15/plans/standard-400/meta.yaml
new file mode 100644
index 00000000..b9472699
--- /dev/null
+++ b/addons/postgresql-cluster/15/plans/standard-400/meta.yaml
@@ -0,0 +1,6 @@
+name: "standard-400"
+id: 16bfd3a8-1080-4731-93d0-bd90e6ba6dad
+description: "Mysql Cluster standard-400 plan: Disk 400Gi ,vCPUs 16 , RAM 64G , DB MAX Connection 2000"
+displayName: "standard-400"
+bindable: true
+maximum_polling_duration: 1800
diff --git a/addons/postgresql-cluster/15/plans/standard-400/values.yaml b/addons/postgresql-cluster/15/plans/standard-400/values.yaml
new file mode 100644
index 00000000..b1afad1d
--- /dev/null
+++ b/addons/postgresql-cluster/15/plans/standard-400/values.yaml
@@ -0,0 +1,75 @@
+## @param fullnameOverride String to fully override common.names.fullname template
+##
+fullnameOverride: hb-postgresql-cluster-standard-400
+
+postgresql:
+  config: |-
+    # Connectivity
+    max_connections = 2000
+    superuser_reserved_connections = 3
+
+    # Memory Settings
+    shared_buffers = '16384 MB'
+    work_mem = '32 MB'
+    maintenance_work_mem = '520 MB'
+    huge_pages = try   # NB! requires also activation of huge pages via kernel params, see here for more: https://www.postgresql.org/docs/current/static/kernel-resources.html#LINUX-HUGE-PAGES
+    effective_cache_size = '45 GB'
+    effective_io_concurrency = 100 # concurrent IO only really activated if OS supports posix_fadvise function
+    random_page_cost = 1.25 # speed of random disk access relative to sequential access (1.0)
+
+    # Monitoring
+    track_io_timing=on        # measure exact block IO times
+    track_functions=pl        # track execution times of pl-language procedures if any
+
+    # Replication
+    max_wal_senders = 10
+    synchronous_commit = on
+
+    # Checkpointing: 
+    checkpoint_timeout  = '15 min' 
+    checkpoint_completion_target = 0.9
+    max_wal_size = '1024 MB'
+    min_wal_size = '512 MB'
+
+    # WAL writing
+    wal_compression = on
+    wal_buffers = -1    # auto-tuned by Postgres till maximum of segment size (16MB by default)
+    wal_writer_delay = 200ms
+    wal_writer_flush_after = 1MB
+    wal_keep_size = '3650 MB'
+
+    # Background writer
+    bgwriter_delay = 200ms
+    bgwriter_lru_maxpages = 100
+    bgwriter_lru_multiplier = 2.0
+    bgwriter_flush_after = 0
+
+    # Parallel queries: 
+    max_worker_processes = 16
+    max_parallel_workers_per_gather = 8
+    max_parallel_maintenance_workers = 8
+    max_parallel_workers = 16
+    parallel_leader_participation = on
+
+    # Advanced features 
+    enable_partitionwise_join = on 
+    enable_partitionwise_aggregate = on
+    jit = on
+    max_slot_wal_keep_size = '1000 MB'
+    track_wal_io_timing = on
+    maintenance_io_concurrency = 100
+
+resources: 
+  # If you do want to specify resources, uncomment the following
+  # lines, adjust them as necessary, and remove the curly braces after 'resources:'.
+  limits:
+    cpu: 16000m
+    memory: 64Gi
+    # hugepages-2Mi: 4Mi
+  requests:
+    cpu: 16000m
+    memory: 64Gi
+
+persistentVolume:
+  enabled: true
+  size: 400G
diff --git a/addons/postgresql-cluster/15/plans/standard-50/bind.yaml b/addons/postgresql-cluster/15/plans/standard-50/bind.yaml
new file mode 100644
index 00000000..619e1429
--- /dev/null
+++ b/addons/postgresql-cluster/15/plans/standard-50/bind.yaml
@@ -0,0 +1,30 @@
+credential:
+{{- if (eq .Values.service.type "LoadBalancer") }}
+  - name: host
+    valueFrom:
+      serviceRef:
+        name: {{ template "common.names.fullname" . }}-master
+        jsonpath: '{.spec.clusterIPs[*]}'
+  - name: hostrepl
+    valueFrom:
+      serviceRef:
+        name: {{ template "common.names.fullname" . }}-repl
+        jsonpath: '{.spec.clusterIPs[*]}'
+  - name: database
+    valueFrom:
+      secretKeyRef:
+        name: {{ template "common.names.fullname" . }}
+        jsonpath: '{ .data.data-name }' 
+  - name: password
+    valueFrom:
+      secretKeyRef:
+        name: {{ template "common.names.fullname" . }}
+        jsonpath: '{ .data.data-password }' 
+  - name: username
+    valueFrom:
+      secretKeyRef:
+        name: {{ template "common.names.fullname" . }}
+        jsonpath: '{ .data.data-user }' 
+  - name: port
+    value: 5432
+{{- end }}
\ No newline at end of file
diff --git a/addons/postgresql-cluster/15/plans/standard-50/create-instance-schema.json b/addons/postgresql-cluster/15/plans/standard-50/create-instance-schema.json
new file mode 100644
index 00000000..66ebbaa0
--- /dev/null
+++ b/addons/postgresql-cluster/15/plans/standard-50/create-instance-schema.json
@@ -0,0 +1,12 @@
+{
+  "$schema": "http://json-schema.org/draft-04/schema#",
+  "type": "object",
+  "properties": {
+    "imagePullPolicy": {
+      "type": "string",
+      "enum": ["Always", "IfNotPresent", "Never"],
+      "default": "IfNotPresent",
+      "title": "Image pull policy"
+    }
+  }
+}
\ No newline at end of file
diff --git a/addons/postgresql-cluster/15/plans/standard-50/meta.yaml b/addons/postgresql-cluster/15/plans/standard-50/meta.yaml
new file mode 100644
index 00000000..9fbb08f1
--- /dev/null
+++ b/addons/postgresql-cluster/15/plans/standard-50/meta.yaml
@@ -0,0 +1,6 @@
+name: "standard-50"
+id: 0542f411-4e7b-46af-966c-c9989e54873c
+description: "Mysql Cluster standard-50 plan: Disk 50Gi ,vCPUs 2 , RAM 8G , DB MAX Connection 2000"
+displayName: "standard-50"
+bindable: true
+maximum_polling_duration: 1800
diff --git a/addons/postgresql-cluster/15/plans/standard-50/values.yaml b/addons/postgresql-cluster/15/plans/standard-50/values.yaml
new file mode 100644
index 00000000..fbf8db1f
--- /dev/null
+++ b/addons/postgresql-cluster/15/plans/standard-50/values.yaml
@@ -0,0 +1,76 @@
+## @param fullnameOverride String to fully override common.names.fullname template
+##
+fullnameOverride: hb-postgresql-cluster-standard-50
+
+postgresql:
+  config: |-
+    # Connectivity
+    max_connections = 1000
+    superuser_reserved_connections = 3
+
+    # Memory Settings
+    shared_buffers = '2048 MB'
+    work_mem = '32 MB'
+    maintenance_work_mem = '320 MB'
+    huge_pages = off
+    effective_cache_size = '6 GB'
+    effective_io_concurrency = 100 # concurrent IO only really activated if OS supports posix_fadvise function
+    random_page_cost = 1.25 # speed of random disk access relative to sequential access (1.0)
+
+    # Monitoring
+    track_io_timing=on        # measure exact block IO times
+    track_functions=pl        # track execution times of pl-language procedures if any
+
+    # Replication
+    max_wal_senders = 10
+    synchronous_commit = on
+
+    # Checkpointing: 
+    checkpoint_timeout  = '15 min' 
+    checkpoint_completion_target = 0.9
+    max_wal_size = '1024 MB'
+    min_wal_size = '512 MB'
+
+    # WAL writing
+    wal_compression = on
+    wal_buffers = -1    # auto-tuned by Postgres till maximum of segment size (16MB by default)
+    wal_writer_delay = 200ms
+    wal_writer_flush_after = 1MB
+    wal_keep_size = '3650 MB'
+
+
+    # Background writer
+    bgwriter_delay = 200ms
+    bgwriter_lru_maxpages = 100
+    bgwriter_lru_multiplier = 2.0
+    bgwriter_flush_after = 0
+
+    # Parallel queries: 
+    max_worker_processes = 2
+    max_parallel_workers_per_gather = 1
+    max_parallel_maintenance_workers = 1
+    max_parallel_workers = 2
+    parallel_leader_participation = on
+
+    # Advanced features 
+    enable_partitionwise_join = on 
+    enable_partitionwise_aggregate = on
+    jit = on
+    max_slot_wal_keep_size = '1000 MB'
+    track_wal_io_timing = on
+    maintenance_io_concurrency = 100
+
+resources: 
+  # If you do want to specify resources, uncomment the following
+  # lines, adjust them as necessary, and remove the curly braces after 'resources:'.
+  limits:
+    cpu: 2000m
+    memory: 8Gi
+    # hugepages-2Mi: 4Mi
+  requests:
+    cpu: 2000m
+    memory: 8Gi
+
+persistentVolume:
+  enabled: true
+  size: 50G
diff --git a/addons/postgresql-cluster/15/plans/standard-800/bind.yaml b/addons/postgresql-cluster/15/plans/standard-800/bind.yaml
new file mode 100644
index 00000000..619e1429
--- /dev/null
+++ b/addons/postgresql-cluster/15/plans/standard-800/bind.yaml
@@ -0,0 +1,30 @@
+credential:
+{{- if (eq .Values.service.type "LoadBalancer") }}
+  - name: host
+    valueFrom:
+      serviceRef:
+        name: {{ template "common.names.fullname" . }}-master
+        jsonpath: '{.spec.clusterIPs[*]}'
+  - name: hostrepl
+    valueFrom:
+      serviceRef:
+        name: {{ template "common.names.fullname" . }}-repl
+        jsonpath: '{.spec.clusterIPs[*]}'
+  - name: database
+    valueFrom:
+      secretKeyRef:
+        name: {{ template "common.names.fullname" . }}
+        jsonpath: '{ .data.data-name }' 
+  - name: password
+    valueFrom:
+      secretKeyRef:
+        name: {{ template "common.names.fullname" . }}
+        jsonpath: '{ .data.data-password }' 
+  - name: username
+    valueFrom:
+      secretKeyRef:
+        name: {{ template "common.names.fullname" . }}
+        jsonpath: '{ .data.data-user }' 
+  - name: port
+    value: 5432
+{{- end }}
\ No newline at end of file
diff --git a/addons/postgresql-cluster/15/plans/standard-800/create-instance-schema.json b/addons/postgresql-cluster/15/plans/standard-800/create-instance-schema.json
new file mode 100644
index 00000000..66ebbaa0
--- /dev/null
+++ b/addons/postgresql-cluster/15/plans/standard-800/create-instance-schema.json
@@ -0,0 +1,12 @@
+{
+  "$schema": "http://json-schema.org/draft-04/schema#",
+  "type": "object",
+  "properties": {
+    "imagePullPolicy": {
+      "type": "string",
+      "enum": ["Always", "IfNotPresent", "Never"],
+      "default": "IfNotPresent",
+      "title": "Image pull policy"
+    }
+  }
+}
\ No newline at end of file
diff --git a/addons/postgresql-cluster/15/plans/standard-800/meta.yaml b/addons/postgresql-cluster/15/plans/standard-800/meta.yaml
new file mode 100644
index 00000000..1748ac9e
--- /dev/null
+++ b/addons/postgresql-cluster/15/plans/standard-800/meta.yaml
@@ -0,0 +1,6 @@
+name: "standard-800"
+id: 60f37e20-e69e-4f6f-9cce-e43caec34963
+description: "Mysql Cluster standard-800 plan: Disk 800Gi ,vCPUs 32 , RAM 128G , DB MAX Connection 2000"
+displayName: "standard-800"
+bindable: true
+maximum_polling_duration: 1800
diff --git a/addons/postgresql-cluster/15/plans/standard-800/values.yaml b/addons/postgresql-cluster/15/plans/standard-800/values.yaml
new file mode 100644
index 00000000..3e88193a
--- /dev/null
+++ b/addons/postgresql-cluster/15/plans/standard-800/values.yaml
@@ -0,0 +1,75 @@
+## @param fullnameOverride String to fully override common.names.fullname template
+##
+fullnameOverride: hb-postgresql-cluster-standard-800
+
+postgresql:
+  config: |-
+    # Connectivity
+    max_connections = 2000
+    superuser_reserved_connections = 3
+
+    # Memory Settings
+    shared_buffers = '32768 MB'
+    work_mem = '64 MB'
+    maintenance_work_mem = '720 MB'
+    huge_pages = try   # NB! requires also activation of huge pages via kernel params, see here for more: https://www.postgresql.org/docs/current/static/kernel-resources.html#LINUX-HUGE-PAGES
+    effective_cache_size = '90 GB'
+    effective_io_concurrency = 100 # concurrent IO only really activated if OS supports posix_fadvise function
+    random_page_cost = 1.25 # speed of random disk access relative to sequential access (1.0)
+
+    # Monitoring
+    track_io_timing=on        # measure exact block IO times
+    track_functions=pl        # track execution times of pl-language procedures if any
+
+    # Replication
+    max_wal_senders = 10
+    synchronous_commit = on
+
+    # Checkpointing: 
+    checkpoint_timeout  = '15 min' 
+    checkpoint_completion_target = 0.9
+    max_wal_size = '10240 MB'
+    min_wal_size = '5120 MB'
+
+    # WAL writing
+    wal_compression = on
+    wal_buffers = -1    # auto-tuned by Postgres till maximum of segment size (16MB by default)
+    wal_writer_delay = 200ms
+    wal_writer_flush_after = 1MB
+    wal_keep_size = '22080 MB'
+
+    # Background writer
+    bgwriter_delay = 200ms
+    bgwriter_lru_maxpages = 100
+    bgwriter_lru_multiplier = 2.0
+    bgwriter_flush_after = 0
+
+    # Parallel queries: 
+    max_worker_processes = 32
+    max_parallel_workers_per_gather = 16
+    max_parallel_maintenance_workers = 16
+    max_parallel_workers = 32
+    parallel_leader_participation = on
+
+    # Advanced features 
+    enable_partitionwise_join = on 
+    enable_partitionwise_aggregate = on
+    jit = on
+    max_slot_wal_keep_size = '1000 MB'
+    track_wal_io_timing = on
+    maintenance_io_concurrency = 100
+
+resources: 
+  # If you do want to specify resources, uncomment the following
+  # lines, adjust them as necessary, and remove the curly braces after 'resources:'.
+  limits:
+    cpu: 32000m
+    memory: 128Gi
+    # hugepages-2Mi: 4Mi
+  requests:
+    cpu: 32000m
+    memory: 128Gi
+
+persistentVolume:
+  enabled: true
+  size: 800G
