diff --git a/addons/mysql-cluster/8.0/chart/mysql-cluster/templates/router/statefulset.yaml b/addons/mysql-cluster/8.0/chart/mysql-cluster/templates/router/statefulset.yaml
index ed72d7bb..1e8064e6 100644
--- a/addons/mysql-cluster/8.0/chart/mysql-cluster/templates/router/statefulset.yaml
+++ b/addons/mysql-cluster/8.0/chart/mysql-cluster/templates/router/statefulset.yaml
@@ -172,8 +172,10 @@ spec:
               mountPath: /opt/drycc/mysql/conf
 
           ports:
-            - name: router
+            - name: routerrw
               containerPort: 6446
+            - name: routerro
+              containerPort: 6447
           {{- if not .Values.diagnosticMode.enabled }}
           {{- if .Values.router.customLivenessProbe }}
           livenessProbe: {{- include "common.tplvalues.render" (dict "value" .Values.router.customLivenessProbe "context" $) | nindent 12 }}
diff --git a/addons/mysql-cluster/8.0/chart/mysql-cluster/templates/router/svc.yaml b/addons/mysql-cluster/8.0/chart/mysql-cluster/templates/router/svc.yaml
index 67e76a69..5538f5f1 100644
--- a/addons/mysql-cluster/8.0/chart/mysql-cluster/templates/router/svc.yaml
+++ b/addons/mysql-cluster/8.0/chart/mysql-cluster/templates/router/svc.yaml
@@ -41,10 +41,19 @@ spec:
   loadBalancerIP: {{ .Values.router.service.loadBalancerIP }}
   {{- end }}
   ports:
-    - name: router 
-      port: {{ .Values.router.service.ports.router }}
+    - name: routerrw 
+      port: {{ .Values.router.service.portrw }}
       protocol: TCP
-      targetPort: router
+      targetPort: routerrw
+      {{- if (and (or (eq .Values.router.service.type "NodePort") (eq .Values.router.service.type "LoadBalancer")) .Values.router.service.nodePorts.mysql) }}
+      nodePort: {{ .Values.router.service.nodePorts.mysql }}
+      {{- else if eq .Values.router.service.type "ClusterIP" }}
+      nodePort: null
+      {{- end }}
+    - name: routerro
+      port: {{ .Values.router.service.portro}}
+      protocol: TCP
+      targetPort: routerro
       {{- if (and (or (eq .Values.router.service.type "NodePort") (eq .Values.router.service.type "LoadBalancer")) .Values.router.service.nodePorts.mysql) }}
       nodePort: {{ .Values.router.service.nodePorts.mysql }}
       {{- else if eq .Values.router.service.type "ClusterIP" }}
diff --git a/addons/mysql-cluster/8.0/chart/mysql-cluster/templates/secrets.yaml b/addons/mysql-cluster/8.0/chart/mysql-cluster/templates/secrets.yaml
index dcfb72b6..6691920d 100644
--- a/addons/mysql-cluster/8.0/chart/mysql-cluster/templates/secrets.yaml
+++ b/addons/mysql-cluster/8.0/chart/mysql-cluster/templates/secrets.yaml
@@ -4,7 +4,9 @@ SPDX-License-Identifier: APACHE-2.0
 */}}
 
 {{- $host := include "mysql.router.fullname" . }}
-{{- $port := print .Values.router.service.ports.router }}
+{{- $portrw := print .Values.router.service.portrw }}
+{{- $port := print .Values.router.service.portrw }}
+{{- $portro := print .Values.router.service.portro }}
 {{- $rootPassword := include "common.secrets.passwords.manage" (dict "secret" (include "mysql.secretName" .) "key" "mysql-root-password" "length" 10 "providedValues" (list "auth.rootPassword") "context" $) | trimAll "\"" | b64dec }}
 {{- $password := include "common.secrets.passwords.manage" (dict "secret" (include "mysql.secretName" .) "key" "mysql-password" "length" 10 "providedValues" (list "auth.password") "context" $) | trimAll "\"" | b64dec }}
 {{- if eq (include "mysql.createSecret" .) "true" }}
@@ -72,7 +74,8 @@ data:
   provider: {{ print "drycc" | b64enc | quote }}
   type: {{ print "mysql" | b64enc | quote }}
   host: {{ print $host | b64enc | quote }}
-  port: {{ print $port | b64enc | quote }}
+  portrw: {{ print $portrw | b64enc | quote }}
+  portro: {{ print $portro | b64enc | quote }}
   username: {{ print .Values.auth.username | b64enc | quote }}
   {{- if $database }}
   database: {{ print $database | b64enc | quote }}
diff --git a/addons/mysql-cluster/8.0/chart/mysql-cluster/values.yaml b/addons/mysql-cluster/8.0/chart/mysql-cluster/values.yaml
index de2b2d74..cdbfd0a3 100644
--- a/addons/mysql-cluster/8.0/chart/mysql-cluster/values.yaml
+++ b/addons/mysql-cluster/8.0/chart/mysql-cluster/values.yaml
@@ -214,7 +214,7 @@ primary:
   configuration: |-
     [mysqld]
     # server
-    #default_authentication_plugin=mysql_native_password
+    max_connections=500
     default_authentication_plugin=caching_sha2_password
     skip-name-resolve
     relay-log=relay-log
@@ -857,8 +857,8 @@ router:
     type: LoadBalancer
     ## @param secondary.service.ports.mysql MySQL secondary Kubernetes service port
     ##
-    ports:
-      router: 6446
+    portrw: 3306
+    portro: 3307
     ## @param secondary.service.nodePorts.mysql MySQL secondary Kubernetes service node port
     ## ref: https://kubernetes.io/docs/concepts/services-networking/service/#type-nodeport
     ##
@@ -1012,8 +1012,8 @@ volumePermissions:
   ##
   image:
     registry: registry.drycc.cc
-    repository: drycc/os-shell
-    tag: debian-12
+    repository: drycc/base
+    tag: bookworm
     digest: ""
     pullPolicy: IfNotPresent 
     ## Optionally specify an array of imagePullSecrets.
diff --git a/addons/prometheus/2/chart/prometheus/Chart.yaml b/addons/prometheus/2/chart/prometheus/Chart.yaml
new file mode 100644
index 00000000..5023d782
--- /dev/null
+++ b/addons/prometheus/2/chart/prometheus/Chart.yaml
@@ -0,0 +1,29 @@
+# Copyright VMware, Inc.
+# SPDX-License-Identifier: APACHE-2.0
+
+annotations:
+  category: Analytics
+  licenses: Apache-2.0
+apiVersion: v2
+appVersion: 2.47.0
+dependencies:
+  - name: common
+    repository: oci://registry.drycc.cc/charts
+    tags:
+      - drycc-common
+    version: ~1.1.2
+description: Prometheus is an open source monitoring and alerting system. It enables sysadmins to monitor their infrastructures by collecting metrics from configured targets at given intervals.
+home: https://github.com/prometheus/prometheus
+icon: https://drycc.com/assets/stacks/prometheus/img/prometheus-stack-220x234.png
+keywords:
+  - prometheus
+  - monitoring
+maintainers:
+  - name: Drycc
+    url: https://github.com/drycc/charts
+name: prometheus
+sources:
+  - https://github.com/drycc/containers/tree/main/drycc/prometheus
+  - https://github.com/prometheus/prometheus
+  - https://github.com/prometheus-community/helm-charts
+version: 0.2.3
diff --git a/addons/prometheus/2/chart/prometheus/templates/NOTES.txt b/addons/prometheus/2/chart/prometheus/templates/NOTES.txt
new file mode 100644
index 00000000..c6a8f52c
--- /dev/null
+++ b/addons/prometheus/2/chart/prometheus/templates/NOTES.txt
@@ -0,0 +1,123 @@
+CHART NAME: {{ .Chart.Name  }}
+CHART VERSION: {{ .Chart.Version  }}
+APP VERSION: {{ .Chart.AppVersion  }}
+
+** Please be patient while the chart is being deployed **
+
+{{- if .Values.diagnosticMode.enabled }}
+The chart has been deployed in diagnostic mode. All probes have been disabled and the command has been overwritten with:
+
+  command: {{- include "common.tplvalues.render" (dict "value" .Values.diagnosticMode.command "context" $) | nindent 4 }}
+  args: {{- include "common.tplvalues.render" (dict "value" .Values.diagnosticMode.args "context" $) | nindent 4 }}
+
+Get the list of pods by executing:
+
+  kubectl get pods --namespace {{ include "common.names.namespace" . | quote }} -l app.kubernetes.io/instance={{ .Release.Name }}
+
+Access the pod you want to debug by executing
+
+  kubectl exec --namespace {{ include "common.names.namespace" . | quote }} -ti <NAME OF THE POD> -- bash
+
+In order to replicate the container startup scripts execute this command:
+
+    /opt/drycc/prometheus/bin/prometheus --config.file=/opt/drycc/prometheus/conf/prometheus.yml --storage.tsdb.path=/opt/drycc/prometheus/data --web.console.libraries=/opt/drycc/prometheus/conf/console_libraries --web.console.templates=/opt/drycc/prometheus/conf/consoles
+
+{{- else }}
+
+Prometheus can be accessed via port "{{ .Values.server.service.ports.http }}" on the following DNS name from within your cluster:
+
+    {{ template "common.names.fullname" . }}.{{ include "common.names.namespace" . }}.svc.cluster.local
+
+To access Prometheus from outside the cluster execute the following commands:
+
+{{- if .Values.server.ingress.enabled }}
+
+  You should be able to access your new Prometheus installation through
+
+  {{ ternary "https" "http" .Values.server.ingress.tls }}://{{ .Values.server.ingress.hostname }}
+
+{{- else if contains "LoadBalancer" .Values.server.service.type }}
+
+  NOTE: It may take a few minutes for the LoadBalancer IP to be available.
+        Watch the status with: 'kubectl get svc --namespace {{ include "common.names.namespace" . }} -w {{ template "common.names.fullname" . }}'
+
+{{- $port:=.Values.server.service.ports.http | toString }}
+
+    export SERVICE_IP=$(kubectl get svc --namespace {{ include "common.names.namespace" . }} {{ template "common.names.fullname" . }} --template "{{ "{{ range (index .status.loadBalancer.ingress 0) }}{{ . }}{{ end }}" }}")
+    echo "Prometheus URL: http://$SERVICE_IP{{- if ne $port "80" }}:{{ .Values.server.service.ports.http }}{{ end }}/"
+
+{{- else if contains "ClusterIP"  .Values.server.service.type }}
+
+    echo "Prometheus URL: http://127.0.0.1:9090/"
+    kubectl port-forward --namespace {{ include "common.names.namespace" . }} svc/{{ template "common.names.fullname" . }} 9090:{{ .Values.server.service.ports.http }}
+
+{{- else if contains "NodePort" .Values.server.service.type }}
+
+    export NODE_PORT=$(kubectl get --namespace {{ include "common.names.namespace" . }} -o jsonpath="{.spec.ports[0].nodePort}" services {{ template "common.names.fullname" . }})
+    export NODE_IP=$(kubectl get nodes --namespace {{ include "common.names.namespace" . }} -o jsonpath="{.items[0].status.addresses[0].address}")
+    echo "Prometheus URL: http://$NODE_IP:$NODE_PORT/"
+
+{{- end }}
+
+{{- if and .Values.server.thanos.create }}
+
+Thanos Sidecar can be accessed via port "{{ .Values.server.thanos.service.ports.grpc }}" on the following DNS name from within your cluster:
+
+    {{ template "prometheus.thanos-sidecar.fullname" . }}.{{ include "common.names.namespace" . }}.svc.cluster.local
+
+{{- if .Values.server.thanos.ingress.enabled }}
+
+  You should be able to access your new Thanos Sidecar installation through
+
+  {{ ternary "https" "http" .Values.server.thanos.ingress.tls }}://{{ .Values.server.thanos.ingress.hostname }}
+
+{{- end }}
+{{- end }}
+{{- end }}
+
+{{- if .Values.alertmanager.enabled }}
+
+Watch the Alertmanager StatefulSet status using the command:
+
+    kubectl get sts -w --namespace {{ include "common.names.namespace" . }} -l app.kubernetes.io/name={{ template "prometheus.alertmanager.fullname" . }},app.kubernetes.io/instance={{ .Release.Name }}
+
+Alertmanager can be accessed via port "{{ .Values.alertmanager.service.ports.http }}" on the following DNS name from within your cluster:
+
+    {{ template "prometheus.alertmanager.fullname" . }}.{{ include "common.names.namespace" . }}.svc.cluster.local
+
+To access Alertmanager from outside the cluster execute the following commands:
+
+{{- if .Values.alertmanager.ingress.enabled }}
+
+  You should be able to access your new Prometheus installation through
+
+  {{ ternary "https" "http" .Values.alertmanager.ingress.tls }}://{{ .Values.alertmanager.ingress.hostname }}
+
+{{- else if contains "LoadBalancer" .Values.alertmanager.service.type }}
+
+  NOTE: It may take a few minutes for the LoadBalancer IP to be available.
+        Watch the status with: 'kubectl get svc --namespace {{ include "common.names.namespace" . }} -w {{ template "prometheus.alertmanager.fullname" . }}'
+
+{{- $port:=.Values.alertmanager.service.ports.http | toString }}
+
+    export SERVICE_IP=$(kubectl get svc --namespace {{ include "common.names.namespace" . }} {{ template "prometheus.alertmanager.fullname" . }} --template "{{ "{{ range (index .status.loadBalancer.ingress 0) }}{{ . }}{{ end }}" }}")
+    echo "Alertmanager URL: http://$SERVICE_IP{{- if ne $port "80" }}:{{ .Values.alertmanager.service.ports.http }}{{ end }}/"
+
+{{- else if contains "ClusterIP"  .Values.alertmanager.service.type }}
+
+    echo "Alertmanager URL: http://127.0.0.1:9093/"
+    kubectl port-forward --namespace {{ include "common.names.namespace" . }} svc/{{ template "prometheus.alertmanager.fullname" . }} 9093:{{ .Values.alertmanager.service.ports.http }}
+
+{{- else if contains "NodePort" .Values.alertmanager.service.type }}
+
+    export NODE_PORT=$(kubectl get --namespace {{ include "common.names.namespace" . }} -o jsonpath="{.spec.ports[0].nodePort}" services {{ template "prometheus.alertmanager.fullname" . }})
+    export NODE_IP=$(kubectl get nodes --namespace {{ include "common.names.namespace" . }} -o jsonpath="{.items[0].status.addresses[0].address}")
+    echo "Alertmanager URL: http://$NODE_IP:$NODE_PORT/"
+
+{{- end }}
+{{- end }}
+
+{{- include "common.warnings.rollingTag" .Values.server.image }}
+{{- include "common.warnings.rollingTag" .Values.server.thanos.image }}
+{{- include "common.warnings.rollingTag" .Values.volumePermissions.image }}
+{{- include "prometheus.server.validateValues" . }}
diff --git a/addons/prometheus/2/chart/prometheus/templates/_helpers.tpl b/addons/prometheus/2/chart/prometheus/templates/_helpers.tpl
new file mode 100644
index 00000000..9136398b
--- /dev/null
+++ b/addons/prometheus/2/chart/prometheus/templates/_helpers.tpl
@@ -0,0 +1,156 @@
+{{/*
+Copyright VMware, Inc.
+SPDX-License-Identifier: APACHE-2.0
+*/}}
+
+{{/*
+Return the proper image name
+*/}}
+{{- define "prometheus.server.image" -}}
+{{ include "common.images.image" (dict "imageRoot" .Values.server.image "global" .Values.global) }}
+{{- end -}}
+
+{{/*
+Return the proper image name
+*/}}
+{{- define "prometheus.alertmanager.image" -}}
+{{ include "common.images.image" (dict "imageRoot" .Values.alertmanager.image "global" .Values.global) }}
+{{- end -}}
+
+{{/*
+Return the proper image name
+*/}}
+{{- define "prometheus.server.thanosImage" -}}
+{{ include "common.images.image" (dict "imageRoot" .Values.server.thanos.image "global" .Values.global) }}
+{{- end -}}
+
+{{/*
+Return Prometheus server name
+*/}}
+{{- define "prometheus.server.fullname" -}}
+    {{- printf "%s-server" (include "common.names.fullname" .) | trunc 63 | trimSuffix "-"  }}
+{{- end -}}
+
+{{/*
+Return Prometheus server name
+*/}}
+{{- define "prometheus.server.fullname.namespace" -}}
+    {{- printf "%s-server" (include "common.names.fullname.namespace" .)  | trunc 63 | trimSuffix "-"  }}
+{{- end -}}
+
+{{/*
+Return the proper image name (for the init container volume-permissions image)
+*/}}
+{{- define "prometheus.volumePermissions.image" -}}
+{{- include "common.images.image" ( dict "imageRoot" .Values.volumePermissions.image "global" .Values.global ) -}}
+{{- end -}}
+
+{{/*
+Return the proper Docker Image Registry Secret Names
+*/}}
+{{- define "prometheus.imagePullSecrets" -}}
+{{- include "common.images.pullSecrets" (dict "images" (list .Values.server.image .Values.volumePermissions.image .Values.server.thanos.image .Values.alertmanager.image) "global" .Values.global) -}}
+{{- end -}}
+
+{{/*
+Create the name of the service account to use
+*/}}
+{{- define "prometheus.server.serviceAccountName" -}}
+{{- if .Values.server.serviceAccount.create -}}
+    {{ default (include "prometheus.server.fullname" .) .Values.server.serviceAccount.name }}
+{{- else -}}
+    {{ default "default" .Values.server.serviceAccount.name }}
+{{- end -}}
+{{- end -}}
+
+{{/*
+Compile all warnings into a single message.
+*/}}
+{{- define "prometheus.server.validateValues" -}}
+{{- $messages := list -}}
+{{- $messages := append $messages (include "prometheus.server.validateValues.thanosObjectStorageConfig" .) -}}
+{{- $messages := without $messages "" -}}
+{{- $message := join "\n" $messages -}}
+
+{{- if $message -}}
+{{-   printf "\nVALUES VALIDATION:\n%s" $message -}}
+{{- end -}}
+{{- end -}}
+
+{{/*
+Validate thanos objectStorageConfig.
+*/}}
+{{- define "prometheus.server.validateValues.thanosObjectStorageConfig" -}}
+{{- if (and .Values.server.thanos.objectStorageConfig (or (not (hasKey .Values.server.thanos.objectStorageConfig "secretKey")) (not (hasKey .Values.server.thanos.objectStorageConfig "secretName")) ))}}
+    {{- printf "'server.thanos.objectStorageConfig.secretKey' and 'server.thanos.objectStorageConfi.secretName' are mandatory" }}
+{{- end }}
+{{- end }}
+
+{{/*
+Get the Prometheus configuration configmap.
+*/}}
+{{- define "prometheus.server.configmapName" -}}
+{{- if .Values.server.existingConfigmap -}}
+    {{- include "common.tplvalues.render" (dict "value" .Values.server.existingConfigmap "context" .) -}}
+{{- else }}
+    {{- include "prometheus.server.fullname" . -}}
+{{- end -}}
+{{- end -}}
+
+{{/*
+Get the Prometheus configuration configmap key.
+*/}}
+{{- define "prometheus.server.configmapKey" -}}
+{{- if .Values.server.existingConfigmapKey -}}
+    {{- include "common.tplvalues.render" (dict "value" .Values.server.existingConfigmapKey "context" .) -}}
+{{- else }}
+    {{- printf "prometheus.yaml" -}}
+{{- end -}}
+{{- end -}}
+
+{{/*
+Get the Prometheus Alertmanager configuration configmap key.
+*/}}
+{{- define "prometheus.alertmanager.configmapKey" -}}
+{{- if .Values.alertmanager.existingConfigmapKey -}}
+    {{- include "common.tplvalues.render" (dict "value" .Values.alertmanager.existingConfigmapKey "context" .) -}}
+{{- else }}
+    {{- printf "alertmanager.yaml" -}}
+{{- end -}}
+{{- end -}}
+
+{{/*
+Create the name of the service account to use in alertmanager
+*/}}
+{{- define "prometheus.alertmanager.serviceAccountName" -}}
+{{- if .Values.alertmanager.serviceAccount.create -}}
+    {{ default (include "prometheus.alertmanager.fullname" .) .Values.alertmanager.serviceAccount.name }}
+{{- else -}}
+    {{ default "default" .Values.alertmanager.serviceAccount.name }}
+{{- end -}}
+{{- end -}}
+
+{{/*
+Return Thanos sidecar service/ingress name
+*/}}
+{{- define "prometheus.thanos-sidecar.fullname" -}}
+    {{- printf "%s-thanos" (include "common.names.fullname" .) }}
+{{- end -}}
+
+{{/*
+Return Alertmanager name
+*/}}
+{{- define "prometheus.alertmanager.fullname" -}}
+    {{- printf "%s-alertmanager" (include "common.names.fullname" .)  | trunc 63 | trimSuffix "-" }}
+{{- end -}}
+
+{{/*
+Get the Alertmanager configuration configmap.
+*/}}
+{{- define "prometheus.alertmanager.configmapName" -}}
+{{- if .Values.alertmanager.existingConfigmap -}}
+    {{- include "common.tplvalues.render" (dict "value" .Values.alertmanager.existingConfigmap "context" .) -}}
+{{- else }}
+    {{- include "prometheus.alertmanager.fullname" . -}}
+{{- end -}}
+{{- end -}}
\ No newline at end of file
diff --git a/addons/prometheus/2/chart/prometheus/templates/_scrape_config.tpl b/addons/prometheus/2/chart/prometheus/templates/_scrape_config.tpl
new file mode 100644
index 00000000..ea669ead
--- /dev/null
+++ b/addons/prometheus/2/chart/prometheus/templates/_scrape_config.tpl
@@ -0,0 +1,86 @@
+{{/*
+Copyright VMware, Inc.
+SPDX-License-Identifier: APACHE-2.0
+*/}}
+
+{{/*
+Return the prometheus scrape configuration for kubernetes objects.
+Usage:
+{{ include "prometheus.scrape_config" (dict "component" "alertmanager" "context" $) }}
+*/}}
+{{- define "prometheus.scrape_config" -}}
+kubernetes_sd_configs:
+  - role: endpoints
+    namespaces:
+      names:
+      - {{ include "common.names.namespace" .context }}
+metrics_path: /metrics
+relabel_configs:
+  - source_labels:
+      - job
+    target_label: __tmp_prometheus_job_name
+  - action: keep
+    source_labels:
+      - __meta_kubernetes_service_label_app_kubernetes_io_component
+      - __meta_kubernetes_service_labelpresent_app_kubernetes_io_component
+    regex: ({{ .component }});true
+  - action: keep
+    source_labels:
+      - __meta_kubernetes_service_label_app_kubernetes_io_instance
+      - __meta_kubernetes_service_labelpresent_app_kubernetes_io_instance
+    regex: ({{ .context.Release.Name }});true
+  - action: keep
+    source_labels:
+      - __meta_kubernetes_service_label_app_kubernetes_io_name
+      - __meta_kubernetes_service_labelpresent_app_kubernetes_io_name
+    regex: (prometheus);true
+  - action: keep
+    source_labels:
+      - __meta_kubernetes_endpoint_port_name
+    regex: http
+  - source_labels:
+      - __meta_kubernetes_endpoint_address_target_kind
+      - __meta_kubernetes_endpoint_address_target_name
+    separator: ;
+    regex: Node;(.*)
+    replacement: ${1}
+    target_label: node
+  - source_labels:
+      - __meta_kubernetes_endpoint_address_target_kind
+      - __meta_kubernetes_endpoint_address_target_name
+    separator: ;
+    regex: Pod;(.*)
+    replacement: ${1}
+    target_label: pod
+  - source_labels:
+      - __meta_kubernetes_namespace
+    target_label: namespace
+  - source_labels:
+      - __meta_kubernetes_service_name
+    target_label: service
+  - source_labels:
+      - __meta_kubernetes_pod_name
+    target_label: pod
+  - source_labels:
+      - __meta_kubernetes_pod_container_name
+    target_label: container
+  - action: drop
+    source_labels:
+      - __meta_kubernetes_pod_phase
+    regex: (Failed|Succeeded)
+  - source_labels:
+      - __meta_kubernetes_service_name
+    target_label: job
+    replacement: ${1}
+  - target_label: endpoint
+    replacement: http
+  - source_labels:
+      - __address__
+    target_label: __tmp_hash
+    modulus: 1
+    action: hashmod
+  - source_labels:
+      - __tmp_hash
+    regex: 0
+    action: keep
+{{- end -}}
\ No newline at end of file
diff --git a/addons/prometheus/2/chart/prometheus/templates/alertmanager/configmap.yaml b/addons/prometheus/2/chart/prometheus/templates/alertmanager/configmap.yaml
new file mode 100644
index 00000000..70b4181f
--- /dev/null
+++ b/addons/prometheus/2/chart/prometheus/templates/alertmanager/configmap.yaml
@@ -0,0 +1,23 @@
+{{- /*
+Copyright VMware, Inc.
+SPDX-License-Identifier: APACHE-2.0
+*/}}
+
+{{- if and .Values.alertmanager.enabled (not .Values.alertmanager.existingConfigmap) }}
+apiVersion: v1
+kind: ConfigMap
+metadata:
+  name: {{ include "prometheus.alertmanager.fullname" . | quote }}
+  namespace: {{ include "common.names.namespace" . | quote }}
+  {{- $versionLabel := dict "app.kubernetes.io/version" ( include "common.images.version" ( dict "imageRoot" .Values.alertmanager.image "chart" .Chart ) ) }}
+  {{- $labels := include "common.tplvalues.merge" ( dict "values" ( list .Values.commonLabels $versionLabel ) "context" . ) }}
+  labels: {{- include "common.labels.standard" ( dict "customLabels" $labels "context" $ ) | nindent 4 }}
+    app.kubernetes.io/part-of: prometheus
+    app.kubernetes.io/component: alertmanager
+  {{- if .Values.commonAnnotations }}
+  annotations: {{- include "common.tplvalues.render" ( dict "value" .Values.commonAnnotations "context" $ ) | nindent 4 }}
+  {{- end }}
+data:
+  {{ include "prometheus.alertmanager.configmapKey" . }}:
+    {{- include "common.tplvalues.render" (dict "value" .Values.alertmanager.configuration "context" $) | toYaml | nindent 4 }}
+{{- end }}
diff --git a/addons/prometheus/2/chart/prometheus/templates/alertmanager/ingress.yaml b/addons/prometheus/2/chart/prometheus/templates/alertmanager/ingress.yaml
new file mode 100644
index 00000000..94d52c14
--- /dev/null
+++ b/addons/prometheus/2/chart/prometheus/templates/alertmanager/ingress.yaml
@@ -0,0 +1,63 @@
+{{- /*
+Copyright VMware, Inc.
+SPDX-License-Identifier: APACHE-2.0
+*/}}
+
+{{- if and .Values.alertmanager.enabled .Values.alertmanager.ingress.enabled }}
+apiVersion: {{ include "common.capabilities.ingress.apiVersion" . }}
+kind: Ingress
+metadata:
+  name: {{ include "prometheus.alertmanager.fullname" . | quote }}
+  namespace: {{ include "common.names.namespace" . | quote }}
+  {{- $versionLabel := dict "app.kubernetes.io/version" ( include "common.images.version" ( dict "imageRoot" .Values.alertmanager.image "chart" .Chart ) ) }}
+  {{- $labels := include "common.tplvalues.merge" ( dict "values" ( list .Values.commonLabels $versionLabel ) "context" . ) }}
+  labels: {{- include "common.labels.standard" ( dict "customLabels" $labels "context" $ ) | nindent 4 }}
+    app.kubernetes.io/part-of: prometheus
+    app.kubernetes.io/component: alertmanager
+  {{- if or .Values.alertmanager.ingress.annotations .Values.commonAnnotations }}
+  {{- $annotations := include "common.tplvalues.merge" ( dict "values" ( list .Values.alertmanager.ingress.annotations .Values.commonAnnotations ) "context" . ) }}
+  annotations: {{- include "common.tplvalues.render" ( dict "value" $annotations "context" $) | nindent 4 }}
+  {{- end }}
+spec:
+  {{- if and .Values.alertmanager.ingress.ingressClassName (eq "true" (include "common.ingress.supportsIngressClassname" .)) }}
+  ingressClassName: {{ .Values.alertmanager.ingress.ingressClassName | quote }}
+  {{- end }}
+  rules:
+    {{- if .Values.alertmanager.ingress.hostname }}
+    - host: {{ .Values.alertmanager.ingress.hostname }}
+      http:
+        paths:
+          {{- if .Values.alertmanager.ingress.extraPaths }}
+          {{- toYaml .Values.alertmanager.ingress.extraPaths | nindent 10 }}
+          {{- end }}
+          - path: {{ .Values.alertmanager.ingress.path }}
+            {{- if eq "true" (include "common.ingress.supportsPathType" .) }}
+            pathType: {{ .Values.alertmanager.ingress.pathType }}
+            {{- end }}
+            backend: {{- include "common.ingress.backend" (dict "serviceName" (include "prometheus.alertmanager.fullname" .) "servicePort" "http" "context" $)  | nindent 14 }}
+    {{- end }}
+    {{- range .Values.alertmanager.ingress.extraHosts }}
+    - host: {{ .name | quote }}
+      http:
+        paths:
+          - path: {{ default "/" .path }}
+            {{- if eq "true" (include "common.ingress.supportsPathType" $) }}
+            pathType: {{ default "ImplementationSpecific" .pathType }}
+            {{- end }}
+            backend: {{- include "common.ingress.backend" (dict "serviceName" (include "prometheus.alertmanager.fullname" $) "servicePort" "http" "context" $) | nindent 14 }}
+    {{- end }}
+    {{- if .Values.alertmanager.ingress.extraRules }}
+    {{- include "common.tplvalues.render" (dict "value" .Values.alertmanager.ingress.extraRules "context" $) | nindent 4 }}
+    {{- end }}
+  {{- if or (and .Values.alertmanager.ingress.tls (or (include "common.ingress.certManagerRequest" ( dict "annotations" .Values.alertmanager.ingress.annotations )) .Values.alertmanager.ingress.selfSigned)) .Values.alertmanager.ingress.extraTls }}
+  tls:
+    {{- if and .Values.alertmanager.ingress.tls (or (include "common.ingress.certManagerRequest" ( dict "annotations" .Values.alertmanager.ingress.annotations )) .Values.alertmanager.ingress.selfSigned) }}
+    - hosts:
+        - {{ .Values.alertmanager.ingress.hostname | quote }}
+      secretName: {{ printf "%s-tls" .Values.alertmanager.ingress.hostname }}
+    {{- end }}
+    {{- if .Values.alertmanager.ingress.extraTls }}
+    {{- include "common.tplvalues.render" (dict "value" .Values.alertmanager.ingress.extraTls "context" $) | nindent 4 }}
+    {{- end }}
+  {{- end }}
+{{- end }}
diff --git a/addons/prometheus/2/chart/prometheus/templates/alertmanager/pdb.yaml b/addons/prometheus/2/chart/prometheus/templates/alertmanager/pdb.yaml
new file mode 100644
index 00000000..8453cdf6
--- /dev/null
+++ b/addons/prometheus/2/chart/prometheus/templates/alertmanager/pdb.yaml
@@ -0,0 +1,33 @@
+{{- /*
+Copyright VMware, Inc.
+SPDX-License-Identifier: APACHE-2.0
+*/}}
+
+{{- $replicaCount := int .Values.alertmanager.replicaCount }}
+{{- if and .Values.alertmanager.enabled .Values.alertmanager.pdb.create (gt $replicaCount 1) }}
+apiVersion: {{ include "common.capabilities.policy.apiVersion" . }}
+kind: PodDisruptionBudget
+metadata:
+  name: {{ include "prometheus.alertmanager.fullname" . | quote }}
+  namespace: {{ include "common.names.namespace" . | quote }}
+  {{- $versionLabel := dict "app.kubernetes.io/version" ( include "common.images.version" ( dict "imageRoot" .Values.alertmanager.image "chart" .Chart ) ) }}
+  {{- $labels := include "common.tplvalues.merge" ( dict "values" ( list .Values.commonLabels $versionLabel ) "context" . ) }}
+  labels: {{- include "common.labels.standard" ( dict "customLabels" $labels "context" $ ) | nindent 4 }}
+    app.kubernetes.io/part-of: prometheus
+    app.kubernetes.io/component: alertmanager
+  {{- if .Values.commonAnnotations }}
+  annotations: {{- include "common.tplvalues.render" ( dict "value" .Values.commonAnnotations "context" $ ) | nindent 4 }}
+  {{- end }}
+spec:
+  {{- if .Values.alertmanager.pdb.minAvailable }}
+  minAvailable: {{ .Values.alertmanager.pdb.minAvailable }}
+  {{- end  }}
+  {{- if .Values.alertmanager.pdb.maxUnavailable }}
+  maxUnavailable: {{ .Values.alertmanager.pdb.maxUnavailable }}
+  {{- end  }}
+  {{- $podLabels := include "common.tplvalues.merge" ( dict "values" ( list .Values.alertmanager.podLabels .Values.commonLabels ) "context" . ) }}
+  selector:
+    matchLabels: {{- include "common.labels.matchLabels" ( dict "customLabels" $podLabels "context" $ ) | nindent 6 }}
+      app.kubernetes.io/part-of: prometheus
+      app.kubernetes.io/component: alertmanager
+{{- end }}
diff --git a/addons/prometheus/2/chart/prometheus/templates/alertmanager/service-account.yaml b/addons/prometheus/2/chart/prometheus/templates/alertmanager/service-account.yaml
new file mode 100644
index 00000000..8ef2522c
--- /dev/null
+++ b/addons/prometheus/2/chart/prometheus/templates/alertmanager/service-account.yaml
@@ -0,0 +1,22 @@
+{{- /*
+Copyright VMware, Inc.
+SPDX-License-Identifier: APACHE-2.0
+*/}}
+
+{{- if and .Values.alertmanager.enabled .Values.alertmanager.serviceAccount.create }}
+apiVersion: v1
+kind: ServiceAccount
+metadata:
+  name: {{ include "prometheus.alertmanager.serviceAccountName" . | quote }}
+  namespace: {{ include "common.names.namespace" . | quote }}
+  {{- $versionLabel := dict "app.kubernetes.io/version" ( include "common.images.version" ( dict "imageRoot" .Values.alertmanager.image "chart" .Chart ) ) }}
+  {{- $labels := include "common.tplvalues.merge" ( dict "values" ( list .Values.commonLabels $versionLabel ) "context" . ) }}
+  labels: {{- include "common.labels.standard" ( dict "customLabels" $labels "context" $ ) | nindent 4 }}
+    app.kubernetes.io/part-of: prometheus
+    app.kubernetes.io/component: alertmanager
+  {{- if or .Values.alertmanager.serviceAccount.annotations .Values.commonAnnotations }}
+  {{- $annotations := include "common.tplvalues.merge" ( dict "values" ( list .Values.alertmanager.serviceAccount.annotations .Values.commonAnnotations ) "context" . ) }}
+  annotations: {{- include "common.tplvalues.render" ( dict "value" $annotations "context" $) | nindent 4 }}
+  {{- end }}
+automountServiceAccountToken: {{ .Values.alertmanager.serviceAccount.automountServiceAccountToken }}
+{{- end }}
diff --git a/addons/prometheus/2/chart/prometheus/templates/alertmanager/service-headless.yaml b/addons/prometheus/2/chart/prometheus/templates/alertmanager/service-headless.yaml
new file mode 100644
index 00000000..fc4f95de
--- /dev/null
+++ b/addons/prometheus/2/chart/prometheus/templates/alertmanager/service-headless.yaml
@@ -0,0 +1,40 @@
+{{- /*
+Copyright VMware, Inc.
+SPDX-License-Identifier: APACHE-2.0
+*/}}
+
+{{- if and .Values.alertmanager.enabled (gt (int .Values.alertmanager.replicaCount) 1) }}
+apiVersion: v1
+kind: Service
+metadata:
+  name: {{ printf "%s-headless" (include "prometheus.alertmanager.fullname" .) }}
+  namespace: {{ include "common.names.namespace" . | quote }}
+  {{- $versionLabel := dict "app.kubernetes.io/version" ( include "common.images.version" ( dict "imageRoot" .Values.alertmanager.image "chart" .Chart ) ) }}
+  {{- $labels := include "common.tplvalues.merge" ( dict "values" ( list .Values.commonLabels $versionLabel ) "context" . ) }}
+  labels: {{- include "common.labels.standard" ( dict "customLabels" $labels "context" $ ) | nindent 4 }}
+    app.kubernetes.io/part-of: prometheus
+    app.kubernetes.io/component: alertmanager
+  {{- if or .Values.alertmanager.service.annotations .Values.commonAnnotations }}
+  {{- $annotations := include "common.tplvalues.merge" ( dict "values" ( list .Values.alertmanager.service.annotations .Values.commonAnnotations ) "context" . ) }}
+  annotations: {{- include "common.tplvalues.render" ( dict "value" $annotations "context" $) | nindent 4 }}
+  {{- end }}
+spec:
+  type: ClusterIP
+  clusterIP: None
+  ports:
+    - name: tcp-cluster
+      port: {{ .Values.alertmanager.service.ports.cluster }}
+      protocol: TCP
+      targetPort: tcp-cluster
+    - name: udp-cluster
+      port: {{ .Values.alertmanager.service.ports.cluster }}
+      protocol: UDP
+      targetPort: udp-cluster
+    {{- if .Values.alertmanager.service.extraPorts }}
+    {{- include "common.tplvalues.render" (dict "value" .Values.alertmanager.service.extraPorts "context" $) | nindent 4 }}
+    {{- end }}
+  {{- $podLabels := include "common.tplvalues.merge" ( dict "values" ( list .Values.alertmanager.podLabels .Values.commonLabels ) "context" . ) }}
+  selector: {{- include "common.labels.matchLabels" ( dict "customLabels" $podLabels "context" $ ) | nindent 4 }}
+    app.kubernetes.io/part-of: prometheus
+    app.kubernetes.io/component: alertmanager
+{{- end }}
diff --git a/addons/prometheus/2/chart/prometheus/templates/alertmanager/service.yaml b/addons/prometheus/2/chart/prometheus/templates/alertmanager/service.yaml
new file mode 100644
index 00000000..ee1b2037
--- /dev/null
+++ b/addons/prometheus/2/chart/prometheus/templates/alertmanager/service.yaml
@@ -0,0 +1,58 @@
+{{- /*
+Copyright VMware, Inc.
+SPDX-License-Identifier: APACHE-2.0
+*/}}
+
+{{- if .Values.alertmanager.enabled }}
+apiVersion: v1
+kind: Service
+metadata:
+  name: {{ include "prometheus.alertmanager.fullname" . | quote }}
+  namespace: {{ include "common.names.namespace" . | quote }}
+  {{- $versionLabel := dict "app.kubernetes.io/version" ( include "common.images.version" ( dict "imageRoot" .Values.alertmanager.image "chart" .Chart ) ) }}
+  {{- $labels := include "common.tplvalues.merge" ( dict "values" ( list .Values.commonLabels $versionLabel ) "context" . ) }}
+  labels: {{- include "common.labels.standard" ( dict "customLabels" $labels "context" $ ) | nindent 4 }}
+    app.kubernetes.io/part-of: prometheus
+    app.kubernetes.io/component: alertmanager
+  {{- if or .Values.alertmanager.service.annotations .Values.commonAnnotations }}
+  {{- $annotations := include "common.tplvalues.merge" ( dict "values" ( list .Values.alertmanager.service.annotations .Values.commonAnnotations ) "context" . ) }}
+  annotations: {{- include "common.tplvalues.render" ( dict "value" $annotations "context" $) | nindent 4 }}
+  {{- end }}
+spec:
+  type: {{ .Values.alertmanager.service.type }}
+  {{- if and .Values.alertmanager.service.clusterIP (eq .Values.alertmanager.service.type "ClusterIP") }}
+  clusterIP: {{ .Values.alertmanager.service.clusterIP }}
+  {{- end }}
+  {{- if .Values.alertmanager.service.sessionAffinity }}
+  sessionAffinity: {{ .Values.alertmanager.service.sessionAffinity }}
+  {{- end }}
+  {{- if .Values.alertmanager.service.sessionAffinityConfig }}
+  sessionAffinityConfig: {{- include "common.tplvalues.render" (dict "value" .Values.alertmanager.service.sessionAffinityConfig "context" $) | nindent 4 }}
+  {{- end }}
+  {{- if or (eq .Values.alertmanager.service.type "LoadBalancer") (eq .Values.alertmanager.service.type "NodePort") }}
+  externalTrafficPolicy: {{ .Values.alertmanager.service.externalTrafficPolicy | quote }}
+  {{- end }}
+  {{- if and (eq .Values.alertmanager.service.type "LoadBalancer") (not (empty .Values.alertmanager.service.loadBalancerSourceRanges)) }}
+  loadBalancerSourceRanges: {{ .Values.alertmanager.service.loadBalancerSourceRanges }}
+  {{- end }}
+  {{- if and (eq .Values.alertmanager.service.type "LoadBalancer") (not (empty .Values.alertmanager.service.loadBalancerIP)) }}
+  loadBalancerIP: {{ .Values.alertmanager.service.loadBalancerIP }}
+  {{- end }}
+  ports:
+    - name: http
+      port: {{ .Values.alertmanager.service.ports.http }}
+      protocol: TCP
+      targetPort: http
+      {{- if and (or (eq .Values.alertmanager.service.type "NodePort") (eq .Values.alertmanager.service.type "LoadBalancer")) (not (empty .Values.alertmanager.service.nodePorts.http)) }}
+      nodePort: {{ .Values.alertmanager.service.nodePorts.http }}
+      {{- else if eq .Values.alertmanager.service.type "ClusterIP" }}
+      nodePort: null
+      {{- end }}
+    {{- if .Values.alertmanager.service.extraPorts }}
+    {{- include "common.tplvalues.render" (dict "value" .Values.alertmanager.service.extraPorts "context" $) | nindent 4 }}
+    {{- end }}
+  {{- $podLabels := include "common.tplvalues.merge" ( dict "values" ( list .Values.alertmanager.podLabels .Values.commonLabels ) "context" . ) }}
+  selector: {{- include "common.labels.matchLabels" ( dict "customLabels" $podLabels "context" $ ) | nindent 4 }}
+    app.kubernetes.io/part-of: prometheus
+    app.kubernetes.io/component: alertmanager
+{{- end }}
diff --git a/addons/prometheus/2/chart/prometheus/templates/alertmanager/statefulset.yaml b/addons/prometheus/2/chart/prometheus/templates/alertmanager/statefulset.yaml
new file mode 100644
index 00000000..ec8e717b
--- /dev/null
+++ b/addons/prometheus/2/chart/prometheus/templates/alertmanager/statefulset.yaml
@@ -0,0 +1,241 @@
+{{- /*
+Copyright VMware, Inc.
+SPDX-License-Identifier: APACHE-2.0
+*/}}
+
+{{- if .Values.alertmanager.enabled }}
+{{- $clusterPort := .Values.alertmanager.containerPorts.cluster }}
+apiVersion: {{ include "common.capabilities.statefulset.apiVersion" . }}
+kind: StatefulSet
+metadata:
+  name: {{ include "prometheus.alertmanager.fullname" . | quote }}
+  namespace: {{ include "common.names.namespace" . | quote }}
+  {{- $versionLabel := dict "app.kubernetes.io/version" ( include "common.images.version" ( dict "imageRoot" .Values.alertmanager.image "chart" .Chart ) ) }}
+  {{- $labels := include "common.tplvalues.merge" ( dict "values" ( list .Values.commonLabels $versionLabel ) "context" . ) }}
+  labels: {{- include "common.labels.standard" ( dict "customLabels" $labels "context" $ ) | nindent 4 }}
+    app.kubernetes.io/part-of: prometheus
+    app.kubernetes.io/component: alertmanager
+  {{- if .Values.commonAnnotations }}
+  annotations: {{- include "common.tplvalues.render" ( dict "value" .Values.commonAnnotations "context" $ ) | nindent 4 }}
+  {{- end }}
+spec:
+  replicas: {{ .Values.alertmanager.replicaCount }}
+  podManagementPolicy: {{ .Values.alertmanager.podManagementPolicy | quote }}
+  {{- $podLabels := include "common.tplvalues.merge" ( dict "values" ( list .Values.alertmanager.podLabels .Values.commonLabels $versionLabel ) "context" . ) }}
+  selector:
+    matchLabels: {{- include "common.labels.matchLabels" ( dict "customLabels" $podLabels "context" $ ) | nindent 6 }}
+      app.kubernetes.io/part-of: prometheus
+      app.kubernetes.io/component: alertmanager
+  serviceName: {{ printf "%s-headless" (include "prometheus.alertmanager.fullname" .) }}
+  {{- if .Values.alertmanager.updateStrategy }}
+  updateStrategy: {{- toYaml .Values.alertmanager.updateStrategy | nindent 4 }}
+  {{- end }}
+  template:
+    metadata:
+      {{- if .Values.alertmanager.podAnnotations }}
+      annotations: {{- include "common.tplvalues.render" (dict "value" .Values.alertmanager.podAnnotations "context" $) | nindent 8 }}
+      {{- end }}
+      labels: {{- include "common.labels.standard" ( dict "customLabels" $podLabels "context" $ ) | nindent 8 }}
+        app.kubernetes.io/part-of: prometheus
+        app.kubernetes.io/component: alertmanager
+    spec:
+      serviceAccountName: {{ template "prometheus.alertmanager.serviceAccountName" . }}
+      {{- include "prometheus.imagePullSecrets" . | nindent 6 }}
+      {{- if .Values.alertmanager.hostAliases }}
+      hostAliases: {{- include "common.tplvalues.render" (dict "value" .Values.alertmanager.hostAliases "context" $) | nindent 8 }}
+      {{- end }}
+      {{- if .Values.alertmanager.affinity }}
+      affinity: {{- include "common.tplvalues.render" ( dict "value" .Values.alertmanager.affinity "context" $) | nindent 8 }}
+      {{- else }}
+      affinity:
+        podAffinity: {{- include "common.affinities.pods" (dict "type" .Values.alertmanager.podAffinityPreset "component" "alertmanager" "customLabels" $podLabels "context" $) | nindent 10 }}
+        podAntiAffinity: {{- include "common.affinities.pods" (dict "type" .Values.alertmanager.podAntiAffinityPreset "component" "alertmanager" "customLabels" $podLabels "context" $) | nindent 10 }}
+        nodeAffinity: {{- include "common.affinities.nodes" (dict "type" .Values.alertmanager.nodeAffinityPreset.type "key" .Values.alertmanager.nodeAffinityPreset.key "values" .Values.alertmanager.nodeAffinityPreset.values) | nindent 10 }}
+      {{- end }}
+      {{- if .Values.alertmanager.nodeSelector }}
+      nodeSelector: {{- include "common.tplvalues.render" ( dict "value" .Values.alertmanager.nodeSelector "context" $) | nindent 8 }}
+      {{- end }}
+      {{- if .Values.alertmanager.tolerations }}
+      tolerations: {{- include "common.tplvalues.render" (dict "value" .Values.alertmanager.tolerations "context" .) | nindent 8 }}
+      {{- end }}
+      {{- if .Values.alertmanager.priorityClassName }}
+      priorityClassName: {{ .Values.alertmanager.priorityClassName | quote }}
+      {{- end }}
+      {{- if .Values.alertmanager.schedulerName }}
+      schedulerName: {{ .Values.alertmanager.schedulerName | quote }}
+      {{- end }}
+      {{- if .Values.alertmanager.topologySpreadConstraints }}
+      topologySpreadConstraints: {{- include "common.tplvalues.render" (dict "value" .Values.alertmanager.topologySpreadConstraints "context" .) | nindent 8 }}
+      {{- end }}
+      {{- if .Values.alertmanager.podSecurityContext.enabled }}
+      securityContext: {{- omit .Values.alertmanager.podSecurityContext "enabled" | toYaml | nindent 8 }}
+      {{- end }}
+      {{- if .Values.alertmanager.terminationGracePeriodSeconds }}
+      terminationGracePeriodSeconds: {{ .Values.alertmanager.terminationGracePeriodSeconds }}
+      {{- end }}
+      initContainers:
+        {{- if and .Values.volumePermissions.enabled .Values.alertmanager.persistence.enabled }}
+        - name: volume-permissions
+          image: {{ include "prometheus.volumePermissions.image" . }}
+          imagePullPolicy: {{ .Values.volumePermissions.image.pullPolicy | quote }}
+          command:
+            - sh
+            - -ec
+            - |
+              mkdir -p {{ .Values.alertmanager.persistence.mountPath }}
+              find {{ .Values.alertmanager.persistence.mountPath }} -mindepth 1 -maxdepth 1 -not -name ".snapshot" -not -name "lost+found" | xargs -r chown -R {{ .Values.alertmanager.containerSecurityContext.runAsUser }}:{{ .Values.alertmanager.podSecurityContext.fsGroup }}
+          {{- if .Values.alertmanager.containerSecurityContext.enabled }}
+          securityContext: {{- omit .Values.alertmanager.containerSecurityContext "enabled" | toYaml | nindent 12 }}
+          {{- end }}
+          {{- if .Values.volumePermissions.resources }}
+          resources: {{- toYaml .Values.volumePermissions.resources | nindent 12 }}
+          {{- end }}
+          volumeMounts:
+            - name: data
+              mountPath: {{ .Values.alertmanager.persistence.mountPath }}
+              {{- if .Values.alertmanager.persistence.subPath }}
+              subPath: {{ .Values.alertmanager.persistence.subPath }}
+              {{- end }}
+        {{- end }}
+        {{- if .Values.alertmanager.initContainers }}
+          {{- include "common.tplvalues.render" (dict "value" .Values.alertmanager.initContainers "context" $) | nindent 8 }}
+        {{- end }}
+      containers:
+        - name: alertmanager
+          image: {{ template "prometheus.alertmanager.image" . }}
+          imagePullPolicy: {{ .Values.alertmanager.image.pullPolicy }}
+          {{- if .Values.alertmanager.containerSecurityContext.enabled }}
+          securityContext: {{- omit .Values.alertmanager.containerSecurityContext "enabled" | toYaml | nindent 12 }}
+          {{- end }}
+          {{- if .Values.diagnosticMode.enabled }}
+          command: {{- include "common.tplvalues.render" (dict "value" .Values.diagnosticMode.command "context" $) | nindent 12 }}
+          {{- else if .Values.alertmanager.command }}
+          command: {{- include "common.tplvalues.render" (dict "value" .Values.alertmanager.command "context" $) | nindent 12 }}
+          {{- end }}
+          {{- if .Values.diagnosticMode.enabled }}
+          args: {{- include "common.tplvalues.render" (dict "value" .Values.diagnosticMode.args "context" $) | nindent 12 }}
+          {{- else if .Values.alertmanager.args }}
+          args: {{- include "common.tplvalues.render" (dict "value" .Values.alertmanager.args "context" $) | nindent 12 }}
+          {{- else }}
+          args:
+            - "--config.file=/opt/drycc/alertmanager/conf/{{ include "prometheus.alertmanager.configmapKey" . }}"
+            - "--storage.path=/opt/drycc/alertmanager/data"
+            - "--web.listen-address=0.0.0.0:{{ .Values.alertmanager.containerPorts.http }}"
+            {{- if gt (int .Values.alertmanager.replicaCount) 1 }}
+            - "--cluster.advertise-address=[$(POD_IP)]:{{ $clusterPort }}"
+            - "--cluster.listen-address=0.0.0.0:{{ $clusterPort }}"
+            {{- $fullName := include "prometheus.alertmanager.fullname" . }}
+            {{- range $i := until (int .Values.alertmanager.replicaCount) }}
+            - "--cluster.peer={{ $fullName }}-{{ $i }}.{{ $fullName }}-headless.{{ include "common.names.namespace" $ }}.svc.{{ $.Values.clusterDomain }}:{{ $clusterPort }}"
+            {{- end }}
+            {{- end }}
+            {{- if .Values.alertmanager.extraArgs }}
+            {{- include "common.tplvalues.render" (dict "value" .Values.alertmanager.extraArgs "context" $) | nindent 12 }}
+            {{- end }}
+          {{- end }}
+          env:
+            - name: POD_IP
+              valueFrom:
+                fieldRef:
+                  apiVersion: v1
+                  fieldPath: status.podIP
+            {{- if .Values.alertmanager.extraEnvVars }}
+            {{- include "common.tplvalues.render" (dict "value" .Values.alertmanager.extraEnvVars "context" $) | nindent 12 }}
+            {{- end }}
+          envFrom:
+            {{- if .Values.alertmanager.extraEnvVarsCM }}
+            - configMapRef:
+                name: {{ include "common.tplvalues.render" (dict "value" .Values.alertmanager.extraEnvVarsCM "context" $) }}
+            {{- end }}
+            {{- if .Values.alertmanager.extraEnvVarsSecret }}
+            - secretRef:
+                name: {{ include "common.tplvalues.render" (dict "value" .Values.alertmanager.extraEnvVarsSecret "context" $) }}
+            {{- end }}
+          {{- if .Values.alertmanager.resources }}
+          resources: {{- toYaml .Values.alertmanager.resources | nindent 12 }}
+          {{- end }}
+          ports:
+            - name: http
+              containerPort: {{ .Values.alertmanager.containerPorts.http }}
+            - name: tcp-cluster
+              containerPort: {{ $clusterPort }}
+              protocol: TCP
+            - name: udp-cluster
+              containerPort: {{ $clusterPort }}
+              protocol: UDP
+          {{- if not .Values.diagnosticMode.enabled }}
+          {{- if .Values.alertmanager.customLivenessProbe }}
+          livenessProbe: {{- include "common.tplvalues.render" (dict "value" .Values.alertmanager.customLivenessProbe "context" $) | nindent 12 }}
+          {{- else if .Values.alertmanager.livenessProbe.enabled }}
+          livenessProbe: {{- include "common.tplvalues.render" (dict "value" (omit .Values.alertmanager.livenessProbe "enabled") "context" $) | nindent 12 }}
+            httpGet:
+              path: /-/healthy
+              port: http
+          {{- end }}
+          {{- if .Values.alertmanager.customReadinessProbe }}
+          readinessProbe: {{- include "common.tplvalues.render" (dict "value" .Values.alertmanager.customReadinessProbe "context" $) | nindent 12 }}
+          {{- else if .Values.alertmanager.readinessProbe.enabled }}
+          readinessProbe: {{- include "common.tplvalues.render" (dict "value" (omit .Values.alertmanager.readinessProbe "enabled") "context" $) | nindent 12 }}
+            httpGet:
+              path: /-/ready
+              port: http
+          {{- end }}
+          {{- if .Values.alertmanager.customStartupProbe }}
+          startupProbe: {{- include "common.tplvalues.render" (dict "value" .Values.alertmanager.customStartupProbe "context" $) | nindent 12 }}
+          {{- else if .Values.alertmanager.startupProbe.enabled }}
+          startupProbe: {{- include "common.tplvalues.render" (dict "value" (omit .Values.alertmanager.startupProbe "enabled") "context" $) | nindent 12 }}
+            tcpSocket:
+              port: http
+          {{- end }}
+          {{- end }}
+          {{- if .Values.alertmanager.lifecycleHooks }}
+          lifecycle: {{- include "common.tplvalues.render" (dict "value" .Values.alertmanager.lifecycleHooks "context" $) | nindent 12 }}
+          {{- end }}
+          volumeMounts:
+            - name: config
+              mountPath: /opt/drycc/alertmanager/conf
+              readOnly: true
+            - name: data
+              mountPath: {{ .Values.alertmanager.persistence.mountPath }}
+          {{- if .Values.alertmanager.extraVolumeMounts }}
+          {{- include "common.tplvalues.render" (dict "value" .Values.alertmanager.extraVolumeMounts "context" $) | nindent 12 }}
+          {{- end }}
+        {{- if .Values.alertmanager.sidecars }}
+        {{- include "common.tplvalues.render" ( dict "value" .Values.alertmanager.sidecars "context" $) | nindent 8 }}
+        {{- end }}
+      volumes:
+        - name: config
+          configMap:
+            name: {{ include "prometheus.alertmanager.configmapName" . }}
+        {{- if not .Values.alertmanager.persistence.enabled }}
+        - name: data
+          emptyDir: {}
+        {{- end}}
+        {{- if .Values.alertmanager.extraVolumes }}
+        {{- include "common.tplvalues.render" (dict "value" .Values.alertmanager.extraVolumes "context" $) | nindent 8 }}
+        {{- end }}
+  {{- if .Values.alertmanager.persistence.enabled }}
+  volumeClaimTemplates:
+    - metadata:
+        name: data
+        {{- if or .Values.alertmanager.persistence.annotations .Values.commonAnnotations }}
+        {{- $annotations := include "common.tplvalues.merge" ( dict "values" ( list .Values.alertmanager.persistence.annotations .Values.commonAnnotations ) "context" . ) }}
+        annotations: {{- include "common.tplvalues.render" ( dict "value" $annotations "context" $) | nindent 10 }}
+        {{- end }}
+        {{- if .Values.commonLabels }}
+        labels: {{- include "common.tplvalues.render" (dict "value" .Values.commonLabels "context" $) | nindent 10 }}
+        {{- end }}
+      spec:
+        accessModes:
+        {{- range .Values.alertmanager.persistence.accessModes }}
+          - {{ . | quote }}
+        {{- end }}
+        resources:
+          requests:
+            storage: {{ .Values.alertmanager.persistence.size | quote }}
+        {{- if .Values.alertmanager.persistence.selector }}
+        selector: {{- include "common.tplvalues.render" (dict "value" .Values.alertmanager.persistence.selector "context" $) | nindent 10 }}
+        {{- end }}
+        {{- include "common.storage.class" (dict "persistence" .Values.alertmanager.persistence "global" .Values.global) | nindent 8 }}
+  {{- end }}
+{{- end }}
diff --git a/addons/prometheus/2/chart/prometheus/templates/extra-list.yaml b/addons/prometheus/2/chart/prometheus/templates/extra-list.yaml
new file mode 100644
index 00000000..2d35a580
--- /dev/null
+++ b/addons/prometheus/2/chart/prometheus/templates/extra-list.yaml
@@ -0,0 +1,9 @@
+{{- /*
+Copyright VMware, Inc.
+SPDX-License-Identifier: APACHE-2.0
+*/}}
+
+{{- range .Values.extraDeploy }}
+---
+{{ include "common.tplvalues.render" (dict "value" . "context" $) }}
+{{- end }}
diff --git a/addons/prometheus/2/chart/prometheus/templates/server/clusterrole.yaml b/addons/prometheus/2/chart/prometheus/templates/server/clusterrole.yaml
new file mode 100644
index 00000000..da65fb78
--- /dev/null
+++ b/addons/prometheus/2/chart/prometheus/templates/server/clusterrole.yaml
@@ -0,0 +1,51 @@
+{{- /*
+Copyright VMware, Inc.
+SPDX-License-Identifier: APACHE-2.0
+*/}}
+
+{{- if .Values.server.rbac.create }}
+kind: ClusterRole
+apiVersion: {{ include "common.capabilities.rbac.apiVersion" . }}
+metadata:
+  name: {{ include "prometheus.server.fullname.namespace" . }}
+  labels: {{- include "common.labels.standard" ( dict "customLabels" .Values.commonLabels "context" $ ) | nindent 4 }}
+    app.kubernetes.io/part-of: prometheus
+    app.kubernetes.io/component: server
+  {{- if .Values.commonAnnotations }}
+  annotations: {{- include "common.tplvalues.render" ( dict "value" .Values.commonAnnotations "context" $ ) | nindent 4 }}
+  {{- end }}
+rules:
+  # These rules come from <https://github.com/prometheus-community/helm-charts/blob/main/charts/prometheus/templates/clusterrole.yaml>
+  - apiGroups:
+      - ""
+    resources:
+      - nodes
+      - nodes/proxy
+      - nodes/metrics
+      - services
+      - endpoints
+      - pods
+      - ingresses
+      - configmaps
+    verbs:
+      - get
+      - list
+      - watch
+  - apiGroups:
+      - "extensions"
+      - "networking.k8s.io"
+    resources:
+      - ingresses/status
+      - ingresses
+    verbs:
+      - get
+      - list
+      - watch
+  - nonResourceURLs:
+      - "/metrics"
+    verbs:
+      - get
+  {{- if .Values.server.rbac.rules }}
+  {{- include "common.tplvalues.render" ( dict "value" .Values.server.rbac.rules "context" $ ) | nindent 2 }}
+  {{- end }}
+{{- end }}
diff --git a/addons/prometheus/2/chart/prometheus/templates/server/clusterrolebinding.yaml b/addons/prometheus/2/chart/prometheus/templates/server/clusterrolebinding.yaml
new file mode 100644
index 00000000..c38e290c
--- /dev/null
+++ b/addons/prometheus/2/chart/prometheus/templates/server/clusterrolebinding.yaml
@@ -0,0 +1,23 @@
+{{- /*
+Copyright VMware, Inc.
+SPDX-License-Identifier: APACHE-2.0
+*/}}
+
+kind: ClusterRoleBinding
+apiVersion: {{ include "common.capabilities.rbac.apiVersion" . }}
+metadata:
+  name: {{ template "prometheus.server.fullname.namespace" . }}
+  labels: {{- include "common.labels.standard" ( dict "customLabels" .Values.commonLabels "context" $ ) | nindent 4 }}
+    app.kubernetes.io/part-of: prometheus
+    app.kubernetes.io/component: server
+  {{- if .Values.commonAnnotations }}
+  annotations: {{- include "common.tplvalues.render" ( dict "value" .Values.commonAnnotations "context" $ ) | nindent 4 }}
+  {{- end }}
+roleRef:
+  apiGroup: rbac.authorization.k8s.io
+  kind: ClusterRole
+  name: {{ template "prometheus.server.fullname.namespace" . }}
+subjects:
+  - kind: ServiceAccount
+    name: {{ template "prometheus.server.serviceAccountName" . }}
+    namespace: {{ include "common.names.namespace" . | quote }}
diff --git a/addons/prometheus/2/chart/prometheus/templates/server/configmap.yaml b/addons/prometheus/2/chart/prometheus/templates/server/configmap.yaml
new file mode 100644
index 00000000..36d64f70
--- /dev/null
+++ b/addons/prometheus/2/chart/prometheus/templates/server/configmap.yaml
@@ -0,0 +1,23 @@
+{{- /*
+Copyright VMware, Inc.
+SPDX-License-Identifier: APACHE-2.0
+*/}}
+
+{{- if not .Values.existingConfigmap }}
+apiVersion: v1
+kind: ConfigMap
+metadata:
+  name: {{ template "prometheus.server.fullname" . }}
+  namespace: {{ include "common.names.namespace" . | quote }}
+  labels: {{- include "common.labels.standard" ( dict "customLabels" .Values.commonLabels "context" $ ) | nindent 4 }}
+    app.kubernetes.io/part-of: prometheus
+    app.kubernetes.io/component: server
+  {{- if .Values.commonAnnotations }}
+  annotations: {{- include "common.tplvalues.render" ( dict "value" .Values.commonAnnotations "context" $ ) | nindent 4 }}
+  {{- end }}
+data:
+  {{ include "prometheus.server.configmapKey" . }}:
+    {{- include "common.tplvalues.render" (dict "value" .Values.server.configuration "context" $) | toYaml | nindent 4 }}
+  rules.yaml:
+    {{- include "common.tplvalues.render" (dict "value" .Values.server.alertingRules "context" $) | toYaml | nindent 4 }}
+{{- end }}
diff --git a/addons/prometheus/2/chart/prometheus/templates/server/deployment.yaml b/addons/prometheus/2/chart/prometheus/templates/server/deployment.yaml
new file mode 100644
index 00000000..8429060a
--- /dev/null
+++ b/addons/prometheus/2/chart/prometheus/templates/server/deployment.yaml
@@ -0,0 +1,274 @@
+{{- /*
+Copyright VMware, Inc.
+SPDX-License-Identifier: APACHE-2.0
+*/}}
+
+apiVersion: {{ include "common.capabilities.deployment.apiVersion" . }}
+kind: Deployment
+metadata:
+  name: {{ template "prometheus.server.fullname" . }}
+  namespace: {{ include "common.names.namespace" . | quote }}
+  labels: {{- include "common.labels.standard" ( dict "customLabels" .Values.commonLabels "context" $ ) | nindent 4 }}
+    app.kubernetes.io/part-of: prometheus
+    app.kubernetes.io/component: server
+  {{- if .Values.commonAnnotations }}
+  annotations: {{- include "common.tplvalues.render" ( dict "value" .Values.commonAnnotations "context" $ ) | nindent 4 }}
+  {{- end }}
+spec:
+  replicas: {{ .Values.server.replicaCount }}
+  {{- if .Values.server.updateStrategy }}
+  strategy: {{- toYaml .Values.server.updateStrategy | nindent 4 }}
+  {{- end }}
+  {{- $podLabels := include "common.tplvalues.merge" ( dict "values" ( list .Values.server.podLabels .Values.commonLabels ) "context" . ) }}
+  selector:
+    matchLabels: {{- include "common.labels.matchLabels" ( dict "customLabels" $podLabels "context" $ ) | nindent 6 }}
+      app.kubernetes.io/part-of: prometheus
+      app.kubernetes.io/component: server
+  template:
+    metadata:
+      annotations:
+        checksum/configmap: {{ include (print $.Template.BasePath "/server/configmap.yaml") . | sha256sum }}
+        {{- if .Values.server.podAnnotations }}
+        {{- include "common.tplvalues.render" (dict "value" .Values.server.podAnnotations "context" $) | nindent 8 }}
+        {{- end }}
+      labels: {{- include "common.labels.standard" ( dict "customLabels" $podLabels "context" $ ) | nindent 8 }}
+        app.kubernetes.io/part-of: prometheus
+        app.kubernetes.io/component: server
+    spec:
+      serviceAccountName: {{ template "prometheus.server.serviceAccountName" . }}
+      {{- include "prometheus.imagePullSecrets" . | nindent 6 }}
+      {{- if .Values.server.hostAliases }}
+      hostAliases: {{- include "common.tplvalues.render" (dict "value" .Values.server.hostAliases "context" $) | nindent 8 }}
+      {{- end }}
+      {{- if .Values.server.affinity }}
+      affinity: {{- include "common.tplvalues.render" ( dict "value" .Values.server.affinity "context" $) | nindent 8 }}
+      {{- else }}
+      affinity:
+        podAffinity: {{- include "common.affinities.pods" (dict "type" .Values.server.podAffinityPreset "component" "server" "customLabels" $podLabels "context" $) | nindent 10 }}
+        podAntiAffinity: {{- include "common.affinities.pods" (dict "type" .Values.server.podAntiAffinityPreset "component" "server" "customLabels" $podLabels "context" $) | nindent 10 }}
+        nodeAffinity: {{- include "common.affinities.nodes" (dict "type" .Values.server.nodeAffinityPreset.type "key" .Values.server.nodeAffinityPreset.key "values" .Values.server.nodeAffinityPreset.values) | nindent 10 }}
+      {{- end }}
+      {{- if .Values.server.nodeSelector }}
+      nodeSelector: {{- include "common.tplvalues.render" ( dict "value" .Values.server.nodeSelector "context" $) | nindent 8 }}
+      {{- end }}
+      {{- if .Values.server.tolerations }}
+      tolerations: {{- include "common.tplvalues.render" (dict "value" .Values.server.tolerations "context" .) | nindent 8 }}
+      {{- end }}
+      {{- if .Values.server.priorityClassName }}
+      priorityClassName: {{ .Values.server.priorityClassName | quote }}
+      {{- end }}
+      {{- if .Values.server.schedulerName }}
+      schedulerName: {{ .Values.server.schedulerName | quote }}
+      {{- end }}
+      {{- if .Values.server.topologySpreadConstraints }}
+      topologySpreadConstraints: {{- include "common.tplvalues.render" (dict "value" .Values.server.topologySpreadConstraints "context" .) | nindent 8 }}
+      {{- end }}
+      {{- if .Values.server.podSecurityContext.enabled }}
+      securityContext: {{- omit .Values.server.podSecurityContext "enabled" | toYaml | nindent 8 }}
+      {{- end }}
+      {{- if .Values.server.terminationGracePeriodSeconds }}
+      terminationGracePeriodSeconds: {{ .Values.server.terminationGracePeriodSeconds }}
+      {{- end }}
+      initContainers:
+        {{- if and .Values.volumePermissions.enabled .Values.server.persistence.enabled }}
+        - name: volume-permissions
+          image: {{ include "prometheus.volumePermissions.image" . }}
+          imagePullPolicy: {{ .Values.volumePermissions.image.pullPolicy | quote }}
+          command:
+            - sh
+            - -ec
+            - |
+              mkdir -p {{ .Values.server.persistence.mountPath }}
+              find {{ .Values.server.persistence.mountPath }} -mindepth 1 -maxdepth 1 -not -name ".snapshot" -not -name "lost+found" | xargs -r chown -R {{ .Values.server.containerSecurityContext.runAsUser }}:{{ .Values.server.podSecurityContext.fsGroup }}
+          securityContext: {{- include "common.tplvalues.render" (dict "value" .Values.volumePermissions.containerSecurityContext "context" $) | nindent 12 }}
+          {{- if .Values.volumePermissions.resources }}
+          resources: {{- toYaml .Values.volumePermissions.resources | nindent 12 }}
+          {{- end }}
+          volumeMounts:
+            - name: data
+              mountPath: {{ .Values.server.persistence.mountPath }}
+              {{- if .Values.server.persistence.subPath }}
+              subPath: {{ .Values.server.persistence.subPath }}
+              {{- end }}
+        {{- end }}
+        {{- if .Values.server.initContainers }}
+          {{- include "common.tplvalues.render" (dict "value" .Values.server.initContainers "context" $) | nindent 8 }}
+        {{- end }}
+      containers:
+        - name: prometheus
+          image: {{ template "prometheus.server.image" . }}
+          imagePullPolicy: {{ .Values.server.image.pullPolicy }}
+          {{- if .Values.server.containerSecurityContext.enabled }}
+          securityContext: {{- omit .Values.server.containerSecurityContext "enabled" | toYaml | nindent 12 }}
+          {{- end }}
+          {{- if .Values.diagnosticMode.enabled }}
+          command: {{- include "common.tplvalues.render" (dict "value" .Values.diagnosticMode.command "context" $) | nindent 12 }}
+          {{- else if .Values.server.command }}
+          command: {{- include "common.tplvalues.render" (dict "value" .Values.server.command "context" $) | nindent 12 }}
+          {{- end }}
+          {{- if .Values.diagnosticMode.enabled }}
+          args: {{- include "common.tplvalues.render" (dict "value" .Values.diagnosticMode.args "context" $) | nindent 12 }}
+          {{- else if .Values.server.args }}
+          args: {{- include "common.tplvalues.render" (dict "value" .Values.server.args "context" $) | nindent 12 }}
+          {{- else }}
+          args:
+            - "--config.file=/opt/drycc/prometheus/conf/{{ include "prometheus.server.configmapKey" . }}"
+            - "--storage.tsdb.path={{ .Values.server.persistence.mountPath }}"
+            - "--storage.tsdb.retention.time={{ .Values.server.retention }}"
+            - "--storage.tsdb.retention.size={{ .Values.server.retentionSize }}"
+            - "--log.level={{ .Values.server.logLevel }}"
+            - "--log.format={{ .Values.server.logFormat }}"
+            - "--web.listen-address=:{{ .Values.server.containerPorts.http }}"
+            - "--web.console.libraries=/opt/drycc/prometheus/conf/console_libraries"
+            - "--web.console.templates=/opt/drycc/prometheus/conf/consoles"
+            {{- if .Values.server.enableAdminAPI}}
+            - "--web.enable-admin-api"
+            {{- end }}
+            {{- if .Values.server.enableRemoteWriteReceiver }}
+            -  "--web.enable-remote-write-receiver"
+            {{- end }}
+            {{- if .Values.server.routePrefix }}
+            - "--web.route-prefix={{ .Values.server.routePrefix }}"
+            {{- end }}
+            {{- if .Values.server.enableFeatures }}
+            - "--enable-feature={{ join "," .Values.server.enableFeatures }}"
+            {{- end }}
+            {{- if .Values.server.extraArgs }}
+            {{- include "common.tplvalues.render" (dict "value" .Values.server.extraArgs "context" $) | nindent 12 }}
+            {{- end }}
+          {{- end }}
+          env:
+            {{- if .Values.server.extraEnvVars }}
+            {{- include "common.tplvalues.render" (dict "value" .Values.server.extraEnvVars "context" $) | nindent 12 }}
+            {{- end }}
+          envFrom:
+            {{- if .Values.server.extraEnvVarsCM }}
+            - configMapRef:
+                name: {{ include "common.tplvalues.render" (dict "value" .Values.server.extraEnvVarsCM "context" $) }}
+            {{- end }}
+            {{- if .Values.server.extraEnvVarsSecret }}
+            - secretRef:
+                name: {{ include "common.tplvalues.render" (dict "value" .Values.server.extraEnvVarsSecret "context" $) }}
+            {{- end }}
+          {{- if .Values.server.resources }}
+          resources: {{- toYaml .Values.server.resources | nindent 12 }}
+          {{- end }}
+          ports:
+            - name: http
+              containerPort: {{ .Values.server.containerPorts.http }}
+          {{- if not .Values.diagnosticMode.enabled }}
+          {{- if .Values.server.customLivenessProbe }}
+          livenessProbe: {{- include "common.tplvalues.render" (dict "value" .Values.server.customLivenessProbe "context" $) | nindent 12 }}
+          {{- else if .Values.server.livenessProbe.enabled }}
+          livenessProbe: {{- include "common.tplvalues.render" (dict "value" (omit .Values.server.livenessProbe "enabled") "context" $) | nindent 12 }}
+            httpGet:
+              path: /-/healthy
+              port: http
+          {{- end }}
+          {{- if .Values.server.customReadinessProbe }}
+          readinessProbe: {{- include "common.tplvalues.render" (dict "value" .Values.server.customReadinessProbe "context" $) | nindent 12 }}
+          {{- else if .Values.server.readinessProbe.enabled }}
+          readinessProbe: {{- include "common.tplvalues.render" (dict "value" (omit .Values.server.readinessProbe "enabled") "context" $) | nindent 12 }}
+            httpGet:
+              path: /-/ready
+              port: http
+          {{- end }}
+          {{- if .Values.server.customStartupProbe }}
+          startupProbe: {{- include "common.tplvalues.render" (dict "value" .Values.server.customStartupProbe "context" $) | nindent 12 }}
+          {{- else if .Values.server.startupProbe.enabled }}
+          startupProbe: {{- include "common.tplvalues.render" (dict "value" (omit .Values.server.startupProbe "enabled") "context" $) | nindent 12 }}
+            tcpSocket:
+              port: http
+          {{- end }}
+          {{- end }}
+          {{- if .Values.server.lifecycleHooks }}
+          lifecycle: {{- include "common.tplvalues.render" (dict "value" .Values.server.lifecycleHooks "context" $) | nindent 12 }}
+          {{- end }}
+          volumeMounts:
+            - name: config
+              mountPath: /opt/drycc/prometheus/conf
+              readOnly: true
+            - name: data
+              mountPath: {{ .Values.server.persistence.mountPath }}
+          {{- if .Values.server.extraVolumeMounts }}
+          {{- include "common.tplvalues.render" (dict "value" .Values.server.extraVolumeMounts "context" $) | nindent 12 }}
+          {{- end }}
+        {{- if .Values.server.thanos.create }}
+        - name: thanos-sidecar
+          image: {{ template "prometheus.server.thanosImage" . }}
+          imagePullPolicy: {{ .Values.server.thanos.image.pullPolicy }}
+          args:
+            - sidecar
+            - --prometheus.url={{ default "http://localhost:9090" .Values.server.thanos.prometheusUrl }}
+            - --grpc-address=0.0.0.0:10901
+            - --http-address=0.0.0.0:10902
+            - --tsdb.path=/prometheus/
+            {{- if .Values.server.thanos.objectStorageConfig.secretName }}
+            - --objstore.config=$(OBJSTORE_CONFIG)
+            {{- end }}
+            {{- if .Values.server.thanos.extraArgs }}
+            {{ toYaml .Values.server.thanos.extraArgs | indent 12  | trim }}
+            {{- end }}
+          {{- if .Values.server.thanos.objectStorageConfig.secretName }}
+          env:
+            - name: OBJSTORE_CONFIG
+              valueFrom:
+                secretKeyRef:
+                  name: {{ .Values.server.thanos.objectStorageConfig.secretName }}
+                  key: {{ .Values.server.thanos.objectStorageConfig.secretKey | default "thanos.yaml" }}
+          {{- end }}
+          {{- if .Values.server.thanos.resources }}
+          resources: {{- toYaml .Values.server.thanos.resources | nindent 12 }}
+          {{- end }}
+          ports:
+            - name: grpc
+              containerPort: 10901
+              protocol: TCP
+            - name: http
+              containerPort: 10902
+              protocol: TCP
+          volumeMounts:
+            - mountPath: /prometheus
+              name: data
+            {{- if .Values.server.thanos.extraVolumeMounts }}
+            {{- include "common.tplvalues.render" (dict "value" .Values.server.thanos.extraVolumeMounts "context" $) | nindent 12 }}
+            {{- end }}
+          {{- if .Values.server.thanos.containerSecurityContext.enabled }}
+          securityContext: {{- omit .Values.server.thanos.containerSecurityContext "enabled" | toYaml | nindent 12 }}
+          {{- end }}
+          {{- if .Values.server.thanos.customLivenessProbe }}
+          livenessProbe: {{- include "common.tplvalues.render" (dict "value" .Values.server.thanos.customLivenessProbe "context" $) | nindent 12 }}
+          {{- else if .Values.server.thanos.livenessProbe.enabled }}
+          livenessProbe: {{- include "common.tplvalues.render" (dict "value" (omit .Values.server.thanos.livenessProbe "enabled") "context" $) | nindent 12 }}
+            httpGet:
+              path: /-/healthy
+              port: http
+              scheme: HTTP
+          {{- end }}
+          {{- if .Values.server.thanos.customReadinessProbe }}
+          readinessProbe: {{- include "common.tplvalues.render" (dict "value" .Values.server.thanos.customReadinessProbe "context" $) | nindent 12 }}
+          {{- else if .Values.server.thanos.livenessProbe.enabled }}
+          readinessProbe: {{- include "common.tplvalues.render" (dict "value" (omit .Values.server.thanos.readinessProbe "enabled") "context" $) | nindent 12 }}
+            httpGet:
+              path: /-/ready
+              port: http
+              scheme: HTTP
+          {{- end }}
+        {{- end }}
+        {{- if .Values.server.sidecars }}
+        {{- include "common.tplvalues.render" ( dict "value" .Values.server.sidecars "context" $) | nindent 8 }}
+        {{- end }}
+      volumes:
+        - name: config
+          configMap:
+            name: {{ include "prometheus.server.configmapName" . }}
+        - name: data
+        {{- if .Values.server.persistence.enabled }}
+          persistentVolumeClaim:
+            claimName: {{ default (include "prometheus.server.fullname" .) .Values.server.persistence.existingClaim }}
+        {{- else }}
+          emptyDir: {}
+        {{- end }}
+        {{- if .Values.server.extraVolumes }}
+        {{- include "common.tplvalues.render" (dict "value" .Values.server.extraVolumes "context" $) | nindent 8 }}
+        {{- end }}
diff --git a/addons/prometheus/2/chart/prometheus/templates/server/ingress.yaml b/addons/prometheus/2/chart/prometheus/templates/server/ingress.yaml
new file mode 100644
index 00000000..9b8e0737
--- /dev/null
+++ b/addons/prometheus/2/chart/prometheus/templates/server/ingress.yaml
@@ -0,0 +1,61 @@
+{{- /*
+Copyright VMware, Inc.
+SPDX-License-Identifier: APACHE-2.0
+*/}}
+
+{{- if .Values.server.ingress.enabled }}
+apiVersion: {{ include "common.capabilities.ingress.apiVersion" . }}
+kind: Ingress
+metadata:
+  name: {{ template "prometheus.server.fullname" . }}
+  namespace: {{ include "common.names.namespace" . | quote }}
+  labels: {{- include "common.labels.standard" ( dict "customLabels" .Values.commonLabels "context" $ ) | nindent 4 }}
+    app.kubernetes.io/part-of: prometheus
+    app.kubernetes.io/component: alertmanager
+  {{- if or .Values.server.ingress.annotations .Values.commonAnnotations }}
+  {{- $annotations := include "common.tplvalues.merge" ( dict "values" ( list .Values.server.ingress.annotations .Values.commonAnnotations ) "context" . ) }}
+  annotations: {{- include "common.tplvalues.render" ( dict "value" $annotations "context" $) | nindent 4 }}
+  {{- end }}
+spec:
+  {{- if and .Values.server.ingress.ingressClassName (eq "true" (include "common.ingress.supportsIngressClassname" .)) }}
+  ingressClassName: {{ .Values.server.ingress.ingressClassName | quote }}
+  {{- end }}
+  rules:
+    {{- if .Values.server.ingress.hostname }}
+    - host: {{ .Values.server.ingress.hostname }}
+      http:
+        paths:
+          {{- if .Values.server.ingress.extraPaths }}
+          {{- toYaml .Values.server.ingress.extraPaths | nindent 10 }}
+          {{- end }}
+          - path: {{ .Values.server.ingress.path }}
+            {{- if eq "true" (include "common.ingress.supportsPathType" .) }}
+            pathType: {{ .Values.server.ingress.pathType }}
+            {{- end }}
+            backend: {{- include "common.ingress.backend" (dict "serviceName" (include "prometheus.server.fullname" .) "servicePort" "http" "context" $)  | nindent 14 }}
+    {{- end }}
+    {{- range .Values.server.ingress.extraHosts }}
+    - host: {{ .name | quote }}
+      http:
+        paths:
+          - path: {{ default "/" .path }}
+            {{- if eq "true" (include "common.ingress.supportsPathType" $) }}
+            pathType: {{ default "ImplementationSpecific" .pathType }}
+            {{- end }}
+            backend: {{- include "common.ingress.backend" (dict "serviceName" (include "prometheus.server.fullname" $) "servicePort" "http" "context" $) | nindent 14 }}
+    {{- end }}
+    {{- if .Values.server.ingress.extraRules }}
+    {{- include "common.tplvalues.render" (dict "value" .Values.server.ingress.extraRules "context" $) | nindent 4 }}
+    {{- end }}
+  {{- if or (and .Values.server.ingress.tls (or (include "common.ingress.certManagerRequest" ( dict "annotations" .Values.server.ingress.annotations )) .Values.server.ingress.selfSigned)) .Values.server.ingress.extraTls }}
+  tls:
+    {{- if and .Values.server.ingress.tls (or (include "common.ingress.certManagerRequest" ( dict "annotations" .Values.server.ingress.annotations )) .Values.server.ingress.selfSigned) }}
+    - hosts:
+        - {{ .Values.server.ingress.hostname | quote }}
+      secretName: {{ printf "%s-tls" .Values.server.ingress.hostname }}
+    {{- end }}
+    {{- if .Values.server.ingress.extraTls }}
+    {{- include "common.tplvalues.render" (dict "value" .Values.server.ingress.extraTls "context" $) | nindent 4 }}
+    {{- end }}
+  {{- end }}
+{{- end }}
diff --git a/addons/prometheus/2/chart/prometheus/templates/server/pdb.yaml b/addons/prometheus/2/chart/prometheus/templates/server/pdb.yaml
new file mode 100644
index 00000000..9a344625
--- /dev/null
+++ b/addons/prometheus/2/chart/prometheus/templates/server/pdb.yaml
@@ -0,0 +1,31 @@
+{{- /*
+Copyright VMware, Inc.
+SPDX-License-Identifier: APACHE-2.0
+*/}}
+
+{{- $replicaCount := int .Values.replicaCount }}
+{{- if and .Values.server.pdb.create (gt $replicaCount 1) }}
+apiVersion: {{ include "common.capabilities.policy.apiVersion" . }}
+kind: PodDisruptionBudget
+metadata:
+  name: {{ include "prometheus.server.fullname" . }}
+  namespace: {{ include "common.names.namespace" . | quote }}
+  labels: {{- include "common.labels.standard" ( dict "customLabels" .Values.commonLabels "context" $ ) | nindent 4 }}
+    app.kubernetes.io/part-of: prometheus
+    app.kubernetes.io/component: server
+  {{- if .Values.commonAnnotations }}
+  annotations: {{- include "common.tplvalues.render" ( dict "value" .Values.commonAnnotations "context" $ ) | nindent 4 }}
+  {{- end }}
+spec:
+  {{- if .Values.server.pdb.minAvailable }}
+  minAvailable: {{ .Values.server.pdb.minAvailable }}
+  {{- end  }}
+  {{- if .Values.server.pdb.maxUnavailable }}
+  maxUnavailable: {{ .Values.server.pdb.maxUnavailable }}
+  {{- end  }}
+  {{- $podLabels := include "common.tplvalues.merge" ( dict "values" ( list .Values.server.podLabels .Values.commonLabels ) "context" . ) }}
+  selector:
+    matchLabels: {{- include "common.labels.matchLabels" ( dict "customLabels" $podLabels "context" $ ) | nindent 6 }}
+      app.kubernetes.io/part-of: prometheus
+      app.kubernetes.io/component: server
+{{- end }}
diff --git a/addons/prometheus/2/chart/prometheus/templates/server/pvc.yaml b/addons/prometheus/2/chart/prometheus/templates/server/pvc.yaml
new file mode 100644
index 00000000..9f17fd43
--- /dev/null
+++ b/addons/prometheus/2/chart/prometheus/templates/server/pvc.yaml
@@ -0,0 +1,34 @@
+{{- /*
+Copyright VMware, Inc.
+SPDX-License-Identifier: APACHE-2.0
+*/}}
+
+{{- if and .Values.server.persistence.enabled (not .Values.server.persistence.existingClaim) -}}
+kind: PersistentVolumeClaim
+apiVersion: v1
+metadata:
+  name: {{ include "prometheus.server.fullname" . }}
+  namespace: {{ include "common.names.namespace" . | quote }}
+  labels: {{- include "common.labels.standard" ( dict "customLabels" .Values.commonLabels "context" $ ) | nindent 4 }}
+    app.kubernetes.io/part-of: prometheus
+    app.kubernetes.io/component: server
+  {{- if or .Values.server.persistence.annotations .Values.commonAnnotations }}
+  {{- $annotations := include "common.tplvalues.merge" ( dict "values" ( list .Values.server.persistence.annotations .Values.commonAnnotations ) "context" . ) }}
+  annotations: {{- include "common.tplvalues.render" ( dict "value" $annotations "context" $) | nindent 4 }}
+  {{- end }}
+spec:
+  accessModes:
+  {{- range .Values.server.persistence.accessModes }}
+    - {{ . | quote }}
+  {{- end }}
+  resources:
+    requests:
+      storage: {{ .Values.server.persistence.size | quote }}
+  {{- if .Values.server.persistence.selector }}
+  selector: {{- include "common.tplvalues.render" (dict "value" .Values.server.persistence.selector "context" $) | nindent 4 }}
+  {{- end }}
+  {{- if .Values.server.persistence.dataSource }}
+  dataSource: {{- include "common.tplvalues.render" (dict "value" .Values.server.persistence.dataSource "context" $) | nindent 4 }}
+  {{- end }}
+  {{- include "common.storage.class" (dict "persistence" .Values.server.persistence "global" .Values.global) | nindent 2 }}
+{{- end -}}
diff --git a/addons/prometheus/2/chart/prometheus/templates/server/service-account.yaml b/addons/prometheus/2/chart/prometheus/templates/server/service-account.yaml
new file mode 100644
index 00000000..1119b0f0
--- /dev/null
+++ b/addons/prometheus/2/chart/prometheus/templates/server/service-account.yaml
@@ -0,0 +1,20 @@
+{{- /*
+Copyright VMware, Inc.
+SPDX-License-Identifier: APACHE-2.0
+*/}}
+
+{{- if .Values.server.serviceAccount.create }}
+apiVersion: v1
+kind: ServiceAccount
+metadata:
+  name: {{ include "prometheus.server.serviceAccountName" . }}
+  namespace: {{ include "common.names.namespace" . | quote }}
+  labels: {{- include "common.labels.standard" ( dict "customLabels" .Values.commonLabels "context" $ ) | nindent 4 }}
+    app.kubernetes.io/part-of: prometheus
+    app.kubernetes.io/component: server
+  {{- if or .Values.server.serviceAccount.annotations .Values.commonAnnotations }}
+  {{- $annotations := include "common.tplvalues.merge" ( dict "values" ( list .Values.server.serviceAccount.annotations .Values.commonAnnotations ) "context" . ) }}
+  annotations: {{- include "common.tplvalues.render" ( dict "value" $annotations "context" $) | nindent 4 }}
+  {{- end }}
+automountServiceAccountToken: {{ .Values.server.serviceAccount.automountServiceAccountToken }}
+{{- end }}
diff --git a/addons/prometheus/2/chart/prometheus/templates/server/service.yaml b/addons/prometheus/2/chart/prometheus/templates/server/service.yaml
new file mode 100644
index 00000000..ce5afb43
--- /dev/null
+++ b/addons/prometheus/2/chart/prometheus/templates/server/service.yaml
@@ -0,0 +1,54 @@
+{{- /*
+Copyright VMware, Inc.
+SPDX-License-Identifier: APACHE-2.0
+*/}}
+
+apiVersion: v1
+kind: Service
+metadata:
+  name: {{ template "prometheus.server.fullname" . }}
+  namespace: {{ include "common.names.namespace" . | quote }}
+  labels: {{- include "common.labels.standard" ( dict "customLabels" .Values.commonLabels "context" $ ) | nindent 4 }}
+    app.kubernetes.io/part-of: prometheus
+    app.kubernetes.io/component: server
+  {{- if or .Values.server.service.annotations .Values.commonAnnotations }}
+  {{- $annotations := include "common.tplvalues.merge" ( dict "values" ( list .Values.server.service.annotations .Values.commonAnnotations ) "context" . ) }}
+  annotations: {{- include "common.tplvalues.render" ( dict "value" $annotations "context" $) | nindent 4 }}
+  {{- end }}
+spec:
+  type: {{ .Values.server.service.type }}
+  {{- if and .Values.server.service.clusterIP (eq .Values.server.service.type "ClusterIP") }}
+  clusterIP: {{ .Values.server.service.clusterIP }}
+  {{- end }}
+  {{- if .Values.server.service.sessionAffinity }}
+  sessionAffinity: {{ .Values.server.service.sessionAffinity }}
+  {{- end }}
+  {{- if .Values.server.service.sessionAffinityConfig }}
+  sessionAffinityConfig: {{- include "common.tplvalues.render" (dict "value" .Values.server.service.sessionAffinityConfig "context" $) | nindent 4 }}
+  {{- end }}
+  {{- if or (eq .Values.server.service.type "LoadBalancer") (eq .Values.server.service.type "NodePort") }}
+  externalTrafficPolicy: {{ .Values.server.service.externalTrafficPolicy | quote }}
+  {{- end }}
+  {{- if and (eq .Values.server.service.type "LoadBalancer") (not (empty .Values.server.service.loadBalancerSourceRanges)) }}
+  loadBalancerSourceRanges: {{ .Values.server.service.loadBalancerSourceRanges }}
+  {{- end }}
+  {{- if and (eq .Values.server.service.type "LoadBalancer") (not (empty .Values.server.service.loadBalancerIP)) }}
+  loadBalancerIP: {{ .Values.server.service.loadBalancerIP }}
+  {{- end }}
+  ports:
+    - name: http
+      port: {{ .Values.server.service.ports.http }}
+      targetPort: http
+      protocol: TCP
+      {{- if and (or (eq .Values.server.service.type "NodePort") (eq .Values.server.service.type "LoadBalancer")) (not (empty .Values.server.service.nodePorts.http)) }}
+      nodePort: {{ .Values.server.service.nodePorts.http }}
+      {{- else if eq .Values.server.service.type "ClusterIP" }}
+      nodePort: null
+      {{- end }}
+    {{- if .Values.server.service.extraPorts }}
+    {{- include "common.tplvalues.render" (dict "value" .Values.server.service.extraPorts "context" $) | nindent 4 }}
+    {{- end }}
+  {{- $podLabels := include "common.tplvalues.merge" ( dict "values" ( list .Values.server.podLabels .Values.commonLabels ) "context" . ) }}
+  selector: {{- include "common.labels.matchLabels" ( dict "customLabels" $podLabels "context" $ ) | nindent 4 }}
+    app.kubernetes.io/part-of: prometheus
+    app.kubernetes.io/component: server
diff --git a/addons/prometheus/2/chart/prometheus/templates/server/thanos-ingress.yaml b/addons/prometheus/2/chart/prometheus/templates/server/thanos-ingress.yaml
new file mode 100644
index 00000000..ece63af1
--- /dev/null
+++ b/addons/prometheus/2/chart/prometheus/templates/server/thanos-ingress.yaml
@@ -0,0 +1,62 @@
+{{- /*
+Copyright VMware, Inc.
+SPDX-License-Identifier: APACHE-2.0
+*/}}
+
+{{- if and .Values.server.thanos.create .Values.server.thanos.ingress.enabled }}
+apiVersion: {{ include "common.capabilities.ingress.apiVersion" . }}
+kind: Ingress
+metadata:
+  name: {{ template "prometheus.thanos-sidecar.fullname" . }}
+  namespace: {{ include "common.names.namespace" . | quote }}
+  labels: {{- include "common.labels.standard" ( dict "customLabels" .Values.commonLabels "context" $ ) | nindent 4 }}
+    app.kubernetes.io/part-of: prometheus
+    app.kubernetes.io/component: server
+    app.kubernetes.io/subcomponent: thanos
+  {{- if or .Values.server.thanos.ingress.annotations .Values.commonAnnotations }}
+  {{- $annotations := include "common.tplvalues.merge" ( dict "values" ( list .Values.server.thanos.ingress.annotations .Values.commonAnnotations ) "context" . ) }}
+  annotations: {{- include "common.tplvalues.render" ( dict "value" $annotations "context" $) | nindent 4 }}
+  {{- end }}
+spec:
+  {{- if and .Values.server.thanos.ingress.ingressClassName (include "common.ingress.supportsIngressClassname" .) }}
+  ingressClassName: {{ .Values.server.thanos.ingress.ingressClassName | quote }}
+  {{- end }}
+  rules:
+    {{- if .Values.server.thanos.ingress.hostname }}
+    - host: {{ .Values.server.thanos.ingress.hostname }}
+      http:
+        paths:
+          {{- if .Values.server.thanos.ingress.extraPaths }}
+          {{- include "common.tplvalues.render" (dict "value" .Values.server.thanos.ingress.extraPaths "context" $) | nindent 10 }}
+          {{- end }}
+          - path: {{ .Values.server.thanos.ingress.path }}
+            {{- if eq "true" (include "common.ingress.supportsPathType" .) }}
+            pathType: {{ .Values.server.thanos.ingress.pathType }}
+            {{- end }}
+            backend: {{- include "common.ingress.backend" (dict "serviceName" (include "prometheus.thanos-sidecar.fullname" $) "servicePort" "grpc" "context" $) | nindent 14 }}
+    {{- end }}
+    {{- range .Values.server.thanos.ingress.extraHosts }}
+    - host: {{ .name | quote }}
+      http:
+        paths:
+          - path: {{ default "/" .path }}
+            {{- if eq "true" (include "common.ingress.supportsPathType" $) }}
+            pathType: {{ default "ImplementationSpecific" .pathType }}
+            {{- end }}
+            backend: {{- include "common.ingress.backend" (dict "serviceName" (include "prometheus.thanos-sidecar.fullname" $) "servicePort" "grpc" "context" $) | nindent 14 }}
+    {{- end }}
+    {{- if .Values.server.thanos.ingress.extraRules }}
+    {{- include "common.tplvalues.render" (dict "value" .Values.server.thanos.ingress.extraRules "context" $) | nindent 4 }}
+    {{- end }}
+  {{- if or (and .Values.server.thanos.ingress.tls (or (include "common.ingress.certManagerRequest" ( dict "annotations" .Values.server.thanos.ingress.annotations )) .Values.server.thanos.ingress.selfSigned)) .Values.server.thanos.ingress.extraTls }}
+  tls:
+    {{- if and .Values.server.thanos.ingress.tls (or (include "common.ingress.certManagerRequest" ( dict "annotations" .Values.server.thanos.ingress.annotations )) .Values.server.thanos.ingress.selfSigned) }}
+    - hosts:
+        - {{ .Values.server.thanos.ingress.hostname | quote }}
+      secretName: {{ printf "%s-tls" .Values.server.thanos.ingress.hostname }}
+    {{- end }}
+    {{- if .Values.server.thanos.ingress.extraTls }}
+    {{- include "common.tplvalues.render" (dict "value" .Values.server.thanos.ingress.extraTls "context" $) | nindent 4 }}
+    {{- end }}
+  {{- end }}
+{{- end -}}
diff --git a/addons/prometheus/2/chart/prometheus/templates/server/thanos-service.yaml b/addons/prometheus/2/chart/prometheus/templates/server/thanos-service.yaml
new file mode 100644
index 00000000..ca2e3943
--- /dev/null
+++ b/addons/prometheus/2/chart/prometheus/templates/server/thanos-service.yaml
@@ -0,0 +1,55 @@
+{{- /*
+Copyright VMware, Inc.
+SPDX-License-Identifier: APACHE-2.0
+*/}}
+
+{{- if .Values.server.thanos.create }}
+apiVersion: v1
+kind: Service
+metadata:
+  name: {{ template "prometheus.thanos-sidecar.fullname" . }}
+  namespace: {{ include "common.names.namespace" . | quote }}
+  labels: {{- include "common.labels.standard" ( dict "customLabels" .Values.commonLabels "context" $ ) | nindent 4 }}
+    app.kubernetes.io/part-of: prometheus
+    app.kubernetes.io/component: server
+    app.kubernetes.io/subcomponent: thanos
+  {{- if or .Values.server.thanos.service.annotations .Values.commonAnnotations }}
+  {{- $annotations := include "common.tplvalues.merge" ( dict "values" ( list .Values.server.thanos.service.annotations .Values.commonAnnotations ) "context" . ) }}
+  annotations: {{- include "common.tplvalues.render" ( dict "value" $annotations "context" $) | nindent 4 }}
+  {{- end }}
+spec:
+  type: {{ .Values.server.thanos.service.type }}
+  {{- if and (eq .Values.server.thanos.service.type "LoadBalancer") (not (empty .Values.server.thanos.service.loadBalancerIP)) }}
+  loadBalancerIP: {{ .Values.server.thanos.service.loadBalancerIP }}
+  {{- end }}
+  {{- if and (eq .Values.server.thanos.service.type "LoadBalancer") (not (empty .Values.server.thanos.service.loadBalancerSourceRanges)) }}
+  loadBalancerSourceRanges: {{ .Values.server.thanos.service.loadBalancerSourceRanges }}
+  {{- end }}
+  {{- if and .Values.server.thanos.service.clusterIP (eq .Values.server.thanos.service.type "ClusterIP") }}
+  clusterIP: {{ .Values.server.thanos.service.clusterIP }}
+  {{- end }}
+  {{- if .Values.server.thanos.service.sessionAffinity }}
+  sessionAffinity: {{ .Values.server.thanos.service.sessionAffinity }}
+  {{- end }}
+  {{- if .Values.server.thanos.service.sessionAffinityConfig }}
+  sessionAffinityConfig: {{- include "common.tplvalues.render" (dict "value" .Values.server.thanos.service.sessionAffinityConfig "context" $) | nindent 4 }}
+  {{- end }}
+  {{- if or (eq .Values.server.thanos.service.type "LoadBalancer") (eq .Values.server.thanos.service.type "NodePort") }}
+  externalTrafficPolicy: {{ .Values.server.thanos.service.externalTrafficPolicy | quote }}
+  {{- end }}
+  ports:
+    - name: grpc
+      port: {{ .Values.server.thanos.service.ports.grpc }}
+      targetPort: grpc
+      protocol: TCP
+      {{- if and .Values.server.thanos.service.nodePorts.grpc (or (eq .Values.server.thanos.service.type "NodePort") (eq .Values.server.thanos.service.type "LoadBalancer")) }}
+      nodePort: {{ .Values.server.thanos.service.nodePorts.grpc }}
+      {{- end }}
+    {{- if .Values.server.thanos.service.extraPorts }}
+    {{- include "common.tplvalues.render" (dict "value" .Values.server.thanos.service.extraPorts "context" $) | nindent 4 }}
+    {{- end }}
+  {{- $podLabels := include "common.tplvalues.merge" ( dict "values" ( list .Values.server.podLabels .Values.commonLabels ) "context" . ) }}
+  selector: {{- include "common.labels.matchLabels" ( dict "customLabels" $podLabels "context" $ ) | nindent 4 }}
+    app.kubernetes.io/part-of: prometheus
+    app.kubernetes.io/component: server
+{{- end }}
diff --git a/addons/prometheus/2/chart/prometheus/templates/tls-secret.yaml b/addons/prometheus/2/chart/prometheus/templates/tls-secret.yaml
new file mode 100644
index 00000000..22a67a50
--- /dev/null
+++ b/addons/prometheus/2/chart/prometheus/templates/tls-secret.yaml
@@ -0,0 +1,138 @@
+{{- /*
+Copyright VMware, Inc.
+SPDX-License-Identifier: APACHE-2.0
+*/}}
+
+{{- if or .Values.server.ingress.enabled
+          (and .Values.alertmanager.enabled .Values.alertmanager.ingress.enabled)
+          (and .Values.server.thanos.create .Values.server.thanos.ingress.enabled) }}
+{{- if .Values.server.ingress.secrets }}
+{{- range .Values.server.ingress.secrets }}
+apiVersion: v1
+kind: Secret
+metadata:
+  name: {{ .name }}
+  namespace: {{ include "common.names.namespace" $ | quote }}
+  labels: {{- include "common.labels.standard" ( dict "customLabels" $.Values.commonLabels "context" $ ) | nindent 4 }}
+    app.kubernetes.io/part-of: prometheus
+    app.kubernetes.io/component: server
+  {{- if $.Values.commonAnnotations }}
+  annotations: {{- include "common.tplvalues.render" ( dict "value" $.Values.commonAnnotations "context" $ ) | nindent 4 }}
+  {{- end }}
+type: kubernetes.io/tls
+data:
+  tls.crt: {{ .certificate | b64enc }}
+  tls.key: {{ .key | b64enc }}
+---
+{{- end }}
+{{- end }}
+{{- if .Values.alertmanager.ingress.secrets }}
+{{- range .Values.alertmanager.ingress.secrets }}
+apiVersion: v1
+kind: Secret
+metadata:
+  name: {{ .name }}
+  namespace: {{ include "common.names.namespace" $ | quote }}
+  labels: {{- include "common.labels.standard" ( dict "customLabels" $.Values.commonLabels "context" $ ) | nindent 4 }}
+    app.kubernetes.io/part-of: prometheus
+    app.kubernetes.io/component: alertmanager
+  {{- if $.Values.commonAnnotations }}
+  annotations: {{- include "common.tplvalues.render" ( dict "value" $.Values.commonAnnotations "context" $ ) | nindent 4 }}
+  {{- end }}
+type: kubernetes.io/tls
+data:
+  tls.crt: {{ .certificate | b64enc }}
+  tls.key: {{ .key | b64enc }}
+---
+{{- end }}
+{{- end }}
+{{- if .Values.server.thanos.ingress.secrets }}
+{{- range .Values.server.thanos.ingress.secrets }}
+apiVersion: v1
+kind: Secret
+metadata:
+  name: {{ .name }}
+  namespace: {{ include "common.names.namespace" $ | quote }}
+  labels: {{- include "common.labels.standard" ( dict "customLabels" $.Values.commonLabels "context" $ ) | nindent 4 }}
+    app.kubernetes.io/part-of: prometheus
+    app.kubernetes.io/component: server
+    app.kubernetes.io/subcomponent: thanos
+  {{- if $.Values.commonAnnotations }}
+  annotations: {{- include "common.tplvalues.render" ( dict "value" $.Values.commonAnnotations "context" $ ) | nindent 4 }}
+  {{- end }}
+type: kubernetes.io/tls
+data:
+  tls.crt: {{ .certificate | b64enc }}
+  tls.key: {{ .key | b64enc }}
+---
+{{- end }}
+{{- end }}
+{{- if (or (and .Values.server.ingress.tls .Values.server.ingress.selfSigned)
+       (and .Values.alertmanager.ingress.tls .Values.alertmanager.ingress.selfSigned)
+       (and .Values.server.thanos.ingress.tls .Values.server.thanos.ingress.selfSigned)) }}
+{{- $ca := genCA "prometheus-ca" 365 }}
+{{- if and .Values.server.ingress.tls .Values.server.ingress.selfSigned }}
+{{- $secretName := printf "%s-tls" .Values.server.ingress.hostname }}
+{{- $cert := genSignedCert .Values.server.ingress.hostname nil (list .Values.server.ingress.hostname) 365 $ca }}
+apiVersion: v1
+kind: Secret
+metadata:
+  name: {{ $secretName }}
+  namespace: {{ include "common.names.namespace" . | quote }}
+  labels: {{- include "common.labels.standard" ( dict "customLabels" .Values.commonLabels "context" $ ) | nindent 4 }}
+    app.kubernetes.io/part-of: prometheus
+    app.kubernetes.io/component: server
+  {{- if .Values.commonAnnotations }}
+  annotations: {{- include "common.tplvalues.render" ( dict "value" .Values.commonAnnotations "context" $ ) | nindent 4 }}
+  {{- end }}
+type: kubernetes.io/tls
+data:
+  tls.crt: {{ include "common.secrets.lookup" (dict "secret" $secretName "key" "tls.crt" "defaultValue" $cert.Cert "context" $) }}
+  tls.key: {{ include "common.secrets.lookup" (dict "secret" $secretName "key" "tls.key" "defaultValue" $cert.Key "context" $) }}
+  ca.crt: {{ include "common.secrets.lookup" (dict "secret" $secretName "key" "ca.crt" "defaultValue" $ca.Cert "context" $) }}
+---
+{{- end }}
+{{- if and .Values.alertmanager.ingress.tls .Values.alertmanager.ingress.selfSigned }}
+{{- $secretName := printf "%s-tls" .Values.alertmanager.ingress.hostname }}
+{{- $cert := genSignedCert .Values.alertmanager.ingress.hostname nil (list .Values.alertmanager.ingress.hostname) 365 $ca }}
+apiVersion: v1
+kind: Secret
+metadata:
+  name: {{ $secretName }}
+  namespace: {{ include "common.names.namespace" . | quote }}
+  labels: {{- include "common.labels.standard" ( dict "customLabels" .Values.commonLabels "context" $ ) | nindent 4 }}
+    app.kubernetes.io/part-of: prometheus
+    app.kubernetes.io/component: alertmanager
+  {{- if .Values.commonAnnotations }}
+  annotations: {{- include "common.tplvalues.render" ( dict "value" .Values.commonAnnotations "context" $ ) | nindent 4 }}
+  {{- end }}
+type: kubernetes.io/tls
+data:
+  tls.crt: {{ include "common.secrets.lookup" (dict "secret" $secretName "key" "tls.crt" "defaultValue" $cert.Cert "context" $) }}
+  tls.key: {{ include "common.secrets.lookup" (dict "secret" $secretName "key" "tls.key" "defaultValue" $cert.Key "context" $) }}
+  ca.crt: {{ include "common.secrets.lookup" (dict "secret" $secretName "key" "ca.crt" "defaultValue" $ca.Cert "context" $) }}
+{{- end }}
+---
+{{- if and .Values.server.thanos.ingress.tls .Values.server.thanos.ingress.selfSigned }}
+{{- $secretName := printf "%s-tls" .Values.server.thanos.ingress.hostname }}
+{{- $cert := genSignedCert .Values.server.thanos.ingress.hostname nil (list .Values.server.thanos.ingress.hostname) 365 $ca }}
+apiVersion: v1
+kind: Secret
+metadata:
+  name: {{ $secretName }}
+  namespace: {{ include "common.names.namespace" . | quote }}
+  labels: {{- include "common.labels.standard" ( dict "customLabels" .Values.commonLabels "context" $ ) | nindent 4 }}
+    app.kubernetes.io/part-of: prometheus
+    app.kubernetes.io/component: server
+    app.kubernetes.io/subcomponent: thanos
+  {{- if .Values.commonAnnotations }}
+  annotations: {{- include "common.tplvalues.render" ( dict "value" .Values.commonAnnotations "context" $ ) | nindent 4 }}
+  {{- end }}
+type: kubernetes.io/tls
+data:
+  tls.crt: {{ include "common.secrets.lookup" (dict "secret" $secretName "key" "tls.crt" "defaultValue" $cert.Cert "context" $) }}
+  tls.key: {{ include "common.secrets.lookup" (dict "secret" $secretName "key" "tls.key" "defaultValue" $cert.Key "context" $) }}
+  ca.crt: {{ include "common.secrets.lookup" (dict "secret" $secretName "key" "ca.crt" "defaultValue" $ca.Cert "context" $) }}
+{{- end }}
+{{- end }}
+{{- end }}
diff --git a/addons/prometheus/2/chart/prometheus/values.schema.json b/addons/prometheus/2/chart/prometheus/values.schema.json
new file mode 100644
index 00000000..b7190c54
--- /dev/null
+++ b/addons/prometheus/2/chart/prometheus/values.schema.json
@@ -0,0 +1,1954 @@
+{
+    "title": "Chart Values",
+    "type": "object",
+    "properties": {
+        "global": {
+            "type": "object",
+            "properties": {
+                "imageRegistry": {
+                    "type": "string",
+                    "description": "Global Docker image registry",
+                    "default": ""
+                },
+                "imagePullSecrets": {
+                    "type": "array",
+                    "description": "Global Docker registry secret names as an array",
+                    "default": [],
+                    "items": {}
+                },
+                "storageClass": {
+                    "type": "string",
+                    "description": "Global StorageClass for Persistent Volume(s)",
+                    "default": ""
+                }
+            }
+        },
+        "kubeVersion": {
+            "type": "string",
+            "description": "Override Kubernetes version",
+            "default": ""
+        },
+        "nameOverride": {
+            "type": "string",
+            "description": "String to partially override common.names.name",
+            "default": ""
+        },
+        "fullnameOverride": {
+            "type": "string",
+            "description": "String to fully override common.names.fullname",
+            "default": ""
+        },
+        "namespaceOverride": {
+            "type": "string",
+            "description": "String to fully override common.names.namespace",
+            "default": ""
+        },
+        "commonLabels": {
+            "type": "object",
+            "description": "Labels to add to all deployed objects",
+            "default": {}
+        },
+        "commonAnnotations": {
+            "type": "object",
+            "description": "Annotations to add to all deployed objects",
+            "default": {}
+        },
+        "clusterDomain": {
+            "type": "string",
+            "description": "Kubernetes cluster domain name",
+            "default": "cluster.local"
+        },
+        "extraDeploy": {
+            "type": "array",
+            "description": "Array of extra objects to deploy with the release",
+            "default": [],
+            "items": {}
+        },
+        "diagnosticMode": {
+            "type": "object",
+            "properties": {
+                "enabled": {
+                    "type": "boolean",
+                    "description": "Enable diagnostic mode (all probes will be disabled and the command will be overridden)",
+                    "default": false
+                },
+                "command": {
+                    "type": "array",
+                    "description": "Command to override all containers in the deployment",
+                    "default": [
+                        "sleep"
+                    ],
+                    "items": {
+                        "type": "string"
+                    }
+                },
+                "args": {
+                    "type": "array",
+                    "description": "Args to override all containers in the deployment",
+                    "default": [
+                        "infinity"
+                    ],
+                    "items": {
+                        "type": "string"
+                    }
+                }
+            }
+        },
+        "ingress": {
+            "type": "object",
+            "properties": {
+                "apiVersion": {
+                    "type": "string",
+                    "description": "Force Ingress API version (automatically detected if not set)",
+                    "default": ""
+                }
+            }
+        },
+        "alertmanager": {
+            "type": "object",
+            "properties": {
+                "enabled": {
+                    "type": "boolean",
+                    "description": "Alertmanager enabled",
+                    "default": true
+                },
+                "image": {
+                    "type": "object",
+                    "properties": {
+                        "registry": {
+                            "type": "string",
+                            "description": "Alertmanager image registry",
+                            "default": "docker.io"
+                        },
+                        "repository": {
+                            "type": "string",
+                            "description": "Alertmanager image repository",
+                            "default": "drycc/alertmanager"
+                        },
+                        "tag": {
+                            "type": "string",
+                            "description": "Alertmanager image tag (immutable tags are recommended)",
+                            "default": "0.25.0-debian-11-r48"
+                        },
+                        "digest": {
+                            "type": "string",
+                            "description": "Alertmanager image digest in the way sha256:aa.... Please note this parameter, if set, will override the tag image tag (immutable tags are recommended)",
+                            "default": ""
+                        },
+                        "pullPolicy": {
+                            "type": "string",
+                            "description": "Alertmanager image pull policy",
+                            "default": "IfNotPresent"
+                        },
+                        "pullSecrets": {
+                            "type": "array",
+                            "description": "Alertmanager image pull secrets",
+                            "default": [],
+                            "items": {}
+                        }
+                    }
+                },
+                "configuration": {
+                    "type": "string",
+                    "description": "Alertmanager configuration. This content will be stored in the the alertmanager.yaml file and the content can be a template.",
+                    "default": "receivers:\n  - name: default-receiver\nroute:\n  group_wait: 10s\n  group_interval: 5m\n  receiver: default-receiver\n  repeat_interval: 3h\n"
+                },
+                "replicaCount": {
+                    "type": "number",
+                    "description": "Number of Alertmanager replicas to deploy",
+                    "default": 1
+                },
+                "containerPorts": {
+                    "type": "object",
+                    "properties": {
+                        "http": {
+                            "type": "number",
+                            "description": "Alertmanager HTTP container port",
+                            "default": 9093
+                        },
+                        "cluster": {
+                            "type": "number",
+                            "description": "Alertmanager Cluster HA port",
+                            "default": 9094
+                        }
+                    }
+                },
+                "livenessProbe": {
+                    "type": "object",
+                    "properties": {
+                        "enabled": {
+                            "type": "boolean",
+                            "description": "Enable livenessProbe on Alertmanager containers",
+                            "default": true
+                        },
+                        "initialDelaySeconds": {
+                            "type": "number",
+                            "description": "Initial delay seconds for livenessProbe",
+                            "default": 5
+                        },
+                        "periodSeconds": {
+                            "type": "number",
+                            "description": "Period seconds for livenessProbe",
+                            "default": 20
+                        },
+                        "timeoutSeconds": {
+                            "type": "number",
+                            "description": "Timeout seconds for livenessProbe",
+                            "default": 3
+                        },
+                        "failureThreshold": {
+                            "type": "number",
+                            "description": "Failure threshold for livenessProbe",
+                            "default": 3
+                        },
+                        "successThreshold": {
+                            "type": "number",
+                            "description": "Success threshold for livenessProbe",
+                            "default": 1
+                        }
+                    }
+                },
+                "readinessProbe": {
+                    "type": "object",
+                    "properties": {
+                        "enabled": {
+                            "type": "boolean",
+                            "description": "Enable readinessProbe on Alertmanager containers",
+                            "default": true
+                        },
+                        "initialDelaySeconds": {
+                            "type": "number",
+                            "description": "Initial delay seconds for readinessProbe",
+                            "default": 5
+                        },
+                        "periodSeconds": {
+                            "type": "number",
+                            "description": "Period seconds for readinessProbe",
+                            "default": 10
+                        },
+                        "timeoutSeconds": {
+                            "type": "number",
+                            "description": "Timeout seconds for readinessProbe",
+                            "default": 2
+                        },
+                        "failureThreshold": {
+                            "type": "number",
+                            "description": "Failure threshold for readinessProbe",
+                            "default": 5
+                        },
+                        "successThreshold": {
+                            "type": "number",
+                            "description": "Success threshold for readinessProbe",
+                            "default": 1
+                        }
+                    }
+                },
+                "startupProbe": {
+                    "type": "object",
+                    "properties": {
+                        "enabled": {
+                            "type": "boolean",
+                            "description": "Enable startupProbe on Alertmanager containers",
+                            "default": false
+                        },
+                        "initialDelaySeconds": {
+                            "type": "number",
+                            "description": "Initial delay seconds for startupProbe",
+                            "default": 2
+                        },
+                        "periodSeconds": {
+                            "type": "number",
+                            "description": "Period seconds for startupProbe",
+                            "default": 5
+                        },
+                        "timeoutSeconds": {
+                            "type": "number",
+                            "description": "Timeout seconds for startupProbe",
+                            "default": 2
+                        },
+                        "failureThreshold": {
+                            "type": "number",
+                            "description": "Failure threshold for startupProbe",
+                            "default": 10
+                        },
+                        "successThreshold": {
+                            "type": "number",
+                            "description": "Success threshold for startupProbe",
+                            "default": 1
+                        }
+                    }
+                },
+                "customLivenessProbe": {
+                    "type": "object",
+                    "description": "Custom livenessProbe that overrides the default one",
+                    "default": {}
+                },
+                "customReadinessProbe": {
+                    "type": "object",
+                    "description": "Custom readinessProbe that overrides the default one",
+                    "default": {}
+                },
+                "customStartupProbe": {
+                    "type": "object",
+                    "description": "Custom startupProbe that overrides the default one",
+                    "default": {}
+                },
+                "resources": {
+                    "type": "object",
+                    "properties": {
+                        "limits": {
+                            "type": "object",
+                            "description": "The resources limits for the Alertmanager containers",
+                            "default": {}
+                        },
+                        "requests": {
+                            "type": "object",
+                            "description": "The requested resources for the Alertmanager containers",
+                            "default": {}
+                        }
+                    }
+                },
+                "podSecurityContext": {
+                    "type": "object",
+                    "properties": {
+                        "enabled": {
+                            "type": "boolean",
+                            "description": "Enabled Alertmanager pods' Security Context",
+                            "default": true
+                        },
+                        "fsGroup": {
+                            "type": "number",
+                            "description": "Set Alertmanager pod's Security Context fsGroup",
+                            "default": 1001
+                        }
+                    }
+                },
+                "containerSecurityContext": {
+                    "type": "object",
+                    "properties": {
+                        "enabled": {
+                            "type": "boolean",
+                            "description": "Enabled Alertmanager containers' Security Context",
+                            "default": true
+                        },
+                        "runAsUser": {
+                            "type": "number",
+                            "description": "Set Alertmanager containers' Security Context runAsUser",
+                            "default": 1001
+                        },
+                        "runAsNonRoot": {
+                            "type": "boolean",
+                            "description": "Set Alertmanager containers' Security Context runAsNonRoot",
+                            "default": true
+                        },
+                        "readOnlyRootFilesystem": {
+                            "type": "boolean",
+                            "description": "Set Alertmanager containers' Security Context runAsNonRoot",
+                            "default": false
+                        }
+                    }
+                },
+                "existingConfigmap": {
+                    "type": "string",
+                    "description": "The name of an existing ConfigMap with your custom configuration for Alertmanager",
+                    "default": ""
+                },
+                "existingConfigmapKey": {
+                    "type": "string",
+                    "description": "The name of the key with the Alertmanager config file",
+                    "default": ""
+                },
+                "command": {
+                    "type": "array",
+                    "description": "Override default container command (useful when using custom images)",
+                    "default": [],
+                    "items": {}
+                },
+                "args": {
+                    "type": "array",
+                    "description": "Override default container args (useful when using custom images)",
+                    "default": [],
+                    "items": {}
+                },
+                "extraArgs": {
+                    "type": "array",
+                    "description": "Additional arguments passed to the Prometheus server container",
+                    "default": [],
+                    "items": {}
+                },
+                "hostAliases": {
+                    "type": "array",
+                    "description": "Alertmanager pods host aliases",
+                    "default": [],
+                    "items": {}
+                },
+                "podLabels": {
+                    "type": "object",
+                    "description": "Extra labels for Alertmanager pods",
+                    "default": {}
+                },
+                "podAnnotations": {
+                    "type": "object",
+                    "description": "Annotations for Alertmanager pods",
+                    "default": {}
+                },
+                "podAffinityPreset": {
+                    "type": "string",
+                    "description": "Pod affinity preset. Ignored if `affinity` is set. Allowed values: `soft` or `hard`",
+                    "default": ""
+                },
+                "podAntiAffinityPreset": {
+                    "type": "string",
+                    "description": "Pod anti-affinity preset. Ignored if `affinity` is set. Allowed values: `soft` or `hard`",
+                    "default": "soft"
+                },
+                "pdb": {
+                    "type": "object",
+                    "properties": {
+                        "create": {
+                            "type": "boolean",
+                            "description": "Enable/disable a Pod Disruption Budget creation",
+                            "default": false
+                        },
+                        "minAvailable": {
+                            "type": "number",
+                            "description": "Minimum number/percentage of pods that should remain scheduled",
+                            "default": 1
+                        },
+                        "maxUnavailable": {
+                            "type": "string",
+                            "description": "Maximum number/percentage of pods that may be made unavailable",
+                            "default": ""
+                        }
+                    }
+                },
+                "nodeAffinityPreset": {
+                    "type": "object",
+                    "properties": {
+                        "type": {
+                            "type": "string",
+                            "description": "Node affinity preset type. Ignored if `affinity` is set. Allowed values: `soft` or `hard`",
+                            "default": ""
+                        },
+                        "key": {
+                            "type": "string",
+                            "description": "Node label key to match. Ignored if `affinity` is set",
+                            "default": ""
+                        },
+                        "values": {
+                            "type": "array",
+                            "description": "Node label values to match. Ignored if `affinity` is set",
+                            "default": [],
+                            "items": {}
+                        }
+                    }
+                },
+                "affinity": {
+                    "type": "object",
+                    "description": "Affinity for Alertmanager pods assignment",
+                    "default": {}
+                },
+                "nodeSelector": {
+                    "type": "object",
+                    "description": "Node labels for Alertmanager pods assignment",
+                    "default": {}
+                },
+                "tolerations": {
+                    "type": "array",
+                    "description": "Tolerations for Alertmanager pods assignment",
+                    "default": [],
+                    "items": {}
+                },
+                "updateStrategy": {
+                    "type": "object",
+                    "properties": {
+                        "type": {
+                            "type": "string",
+                            "description": "Alertmanager statefulset strategy type",
+                            "default": "RollingUpdate"
+                        }
+                    }
+                },
+                "podManagementPolicy": {
+                    "type": "string",
+                    "description": "Statefulset Pod management policy, it needs to be Parallel to be able to complete the cluster join",
+                    "default": "OrderedReady"
+                },
+                "priorityClassName": {
+                    "type": "string",
+                    "description": "Alertmanager pods' priorityClassName",
+                    "default": ""
+                },
+                "topologySpreadConstraints": {
+                    "type": "array",
+                    "description": "Topology Spread Constraints for pod assignment spread across your cluster among failure-domains. Evaluated as a template",
+                    "default": [],
+                    "items": {}
+                },
+                "schedulerName": {
+                    "type": "string",
+                    "description": "Name of the k8s scheduler (other than default) for Alertmanager pods",
+                    "default": ""
+                },
+                "terminationGracePeriodSeconds": {
+                    "type": "string",
+                    "description": "Seconds Redmine pod needs to terminate gracefully",
+                    "default": ""
+                },
+                "lifecycleHooks": {
+                    "type": "object",
+                    "description": "for the Alertmanager container(s) to automate configuration before or after startup",
+                    "default": {}
+                },
+                "extraEnvVars": {
+                    "type": "array",
+                    "description": "Array with extra environment variables to add to Alertmanager nodes",
+                    "default": [],
+                    "items": {}
+                },
+                "extraEnvVarsCM": {
+                    "type": "string",
+                    "description": "Name of existing ConfigMap containing extra env vars for Alertmanager nodes",
+                    "default": ""
+                },
+                "extraEnvVarsSecret": {
+                    "type": "string",
+                    "description": "Name of existing Secret containing extra env vars for Alertmanager nodes",
+                    "default": ""
+                },
+                "extraVolumes": {
+                    "type": "array",
+                    "description": "Optionally specify extra list of additional volumes for the Alertmanager pod(s)",
+                    "default": [],
+                    "items": {}
+                },
+                "extraVolumeMounts": {
+                    "type": "array",
+                    "description": "Optionally specify extra list of additional volumeMounts for the Alertmanager container(s)",
+                    "default": [],
+                    "items": {}
+                },
+                "sidecars": {
+                    "type": "array",
+                    "description": "Add additional sidecar containers to the Alertmanager pod(s)",
+                    "default": [],
+                    "items": {}
+                },
+                "initContainers": {
+                    "type": "array",
+                    "description": "Add additional init containers to the Alertmanager pod(s)",
+                    "default": [],
+                    "items": {}
+                },
+                "ingress": {
+                    "type": "object",
+                    "properties": {
+                        "enabled": {
+                            "type": "boolean",
+                            "description": "Enable ingress record generation for Alertmanager",
+                            "default": false
+                        },
+                        "pathType": {
+                            "type": "string",
+                            "description": "Ingress path type",
+                            "default": "ImplementationSpecific"
+                        },
+                        "hostname": {
+                            "type": "string",
+                            "description": "Default host for the ingress record",
+                            "default": "alertmanager.prometheus.local"
+                        },
+                        "ingressClassName": {
+                            "type": "string",
+                            "description": "IngressClass that will be be used to implement the Ingress (Kubernetes 1.18+)",
+                            "default": ""
+                        },
+                        "path": {
+                            "type": "string",
+                            "description": "Default path for the ingress record",
+                            "default": "/"
+                        },
+                        "annotations": {
+                            "type": "object",
+                            "description": "Additional annotations for the Ingress resource. To enable certificate autogeneration, place here your cert-manager annotations.",
+                            "default": {}
+                        },
+                        "tls": {
+                            "type": "boolean",
+                            "description": "Enable TLS configuration for the host defined at `ingress.hostname` parameter",
+                            "default": false
+                        },
+                        "selfSigned": {
+                            "type": "boolean",
+                            "description": "Create a TLS secret for this ingress record using self-signed certificates generated by Helm",
+                            "default": false
+                        },
+                        "extraHosts": {
+                            "type": "array",
+                            "description": "An array with additional hostname(s) to be covered with the ingress record",
+                            "default": [],
+                            "items": {}
+                        },
+                        "extraPaths": {
+                            "type": "array",
+                            "description": "An array with additional arbitrary paths that may need to be added to the ingress under the main host",
+                            "default": [],
+                            "items": {}
+                        },
+                        "extraTls": {
+                            "type": "array",
+                            "description": "TLS configuration for additional hostname(s) to be covered with this ingress record",
+                            "default": [],
+                            "items": {}
+                        },
+                        "secrets": {
+                            "type": "array",
+                            "description": "Custom TLS certificates as secrets",
+                            "default": [],
+                            "items": {}
+                        },
+                        "extraRules": {
+                            "type": "array",
+                            "description": "Additional rules to be covered with this ingress record",
+                            "default": [],
+                            "items": {}
+                        }
+                    }
+                },
+                "serviceAccount": {
+                    "type": "object",
+                    "properties": {
+                        "create": {
+                            "type": "boolean",
+                            "description": "Specifies whether a ServiceAccount should be created",
+                            "default": true
+                        },
+                        "name": {
+                            "type": "string",
+                            "description": "The name of the ServiceAccount to use.",
+                            "default": ""
+                        },
+                        "annotations": {
+                            "type": "object",
+                            "description": "Additional Service Account annotations (evaluated as a template)",
+                            "default": {}
+                        },
+                        "automountServiceAccountToken": {
+                            "type": "boolean",
+                            "description": "Automount service account token for the server service account",
+                            "default": true
+                        }
+                    }
+                },
+                "service": {
+                    "type": "object",
+                    "properties": {
+                        "type": {
+                            "type": "string",
+                            "description": "Alertmanager service type",
+                            "default": "LoadBalancer"
+                        },
+                        "ports": {
+                            "type": "object",
+                            "properties": {
+                                "http": {
+                                    "type": "number",
+                                    "description": "Alertmanager service HTTP port",
+                                    "default": 80
+                                },
+                                "cluster": {
+                                    "type": "number",
+                                    "description": "Alertmanager cluster HA port",
+                                    "default": 9094
+                                }
+                            }
+                        },
+                        "nodePorts": {
+                            "type": "object",
+                            "properties": {
+                                "http": {
+                                    "type": "string",
+                                    "description": "Node port for HTTP",
+                                    "default": ""
+                                }
+                            }
+                        },
+                        "clusterIP": {
+                            "type": "string",
+                            "description": "Alertmanager service Cluster IP",
+                            "default": ""
+                        },
+                        "loadBalancerIP": {
+                            "type": "string",
+                            "description": "Alertmanager service Load Balancer IP",
+                            "default": ""
+                        },
+                        "loadBalancerSourceRanges": {
+                            "type": "array",
+                            "description": "Alertmanager service Load Balancer sources",
+                            "default": [],
+                            "items": {}
+                        },
+                        "externalTrafficPolicy": {
+                            "type": "string",
+                            "description": "Alertmanager service external traffic policy",
+                            "default": "Cluster"
+                        },
+                        "annotations": {
+                            "type": "object",
+                            "description": "Additional custom annotations for Alertmanager service",
+                            "default": {}
+                        },
+                        "extraPorts": {
+                            "type": "array",
+                            "description": "Extra ports to expose in Alertmanager service (normally used with the `sidecars` value)",
+                            "default": [],
+                            "items": {}
+                        },
+                        "sessionAffinity": {
+                            "type": "string",
+                            "description": "Control where client requests go, to the same pod or round-robin",
+                            "default": "None"
+                        },
+                        "sessionAffinityConfig": {
+                            "type": "object",
+                            "description": "Additional settings for the sessionAffinity",
+                            "default": {}
+                        }
+                    }
+                },
+                "persistence": {
+                    "type": "object",
+                    "properties": {
+                        "enabled": {
+                            "type": "boolean",
+                            "description": "Enable Alertmanager data persistence using VolumeClaimTemplates",
+                            "default": false
+                        },
+                        "mountPath": {
+                            "type": "string",
+                            "description": "Path to mount the volume at.",
+                            "default": "/drycc/alertmanager/data"
+                        },
+                        "subPath": {
+                            "type": "string",
+                            "description": "The subdirectory of the volume to mount to, useful in dev environments and one PV for multiple services",
+                            "default": ""
+                        },
+                        "storageClass": {
+                            "type": "string",
+                            "description": "PVC Storage Class for Concourse worker data volume",
+                            "default": ""
+                        },
+                        "accessModes": {
+                            "type": "array",
+                            "description": "PVC Access Mode for Concourse worker volume",
+                            "default": [
+                                "ReadWriteOnce"
+                            ],
+                            "items": {
+                                "type": "string"
+                            }
+                        },
+                        "size": {
+                            "type": "string",
+                            "description": "PVC Storage Request for Concourse worker volume",
+                            "default": "8Gi"
+                        },
+                        "annotations": {
+                            "type": "object",
+                            "description": "Annotations for the PVC",
+                            "default": {}
+                        },
+                        "selector": {
+                            "type": "object",
+                            "description": "Selector to match an existing Persistent Volume (this value is evaluated as a template)",
+                            "default": {}
+                        }
+                    }
+                }
+            }
+        },
+        "server": {
+            "type": "object",
+            "properties": {
+                "image": {
+                    "type": "object",
+                    "properties": {
+                        "registry": {
+                            "type": "string",
+                            "description": "Prometheus image registry",
+                            "default": "docker.io"
+                        },
+                        "repository": {
+                            "type": "string",
+                            "description": "Prometheus image repository",
+                            "default": "drycc/prometheus"
+                        },
+                        "tag": {
+                            "type": "string",
+                            "description": "Prometheus image tag (immutable tags are recommended)",
+                            "default": "2.44.0-debian-11-r0"
+                        },
+                        "digest": {
+                            "type": "string",
+                            "description": "Prometheus image digest in the way sha256:aa.... Please note this parameter, if set, will override the tag image tag (immutable tags are recommended)",
+                            "default": ""
+                        },
+                        "pullPolicy": {
+                            "type": "string",
+                            "description": "Prometheus image pull policy",
+                            "default": "IfNotPresent"
+                        },
+                        "pullSecrets": {
+                            "type": "array",
+                            "description": "Prometheus image pull secrets",
+                            "default": [],
+                            "items": {}
+                        }
+                    }
+                },
+                "configuration": {
+                    "type": "string",
+                    "description": "Promethus configuration. This content will be stored in the the prometheus.yaml file and the content can be a template.",
+                    "default": "global:\n  {{- if .Values.server.scrapeInterval }}\n  scrape_interval: {{ .Values.server.scrapeInterval }}\n  {{- end }}\n  {{- if .Values.server.scrapeTimeout }}\n  scrape_timeout: {{ .Values.server.scrapeTimeout }}\n  {{- end }}\n  {{- if .Values.server.evaluationInterval }}\n  evaluation_interval: {{ .Values.server.evaluationInterval }}\n  {{- end }}\n  external_labels:\n    monitor: {{ template \"common.names.fullname\" . }}\n    {{- if .Values.server.externalLabels }}\n    {{- include \"common.tplvalues.render\" (dict \"value\" .Values.server.externalLabels \"context\" $) | nindent 4 }}\n    {{- end }}\n{{- if .Values.server.remoteWrite }}\nremote_write: {{- include \"common.tplvalues.render\" (dict \"value\" .Values.server.remoteWrite \"context\" $) | nindent 4 }}\n{{- end }}\nscrape_configs:\n  - job_name: prometheus\n  {{- include \"prometheus.scrape_config\" (dict \"component\" \"server\" \"context\" $) | nindent 4 }}\n{{- if .Values.alertmanager.enabled }}\n  - job_name: alertmanager\n    {{- include \"prometheus.scrape_config\" (dict \"component\" \"alertmanager\" \"context\" $) | nindent 4 }}\n{{- end }}\n{{- if .Values.server.extraScrapeConfigs}}\n{{- include \"common.tplvalues.render\" (dict \"value\" .Values.server.extraScrapeConfigs \"context\" $) | nindent 2 }}\n{{- end }}\n{{- if or .Values.alertmanager.enabled .Values.server.alertingEndpoints}}\nalerting:\n  alertmanagers:\n    {{- if .Values.server.alertingEndpoints }}\n    {{- include \"common.tplvalues.render\" (dict \"value\" .Values.server.alertingEndpoints \"context\" $) | nindent 4 }}\n    {{- end }}\n    - scheme: HTTP\n      static_configs:\n        - targets: [ {{ printf \"%s:%d\" (include \"prometheus.alertmanager.fullname\" .) (int .Values.alertmanager.service.ports.http) }}]\nrule_files:\n  - rules.yaml\n{{- end }}\n"
+                },
+                "alertingRules": {
+                    "type": "object",
+                    "description": "Prometheus alerting rules. This content will be stored in the the rules.yaml file and the content can be a template.",
+                    "default": {}
+                },
+                "extraScrapeConfigs": {
+                    "type": "array",
+                    "description": "Promethus configuration, useful to declare new scrape_configs. This content will be merged with the 'server.configuration' value and stored in the the prometheus.yaml file.",
+                    "default": [],
+                    "items": {}
+                },
+                "replicaCount": {
+                    "type": "number",
+                    "description": "Number of Prometheus replicas to deploy",
+                    "default": 1
+                },
+                "containerPorts": {
+                    "type": "object",
+                    "properties": {
+                        "http": {
+                            "type": "number",
+                            "description": "Prometheus HTTP container port",
+                            "default": 9090
+                        }
+                    }
+                },
+                "livenessProbe": {
+                    "type": "object",
+                    "properties": {
+                        "enabled": {
+                            "type": "boolean",
+                            "description": "Enable livenessProbe on Prometheus containers",
+                            "default": true
+                        },
+                        "initialDelaySeconds": {
+                            "type": "number",
+                            "description": "Initial delay seconds for livenessProbe",
+                            "default": 5
+                        },
+                        "periodSeconds": {
+                            "type": "number",
+                            "description": "Period seconds for livenessProbe",
+                            "default": 20
+                        },
+                        "timeoutSeconds": {
+                            "type": "number",
+                            "description": "Timeout seconds for livenessProbe",
+                            "default": 3
+                        },
+                        "failureThreshold": {
+                            "type": "number",
+                            "description": "Failure threshold for livenessProbe",
+                            "default": 3
+                        },
+                        "successThreshold": {
+                            "type": "number",
+                            "description": "Success threshold for livenessProbe",
+                            "default": 1
+                        }
+                    }
+                },
+                "readinessProbe": {
+                    "type": "object",
+                    "properties": {
+                        "enabled": {
+                            "type": "boolean",
+                            "description": "Enable readinessProbe on Prometheus containers",
+                            "default": true
+                        },
+                        "initialDelaySeconds": {
+                            "type": "number",
+                            "description": "Initial delay seconds for readinessProbe",
+                            "default": 5
+                        },
+                        "periodSeconds": {
+                            "type": "number",
+                            "description": "Period seconds for readinessProbe",
+                            "default": 10
+                        },
+                        "timeoutSeconds": {
+                            "type": "number",
+                            "description": "Timeout seconds for readinessProbe",
+                            "default": 2
+                        },
+                        "failureThreshold": {
+                            "type": "number",
+                            "description": "Failure threshold for readinessProbe",
+                            "default": 5
+                        },
+                        "successThreshold": {
+                            "type": "number",
+                            "description": "Success threshold for readinessProbe",
+                            "default": 1
+                        }
+                    }
+                },
+                "startupProbe": {
+                    "type": "object",
+                    "properties": {
+                        "enabled": {
+                            "type": "boolean",
+                            "description": "Enable startupProbe on Prometheus containers",
+                            "default": false
+                        },
+                        "initialDelaySeconds": {
+                            "type": "number",
+                            "description": "Initial delay seconds for startupProbe",
+                            "default": 2
+                        },
+                        "periodSeconds": {
+                            "type": "number",
+                            "description": "Period seconds for startupProbe",
+                            "default": 5
+                        },
+                        "timeoutSeconds": {
+                            "type": "number",
+                            "description": "Timeout seconds for startupProbe",
+                            "default": 2
+                        },
+                        "failureThreshold": {
+                            "type": "number",
+                            "description": "Failure threshold for startupProbe",
+                            "default": 10
+                        },
+                        "successThreshold": {
+                            "type": "number",
+                            "description": "Success threshold for startupProbe",
+                            "default": 1
+                        }
+                    }
+                },
+                "customLivenessProbe": {
+                    "type": "object",
+                    "description": "Custom livenessProbe that overrides the default one",
+                    "default": {}
+                },
+                "customReadinessProbe": {
+                    "type": "object",
+                    "description": "Custom readinessProbe that overrides the default one",
+                    "default": {}
+                },
+                "customStartupProbe": {
+                    "type": "object",
+                    "description": "Custom startupProbe that overrides the default one",
+                    "default": {}
+                },
+                "resources": {
+                    "type": "object",
+                    "properties": {
+                        "limits": {
+                            "type": "object",
+                            "description": "The resources limits for the Prometheus containers",
+                            "default": {}
+                        },
+                        "requests": {
+                            "type": "object",
+                            "description": "The requested resources for the Prometheus containers",
+                            "default": {}
+                        }
+                    }
+                },
+                "podSecurityContext": {
+                    "type": "object",
+                    "properties": {
+                        "enabled": {
+                            "type": "boolean",
+                            "description": "Enabled Prometheus pods' Security Context",
+                            "default": true
+                        },
+                        "fsGroup": {
+                            "type": "number",
+                            "description": "Set Prometheus pod's Security Context fsGroup",
+                            "default": 1001
+                        }
+                    }
+                },
+                "containerSecurityContext": {
+                    "type": "object",
+                    "properties": {
+                        "enabled": {
+                            "type": "boolean",
+                            "description": "Enabled Prometheus containers' Security Context",
+                            "default": true
+                        },
+                        "runAsUser": {
+                            "type": "number",
+                            "description": "Set Prometheus containers' Security Context runAsUser",
+                            "default": 1001
+                        },
+                        "runAsNonRoot": {
+                            "type": "boolean",
+                            "description": "Set Prometheus containers' Security Context runAsNonRoot",
+                            "default": true
+                        },
+                        "readOnlyRootFilesystem": {
+                            "type": "boolean",
+                            "description": "Set Prometheus containers' Security Context runAsNonRoot",
+                            "default": false
+                        }
+                    }
+                },
+                "existingConfigmap": {
+                    "type": "string",
+                    "description": "The name of an existing ConfigMap with your custom configuration for Prometheus",
+                    "default": ""
+                },
+                "existingConfigmapKey": {
+                    "type": "string",
+                    "description": "The name of the key with the Prometheus config file",
+                    "default": ""
+                },
+                "command": {
+                    "type": "array",
+                    "description": "Override default container command (useful when using custom images)",
+                    "default": [],
+                    "items": {}
+                },
+                "args": {
+                    "type": "array",
+                    "description": "Override default container args (useful when using custom images)",
+                    "default": [],
+                    "items": {}
+                },
+                "extraArgs": {
+                    "type": "array",
+                    "description": "Additional arguments passed to the Prometheus server container",
+                    "default": [],
+                    "items": {}
+                },
+                "hostAliases": {
+                    "type": "array",
+                    "description": "Prometheus pods host aliases",
+                    "default": [],
+                    "items": {}
+                },
+                "podLabels": {
+                    "type": "object",
+                    "description": "Extra labels for Prometheus pods",
+                    "default": {}
+                },
+                "podAnnotations": {
+                    "type": "object",
+                    "description": "Annotations for Prometheus pods",
+                    "default": {}
+                },
+                "podAffinityPreset": {
+                    "type": "string",
+                    "description": "Pod affinity preset. Ignored if `affinity` is set. Allowed values: `soft` or `hard`",
+                    "default": ""
+                },
+                "podAntiAffinityPreset": {
+                    "type": "string",
+                    "description": "Pod anti-affinity preset. Ignored if `affinity` is set. Allowed values: `soft` or `hard`",
+                    "default": "soft"
+                },
+                "pdb": {
+                    "type": "object",
+                    "properties": {
+                        "create": {
+                            "type": "boolean",
+                            "description": "Enable/disable a Pod Disruption Budget creation",
+                            "default": false
+                        },
+                        "minAvailable": {
+                            "type": "number",
+                            "description": "Minimum number/percentage of pods that should remain scheduled",
+                            "default": 1
+                        },
+                        "maxUnavailable": {
+                            "type": "string",
+                            "description": "Maximum number/percentage of pods that may be made unavailable",
+                            "default": ""
+                        }
+                    }
+                },
+                "nodeAffinityPreset": {
+                    "type": "object",
+                    "properties": {
+                        "type": {
+                            "type": "string",
+                            "description": "Node affinity preset type. Ignored if `affinity` is set. Allowed values: `soft` or `hard`",
+                            "default": ""
+                        },
+                        "key": {
+                            "type": "string",
+                            "description": "Node label key to match. Ignored if `affinity` is set",
+                            "default": ""
+                        },
+                        "values": {
+                            "type": "array",
+                            "description": "Node label values to match. Ignored if `affinity` is set",
+                            "default": [],
+                            "items": {}
+                        }
+                    }
+                },
+                "affinity": {
+                    "type": "object",
+                    "description": "Affinity for Prometheus pods assignment",
+                    "default": {}
+                },
+                "nodeSelector": {
+                    "type": "object",
+                    "description": "Node labels for Prometheus pods assignment",
+                    "default": {}
+                },
+                "tolerations": {
+                    "type": "array",
+                    "description": "Tolerations for Prometheus pods assignment",
+                    "default": [],
+                    "items": {}
+                },
+                "updateStrategy": {
+                    "type": "object",
+                    "properties": {
+                        "type": {
+                            "type": "string",
+                            "description": "Prometheus deployment strategy type. If persistence is enabled, strategy type should be set to Recreate to avoid dead locks.",
+                            "default": "RollingUpdate"
+                        }
+                    }
+                },
+                "priorityClassName": {
+                    "type": "string",
+                    "description": "Prometheus pods' priorityClassName",
+                    "default": ""
+                },
+                "topologySpreadConstraints": {
+                    "type": "array",
+                    "description": "Topology Spread Constraints for pod assignment spread across your cluster among failure-domains. Evaluated as a template",
+                    "default": [],
+                    "items": {}
+                },
+                "schedulerName": {
+                    "type": "string",
+                    "description": "Name of the k8s scheduler (other than default) for Prometheus pods",
+                    "default": ""
+                },
+                "terminationGracePeriodSeconds": {
+                    "type": "string",
+                    "description": "Seconds Redmine pod needs to terminate gracefully",
+                    "default": ""
+                },
+                "lifecycleHooks": {
+                    "type": "object",
+                    "description": "for the Prometheus container(s) to automate configuration before or after startup",
+                    "default": {}
+                },
+                "extraEnvVars": {
+                    "type": "array",
+                    "description": "Array with extra environment variables to add to Prometheus nodes",
+                    "default": [],
+                    "items": {}
+                },
+                "extraEnvVarsCM": {
+                    "type": "string",
+                    "description": "Name of existing ConfigMap containing extra env vars for Prometheus nodes",
+                    "default": ""
+                },
+                "extraEnvVarsSecret": {
+                    "type": "string",
+                    "description": "Name of existing Secret containing extra env vars for Prometheus nodes",
+                    "default": ""
+                },
+                "extraVolumes": {
+                    "type": "array",
+                    "description": "Optionally specify extra list of additional volumes for the Prometheus pod(s)",
+                    "default": [],
+                    "items": {}
+                },
+                "extraVolumeMounts": {
+                    "type": "array",
+                    "description": "Optionally specify extra list of additional volumeMounts for the Prometheus container(s)",
+                    "default": [],
+                    "items": {}
+                },
+                "sidecars": {
+                    "type": "array",
+                    "description": "Add additional sidecar containers to the Prometheus pod(s)",
+                    "default": [],
+                    "items": {}
+                },
+                "initContainers": {
+                    "type": "array",
+                    "description": "Add additional init containers to the Prometheus pod(s)",
+                    "default": [],
+                    "items": {}
+                },
+                "routePrefix": {
+                    "type": "string",
+                    "description": "Prefix for the internal routes of web endpoints",
+                    "default": "/"
+                },
+                "remoteWrite": {
+                    "type": "array",
+                    "description": "The remote_write spec configuration for Prometheus",
+                    "default": [],
+                    "items": {}
+                },
+                "scrapeInterval": {
+                    "type": "string",
+                    "description": "Interval between consecutive scrapes. Example: \"1m\"",
+                    "default": ""
+                },
+                "scrapeTimeout": {
+                    "type": "string",
+                    "description": "Interval between consecutive scrapes. Example: \"10s\"",
+                    "default": ""
+                },
+                "evaluationInterval": {
+                    "type": "string",
+                    "description": "Interval between consecutive evaluations. Example: \"1m\"",
+                    "default": ""
+                },
+                "enableAdminAPI": {
+                    "type": "boolean",
+                    "description": "Enable Prometheus adminitrative API",
+                    "default": false
+                },
+                "enableRemoteWriteReceiver": {
+                    "type": "boolean",
+                    "description": "Enable Prometheus to be used as a receiver for the Prometheus remote write protocol.",
+                    "default": false
+                },
+                "enableFeatures": {
+                    "type": "array",
+                    "description": "Enable access to Prometheus disabled features.",
+                    "default": [],
+                    "items": {}
+                },
+                "logLevel": {
+                    "type": "string",
+                    "description": "Log level for Prometheus",
+                    "default": "info"
+                },
+                "logFormat": {
+                    "type": "string",
+                    "description": "Log format for Prometheus",
+                    "default": "logfmt"
+                },
+                "retention": {
+                    "type": "string",
+                    "description": "Metrics retention days",
+                    "default": "10d"
+                },
+                "retentionSize": {
+                    "type": "string",
+                    "description": "Maximum size of metrics",
+                    "default": "0"
+                },
+                "alertingEndpoints": {
+                    "type": "array",
+                    "description": "Alertmanagers to which alerts will be sent",
+                    "default": [],
+                    "items": {}
+                },
+                "externalLabels": {
+                    "type": "object",
+                    "description": "External labels to add to any time series or alerts when communicating with external systems",
+                    "default": {}
+                },
+                "thanos": {
+                    "type": "object",
+                    "properties": {
+                        "create": {
+                            "type": "boolean",
+                            "description": "Create a Thanos sidecar container",
+                            "default": false
+                        },
+                        "image": {
+                            "type": "object",
+                            "properties": {
+                                "registry": {
+                                    "type": "string",
+                                    "description": "Thanos image registry",
+                                    "default": "docker.io"
+                                },
+                                "repository": {
+                                    "type": "string",
+                                    "description": "Thanos image name",
+                                    "default": "drycc/thanos"
+                                },
+                                "tag": {
+                                    "type": "string",
+                                    "description": "Thanos image tag",
+                                    "default": "0.31.0-scratch-r3"
+                                },
+                                "digest": {
+                                    "type": "string",
+                                    "description": "Thanos image digest in the way sha256:aa.... Please note this parameter, if set, will override the tag",
+                                    "default": ""
+                                },
+                                "pullPolicy": {
+                                    "type": "string",
+                                    "description": "Thanos image pull policy",
+                                    "default": "IfNotPresent"
+                                },
+                                "pullSecrets": {
+                                    "type": "array",
+                                    "description": "Specify docker-registry secret names as an array",
+                                    "default": [],
+                                    "items": {}
+                                }
+                            }
+                        },
+                        "containerSecurityContext": {
+                            "type": "object",
+                            "properties": {
+                                "enabled": {
+                                    "type": "boolean",
+                                    "description": "Enable container security context",
+                                    "default": true
+                                },
+                                "readOnlyRootFilesystem": {
+                                    "type": "boolean",
+                                    "description": "mount / (root) as a readonly filesystem",
+                                    "default": false
+                                },
+                                "allowPrivilegeEscalation": {
+                                    "type": "boolean",
+                                    "description": "Switch privilegeEscalation possibility on or off",
+                                    "default": false
+                                },
+                                "runAsNonRoot": {
+                                    "type": "boolean",
+                                    "description": "Force the container to run as a non root user",
+                                    "default": true
+                                },
+                                "capabilities": {
+                                    "type": "object",
+                                    "properties": {
+                                        "drop": {
+                                            "type": "array",
+                                            "description": "Linux Kernel capabilities which should be dropped",
+                                            "default": [
+                                                "ALL"
+                                            ],
+                                            "items": {
+                                                "type": "string"
+                                            }
+                                        }
+                                    }
+                                }
+                            }
+                        },
+                        "prometheusUrl": {
+                            "type": "string",
+                            "description": "Override default prometheus url `http://localhost:9090`",
+                            "default": ""
+                        },
+                        "extraArgs": {
+                            "type": "array",
+                            "description": "Additional arguments passed to the thanos sidecar container",
+                            "default": [],
+                            "items": {}
+                        },
+                        "objectStorageConfig": {
+                            "type": "object",
+                            "properties": {
+                                "secretName": {
+                                    "type": "string",
+                                    "description": "Support mounting a Secret for the objectStorageConfig of the sideCar container.",
+                                    "default": ""
+                                },
+                                "secretKey": {
+                                    "type": "string",
+                                    "description": "Secret key with the configuration file.",
+                                    "default": "thanos.yaml"
+                                }
+                            }
+                        },
+                        "extraVolumeMounts": {
+                            "type": "array",
+                            "description": "Additional volumeMounts from `server.volumes` for thanos sidecar container",
+                            "default": [],
+                            "items": {}
+                        },
+                        "resources": {
+                            "type": "object",
+                            "properties": {
+                                "limits": {
+                                    "type": "object",
+                                    "description": "The resources limits for the Thanos sidecar container",
+                                    "default": {}
+                                },
+                                "requests": {
+                                    "type": "object",
+                                    "description": "The resources requests for the Thanos sidecar container",
+                                    "default": {}
+                                }
+                            }
+                        },
+                        "livenessProbe": {
+                            "type": "object",
+                            "properties": {
+                                "enabled": {
+                                    "type": "boolean",
+                                    "description": "Turn on and off liveness probe",
+                                    "default": true
+                                },
+                                "initialDelaySeconds": {
+                                    "type": "number",
+                                    "description": "Delay before liveness probe is initiated",
+                                    "default": 0
+                                },
+                                "periodSeconds": {
+                                    "type": "number",
+                                    "description": "How often to perform the probe",
+                                    "default": 5
+                                },
+                                "timeoutSeconds": {
+                                    "type": "number",
+                                    "description": "When the probe times out",
+                                    "default": 3
+                                },
+                                "failureThreshold": {
+                                    "type": "number",
+                                    "description": "Minimum consecutive failures for the probe",
+                                    "default": 120
+                                },
+                                "successThreshold": {
+                                    "type": "number",
+                                    "description": "Minimum consecutive successes for the probe",
+                                    "default": 1
+                                }
+                            }
+                        },
+                        "readinessProbe": {
+                            "type": "object",
+                            "properties": {
+                                "enabled": {
+                                    "type": "boolean",
+                                    "description": "Turn on and off readiness probe",
+                                    "default": true
+                                },
+                                "initialDelaySeconds": {
+                                    "type": "number",
+                                    "description": "Delay before readiness probe is initiated",
+                                    "default": 0
+                                },
+                                "periodSeconds": {
+                                    "type": "number",
+                                    "description": "How often to perform the probe",
+                                    "default": 5
+                                },
+                                "timeoutSeconds": {
+                                    "type": "number",
+                                    "description": "When the probe times out",
+                                    "default": 3
+                                },
+                                "failureThreshold": {
+                                    "type": "number",
+                                    "description": "Minimum consecutive failures for the probe",
+                                    "default": 120
+                                },
+                                "successThreshold": {
+                                    "type": "number",
+                                    "description": "Minimum consecutive successes for the probe",
+                                    "default": 1
+                                }
+                            }
+                        },
+                        "customLivenessProbe": {
+                            "type": "object",
+                            "description": "Custom livenessProbe that overrides the default one",
+                            "default": {}
+                        },
+                        "customReadinessProbe": {
+                            "type": "object",
+                            "description": "Custom readinessProbe that overrides the default one",
+                            "default": {}
+                        },
+                        "service": {
+                            "type": "object",
+                            "properties": {
+                                "type": {
+                                    "type": "string",
+                                    "description": "Kubernetes service type",
+                                    "default": "ClusterIP"
+                                },
+                                "ports": {
+                                    "type": "object",
+                                    "properties": {
+                                        "grpc": {
+                                            "type": "number",
+                                            "description": "Thanos service port",
+                                            "default": 10901
+                                        }
+                                    }
+                                },
+                                "clusterIP": {
+                                    "type": "string",
+                                    "description": "Specific cluster IP when service type is cluster IP. Use `None` to create headless service by default.",
+                                    "default": "None"
+                                },
+                                "nodePorts": {
+                                    "type": "object",
+                                    "properties": {
+                                        "grpc": {
+                                            "type": "string",
+                                            "description": "Specify the nodePort value for the LoadBalancer and NodePort service types.",
+                                            "default": ""
+                                        }
+                                    }
+                                },
+                                "loadBalancerIP": {
+                                    "type": "string",
+                                    "description": "`loadBalancerIP` if service type is `LoadBalancer`",
+                                    "default": ""
+                                },
+                                "loadBalancerSourceRanges": {
+                                    "type": "array",
+                                    "description": "Address that are allowed when svc is `LoadBalancer`",
+                                    "default": [],
+                                    "items": {}
+                                },
+                                "annotations": {
+                                    "type": "object",
+                                    "description": "Additional annotations for Prometheus service",
+                                    "default": {}
+                                },
+                                "extraPorts": {
+                                    "type": "array",
+                                    "description": "Additional ports to expose from the Thanos sidecar container",
+                                    "default": [],
+                                    "items": {}
+                                },
+                                "externalTrafficPolicy": {
+                                    "type": "string",
+                                    "description": "Prometheus service external traffic policy",
+                                    "default": "Cluster"
+                                },
+                                "sessionAffinity": {
+                                    "type": "string",
+                                    "description": "Session Affinity for Kubernetes service, can be \"None\" or \"ClientIP\"",
+                                    "default": "None"
+                                },
+                                "sessionAffinityConfig": {
+                                    "type": "object",
+                                    "description": "Additional settings for the sessionAffinity",
+                                    "default": {}
+                                }
+                            }
+                        },
+                        "ingress": {
+                            "type": "object",
+                            "properties": {
+                                "enabled": {
+                                    "type": "boolean",
+                                    "description": "Enable ingress controller resource",
+                                    "default": false
+                                },
+                                "pathType": {
+                                    "type": "string",
+                                    "description": "Ingress path type",
+                                    "default": "ImplementationSpecific"
+                                },
+                                "hostname": {
+                                    "type": "string",
+                                    "description": "Default host for the ingress record",
+                                    "default": "thanos.prometheus.local"
+                                },
+                                "path": {
+                                    "type": "string",
+                                    "description": "Default path for the ingress record",
+                                    "default": "/"
+                                },
+                                "annotations": {
+                                    "type": "object",
+                                    "description": "Additional annotations for the Ingress resource. To enable certificate autogeneration, place here your cert-manager annotations.",
+                                    "default": {}
+                                },
+                                "ingressClassName": {
+                                    "type": "string",
+                                    "description": "IngressClass that will be be used to implement the Ingress (Kubernetes 1.18+)",
+                                    "default": ""
+                                },
+                                "tls": {
+                                    "type": "boolean",
+                                    "description": "Enable TLS configuration for the host defined at `ingress.hostname` parameter",
+                                    "default": false
+                                },
+                                "selfSigned": {
+                                    "type": "boolean",
+                                    "description": "Create a TLS secret for this ingress record using self-signed certificates generated by Helm",
+                                    "default": false
+                                },
+                                "extraHosts": {
+                                    "type": "array",
+                                    "description": "An array with additional hostname(s) to be covered with the ingress record",
+                                    "default": [],
+                                    "items": {}
+                                },
+                                "extraPaths": {
+                                    "type": "array",
+                                    "description": "An array with additional arbitrary paths that may need to be added to the ingress under the main host",
+                                    "default": [],
+                                    "items": {}
+                                },
+                                "extraTls": {
+                                    "type": "array",
+                                    "description": "TLS configuration for additional hostname(s) to be covered with this ingress record",
+                                    "default": [],
+                                    "items": {}
+                                },
+                                "secrets": {
+                                    "type": "array",
+                                    "description": "Custom TLS certificates as secrets",
+                                    "default": [],
+                                    "items": {}
+                                },
+                                "extraRules": {
+                                    "type": "array",
+                                    "description": "The list of additional rules to be added to this ingress record. Evaluated as a template",
+                                    "default": [],
+                                    "items": {}
+                                }
+                            }
+                        }
+                    }
+                },
+                "ingress": {
+                    "type": "object",
+                    "properties": {
+                        "enabled": {
+                            "type": "boolean",
+                            "description": "Enable ingress record generation for Prometheus",
+                            "default": false
+                        },
+                        "pathType": {
+                            "type": "string",
+                            "description": "Ingress path type",
+                            "default": "ImplementationSpecific"
+                        },
+                        "hostname": {
+                            "type": "string",
+                            "description": "Default host for the ingress record",
+                            "default": "server.prometheus.local"
+                        },
+                        "ingressClassName": {
+                            "type": "string",
+                            "description": "IngressClass that will be be used to implement the Ingress (Kubernetes 1.18+)",
+                            "default": ""
+                        },
+                        "path": {
+                            "type": "string",
+                            "description": "Default path for the ingress record",
+                            "default": "/"
+                        },
+                        "annotations": {
+                            "type": "object",
+                            "description": "Additional annotations for the Ingress resource. To enable certificate autogeneration, place here your cert-manager annotations.",
+                            "default": {}
+                        },
+                        "tls": {
+                            "type": "boolean",
+                            "description": "Enable TLS configuration for the host defined at `ingress.hostname` parameter",
+                            "default": false
+                        },
+                        "selfSigned": {
+                            "type": "boolean",
+                            "description": "Create a TLS secret for this ingress record using self-signed certificates generated by Helm",
+                            "default": false
+                        },
+                        "extraHosts": {
+                            "type": "array",
+                            "description": "An array with additional hostname(s) to be covered with the ingress record",
+                            "default": [],
+                            "items": {}
+                        },
+                        "extraPaths": {
+                            "type": "array",
+                            "description": "An array with additional arbitrary paths that may need to be added to the ingress under the main host",
+                            "default": [],
+                            "items": {}
+                        },
+                        "extraTls": {
+                            "type": "array",
+                            "description": "TLS configuration for additional hostname(s) to be covered with this ingress record",
+                            "default": [],
+                            "items": {}
+                        },
+                        "secrets": {
+                            "type": "array",
+                            "description": "Custom TLS certificates as secrets",
+                            "default": [],
+                            "items": {}
+                        },
+                        "extraRules": {
+                            "type": "array",
+                            "description": "Additional rules to be covered with this ingress record",
+                            "default": [],
+                            "items": {}
+                        }
+                    }
+                },
+                "serviceAccount": {
+                    "type": "object",
+                    "properties": {
+                        "create": {
+                            "type": "boolean",
+                            "description": "Specifies whether a ServiceAccount should be created",
+                            "default": true
+                        },
+                        "name": {
+                            "type": "string",
+                            "description": "The name of the ServiceAccount to use.",
+                            "default": ""
+                        },
+                        "annotations": {
+                            "type": "object",
+                            "description": "Additional Service Account annotations (evaluated as a template)",
+                            "default": {}
+                        },
+                        "automountServiceAccountToken": {
+                            "type": "boolean",
+                            "description": "Automount service account token for the server service account",
+                            "default": true
+                        }
+                    }
+                },
+                "service": {
+                    "type": "object",
+                    "properties": {
+                        "type": {
+                            "type": "string",
+                            "description": "Prometheus service type",
+                            "default": "LoadBalancer"
+                        },
+                        "ports": {
+                            "type": "object",
+                            "properties": {
+                                "http": {
+                                    "type": "number",
+                                    "description": "Prometheus service HTTP port",
+                                    "default": 80
+                                }
+                            }
+                        },
+                        "nodePorts": {
+                            "type": "object",
+                            "properties": {
+                                "http": {
+                                    "type": "string",
+                                    "description": "Node port for HTTP",
+                                    "default": ""
+                                }
+                            }
+                        },
+                        "clusterIP": {
+                            "type": "string",
+                            "description": "Prometheus service Cluster IP",
+                            "default": ""
+                        },
+                        "loadBalancerIP": {
+                            "type": "string",
+                            "description": "Prometheus service Load Balancer IP",
+                            "default": ""
+                        },
+                        "loadBalancerSourceRanges": {
+                            "type": "array",
+                            "description": "Prometheus service Load Balancer sources",
+                            "default": [],
+                            "items": {}
+                        },
+                        "externalTrafficPolicy": {
+                            "type": "string",
+                            "description": "Prometheus service external traffic policy",
+                            "default": "Cluster"
+                        },
+                        "annotations": {
+                            "type": "object",
+                            "description": "Additional custom annotations for Prometheus service",
+                            "default": {}
+                        },
+                        "extraPorts": {
+                            "type": "array",
+                            "description": "Extra ports to expose in Prometheus service (normally used with the `sidecars` value)",
+                            "default": [],
+                            "items": {}
+                        },
+                        "sessionAffinity": {
+                            "type": "string",
+                            "description": "Control where client requests go, to the same pod or round-robin. ClientIP by default.",
+                            "default": "ClientIP"
+                        },
+                        "sessionAffinityConfig": {
+                            "type": "object",
+                            "description": "Additional settings for the sessionAffinity",
+                            "default": {}
+                        }
+                    }
+                },
+                "persistence": {
+                    "type": "object",
+                    "properties": {
+                        "enabled": {
+                            "type": "boolean",
+                            "description": "Enable persistence using Persistent Volume Claims. If you have multiple instances (server.repicacount > 1), please considere using an external storage service like Thanos or Grafana Mimir",
+                            "default": false
+                        },
+                        "mountPath": {
+                            "type": "string",
+                            "description": "Path to mount the volume at.",
+                            "default": "/drycc/prometheus/data"
+                        },
+                        "subPath": {
+                            "type": "string",
+                            "description": "The subdirectory of the volume to mount to, useful in dev environments and one PV for multiple services",
+                            "default": ""
+                        },
+                        "storageClass": {
+                            "type": "string",
+                            "description": "Storage class of backing PVC",
+                            "default": ""
+                        },
+                        "annotations": {
+                            "type": "object",
+                            "description": "Persistent Volume Claim annotations",
+                            "default": {}
+                        },
+                        "accessModes": {
+                            "type": "array",
+                            "description": "Persistent Volume Access Modes",
+                            "default": [
+                                "ReadWriteOnce"
+                            ],
+                            "items": {
+                                "type": "string"
+                            }
+                        },
+                        "size": {
+                            "type": "string",
+                            "description": "Size of data volume",
+                            "default": "8Gi"
+                        },
+                        "existingClaim": {
+                            "type": "string",
+                            "description": "The name of an existing PVC to use for persistence",
+                            "default": ""
+                        },
+                        "selector": {
+                            "type": "object",
+                            "description": "Selector to match an existing Persistent Volume for WordPress data PVC",
+                            "default": {}
+                        },
+                        "dataSource": {
+                            "type": "object",
+                            "description": "Custom PVC data source",
+                            "default": {}
+                        }
+                    }
+                },
+                "rbac": {
+                    "type": "object",
+                    "properties": {
+                        "create": {
+                            "type": "boolean",
+                            "description": "Specifies whether RBAC resources should be created",
+                            "default": true
+                        },
+                        "rules": {
+                            "type": "array",
+                            "description": "Custom RBAC rules to set",
+                            "default": [],
+                            "items": {}
+                        }
+                    }
+                }
+            }
+        },
+        "volumePermissions": {
+            "type": "object",
+            "properties": {
+                "enabled": {
+                    "type": "boolean",
+                    "description": "Enable init container that changes the owner/group of the PV mount point to `runAsUser:fsGroup`",
+                    "default": false
+                },
+                "image": {
+                    "type": "object",
+                    "properties": {
+                        "registry": {
+                            "type": "string",
+                            "description": "OS Shell + Utility image registry",
+                            "default": "docker.io"
+                        },
+                        "repository": {
+                            "type": "string",
+                            "description": "OS Shell + Utility image repository",
+                            "default": "drycc/base"
+                        },
+                        "tag": {
+                            "type": "string",
+                            "description": "OS Shell + Utility image tag (immutable tags are recommended)",
+                            "default": "bookworm"
+                        },
+                        "pullPolicy": {
+                            "type": "string",
+                            "description": "OS Shell + Utility image pull policy",
+                            "default": "IfNotPresent"
+                        },
+                        "pullSecrets": {
+                            "type": "array",
+                            "description": "OS Shell + Utility image pull secrets",
+                            "default": [],
+                            "items": {}
+                        }
+                    }
+                },
+                "resources": {
+                    "type": "object",
+                    "properties": {
+                        "limits": {
+                            "type": "object",
+                            "description": "The resources limits for the init container",
+                            "default": {}
+                        },
+                        "requests": {
+                            "type": "object",
+                            "description": "The requested resources for the init container",
+                            "default": {}
+                        }
+                    }
+                },
+                "containerSecurityContext": {
+                    "type": "object",
+                    "properties": {
+                        "runAsUser": {
+                            "type": "number",
+                            "description": "Set init container's Security Context runAsUser",
+                            "default": 0
+                        }
+                    }
+                }
+            }
+        }
+    }
+}
diff --git a/addons/prometheus/2/chart/prometheus/values.yaml b/addons/prometheus/2/chart/prometheus/values.yaml
new file mode 100644
index 00000000..5d24a56a
--- /dev/null
+++ b/addons/prometheus/2/chart/prometheus/values.yaml
@@ -0,0 +1,1510 @@
+# Copyright VMware, Inc.
+# SPDX-License-Identifier: APACHE-2.0
+
+## @section Global parameters
+## Global Docker image parameters
+## Please, note that this will override the image parameters, including dependencies, configured to use the global value
+## Current available global Docker image parameters: imageRegistry, imagePullSecrets and storageClass
+##
+
+## @param global.imageRegistry Global Docker image registry
+## @param global.imagePullSecrets Global Docker registry secret names as an array
+## @param global.storageClass Global StorageClass for Persistent Volume(s)
+##
+global:
+  imageRegistry: ""
+  ## E.g.
+  ## imagePullSecrets:
+  ##   - myRegistryKeySecretName
+  ##
+  imagePullSecrets: []
+  storageClass: ""
+
+## @section Common parameters
+##
+
+## @param kubeVersion Override Kubernetes version
+##
+kubeVersion: ""
+## @param nameOverride String to partially override common.names.name
+##
+nameOverride: ""
+## @param fullnameOverride String to fully override common.names.fullname
+##
+fullnameOverride: ""
+## @param namespaceOverride String to fully override common.names.namespace
+##
+namespaceOverride: ""
+## @param commonLabels Labels to add to all deployed objects
+##
+commonLabels: {}
+## @param commonAnnotations Annotations to add to all deployed objects
+##
+commonAnnotations: {}
+## @param clusterDomain Kubernetes cluster domain name
+##
+clusterDomain: cluster.local
+## @param extraDeploy Array of extra objects to deploy with the release
+##
+extraDeploy: []
+
+## Enable diagnostic mode in the deployment
+##
+diagnosticMode:
+  ## @param diagnosticMode.enabled Enable diagnostic mode (all probes will be disabled and the command will be overridden)
+  ##
+  enabled: false
+  ## @param diagnosticMode.command Command to override all containers in the deployment
+  ##
+  command:
+    - sleep
+  ## @param diagnosticMode.args Args to override all containers in the deployment
+  ##
+  args:
+    - infinity
+## @param ingress.apiVersion Force Ingress API version (automatically detected if not set)
+##
+ingress:
+  apiVersion: ""
+
+## @section Alertmanager Parameters
+##
+## Drycc Alertmanager image
+## ref: https://hub.docker.com/r/drycc/alertmanager/tags/
+## @param alertmanager.enabled Alertmanager enabled
+## @param alertmanager.image.registry Alertmanager image registry
+## @param alertmanager.image.repository Alertmanager image repository
+## @param alertmanager.image.tag Alertmanager image tag (immutable tags are recommended)
+## @param alertmanager.image.digest Alertmanager image digest in the way sha256:aa.... Please note this parameter, if set, will override the tag image tag (immutable tags are recommended)
+## @param alertmanager.image.pullPolicy Alertmanager image pull policy
+## @param alertmanager.image.pullSecrets Alertmanager image pull secrets
+##
+alertmanager:
+  enabled: true
+  image: 
+    registry: registry.drycc.cc
+    repository: drycc-addons/alertmanager
+    tag: "0"
+    digest: ""
+    ## Specify a imagePullPolicy
+    ## Defaults to 'Always' if image tag is 'latest', else set to 'IfNotPresent'
+    ## ref: http://kubernetes.io/docs/user-guide/images/#pre-pulling-images
+    ##
+    pullPolicy: IfNotPresent
+    ## Optionally specify an array of imagePullSecrets.
+    ## Secrets must be manually created in the namespace.
+    ## ref: https://kubernetes.io/docs/tasks/configure-pod-container/pull-image-private-registry/
+    ## e.g:
+    ## pullSecrets:
+    ##   - myRegistryKeySecretName
+    ##
+    pullSecrets: []
+
+  ## @param alertmanager.configuration [string] Alertmanager configuration. This content will be stored in the the alertmanager.yaml file and the content can be a template.
+  ## ref: <https://github.com/prometheus-community/helm-charts/blob/8f2743ed3a9c93c56978a95b62a63e84c52f5748/charts/alertmanager/values.yaml#L171-L188>
+  ##
+  configuration: |
+    receivers:
+      - name: default-receiver
+    route:
+      group_wait: 10s
+      group_interval: 5m
+      receiver: default-receiver
+      repeat_interval: 3h
+
+  ## @param alertmanager.replicaCount Number of Alertmanager replicas to deploy
+  ##
+  replicaCount: 1
+  ## @param alertmanager.containerPorts.http Alertmanager HTTP container port
+  ## @param alertmanager.containerPorts.cluster Alertmanager Cluster HA port
+  ##
+  containerPorts:
+    http: 9093
+    cluster: 9094
+  ## Configure extra options for Alertmanager containers' liveness and readiness probes
+  ## ref: https://kubernetes.io/docs/tasks/configure-pod-container/configure-liveness-readiness-probes/#configure-probes
+  ## @param alertmanager.livenessProbe.enabled Enable livenessProbe on Alertmanager containers
+  ## @param alertmanager.livenessProbe.initialDelaySeconds Initial delay seconds for livenessProbe
+  ## @param alertmanager.livenessProbe.periodSeconds Period seconds for livenessProbe
+  ## @param alertmanager.livenessProbe.timeoutSeconds Timeout seconds for livenessProbe
+  ## @param alertmanager.livenessProbe.failureThreshold Failure threshold for livenessProbe
+  ## @param alertmanager.livenessProbe.successThreshold Success threshold for livenessProbe
+  ##
+  livenessProbe:
+    enabled: true
+    initialDelaySeconds: 5
+    periodSeconds: 20
+    timeoutSeconds: 3
+    failureThreshold: 3
+    successThreshold: 1
+  ## @param alertmanager.readinessProbe.enabled Enable readinessProbe on Alertmanager containers
+  ## @param alertmanager.readinessProbe.initialDelaySeconds Initial delay seconds for readinessProbe
+  ## @param alertmanager.readinessProbe.periodSeconds Period seconds for readinessProbe
+  ## @param alertmanager.readinessProbe.timeoutSeconds Timeout seconds for readinessProbe
+  ## @param alertmanager.readinessProbe.failureThreshold Failure threshold for readinessProbe
+  ## @param alertmanager.readinessProbe.successThreshold Success threshold for readinessProbe
+  ##
+  readinessProbe:
+    enabled: true
+    initialDelaySeconds: 5
+    periodSeconds: 10
+    timeoutSeconds: 2
+    failureThreshold: 5
+    successThreshold: 1
+  ## @param alertmanager.startupProbe.enabled Enable startupProbe on Alertmanager containers
+  ## @param alertmanager.startupProbe.initialDelaySeconds Initial delay seconds for startupProbe
+  ## @param alertmanager.startupProbe.periodSeconds Period seconds for startupProbe
+  ## @param alertmanager.startupProbe.timeoutSeconds Timeout seconds for startupProbe
+  ## @param alertmanager.startupProbe.failureThreshold Failure threshold for startupProbe
+  ## @param alertmanager.startupProbe.successThreshold Success threshold for startupProbe
+  ##
+  startupProbe:
+    enabled: false
+    initialDelaySeconds: 2
+    periodSeconds: 5
+    timeoutSeconds: 2
+    failureThreshold: 10
+    successThreshold: 1
+  ## @param alertmanager.customLivenessProbe Custom livenessProbe that overrides the default one
+  ##
+  customLivenessProbe: {}
+  ## @param alertmanager.customReadinessProbe Custom readinessProbe that overrides the default one
+  ##
+  customReadinessProbe: {}
+  ## @param alertmanager.customStartupProbe Custom startupProbe that overrides the default one
+  ##
+  customStartupProbe: {}
+  ## Alertmanager resource requests and limits
+  ## ref: http://kubernetes.io/docs/user-guide/compute-resources/
+  ## @param alertmanager.resources.limits The resources limits for the Alertmanager containers
+  ## @param alertmanager.resources.requests The requested resources for the Alertmanager containers
+  ##
+  resources:
+    limits: {}
+    requests: {}
+  ## Configure Pods Security Context
+  ## ref: https://kubernetes.io/docs/tasks/configure-pod-container/security-context/#set-the-security-context-for-a-pod
+  ## @param alertmanager.podSecurityContext.enabled Enabled Alertmanager pods' Security Context
+  ## @param alertmanager.podSecurityContext.fsGroup Set Alertmanager pod's Security Context fsGroup
+  ##
+  podSecurityContext:
+    enabled: true
+    fsGroup: 1001
+  ## Configure Container Security Context
+  ## ref: https://kubernetes.io/docs/tasks/configure-pod-container/security-context/#set-the-security-context-for-a-container
+  ## @param alertmanager.containerSecurityContext.enabled Enabled Alertmanager containers' Security Context
+  ## @param alertmanager.containerSecurityContext.runAsUser Set Alertmanager containers' Security Context runAsUser
+  ## @param alertmanager.containerSecurityContext.runAsNonRoot Set Alertmanager containers' Security Context runAsNonRoot
+  ## @param alertmanager.containerSecurityContext.readOnlyRootFilesystem Set Alertmanager containers' Security Context runAsNonRoot
+  ##
+  containerSecurityContext:
+    enabled: true
+    runAsUser: 1001
+    runAsNonRoot: true
+    readOnlyRootFilesystem: false
+
+  ## @param alertmanager.existingConfigmap The name of an existing ConfigMap with your custom configuration for Alertmanager
+  ##
+  existingConfigmap: ""
+  ## @param alertmanager.existingConfigmapKey The name of the key with the Alertmanager config file
+  ##
+  existingConfigmapKey: ""
+  ## @param alertmanager.command Override default container command (useful when using custom images)
+  ##
+  command: []
+  ## @param alertmanager.args Override default container args (useful when using custom images)
+  ##
+  args: []
+  ## @param alertmanager.extraArgs Additional arguments passed to the Prometheus server container
+  ## extraArgs:
+  ## - --log.level=debug
+  ## - --tsdb.path=/data/
+  ##
+  extraArgs: []
+  ## @param alertmanager.hostAliases Alertmanager pods host aliases
+  ## https://kubernetes.io/docs/concepts/services-networking/add-entries-to-pod-etc-hosts-with-host-aliases/
+  ##
+  hostAliases: []
+  ## @param alertmanager.podLabels Extra labels for Alertmanager pods
+  ## ref: https://kubernetes.io/docs/concepts/overview/working-with-objects/labels/
+  ##
+  podLabels: {}
+  ## @param alertmanager.podAnnotations Annotations for Alertmanager pods
+  ## ref: https://kubernetes.io/docs/concepts/overview/working-with-objects/annotations/
+  ##
+  podAnnotations: {}
+  ## @param alertmanager.podAffinityPreset Pod affinity preset. Ignored if `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 alertmanager.podAntiAffinityPreset Pod anti-affinity preset. Ignored if `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
+  ## Pod Disruption Budget configuration
+  ## ref: https://kubernetes.io/docs/tasks/run-application/configure-pdb
+  ## @param alertmanager.pdb.create Enable/disable a Pod Disruption Budget creation
+  ## @param alertmanager.pdb.minAvailable Minimum number/percentage of pods that should remain scheduled
+  ## @param alertmanager.pdb.maxUnavailable Maximum number/percentage of pods that may be made unavailable
+  ##
+  pdb:
+    create: false
+    minAvailable: 1
+    maxUnavailable: ""
+
+  ## Node affinity preset
+  ## ref: https://kubernetes.io/docs/concepts/scheduling-eviction/assign-pod-node/#node-affinity
+  ##
+  nodeAffinityPreset:
+    ## @param alertmanager.nodeAffinityPreset.type Node affinity preset type. Ignored if `affinity` is set. Allowed values: `soft` or `hard`
+    ##
+    type: ""
+    ## @param alertmanager.nodeAffinityPreset.key Node label key to match. Ignored if `affinity` is set
+    ##
+    key: ""
+    ## @param alertmanager.nodeAffinityPreset.values Node label values to match. Ignored if `affinity` is set
+    ## E.g.
+    ## values:
+    ##   - e2e-az1
+    ##   - e2e-az2
+    ##
+    values: []
+  ## @param alertmanager.affinity Affinity for Alertmanager 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 alertmanager.nodeSelector Node labels for Alertmanager pods assignment
+  ## ref: https://kubernetes.io/docs/user-guide/node-selection/
+  ##
+  nodeSelector: {}
+  ## @param alertmanager.tolerations Tolerations for Alertmanager pods assignment
+  ## ref: https://kubernetes.io/docs/concepts/configuration/taint-and-toleration/
+  ##
+  tolerations: []
+  ## @param alertmanager.updateStrategy.type Alertmanager statefulset strategy type
+  ## ref: https://kubernetes.io/docs/concepts/workloads/controllers/statefulset/#update-strategies
+  ##
+  updateStrategy:
+    ## StrategyType
+    ## Can be set to RollingUpdate or OnDelete
+    ##
+    type: RollingUpdate
+
+  ## @param alertmanager.podManagementPolicy Statefulset Pod management policy, it needs to be Parallel to be able to complete the cluster join
+  ## Ref: https://kubernetes.io/docs/concepts/workloads/controllers/statefulset/#pod-management-policies
+  ##
+  podManagementPolicy: OrderedReady
+  ## @param alertmanager.priorityClassName Alertmanager pods' priorityClassName
+  ##
+  priorityClassName: ""
+  ## @param alertmanager.topologySpreadConstraints Topology Spread Constraints for pod assignment spread across your cluster among failure-domains. Evaluated as a template
+  ## Ref: https://kubernetes.io/docs/concepts/workloads/pods/pod-topology-spread-constraints/#spread-constraints-for-pods
+  ##
+  topologySpreadConstraints: []
+  ## @param alertmanager.schedulerName Name of the k8s scheduler (other than default) for Alertmanager pods
+  ## ref: https://kubernetes.io/docs/tasks/administer-cluster/configure-multiple-schedulers/
+  ##
+  schedulerName: ""
+  ## @param alertmanager.terminationGracePeriodSeconds Seconds Redmine pod needs to terminate gracefully
+  ## ref: https://kubernetes.io/docs/concepts/workloads/pods/pod/#termination-of-pods
+  ##
+  terminationGracePeriodSeconds: ""
+  ## @param alertmanager.lifecycleHooks for the Alertmanager container(s) to automate configuration before or after startup
+  ##
+  lifecycleHooks: {}
+  ## @param alertmanager.extraEnvVars Array with extra environment variables to add to Alertmanager nodes
+  ## e.g:
+  ## extraEnvVars:
+  ##   - name: FOO
+  ##     value: "bar"
+  ##
+  extraEnvVars: []
+  ## @param alertmanager.extraEnvVarsCM Name of existing ConfigMap containing extra env vars for Alertmanager nodes
+  ##
+  extraEnvVarsCM: ""
+  ## @param alertmanager.extraEnvVarsSecret Name of existing Secret containing extra env vars for Alertmanager nodes
+  ##
+  extraEnvVarsSecret: ""
+  ## @param alertmanager.extraVolumes Optionally specify extra list of additional volumes for the Alertmanager pod(s)
+  ##
+  extraVolumes: []
+  ## @param alertmanager.extraVolumeMounts Optionally specify extra list of additional volumeMounts for the Alertmanager container(s)
+  ##
+  extraVolumeMounts: []
+  ## @param alertmanager.sidecars Add additional sidecar containers to the Alertmanager pod(s)
+  ## e.g:
+  ## sidecars:
+  ##   - name: your-image-name
+  ##     image: your-image
+  ##     imagePullPolicy: Always
+  ##     ports:
+  ##       - name: portname
+  ##         containerPort: 1234
+  ##
+  sidecars: []
+  ## @param alertmanager.initContainers Add additional init containers to the Alertmanager pod(s)
+  ## ref: https://kubernetes.io/docs/concepts/workloads/pods/init-containers/
+  ## e.g:
+  ## initContainers:
+  ##  - name: your-image-name
+  ##    image: your-image
+  ##    imagePullPolicy: Always
+  ##    command: ['sh', '-c', 'echo "hello world"']
+  ##
+  initContainers: []
+
+  ## Alertmanager ingress parameters
+  ## ref: http://kubernetes.io/docs/user-guide/ingress/
+  ##
+  ingress:
+    ## @param alertmanager.ingress.enabled Enable ingress record generation for Alertmanager
+    ##
+    enabled: false
+    ## @param alertmanager.ingress.pathType Ingress path type
+    ##
+    pathType: ImplementationSpecific
+
+    ## @param alertmanager.ingress.hostname Default host for the ingress record
+    ##
+    hostname: alertmanager.prometheus.local
+    ## @param alertmanager.ingress.ingressClassName IngressClass that will be be used to implement the Ingress (Kubernetes 1.18+)
+    ## This is supported in Kubernetes 1.18+ and required if you have more than one IngressClass marked as the default for your cluster .
+    ## ref: https://kubernetes.io/blog/2020/04/02/improvements-to-the-ingress-api-in-kubernetes-1.18/
+    ##
+    ingressClassName: ""
+    ## @param alertmanager.ingress.path Default path for the ingress record
+    ## NOTE: You may need to set this to '/*' in order to use this with ALB ingress controllers
+    ##
+    path: /
+    ## @param alertmanager.ingress.annotations Additional annotations for the Ingress resource. To enable certificate autogeneration, place here your cert-manager annotations.
+    ## Use this parameter to set the required annotations for cert-manager, see
+    ## ref: https://cert-manager.io/docs/usage/ingress/#supported-annotations
+    ## e.g:
+    ## annotations:
+    ##   kubernetes.io/ingress.class: nginx
+    ##   cert-manager.io/cluster-issuer: cluster-issuer-name
+    ##
+    annotations: {}
+    ## @param alertmanager.ingress.tls Enable TLS configuration for the host defined at `ingress.hostname` parameter
+    ## TLS certificates will be retrieved from a TLS secret with name: `{{- printf "%s-tls" .Values.ingress.hostname }}`
+    ## You can:
+    ##   - Use the `ingress.secrets` parameter to create this TLS secret
+    ##   - Rely on cert-manager to create it by setting the corresponding annotations
+    ##   - Rely on Helm to create self-signed certificates by setting `ingress.selfSigned=true`
+    ##
+    tls: false
+    ## @param alertmanager.ingress.selfSigned Create a TLS secret for this ingress record using self-signed certificates generated by Helm
+    ##
+    selfSigned: false
+    ## @param alertmanager.ingress.extraHosts An array with additional hostname(s) to be covered with the ingress record
+    ## e.g:
+    ## extraHosts:
+    ##   - name: prometheus.local
+    ##     path: /
+    ##
+    extraHosts: []
+    ## @param alertmanager.ingress.extraPaths An array with additional arbitrary paths that may need to be added to the ingress under the main host
+    ## e.g:
+    ## extraPaths:
+    ## - path: /*
+    ##   backend:
+    ##     serviceName: ssl-redirect
+    ##     servicePort: use-annotation
+    ##
+    extraPaths: []
+    ## @param alertmanager.ingress.extraTls TLS configuration for additional hostname(s) to be covered with this ingress record
+    ## ref: https://kubernetes.io/docs/concepts/services-networking/ingress/#tls
+    ## e.g:
+    ## extraTls:
+    ## - hosts:
+    ##     - prometheus.local
+    ##   secretName: prometheus.local-tls
+    ##
+    extraTls: []
+    ## @param alertmanager.ingress.secrets Custom TLS certificates as secrets
+    ## NOTE: 'key' and 'certificate' are expected in PEM format
+    ## NOTE: 'name' should line up with a 'secretName' set further up
+    ## If it is not set and you're using cert-manager, this is unneeded, as it will create a secret for you with valid certificates
+    ## If it is not set and you're NOT using cert-manager either, self-signed certificates will be created valid for 365 days
+    ## It is also possible to create and manage the certificates outside of this helm chart
+    ## Please see README.md for more information
+    ## e.g:
+    ## secrets:
+    ##   - name: prometheus.local-tls
+    ##     key: |-
+    ##       -----BEGIN RSA PRIVATE KEY-----
+    ##       ...
+    ##       -----END RSA PRIVATE KEY-----
+    ##     certificate: |-
+    ##       -----BEGIN CERTIFICATE-----
+    ##       ...
+    ##       -----END CERTIFICATE-----
+    ##
+    secrets: []
+    ## @param alertmanager.ingress.extraRules Additional rules to be covered with this ingress record
+    ## ref: https://kubernetes.io/docs/concepts/services-networking/ingress/#ingress-rules
+    ## e.g:
+    ## extraRules:
+    ## - host: example.local
+    ##     http:
+    ##       path: /
+    ##       backend:
+    ##         service:
+    ##           name: example-svc
+    ##           port:
+    ##             name: http
+    ##
+    extraRules: []
+
+  ## ServiceAccount configuration
+  ##
+  serviceAccount:
+    ## @param alertmanager.serviceAccount.create Specifies whether a ServiceAccount should be created
+    ##
+    create: true
+    ## @param alertmanager.serviceAccount.name The name of the ServiceAccount to use.
+    ## If not set and create is true, a name is generated using the common.names.fullname template
+    ##
+    name: ""
+    ## @param alertmanager.serviceAccount.annotations Additional Service Account annotations (evaluated as a template)
+    ##
+    annotations: {}
+    ## @param alertmanager.serviceAccount.automountServiceAccountToken Automount service account token for the server service account
+    ##
+    automountServiceAccountToken: true
+
+  ## Alertmanager service parameters
+  ##
+  service:
+    ## @param alertmanager.service.type Alertmanager service type
+    ##
+    type: LoadBalancer
+    ## @param alertmanager.service.ports.http Alertmanager service HTTP port
+    ## @param alertmanager.service.ports.cluster Alertmanager cluster HA port
+    ##
+    ports:
+      http: 80
+      cluster: 9094
+    ## Node ports to expose
+    ## @param alertmanager.service.nodePorts.http Node port for HTTP
+    ## NOTE: choose port between <30000-32767>
+    ##
+    nodePorts:
+      http: ""
+    ## @param alertmanager.service.clusterIP Alertmanager service Cluster IP
+    ## e.g.:
+    ## clusterIP: None
+    ##
+    clusterIP: ""
+    ## @param alertmanager.service.loadBalancerIP Alertmanager service Load Balancer IP
+    ## ref: https://kubernetes.io/docs/concepts/services-networking/service/#type-loadbalancer
+    ##
+    loadBalancerIP: ""
+    ## @param alertmanager.service.loadBalancerSourceRanges Alertmanager service Load Balancer sources
+    ## ref: https://kubernetes.io/docs/tasks/access-application-cluster/configure-cloud-provider-firewall/#restrict-access-for-loadbalancer-service
+    ## e.g:
+    ## loadBalancerSourceRanges:
+    ##   - 10.10.10.0/24
+    ##
+    loadBalancerSourceRanges: []
+    ## @param alertmanager.service.externalTrafficPolicy Alertmanager service external traffic policy
+    ## ref http://kubernetes.io/docs/tasks/access-application-cluster/create-external-load-balancer/#preserving-the-client-source-ip
+    ##
+    externalTrafficPolicy: Cluster
+    ## @param alertmanager.service.annotations Additional custom annotations for Alertmanager service
+    ##
+    annotations: {}
+    ## @param alertmanager.service.extraPorts Extra ports to expose in Alertmanager service (normally used with the `sidecars` value)
+    ##
+    extraPorts: []
+    ## @param alertmanager.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 alertmanager.service.sessionAffinityConfig Additional settings for the sessionAffinity
+    ## sessionAffinityConfig:
+    ##   clientIP:
+    ##     timeoutSeconds: 300
+    ##
+    sessionAffinityConfig: {}
+
+  persistence:
+    ## @param alertmanager.persistence.enabled Enable Alertmanager data persistence using VolumeClaimTemplates
+    ##
+    enabled: true
+    ## @param alertmanager.persistence.mountPath Path to mount the volume at.
+    ##
+    mountPath: /opt/drycc/alertmanager/data
+    ## @param alertmanager.persistence.subPath The subdirectory of the volume to mount to, useful in dev environments and one PV for multiple services
+    ##
+    subPath: ""
+    ## @param alertmanager.persistence.storageClass PVC Storage Class for Concourse worker data volume
+    ## 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: ""
+    ## @param alertmanager.persistence.accessModes PVC Access Mode for Concourse worker volume
+    ##
+    accessModes:
+      - ReadWriteOnce
+    ## @param alertmanager.persistence.size PVC Storage Request for Concourse worker volume
+    ##
+    size: 8Gi
+    ## @param alertmanager.persistence.annotations Annotations for the PVC
+    ##
+    annotations: {}
+    ## @param alertmanager.persistence.selector Selector to match an existing Persistent Volume (this value is evaluated as a template)
+    ## selector:
+    ##   matchLabels:
+    ##     app: my-app
+    ##
+    selector: {}
+
+## @section Prometheus server Parameters
+##
+## Drycc Prometheus image
+## ref: https://hub.docker.com/r/drycc/prometheus/tags/
+## @param server.image.registry Prometheus image registry
+## @param server.image.repository Prometheus image repository
+## @param server.image.tag Prometheus image tag (immutable tags are recommended)
+## @param server.image.digest Prometheus image digest in the way sha256:aa.... Please note this parameter, if set, will override the tag image tag (immutable tags are recommended)
+## @param server.image.pullPolicy Prometheus image pull policy
+## @param server.image.pullSecrets Prometheus image pull secrets
+##
+server:
+  image:
+    registry: registry.drycc.cc
+    repository: drycc-addons/prometheus
+    tag: "2"
+    digest: ""
+    ## Specify a imagePullPolicy
+    ## Defaults to 'Always' if image tag is 'latest', else set to 'IfNotPresent'
+    ## ref: http://kubernetes.io/docs/user-guide/images/#pre-pulling-images
+    ##
+    pullPolicy: IfNotPresent
+    ## Optionally specify an array of imagePullSecrets.
+    ## Secrets must be manually created in the namespace.
+    ## ref: https://kubernetes.io/docs/tasks/configure-pod-container/pull-image-private-registry/
+    ## e.g:
+    ## pullSecrets:
+    ##   - myRegistryKeySecretName
+    ##
+    pullSecrets: []
+
+  ## @param server.configuration [string] Promethus configuration. This content will be stored in the the prometheus.yaml file and the content can be a template.
+  ## ref: <https://github.com/prometheus-community/helm-charts/blob/main/charts/prometheus/values.yaml>
+  ##
+  configuration: |
+    global:
+      {{- if .Values.server.scrapeInterval }}
+      scrape_interval: {{ .Values.server.scrapeInterval }}
+      {{- end }}
+      {{- if .Values.server.scrapeTimeout }}
+      scrape_timeout: {{ .Values.server.scrapeTimeout }}
+      {{- end }}
+      {{- if .Values.server.evaluationInterval }}
+      evaluation_interval: {{ .Values.server.evaluationInterval }}
+      {{- end }}
+      external_labels:
+        monitor: {{ template "common.names.fullname" . }}
+        {{- if .Values.server.externalLabels }}
+        {{- include "common.tplvalues.render" (dict "value" .Values.server.externalLabels "context" $) | nindent 4 }}
+        {{- end }}
+    {{- if .Values.server.remoteWrite }}
+    remote_write: {{- include "common.tplvalues.render" (dict "value" .Values.server.remoteWrite "context" $) | nindent 4 }}
+    {{- end }}
+    scrape_configs:
+      - job_name: prometheus
+      {{- include "prometheus.scrape_config" (dict "component" "server" "context" $) | nindent 4 }}
+    {{- if .Values.alertmanager.enabled }}
+      - job_name: alertmanager
+        {{- include "prometheus.scrape_config" (dict "component" "alertmanager" "context" $) | nindent 4 }}
+    {{- end }}
+    {{- if .Values.server.extraScrapeConfigs}}
+    {{- include "common.tplvalues.render" (dict "value" .Values.server.extraScrapeConfigs "context" $) | nindent 2 }}
+    {{- end }}
+    {{- if or .Values.alertmanager.enabled .Values.server.alertingEndpoints}}
+    alerting:
+      alertmanagers:
+        {{- if .Values.server.alertingEndpoints }}
+        {{- include "common.tplvalues.render" (dict "value" .Values.server.alertingEndpoints "context" $) | nindent 4 }}
+        {{- end }}
+        - scheme: HTTP
+          static_configs:
+            - targets: [ "{{ printf "%s.%s.svc.%s:%d" (include "prometheus.alertmanager.fullname" .) (include "common.names.namespace" .) .Values.clusterDomain (int .Values.alertmanager.service.ports.http) }}" ]
+    rule_files:
+      - rules.yaml
+    {{- end }}
+
+
+  ## @param server.alertingRules Prometheus alerting rules. This content will be stored in the the rules.yaml file and the content can be a template.
+  ## ref: <https://prometheus.io/docs/prometheus/latest/configuration/alerting_rules/>
+  ##
+  alertingRules: {}
+  ## @param server.extraScrapeConfigs Promethus configuration, useful to declare new scrape_configs. This content will be merged with the 'server.configuration' value and stored in the the prometheus.yaml file.
+  ## ref: <https://prometheus.io/docs/prometheus/latest/configuration/configuration/#scrape_config>
+  ##
+  extraScrapeConfigs: []
+  ## @param server.replicaCount Number of Prometheus replicas to deploy
+  ##
+  replicaCount: 1
+  ## @param server.containerPorts.http Prometheus HTTP container port
+  ##
+  containerPorts:
+    http: 9090
+  ## Configure extra options for Prometheus containers' liveness and readiness probes
+  ## ref: https://kubernetes.io/docs/tasks/configure-pod-container/configure-liveness-readiness-probes/#configure-probes
+  ## @param server.livenessProbe.enabled Enable livenessProbe on Prometheus containers
+  ## @param server.livenessProbe.initialDelaySeconds Initial delay seconds for livenessProbe
+  ## @param server.livenessProbe.periodSeconds Period seconds for livenessProbe
+  ## @param server.livenessProbe.timeoutSeconds Timeout seconds for livenessProbe
+  ## @param server.livenessProbe.failureThreshold Failure threshold for livenessProbe
+  ## @param server.livenessProbe.successThreshold Success threshold for livenessProbe
+  ##
+  livenessProbe:
+    enabled: true
+    initialDelaySeconds: 5
+    periodSeconds: 20
+    timeoutSeconds: 3
+    failureThreshold: 3
+    successThreshold: 1
+  ## @param server.readinessProbe.enabled Enable readinessProbe on Prometheus containers
+  ## @param server.readinessProbe.initialDelaySeconds Initial delay seconds for readinessProbe
+  ## @param server.readinessProbe.periodSeconds Period seconds for readinessProbe
+  ## @param server.readinessProbe.timeoutSeconds Timeout seconds for readinessProbe
+  ## @param server.readinessProbe.failureThreshold Failure threshold for readinessProbe
+  ## @param server.readinessProbe.successThreshold Success threshold for readinessProbe
+  ##
+  readinessProbe:
+    enabled: true
+    initialDelaySeconds: 5
+    periodSeconds: 10
+    timeoutSeconds: 2
+    failureThreshold: 5
+    successThreshold: 1
+  ## @param server.startupProbe.enabled Enable startupProbe on Prometheus containers
+  ## @param server.startupProbe.initialDelaySeconds Initial delay seconds for startupProbe
+  ## @param server.startupProbe.periodSeconds Period seconds for startupProbe
+  ## @param server.startupProbe.timeoutSeconds Timeout seconds for startupProbe
+  ## @param server.startupProbe.failureThreshold Failure threshold for startupProbe
+  ## @param server.startupProbe.successThreshold Success threshold for startupProbe
+  ##
+  startupProbe:
+    enabled: false
+    initialDelaySeconds: 2
+    periodSeconds: 5
+    timeoutSeconds: 2
+    failureThreshold: 10
+    successThreshold: 1
+  ## @param server.customLivenessProbe Custom livenessProbe that overrides the default one
+  ##
+  customLivenessProbe: {}
+  ## @param server.customReadinessProbe Custom readinessProbe that overrides the default one
+  ##
+  customReadinessProbe: {}
+  ## @param server.customStartupProbe Custom startupProbe that overrides the default one
+  ##
+  customStartupProbe: {}
+  ## Prometheus resource requests and limits
+  ## ref: http://kubernetes.io/docs/user-guide/compute-resources/
+  ## @param server.resources.limits The resources limits for the Prometheus containers
+  ## @param server.resources.requests The requested resources for the Prometheus containers
+  ##
+  resources:
+    limits: {}
+    requests: {}
+  ## Configure Pods Security Context
+  ## ref: https://kubernetes.io/docs/tasks/configure-pod-container/security-context/#set-the-security-context-for-a-pod
+  ## @param server.podSecurityContext.enabled Enabled Prometheus pods' Security Context
+  ## @param server.podSecurityContext.fsGroup Set Prometheus pod's Security Context fsGroup
+  ##
+  podSecurityContext:
+    enabled: true
+    fsGroup: 1001
+  ## Configure Container Security Context
+  ## ref: https://kubernetes.io/docs/tasks/configure-pod-container/security-context/#set-the-security-context-for-a-container
+  ## @param server.containerSecurityContext.enabled Enabled Prometheus containers' Security Context
+  ## @param server.containerSecurityContext.runAsUser Set Prometheus containers' Security Context runAsUser
+  ## @param server.containerSecurityContext.runAsNonRoot Set Prometheus containers' Security Context runAsNonRoot
+  ## @param server.containerSecurityContext.readOnlyRootFilesystem Set Prometheus containers' Security Context runAsNonRoot
+  ##
+  containerSecurityContext:
+    enabled: true
+    runAsUser: 1001
+    runAsNonRoot: true
+    readOnlyRootFilesystem: false
+
+  ## @param server.existingConfigmap The name of an existing ConfigMap with your custom configuration for Prometheus
+  ##
+  existingConfigmap: ""
+  ## @param server.existingConfigmapKey The name of the key with the Prometheus config file
+  ##
+  existingConfigmapKey: ""
+  ## @param server.command Override default container command (useful when using custom images)
+  ##
+  command: []
+  ## @param server.args Override default container args (useful when using custom images)
+  ##
+  args: []
+  ## @param server.extraArgs Additional arguments passed to the Prometheus server container
+  ## extraArgs:
+  ## - --log.level=debug
+  ## - --tsdb.path=/data/
+  ##
+  extraArgs: []
+  ## @param server.hostAliases Prometheus pods host aliases
+  ## https://kubernetes.io/docs/concepts/services-networking/add-entries-to-pod-etc-hosts-with-host-aliases/
+  ##
+  hostAliases: []
+  ## @param server.podLabels Extra labels for Prometheus pods
+  ## ref: https://kubernetes.io/docs/concepts/overview/working-with-objects/labels/
+  ##
+  podLabels: {}
+  ## @param server.podAnnotations Annotations for Prometheus pods
+  ## ref: https://kubernetes.io/docs/concepts/overview/working-with-objects/annotations/
+  ##
+  podAnnotations: {}
+  ## @param server.podAffinityPreset Pod affinity preset. Ignored if `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 server.podAntiAffinityPreset Pod anti-affinity preset. Ignored if `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
+  ## Pod Disruption Budget configuration
+  ## ref: https://kubernetes.io/docs/tasks/run-application/configure-pdb
+  ## @param server.pdb.create Enable/disable a Pod Disruption Budget creation
+  ## @param server.pdb.minAvailable Minimum number/percentage of pods that should remain scheduled
+  ## @param server.pdb.maxUnavailable Maximum number/percentage of pods that may be made unavailable
+  ##
+  pdb:
+    create: false
+    minAvailable: 1
+    maxUnavailable: ""
+  ## Node affinity preset
+  ## ref: https://kubernetes.io/docs/concepts/scheduling-eviction/assign-pod-node/#node-affinity
+  ##
+  nodeAffinityPreset:
+    ## @param server.nodeAffinityPreset.type Node affinity preset type. Ignored if `affinity` is set. Allowed values: `soft` or `hard`
+    ##
+    type: ""
+    ## @param server.nodeAffinityPreset.key Node label key to match. Ignored if `affinity` is set
+    ##
+    key: ""
+    ## @param server.nodeAffinityPreset.values Node label values to match. Ignored if `affinity` is set
+    ## E.g.
+    ## values:
+    ##   - e2e-az1
+    ##   - e2e-az2
+    ##
+    values: []
+  ## @param server.affinity Affinity for Prometheus 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 server.nodeSelector Node labels for Prometheus pods assignment
+  ## ref: https://kubernetes.io/docs/user-guide/node-selection/
+  ##
+  nodeSelector: {}
+  ## @param server.tolerations Tolerations for Prometheus pods assignment
+  ## ref: https://kubernetes.io/docs/concepts/configuration/taint-and-toleration/
+  ##
+  tolerations: []
+  ## @param server.updateStrategy.type Prometheus deployment strategy type. If persistence is enabled, strategy type should be set to Recreate to avoid dead locks.
+  ## ref: https://kubernetes.io/docs/concepts/workloads/controllers/deployment/#strategy
+  ##
+  updateStrategy:
+    ## StrategyType
+    ## Can be set to RollingUpdate or Recreate
+    ##
+    type: RollingUpdate
+
+  ## @param server.priorityClassName Prometheus pods' priorityClassName
+  ##
+  priorityClassName: ""
+  ## @param server.topologySpreadConstraints Topology Spread Constraints for pod assignment spread across your cluster among failure-domains. Evaluated as a template
+  ## Ref: https://kubernetes.io/docs/concepts/workloads/pods/pod-topology-spread-constraints/#spread-constraints-for-pods
+  ##
+  topologySpreadConstraints: []
+  ## @param server.schedulerName Name of the k8s scheduler (other than default) for Prometheus pods
+  ## ref: https://kubernetes.io/docs/tasks/administer-cluster/configure-multiple-schedulers/
+  ##
+  schedulerName: ""
+  ## @param server.terminationGracePeriodSeconds Seconds Redmine pod needs to terminate gracefully
+  ## ref: https://kubernetes.io/docs/concepts/workloads/pods/pod/#termination-of-pods
+  ##
+  terminationGracePeriodSeconds: ""
+  ## @param server.lifecycleHooks for the Prometheus container(s) to automate configuration before or after startup
+  ##
+  lifecycleHooks: {}
+  ## @param server.extraEnvVars Array with extra environment variables to add to Prometheus nodes
+  ## e.g:
+  ## extraEnvVars:
+  ##   - name: FOO
+  ##     value: "bar"
+  ##
+  extraEnvVars: []
+  ## @param server.extraEnvVarsCM Name of existing ConfigMap containing extra env vars for Prometheus nodes
+  ##
+  extraEnvVarsCM: ""
+  ## @param server.extraEnvVarsSecret Name of existing Secret containing extra env vars for Prometheus nodes
+  ##
+  extraEnvVarsSecret: ""
+  ## @param server.extraVolumes Optionally specify extra list of additional volumes for the Prometheus pod(s)
+  ##
+  extraVolumes: []
+  ## @param server.extraVolumeMounts Optionally specify extra list of additional volumeMounts for the Prometheus container(s)
+  ##
+  extraVolumeMounts: []
+  ## @param server.sidecars Add additional sidecar containers to the Prometheus pod(s)
+  ## e.g:
+  ## sidecars:
+  ##   - name: your-image-name
+  ##     image: your-image
+  ##     imagePullPolicy: Always
+  ##     ports:
+  ##       - name: portname
+  ##         containerPort: 1234
+  ##
+  sidecars: []
+  ## @param server.initContainers Add additional init containers to the Prometheus pod(s)
+  ## ref: https://kubernetes.io/docs/concepts/workloads/pods/init-containers/
+  ## e.g:
+  ## initContainers:
+  ##  - name: your-image-name
+  ##    image: your-image
+  ##    imagePullPolicy: Always
+  ##    command: ['sh', '-c', 'echo "hello world"']
+  ##
+  initContainers: []
+  ## @param server.routePrefix Prefix for the internal routes of web endpoints
+  ## 
+  routePrefix: /
+  ## @param server.remoteWrite The remote_write spec configuration for Prometheus
+  ##
+  remoteWrite: []
+  ## @param server.scrapeInterval Interval between consecutive scrapes. Example: "1m"
+  ##
+  scrapeInterval: ""
+  ## @param server.scrapeTimeout Interval between consecutive scrapes. Example: "10s"
+  ## 
+  scrapeTimeout: ""
+  ## @param server.evaluationInterval Interval between consecutive evaluations. Example: "1m"
+  ##
+  evaluationInterval: ""
+  ## @param server.enableAdminAPI Enable Prometheus adminitrative API
+  ## ref: https://prometheus.io/docs/prometheus/latest/querying/api/#tsdb-admin-apis
+  ##
+  enableAdminAPI: false
+  ## @param server.enableRemoteWriteReceiver Enable Prometheus to be used as a receiver for the Prometheus remote write protocol.
+  ##
+  enableRemoteWriteReceiver: false
+  ## @param server.enableFeatures Enable access to Prometheus disabled features.
+  ## ref: https://prometheus.io/docs/prometheus/latest/disabled_features/
+  ##
+  enableFeatures: []
+  ## @param server.logLevel Log level for Prometheus
+  ##
+  logLevel: info
+  ## @param server.logFormat Log format for Prometheus
+  ##
+  logFormat: logfmt
+  ## @param server.retention Metrics retention days
+  ##
+  retention: 10d
+  ## @param server.retentionSize Maximum size of metrics
+  ##
+  retentionSize: "0"
+  ## @param server.alertingEndpoints Alertmanagers to which alerts will be sent
+  ## ref: https://prometheus.io/docs/prometheus/latest/configuration/configuration/#alertmanager_config
+  ##
+  alertingEndpoints: []
+  ## @param server.externalLabels External labels to add to any time series or alerts when communicating with external systems
+  ##
+  externalLabels: {}
+
+  ## Thanos sidecar container configuration
+  ##
+  thanos:
+    ## @param server.thanos.create Create a Thanos sidecar container
+    ##
+    create: false
+    ## Drycc Thanos image
+    ## ref: https://hub.docker.com/r/drycc/thanos/tags/
+    ## @param server.thanos.image.registry Thanos image registry
+    ## @param server.thanos.image.repository Thanos image name
+    ## @param server.thanos.image.tag Thanos image tag
+    ## @param server.thanos.image.digest Thanos image digest in the way sha256:aa.... Please note this parameter, if set, will override the tag
+    ## @param server.thanos.image.pullPolicy Thanos image pull policy
+    ## @param server.thanos.image.pullSecrets Specify docker-registry secret names as an array
+    ##
+    image:
+      registry: docker.io
+      repository: drycc/thanos
+      tag: 0.32.2-debian-11-r2
+      digest: ""
+      ## Specify a imagePullPolicy. Defaults to 'Always' if image tag is 'latest', else set to 'IfNotPresent'
+      ## ref: https://kubernetes.io/docs/user-guide/images/#pre-pulling-images
+      ##
+      pullPolicy: IfNotPresent
+      ## Optionally specify an array of imagePullSecrets.
+      ## Secrets must be manually created in the namespace.
+      ## ref: https://kubernetes.io/docs/tasks/configure-pod-container/pull-image-private-registry/
+      ## Example:
+      ## pullSecrets:
+      ##   - myRegistryKeySecretName
+      ##
+      pullSecrets: []
+    ## Thanos Sidecar container's securityContext
+    ## ref: https://kubernetes.io/docs/tasks/configure-pod-container/security-context/#set-the-security-context-for-a-container
+    ## @param server.thanos.containerSecurityContext.enabled Enable container security context
+    ## @param server.thanos.containerSecurityContext.readOnlyRootFilesystem mount / (root) as a readonly filesystem
+    ## @param server.thanos.containerSecurityContext.allowPrivilegeEscalation Switch privilegeEscalation possibility on or off
+    ## @param server.thanos.containerSecurityContext.runAsNonRoot Force the container to run as a non root user
+    ## @param server.thanos.containerSecurityContext.capabilities.drop [array] Linux Kernel capabilities which should be dropped
+    ##
+    containerSecurityContext:
+      enabled: true
+      readOnlyRootFilesystem: false
+      allowPrivilegeEscalation: false
+      runAsNonRoot: true
+      capabilities:
+        drop:
+          - ALL
+    ## @param server.thanos.prometheusUrl Override default prometheus url `http://localhost:9090`
+    ##
+    prometheusUrl: ""
+    ## @param server.thanos.extraArgs Additional arguments passed to the thanos sidecar container
+    ## extraArgs:
+    ## - --log.level=debug
+    ## - --tsdb.path=/data/
+    ##
+    extraArgs: []
+    ## @param server.thanos.objectStorageConfig.secretName Support mounting a Secret for the objectStorageConfig of the sideCar container.
+    ## @param server.thanos.objectStorageConfig.secretKey Secret key with the configuration file.
+    ## ref: https://github.com/thanos-io/thanos/blob/main/docs/storage.md
+    ## objectStorageConfig:
+    ##    secretName: thanos-objstore-config
+    ##    secretKey: thanos.yaml
+    ##
+    objectStorageConfig:
+      secretName: ""
+      secretKey: thanos.yaml
+    ## ref: https://github.com/thanos-io/thanos/blob/main/docs/components/sidecar.md
+    ## @param server.thanos.extraVolumeMounts Additional volumeMounts from `server.volumes` for thanos sidecar container
+    ## extraVolumeMounts:
+    ## - name: my-secret-volume
+    ##   mountPath: /etc/thanos/secrets/my-secret
+    ##
+    extraVolumeMounts: []
+    ## Thanos sidecar container resource requests and limits.
+    ## ref: https://kubernetes.io/docs/user-guide/compute-resources/
+    ## We usually recommend not to specify default resources and to leave this as a conscious
+    ## choice for the user. This also increases chances charts run on environments with little
+    ## resources, such as Minikube. If you do want to specify resources, uncomment the following
+    ## lines, adjust them as necessary, and remove the curly braces after 'resources:'.
+    ## @param server.thanos.resources.limits The resources limits for the Thanos sidecar container
+    ## @param server.thanos.resources.requests The resources requests for the Thanos sidecar container
+    ##
+    resources:
+      ## Example:
+      ## limits:
+      ##    cpu: 100m
+      ##    memory: 128Mi
+      ##
+      limits: {}
+      ## Examples:
+      ## requests:
+      ##    cpu: 100m
+      ##    memory: 128Mi
+      ##
+      requests: {}
+    ## Configure extra options for liveness probe
+    ## ref: https://kubernetes.io/docs/tasks/configure-pod-container/configure-liveness-readiness-probes/#configure-probes
+    ## @param server.thanos.livenessProbe.enabled Turn on and off liveness probe
+    ## @param server.thanos.livenessProbe.initialDelaySeconds Delay before liveness probe is initiated
+    ## @param server.thanos.livenessProbe.periodSeconds How often to perform the probe
+    ## @param server.thanos.livenessProbe.timeoutSeconds When the probe times out
+    ## @param server.thanos.livenessProbe.failureThreshold Minimum consecutive failures for the probe
+    ## @param server.thanos.livenessProbe.successThreshold Minimum consecutive successes for the probe
+    ##
+    livenessProbe:
+      enabled: true
+      initialDelaySeconds: 0
+      periodSeconds: 5
+      timeoutSeconds: 3
+      failureThreshold: 120
+      successThreshold: 1
+    ## Configure extra options for readiness probe
+    ## ref: https://kubernetes.io/docs/tasks/configure-pod-container/configure-liveness-readiness-probes/#configure-probes
+    ## @param server.thanos.readinessProbe.enabled Turn on and off readiness probe
+    ## @param server.thanos.readinessProbe.initialDelaySeconds Delay before readiness probe is initiated
+    ## @param server.thanos.readinessProbe.periodSeconds How often to perform the probe
+    ## @param server.thanos.readinessProbe.timeoutSeconds When the probe times out
+    ## @param server.thanos.readinessProbe.failureThreshold Minimum consecutive failures for the probe
+    ## @param server.thanos.readinessProbe.successThreshold Minimum consecutive successes for the probe
+    ##
+    readinessProbe:
+      enabled: true
+      initialDelaySeconds: 0
+      periodSeconds: 5
+      timeoutSeconds: 3
+      failureThreshold: 120
+      successThreshold: 1
+    ## @param server.thanos.customLivenessProbe Custom livenessProbe that overrides the default one
+    ##
+    customLivenessProbe: {}
+    ## @param server.thanos.customReadinessProbe Custom readinessProbe that overrides the default one
+    ##
+    customReadinessProbe: {}
+    ## Thanos Sidecar Service
+    ##
+    service:
+      ## @param server.thanos.service.type Kubernetes service type
+      ##
+      type: ClusterIP
+      ## @param server.thanos.service.ports.grpc Thanos service port
+      ##
+      ports:
+        grpc: 10901
+      ## @param server.thanos.service.clusterIP Specific cluster IP when service type is cluster IP. Use `None` to create headless service by default.
+      ## Use a "headless" service by default so it returns every pod's IP instead of loadbalancing requests.
+      ##
+      clusterIP: None
+      ## @param server.thanos.service.nodePorts.grpc Specify the nodePort value for the LoadBalancer and NodePort service types.
+      ## ref: https://kubernetes.io/docs/concepts/services-networking/service/#type-nodeport
+      ## e.g:
+      ## nodePort: 30901
+      ##
+      nodePorts:
+        grpc: ""
+      ## @param server.thanos.service.loadBalancerIP `loadBalancerIP` if service type is `LoadBalancer`
+      ## Set the LoadBalancer service type to internal only
+      ## ref: https://kubernetes.io/docs/concepts/services-networking/service/#internal-load-balancer
+      ##
+      loadBalancerIP: ""
+      ## @param server.thanos.service.loadBalancerSourceRanges Address that are allowed when svc is `LoadBalancer`
+      ## https://kubernetes.io/docs/tasks/access-application-cluster/configure-cloud-provider-firewall/#restrict-access-for-loadbalancer-service
+      ## e.g:
+      ## loadBalancerSourceRanges:
+      ## - 10.10.10.0/24
+      ##
+      loadBalancerSourceRanges: []
+      ## @param server.thanos.service.annotations Additional annotations for Prometheus service
+      ##
+      annotations: {}
+      ## @param server.thanos.service.extraPorts Additional ports to expose from the Thanos sidecar container
+      ## extraPorts:
+      ##   - name: http
+      ##     port: 10902
+      ##     targetPort: http
+      ##     protocol: TCP
+      ##
+      extraPorts: []
+      ## @param server.thanos.service.externalTrafficPolicy Prometheus service external traffic policy
+      ## ref http://kubernetes.io/docs/tasks/access-application-cluster/create-external-load-balancer/#preserving-the-client-source-ip
+      ##
+      externalTrafficPolicy: Cluster
+      ## @param server.thanos.service.sessionAffinity Session Affinity for Kubernetes service, can be "None" or "ClientIP"
+      ## If "ClientIP", consecutive client requests will be directed to the same Pod
+      ## ref: https://kubernetes.io/docs/concepts/services-networking/service/#virtual-ips-and-service-proxies
+      ##
+      sessionAffinity: None
+      ## @param server.thanos.service.sessionAffinityConfig Additional settings for the sessionAffinity
+      ## sessionAffinityConfig:
+      ##   clientIP:
+      ##     timeoutSeconds: 300
+      ##
+      sessionAffinityConfig: {}
+
+    ## Configure the ingress resource that allows you to access the
+    ## Thanos Sidecar installation. Set up the URL
+    ## ref: https://kubernetes.io/docs/user-guide/ingress/
+    ##
+    ingress:
+      ## @param server.thanos.ingress.enabled Enable ingress controller resource
+      ##
+      enabled: false
+      ## @param server.thanos.ingress.pathType Ingress path type
+      ##
+      pathType: ImplementationSpecific
+      ## @param server.thanos.ingress.hostname Default host for the ingress record
+      ##
+      hostname: thanos.prometheus.local
+      ## @param server.thanos.ingress.path Default path for the ingress record
+      ## NOTE: You may need to set this to '/*' in order to use this with ALB ingress controllers
+      ##
+      path: /
+      ## @param server.thanos.ingress.annotations Additional annotations for the Ingress resource. To enable certificate autogeneration, place here your cert-manager annotations.
+      ## For a full list of possible ingress annotations, please see
+      ## ref: https://github.com/kubernetes/ingress-nginx/blob/master/docs/user-guide/nginx-configuration/annotations.md
+      ## Use this parameter to set the required annotations for cert-manager, see
+      ## ref: https://cert-manager.io/docs/usage/ingress/#supported-annotations
+      ##
+      ## Examples:
+      ## kubernetes.io/ingress.class: nginx
+      ## cert-manager.io/cluster-issuer: cluster-issuer-name
+      ##
+      annotations: {}
+      ## @param server.thanos.ingress.ingressClassName IngressClass that will be be used to implement the Ingress (Kubernetes 1.18+)
+      ## This is supported in Kubernetes 1.18+ and required if you have more than one IngressClass marked as the default for your cluster .
+      ## ref: https://kubernetes.io/blog/2020/04/02/improvements-to-the-ingress-api-in-kubernetes-1.18/
+      ##
+      ingressClassName: ""
+      ## @param server.thanos.ingress.tls Enable TLS configuration for the host defined at `ingress.hostname` parameter
+      ## TLS certificates will be retrieved from a TLS secret with name: `{{- printf "%s-tls" .Values.ingress.hostname }}`
+      ## You can:
+      ##   - Use the `ingress.secrets` parameter to create this TLS secret
+      ##   - Relay on cert-manager to create it by setting `ingress.certManager=true`
+      ##   - Relay on Helm to create self-signed certificates by setting `ingress.selfSigned=true`
+      ##
+      tls: false
+      ## @param server.thanos.ingress.selfSigned Create a TLS secret for this ingress record using self-signed certificates generated by Helm
+      ##
+      selfSigned: false
+      ## @param server.thanos.ingress.extraHosts An array with additional hostname(s) to be covered with the ingress record
+      ## e.g:
+      ## extraHosts:
+      ##   - name: thanos.prometheus.local
+      ##     path: /
+      ##
+      extraHosts: []
+      ## @param server.thanos.ingress.extraPaths An array with additional arbitrary paths that may need to be added to the ingress under the main host
+      ## e.g:
+      ## extraPaths:
+      ## - path: /*
+      ##   backend:
+      ##     serviceName: ssl-redirect
+      ##     servicePort: use-annotation
+      ##
+      extraPaths: []
+      ## @param server.thanos.ingress.extraTls TLS configuration for additional hostname(s) to be covered with this ingress record
+      ## ref: https://kubernetes.io/docs/concepts/services-networking/ingress/#tls
+      ## e.g:
+      ## extraTls:
+      ## - hosts:
+      ##     - thanos.prometheus.local
+      ##   secretName: thanos.prometheus.local-tls
+      ##
+      extraTls: []
+      ## @param server.thanos.ingress.secrets Custom TLS certificates as secrets
+      ## NOTE: 'key' and 'certificate' are expected in PEM format
+      ## NOTE: 'name' should line up with a 'secretName' set further up
+      ## If it is not set and you're using cert-manager, this is unneeded, as it will create a secret for you with valid certificates
+      ## If it is not set and you're NOT using cert-manager either, self-signed certificates will be created valid for 365 days
+      ## It is also possible to create and manage the certificates outside of this helm chart
+      ## Please see README.md for more information
+      ## e.g:
+      ## secrets:
+      ##   - name: thanos.prometheus.local-tls
+      ##     key: |-
+      ##       -----BEGIN RSA PRIVATE KEY-----
+      ##       ...
+      ##       -----END RSA PRIVATE KEY-----
+      ##     certificate: |-
+      ##       -----BEGIN CERTIFICATE-----
+      ##       ...
+      ##       -----END CERTIFICATE-----
+      ##
+      secrets: []
+      ## @param server.thanos.ingress.extraRules The list of additional rules to be added to this ingress record. Evaluated as a template
+      ## Useful when looking for additional customization, such as using different backend
+      ##
+      extraRules: []
+
+  ## Prometheus Server ingress parameters
+  ## ref: http://kubernetes.io/docs/user-guide/ingress/
+  ##
+  ingress:
+    ## @param server.ingress.enabled Enable ingress record generation for Prometheus
+    ##
+    enabled: false
+    ## @param server.ingress.pathType Ingress path type
+    ##
+    pathType: ImplementationSpecific
+    ## @param server.ingress.hostname Default host for the ingress record
+    ##
+    hostname: server.prometheus.local
+    ## @param server.ingress.ingressClassName IngressClass that will be be used to implement the Ingress (Kubernetes 1.18+)
+    ## This is supported in Kubernetes 1.18+ and required if you have more than one IngressClass marked as the default for your cluster .
+    ## ref: https://kubernetes.io/blog/2020/04/02/improvements-to-the-ingress-api-in-kubernetes-1.18/
+    ##
+    ingressClassName: ""
+    ## @param server.ingress.path Default path for the ingress record
+    ## NOTE: You may need to set this to '/*' in order to use this with ALB ingress controllers
+    ##
+    path: /
+    ## @param server.ingress.annotations Additional annotations for the Ingress resource. To enable certificate autogeneration, place here your cert-manager annotations.
+    ## Use this parameter to set the required annotations for cert-manager, see
+    ## ref: https://cert-manager.io/docs/usage/ingress/#supported-annotations
+    ## e.g:
+    ## annotations:
+    ##   kubernetes.io/ingress.class: nginx
+    ##   cert-manager.io/cluster-issuer: cluster-issuer-name
+    ##
+    annotations: {}
+    ## @param server.ingress.tls Enable TLS configuration for the host defined at `ingress.hostname` parameter
+    ## TLS certificates will be retrieved from a TLS secret with name: `{{- printf "%s-tls" .Values.ingress.hostname }}`
+    ## You can:
+    ##   - Use the `ingress.secrets` parameter to create this TLS secret
+    ##   - Rely on cert-manager to create it by setting the corresponding annotations
+    ##   - Rely on Helm to create self-signed certificates by setting `ingress.selfSigned=true`
+    ##
+    tls: false
+    ## @param server.ingress.selfSigned Create a TLS secret for this ingress record using self-signed certificates generated by Helm
+    ##
+    selfSigned: false
+    ## @param server.ingress.extraHosts An array with additional hostname(s) to be covered with the ingress record
+    ## e.g:
+    ## extraHosts:
+    ##   - name: prometheus.local
+    ##     path: /
+    ##
+    extraHosts: []
+    ## @param server.ingress.extraPaths An array with additional arbitrary paths that may need to be added to the ingress under the main host
+    ## e.g:
+    ## extraPaths:
+    ## - path: /*
+    ##   backend:
+    ##     serviceName: ssl-redirect
+    ##     servicePort: use-annotation
+    ##
+    extraPaths: []
+    ## @param server.ingress.extraTls TLS configuration for additional hostname(s) to be covered with this ingress record
+    ## ref: https://kubernetes.io/docs/concepts/services-networking/ingress/#tls
+    ## e.g:
+    ## extraTls:
+    ## - hosts:
+    ##     - prometheus.local
+    ##   secretName: prometheus.local-tls
+    ##
+    extraTls: []
+    ## @param server.ingress.secrets Custom TLS certificates as secrets
+    ## NOTE: 'key' and 'certificate' are expected in PEM format
+    ## NOTE: 'name' should line up with a 'secretName' set further up
+    ## If it is not set and you're using cert-manager, this is unneeded, as it will create a secret for you with valid certificates
+    ## If it is not set and you're NOT using cert-manager either, self-signed certificates will be created valid for 365 days
+    ## It is also possible to create and manage the certificates outside of this helm chart
+    ## Please see README.md for more information
+    ## e.g:
+    ## secrets:
+    ##   - name: prometheus.local-tls
+    ##     key: |-
+    ##       -----BEGIN RSA PRIVATE KEY-----
+    ##       ...
+    ##       -----END RSA PRIVATE KEY-----
+    ##     certificate: |-
+    ##       -----BEGIN CERTIFICATE-----
+    ##       ...
+    ##       -----END CERTIFICATE-----
+    ##
+    secrets: []
+    ## @param server.ingress.extraRules Additional rules to be covered with this ingress record
+    ## ref: https://kubernetes.io/docs/concepts/services-networking/ingress/#ingress-rules
+    ## e.g:
+    ## extraRules:
+    ## - host: example.local
+    ##     http:
+    ##       path: /
+    ##       backend:
+    ##         service:
+    ##           name: example-svc
+    ##           port:
+    ##             name: http
+    ##
+    extraRules: []
+
+  ## ServiceAccount configuration
+  ##
+  serviceAccount:
+    ## @param server.serviceAccount.create Specifies whether a ServiceAccount should be created
+    ##
+    create: true
+    ## @param server.serviceAccount.name The name of the ServiceAccount to use.
+    ## If not set and create is true, a name is generated using the common.names.fullname template
+    ##
+    name: ""
+    ## @param server.serviceAccount.annotations Additional Service Account annotations (evaluated as a template)
+    ##
+    annotations: {}
+    ## @param server.serviceAccount.automountServiceAccountToken Automount service account token for the server service account
+    ##
+    automountServiceAccountToken: true
+
+  ## Prometheus service parameters
+  ##
+  service:
+    ## @param server.service.type Prometheus service type
+    ##
+    type: LoadBalancer
+    ## @param server.service.ports.http Prometheus service HTTP port
+    ##
+    ports:
+      http: 80
+    ## Node ports to expose
+    ## @param server.service.nodePorts.http Node port for HTTP
+    ## NOTE: choose port between <30000-32767>
+    ##
+    nodePorts:
+      http: ""
+    ## @param server.service.clusterIP Prometheus service Cluster IP
+    ## e.g.:
+    ## clusterIP: None
+    ##
+    clusterIP: ""
+    ## @param server.service.loadBalancerIP Prometheus service Load Balancer IP
+    ## ref: https://kubernetes.io/docs/concepts/services-networking/service/#type-loadbalancer
+    ##
+    loadBalancerIP: ""
+    ## @param server.service.loadBalancerSourceRanges Prometheus service Load Balancer sources
+    ## ref: https://kubernetes.io/docs/tasks/access-application-cluster/configure-cloud-provider-firewall/#restrict-access-for-loadbalancer-service
+    ## e.g:
+    ## loadBalancerSourceRanges:
+    ##   - 10.10.10.0/24
+    ##
+    loadBalancerSourceRanges: []
+    ## @param server.service.externalTrafficPolicy Prometheus service external traffic policy
+    ## ref http://kubernetes.io/docs/tasks/access-application-cluster/create-external-load-balancer/#preserving-the-client-source-ip
+    ##
+    externalTrafficPolicy: Cluster
+    ## @param server.service.annotations Additional custom annotations for Prometheus service
+    ##
+    annotations: {}
+    ## @param server.service.extraPorts Extra ports to expose in Prometheus service (normally used with the `sidecars` value)
+    ##
+    extraPorts: []
+    ## @param server.service.sessionAffinity Control where client requests go, to the same pod or round-robin. ClientIP by default.
+    ## Values: ClientIP or None
+    ## ref: https://kubernetes.io/docs/user-guide/services/
+    ##
+    sessionAffinity: ClientIP
+    ## @param server.service.sessionAffinityConfig Additional settings for the sessionAffinity
+    ## sessionAffinityConfig:
+    ##   clientIP:
+    ##     timeoutSeconds: 300
+    ##
+    sessionAffinityConfig: {}
+
+  ## Persistence Parameters
+  ##
+
+  ## Enable persistence using Persistent Volume Claims
+  ## ref: https://kubernetes.io/docs/user-guide/persistent-volumes/
+  ##
+  persistence:
+    ## @param server.persistence.enabled Enable persistence using Persistent Volume Claims. If you have multiple instances (server.repicacount > 1), please considere using an external storage service like Thanos or Grafana Mimir
+    ##
+    enabled: true
+    ## @param server.persistence.mountPath Path to mount the volume at.
+    ##
+    mountPath: /opt/drycc/prometheus/data
+    ## @param server.persistence.subPath The subdirectory of the volume to mount to, useful in dev environments and one PV for multiple services
+    ##
+    subPath: ""
+    ## @param server.persistence.storageClass Storage class of backing PVC
+    ## 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: ""
+    ## @param server.persistence.annotations Persistent Volume Claim annotations
+    ##
+    annotations: {}
+    ## @param server.persistence.accessModes Persistent Volume Access Modes
+    ##
+    accessModes:
+      - ReadWriteOnce
+    ## @param server.persistence.size Size of data volume
+    ##
+    size: 8Gi
+    ## @param server.persistence.existingClaim The name of an existing PVC to use for persistence
+    ##
+    existingClaim: ""
+    ## @param server.persistence.selector Selector to match an existing Persistent Volume for WordPress data PVC
+    ## If set, the PVC can't have a PV dynamically provisioned for it
+    ## E.g.
+    ## selector:
+    ##   matchLabels:
+    ##     app: my-app
+    ##
+    selector: {}
+    ## @param server.persistence.dataSource Custom PVC data source
+    ##
+    dataSource: {}
+
+  # RBAC configuration
+  ##
+  rbac:
+    ## @param server.rbac.create Specifies whether RBAC resources should be created
+    ##
+    create: true
+    ## @param server.rbac.rules Custom RBAC rules to set
+    ## e.g:
+    ## rules:
+    ##   - apiGroups:
+    ##       - ""
+    ##     resources:
+    ##       - pods
+    ##     verbs:
+    ##       - get
+    ##       - list
+    ##
+    rules: []
+
+## @section Init Container Parameters
+##
+
+## 'volumePermissions' init container parameters
+## Changes the owner and group of the persistent volume mount point to runAsUser:fsGroup values
+##   based on the *podSecurityContext/*containerSecurityContext parameters
+##
+volumePermissions:
+  ## @param volumePermissions.enabled Enable init container that changes the owner/group of the PV mount point to `runAsUser:fsGroup`
+  ##
+  enabled: false
+  ## OS Shell + Utility image
+  ## @param volumePermissions.image.registry OS Shell + Utility image registry
+  ## @param volumePermissions.image.repository OS Shell + Utility image repository
+  ## @param volumePermissions.image.tag OS Shell + Utility image tag (immutable tags are recommended)
+  ## @param volumePermissions.image.pullPolicy OS Shell + Utility image pull policy
+  ## @param volumePermissions.image.pullSecrets OS Shell + Utility image pull secrets
+  ##
+  image:
+    registry: registry.drycc.cc
+    repository: drycc/base
+    tag: bookworm
+    digest: ""
+    ## Optionally specify an array of imagePullSecrets.
+    ## Secrets must be manually created in the namespace.
+    ## ref: https://kubernetes.io/docs/tasks/configure-pod-container/pull-image-private-registry/
+    ## e.g:
+    ## pullSecrets:
+    ##   - myRegistryKeySecretName
+    ##
+    pullSecrets: []
+  ## Init container's resource requests and limits
+  ## ref: http://kubernetes.io/docs/user-guide/compute-resources/
+  ## @param volumePermissions.resources.limits The resources limits for the init container
+  ## @param volumePermissions.resources.requests The requested resources for the init container
+  ##
+  resources:
+    limits: {}
+    requests: {}
+  ## Init container Container Security Context
+  ## ref: https://kubernetes.io/docs/tasks/configure-pod-container/security-context/#set-the-security-context-for-a-container
+  ## @param volumePermissions.containerSecurityContext.runAsUser Set init container's Security Context runAsUser
+  ## NOTE: when runAsUser is set to special value "auto", init container will try to chown the
+  ##   data folder to auto-determined user&group, using commands: `id -u`:`id -G | cut -d" " -f2`
+  ##   "auto" is especially useful for OpenShift which has scc with dynamic user ids (and 0 is not allowed)
+  ##
+  containerSecurityContext:
+    runAsUser: 0
\ No newline at end of file
diff --git a/addons/prometheus/2/meta.yaml b/addons/prometheus/2/meta.yaml
new file mode 100644
index 00000000..e964f81d
--- /dev/null
+++ b/addons/prometheus/2/meta.yaml
@@ -0,0 +1,20 @@
+name: prometheus
+version: 2023
+id: b8f70264-eafc-4b2f-848e-2ec0d059032b
+description: "prometheus."
+displayName: "prometheus"
+metadata:
+  displayName: "prometheus"
+  provider:
+    name: drycc
+    supportURL: https://prometheus.io
+  documentationURL: https://github.com/drycc-addons/drycc-docker-prometheus
+tags: prometheus
+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
diff --git a/addons/prometheus/2/plan/standard-1-2/bind.yaml b/addons/prometheus/2/plan/standard-1-2/bind.yaml
new file mode 100644
index 00000000..5ee819d9
--- /dev/null
+++ b/addons/prometheus/2/plan/standard-1-2/bind.yaml
@@ -0,0 +1,34 @@
+credential:
+  {{- if (eq .Values.router.service.type "LoadBalancer") }}
+  - name: host
+    valueFrom:
+      serviceRef:
+        name: {{ printf "%s-router" (include "common.names.fullname" .) }}
+        jsonpath: '{ .status.loadBalancer.ingress[*].ip }'
+  - name: database
+    valueFrom:
+      secretKeyRef:
+        name: {{ template "common.names.fullname" . }}-svcbind-custom-user
+        jsonpath: '{ .data.database }' 
+  - name: password
+    valueFrom:
+      secretKeyRef:
+        name: {{ template "common.names.fullname" . }}-svcbind-custom-user
+        jsonpath: '{ .data.username }' 
+  - name: username
+    valueFrom:
+      secretKeyRef:
+        name: {{ template "common.names.fullname" . }}-svcbind-custom-user
+        jsonpath: '{ .data.username }' 
+  - name: portrw
+    valueFrom:
+      secretKeyRef:
+        name: {{ template "common.names.fullname" . }}-svcbind-custom-user
+        jsonpath: '{ .data.portrw }' 
+  - name: portro
+    valueFrom:
+      secretKeyRef:
+        name: {{ template "common.names.fullname" . }}-svcbind-custom-user
+        jsonpath: '{ .data.portro }' 
+  {{- end }}
+
diff --git a/addons/prometheus/2/plan/standard-1-2/create-instance-schema.json b/addons/prometheus/2/plan/standard-1-2/create-instance-schema.json
new file mode 100644
index 00000000..66ebbaa0
--- /dev/null
+++ b/addons/prometheus/2/plan/standard-1-2/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/prometheus/2/plan/standard-1-2/meta.yaml b/addons/prometheus/2/plan/standard-1-2/meta.yaml
new file mode 100644
index 00000000..2f429c29
--- /dev/null
+++ b/addons/prometheus/2/plan/standard-1-2/meta.yaml
@@ -0,0 +1,6 @@
+name: "standard-10"
+id: 2b455154-8725-482a-95b2-a193c180d9b5
+description: "Mysql Cluster standard-10 plan which limit 1c1g ,default persistence size 10Gi."
+displayName: "1C2G"
+bindable: true
+maximum_polling_duration: 1800
diff --git a/addons/prometheus/2/plan/standard-1-2/values.yaml b/addons/prometheus/2/plan/standard-1-2/values.yaml
new file mode 100644
index 00000000..3470d0d5
--- /dev/null
+++ b/addons/prometheus/2/plan/standard-1-2/values.yaml
@@ -0,0 +1,7 @@
+## @param fullnameOverride String to fully override common.names.fullname template
+##
+fullnameOverride: hb-prometheus-standard-10
+
+server:
+  persistence:
+    size: 10Gi
\ No newline at end of file
