You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@dubbo.apache.org by al...@apache.org on 2023/03/08 10:54:39 UTC

[dubbo-admin] branch refactor-with-go updated: update tpl (#1016)

This is an automated email from the ASF dual-hosted git repository.

albumenj pushed a commit to branch refactor-with-go
in repository https://gitbox.apache.org/repos/asf/dubbo-admin.git


The following commit(s) were added to refs/heads/refactor-with-go by this push:
     new 49f3a1fc update tpl (#1016)
49f3a1fc is described below

commit 49f3a1fc95eaba72a27971b17cb664f4f624a6ab
Author: mfordjody <11...@qq.com>
AuthorDate: Wed Mar 8 18:54:30 2023 +0800

    update tpl (#1016)
---
 .../dubbo-admin/templates/_charts.tpl}             |   0
 .../grafana/templates/_charts.tpl}                 |   0
 .../nacos/templates/_charts.tpl}                   |   0
 .../admin-stack/charts/prometheus/.helmignore      |   2 +-
 .../admin-stack/charts/prometheus/Chart.yaml       |   2 +-
 .../prometheus/charts/alertmanager/.helmignore     |   6 +-
 .../prometheus/charts/alertmanager/Chart.yaml      |   2 +-
 .../charts/alertmanager/templates/_charts.tpl      | 121 ++--
 .../charts/alertmanager/templates/clusterrole.yaml |   8 +-
 .../alertmanager/templates/clusterrolebinding.yaml |  14 +-
 .../charts/alertmanager/templates/configmap.yaml   |  22 +-
 .../charts/alertmanager/templates/deploy.yaml      | 219 -------
 .../charts/alertmanager/templates/ingress.yaml     |  84 ++-
 .../alertmanager/templates/networkpolicy.yaml      |   6 +-
 .../charts/alertmanager/templates/pdb.yaml         |  13 +-
 .../charts/alertmanager/templates/psp.yaml         |  10 +-
 .../charts/alertmanager/templates/pvc.yaml         |  52 --
 .../charts/alertmanager/templates/role.yaml        |  10 +-
 .../charts/alertmanager/templates/rolebinding.yaml |  16 +-
 .../charts/alertmanager/templates/service.yaml     |  86 +--
 .../alertmanager/templates/serviceaccount.yaml     |  13 +-
 .../charts/alertmanager/templates/statefulset.yaml | 214 +++++++
 .../charts/alertmanager/templates/sts.yaml         | 196 ------
 .../alertmanager/templates/svc-headless.yaml       |  46 --
 .../prometheus/charts/alertmanager/values.yaml     | 624 +++++++------------
 .../charts/kube-state-metrics/.helmignore          |   2 -
 .../charts/kube-state-metrics/Chart.yaml           |  35 +-
 .../kube-state-metrics/templates/_charts.tpl       |  60 +-
 .../templates/clusterrolebinding.yaml              |   2 +-
 .../kube-state-metrics/templates/deployment.yaml   | 165 ++++-
 .../charts/kube-state-metrics/templates/pdb.yaml   |   4 +
 .../templates/podsecuritypolicy.yaml               |   2 +-
 .../templates/psp-clusterrole.yaml                 |   2 +-
 .../templates/psp-clusterrolebinding.yaml          |   2 +-
 ...{kubeconfig-secret.yaml => rbac-configmap.yaml} |  21 +-
 .../charts/kube-state-metrics/templates/role.yaml  |  22 +-
 .../kube-state-metrics/templates/rolebinding.yaml  |  29 +-
 .../{kubeconfig-secret.yaml => secret.yaml}        |   2 +-
 .../kube-state-metrics/templates/service.yaml      |  14 +
 .../templates/serviceaccount.yaml                  |   4 +-
 .../templates/servicemonitor.yaml                  |  31 +-
 .../{stsdiscovery-role.yaml => sts-role.yaml}      |   2 +-
 ...overy-rolebinding.yaml => sts-rolebinding.yaml} |   2 +-
 .../templates/verticalpodautoscaler.yaml           |  49 ++
 .../charts/kube-state-metrics/values.yaml          | 155 ++++-
 .../prometheus/charts/node-exporter/.helmignore    |   2 -
 .../charts/node-exporter/templates/_charts.tpl     |  59 +-
 .../charts/node-exporter/templates/daemonset.yaml  |   2 +-
 .../charts/node-exporter/templates/psp.yaml        |   2 +-
 .../node-exporter/templates/serviceaccount.yaml    |   4 +-
 .../prometheus/charts/node-exporter/values.yaml    | 339 ++++-------
 .../prometheus/charts/pushgateway/.helmignore      |   3 +-
 .../charts/pushgateway/templates/_charts.tpl       |  84 ++-
 .../charts/pushgateway/templates/deployment.yaml   |  10 +-
 .../charts/pushgateway/templates/ingress.yaml      |  18 +-
 .../pushgateway/templates/networkpolicy.yaml       |  12 +-
 .../charts/pushgateway/templates/pdb.yaml          |   2 +-
 .../templates/{pushgateway-pvc.yaml => pvc.yaml}   |  16 +-
 .../charts/pushgateway/templates/service.yaml      |  28 +-
 .../pushgateway/templates/serviceaccount.yaml      |   2 +-
 .../charts/pushgateway/templates/statefulset.yaml  |  22 +-
 .../prometheus/charts/pushgateway/values.yaml      | 515 ++++++++--------
 .../charts/prometheus/templates/_charts.tpl        | 251 +++++++-
 .../charts/prometheus/templates/clusterrole.yaml   |   2 +-
 .../prometheus/templates/clusterrolebinding.yaml   |   2 +-
 .../templates/{cm.yaml => configmap.yaml}          |  19 +-
 .../templates/{deploy.yaml => deployment.yaml}     |  50 +-
 .../charts/prometheus/templates/ingress.yaml       |   2 -
 .../charts/prometheus/templates/networkpolicy.yaml |   4 +-
 .../charts/prometheus/templates/pdb.yaml           |   4 +-
 .../charts/prometheus/templates/psp.yaml           |  12 +-
 .../charts/prometheus/templates/pvc.yaml           |   3 +-
 .../charts/prometheus/templates/rolebinding.yaml   |   4 +-
 .../charts/prometheus/templates/service.yaml       |   2 +-
 .../prometheus/templates/serviceaccount.yaml       |   4 +-
 .../templates/{sts.yaml => statefulset.yaml}       |  66 +-
 .../charts/prometheus/templates/svc-headless.yaml  |   4 +-
 .../templates/verticalpodautoscaler.yaml           |   8 +-
 .../admin-stack/charts/prometheus/values.yaml      | 662 +++++----------------
 .../zookeeper/templates/_charts.tpl}               |   0
 .../templates/apps/_kube-state-metrics.tpl         |  10 -
 .../admin-stack/templates/apps/_node-exporter.tpl  |  43 --
 .../admin-stack/templates/apps/_prometheus.tpl     | 122 ----
 .../admin-stack/templates/apps/_pushgateway.tpl    |  39 --
 84 files changed, 2192 insertions(+), 2612 deletions(-)

diff --git a/deploy/charts/admin-stack/templates/apps/_admin.tpl b/deploy/charts/admin-stack/charts/dubbo-admin/templates/_charts.tpl
similarity index 100%
rename from deploy/charts/admin-stack/templates/apps/_admin.tpl
rename to deploy/charts/admin-stack/charts/dubbo-admin/templates/_charts.tpl
diff --git a/deploy/charts/admin-stack/templates/apps/_grafana.tpl b/deploy/charts/admin-stack/charts/grafana/templates/_charts.tpl
similarity index 100%
rename from deploy/charts/admin-stack/templates/apps/_grafana.tpl
rename to deploy/charts/admin-stack/charts/grafana/templates/_charts.tpl
diff --git a/deploy/charts/admin-stack/templates/apps/_nacos.tpl b/deploy/charts/admin-stack/charts/nacos/templates/_charts.tpl
similarity index 100%
rename from deploy/charts/admin-stack/templates/apps/_nacos.tpl
rename to deploy/charts/admin-stack/charts/nacos/templates/_charts.tpl
diff --git a/deploy/charts/admin-stack/charts/prometheus/.helmignore b/deploy/charts/admin-stack/charts/prometheus/.helmignore
index 8cade131..825c0077 100644
--- a/deploy/charts/admin-stack/charts/prometheus/.helmignore
+++ b/deploy/charts/admin-stack/charts/prometheus/.helmignore
@@ -16,8 +16,8 @@
 *.tmp
 *~
 # Various IDEs
-.vscode
 .project
 .idea/
 *.tmproj
+
 OWNERS
diff --git a/deploy/charts/admin-stack/charts/prometheus/Chart.yaml b/deploy/charts/admin-stack/charts/prometheus/Chart.yaml
index 3da44652..9ab1a52b 100644
--- a/deploy/charts/admin-stack/charts/prometheus/Chart.yaml
+++ b/deploy/charts/admin-stack/charts/prometheus/Chart.yaml
@@ -25,4 +25,4 @@ maintainers:
 sources:
   - https://github.com/prometheus/prometheus
 type: application
-version: 19.6.1
+version: 19.6.1
\ No newline at end of file
diff --git a/deploy/charts/admin-stack/charts/prometheus/charts/alertmanager/.helmignore b/deploy/charts/admin-stack/charts/prometheus/charts/alertmanager/.helmignore
index 8cade131..7653e97e 100644
--- a/deploy/charts/admin-stack/charts/prometheus/charts/alertmanager/.helmignore
+++ b/deploy/charts/admin-stack/charts/prometheus/charts/alertmanager/.helmignore
@@ -14,10 +14,12 @@
 *.swp
 *.bak
 *.tmp
+*.orig
 *~
 # Various IDEs
-.vscode
 .project
 .idea/
 *.tmproj
-OWNERS
+.vscode/
+
+unittests/
diff --git a/deploy/charts/admin-stack/charts/prometheus/charts/alertmanager/Chart.yaml b/deploy/charts/admin-stack/charts/prometheus/charts/alertmanager/Chart.yaml
index c84a5282..4df4a62b 100644
--- a/deploy/charts/admin-stack/charts/prometheus/charts/alertmanager/Chart.yaml
+++ b/deploy/charts/admin-stack/charts/prometheus/charts/alertmanager/Chart.yaml
@@ -27,4 +27,4 @@ name: alertmanager
 sources:
   - https://github.com/prometheus/alertmanager
 type: application
-version: 0.24.1
+version: 0.24.1
\ No newline at end of file
diff --git a/deploy/charts/admin-stack/charts/prometheus/charts/alertmanager/templates/_charts.tpl b/deploy/charts/admin-stack/charts/prometheus/charts/alertmanager/templates/_charts.tpl
index 84a4bc42..18e090d1 100644
--- a/deploy/charts/admin-stack/charts/prometheus/charts/alertmanager/templates/_charts.tpl
+++ b/deploy/charts/admin-stack/charts/prometheus/charts/alertmanager/templates/_charts.tpl
@@ -1,51 +1,94 @@
-{{- define "prometheus.alertmanager.fullname" -}}
-{{- if .Values.alertmanager.fullnameOverride -}}
-{{- .Values.alertmanager.fullnameOverride | trunc 63 | trimSuffix "-" -}}
-{{- else -}}
-{{- $name := default .Chart.Name .Values.nameOverride -}}
-{{- if contains $name .Release.Name -}}
-{{- printf "%s-%s" .Release.Name .Values.alertmanager.name | trunc 63 | trimSuffix "-" -}}
-{{- else -}}
-{{- printf "%s-%s-%s" .Release.Name $name .Values.alertmanager.name | trunc 63 | trimSuffix "-" -}}
-{{- end -}}
-{{- end -}}
-{{- end -}}
+{{/* vim: set filetype=mustache: */}}
+{{/*
+Expand the name of the chart.
+*/}}
+{{- define "alertmanager.name" -}}
+{{- default .Chart.Name .Values.nameOverride | trunc 63 | trimSuffix "-" }}
+{{- end }}
 
-{{- define "prometheus.alertmanager.matchLabels" -}}
-component: {{ .Values.alertmanager.name | quote }}
-{{ include "prometheus.common.matchLabels" . }}
-{{- end -}}
+{{/*
+Create a default fully qualified app name.
+We truncate at 63 chars because some Kubernetes name fields are limited to this (by the DNS naming spec).
+If release name contains chart name it will be used as a full name.
+*/}}
+{{- define "alertmanager.fullname" -}}
+{{- if .Values.fullnameOverride }}
+{{- .Values.fullnameOverride | trunc 63 | trimSuffix "-" }}
+{{- else }}
+{{- $name := default .Chart.Name .Values.nameOverride }}
+{{- if contains $name .Release.Name }}
+{{- .Release.Name | trunc 63 | trimSuffix "-" }}
+{{- else }}
+{{- printf "%s-%s" .Release.Name $name | trunc 63 | trimSuffix "-" }}
+{{- end }}
+{{- end }}
+{{- end }}
 
 {{/*
-Create the name of the service account to use for the alertmanager component
+Create chart name and version as used by the chart label.
 */}}
-{{- define "prometheus.serviceAccountName.alertmanager" -}}
-{{- if .Values.serviceAccounts.alertmanager.create -}}
-    {{ default (include "prometheus.alertmanager.fullname" .) .Values.serviceAccounts.alertmanager.name }}
-{{- else -}}
-    {{ default "default" .Values.serviceAccounts.alertmanager.name }}
-{{- end -}}
-{{- end -}}
+{{- define "alertmanager.chart" -}}
+{{- printf "%s-%s" .Chart.Name .Chart.Version | replace "+" "_" | trunc 63 | trimSuffix "-" }}
+{{- end }}
 
-{{- define "prometheus.alertmanager.labels" -}}
-{{ include "prometheus.alertmanager.matchLabels" . }}
-{{ include "prometheus.common.metaLabels" . }}
-{{- end -}}
+{{/*
+Common labels
+*/}}
+{{- define "alertmanager.labels" -}}
+helm.sh/chart: {{ include "alertmanager.chart" . }}
+{{ include "alertmanager.selectorLabels" . }}
+{{- with .Chart.AppVersion }}
+app.kubernetes.io/version: {{ . | quote }}
+{{- end }}
+app.kubernetes.io/managed-by: {{ .Release.Service }}
+{{- end }}
 
 {{/*
-Return the appropriate apiVersion for deployment.
+Selector labels
 */}}
-{{- define "prometheus.deployment.apiVersion" -}}
-{{- print "apps/v1" -}}
-{{- end -}}
+{{- define "alertmanager.selectorLabels" -}}
+app.kubernetes.io/name: {{ include "alertmanager.name" . }}
+app.kubernetes.io/instance: {{ .Release.Name }}
+{{- end }}
+
+{{/*
+Create the name of the service account to use
+*/}}
+{{- define "alertmanager.serviceAccountName" -}}
+{{- if .Values.serviceAccount.create }}
+{{- default (include "alertmanager.fullname" .) .Values.serviceAccount.name }}
+{{- else }}
+{{- default "default" .Values.serviceAccount.name }}
+{{- end }}
+{{- end }}
+
+{{/*
+Define Ingress apiVersion
+*/}}
+{{- define "alertmanager.ingress.apiVersion" -}}
+{{- if semverCompare ">=1.19-0" .Capabilities.KubeVersion.GitVersion }}
+{{- printf "networking.k8s.io/v1" }}
+{{- else if semverCompare ">=1.14-0" .Capabilities.KubeVersion.GitVersion }}
+{{- printf "networking.k8s.io/v1beta1" }}
+{{- else }}
+{{- printf "extensions/v1beta1" }}
+{{- end }}
+{{- end }}
+
+{{/*
+Define Pdb apiVersion
+*/}}
+{{- define "alertmanager.pdb.apiVersion" -}}
+{{- if $.Capabilities.APIVersions.Has "policy/v1/PodDisruptionBudget" }}
+{{- printf "policy/v1" }}
+{{- else }}
+{{- printf "policy/v1beta1" }}
+{{- end }}
+{{- end }}
 
 {{/*
-Return the appropriate apiVersion for rbac.
+Return the appropriate apiVersion for podsecuritypolicy.
 */}}
-{{- define "rbac.apiVersion" -}}
-{{- if .Capabilities.APIVersions.Has "rbac.authorization.k8s.io/v1" }}
-{{- print "rbac.authorization.k8s.io/v1" -}}
-{{- else -}}
-{{- print "rbac.authorization.k8s.io/v1beta1" -}}
+{{- define "alertmanager.psp.apiVersion" -}}
+{{- print "policy/v1beta1" -}}
 {{- end -}}
-{{- end -}}
\ No newline at end of file
diff --git a/deploy/charts/admin-stack/charts/prometheus/charts/alertmanager/templates/clusterrole.yaml b/deploy/charts/admin-stack/charts/prometheus/charts/alertmanager/templates/clusterrole.yaml
index 1bcfb982..752061bb 100644
--- a/deploy/charts/admin-stack/charts/prometheus/charts/alertmanager/templates/clusterrole.yaml
+++ b/deploy/charts/admin-stack/charts/prometheus/charts/alertmanager/templates/clusterrole.yaml
@@ -1,3 +1,4 @@
+{{- if and .Values.enabled .Values.rbac.create .Values.useClusterRole (not .Values.useExistingRole) -}}
 # Licensed to the Apache Software Foundation (ASF) under one or more
 # contributor license agreements.  See the NOTICE file distributed with
 # this work for additional information regarding copyright ownership.
@@ -13,13 +14,12 @@
 # See the License for the specific language governing permissions and
 # limitations under the License.
 
-{{- if and .Values.alertmanager.enabled .Values.rbac.create .Values.alertmanager.useClusterRole (not .Values.alertmanager.useExistingRole) -}}
 apiVersion: {{ template "rbac.apiVersion" . }}
 kind: ClusterRole
 metadata:
   labels:
-    {{- include "prometheus.alertmanager.labels" . | nindent 4 }}
-  name: {{ template "prometheus.alertmanager.fullname" . }}
+    {{- include "alertmanager.labels" . | nindent 4 }}
+  name: {{ template "alertmanager.fullname" . }}
 rules:
 {{- if .Values.podSecurityPolicy.enabled }}
   - apiGroups:
@@ -29,7 +29,7 @@ rules:
     verbs:
     - use
     resourceNames:
-    - {{ template "prometheus.alertmanager.fullname" . }}
+    - {{ template "alertmanager.fullname" . }}
 {{- else }}
   []
 {{- end }}
diff --git a/deploy/charts/admin-stack/charts/prometheus/charts/alertmanager/templates/clusterrolebinding.yaml b/deploy/charts/admin-stack/charts/prometheus/charts/alertmanager/templates/clusterrolebinding.yaml
index ed58f49d..d7c30bf4 100644
--- a/deploy/charts/admin-stack/charts/prometheus/charts/alertmanager/templates/clusterrolebinding.yaml
+++ b/deploy/charts/admin-stack/charts/prometheus/charts/alertmanager/templates/clusterrolebinding.yaml
@@ -1,3 +1,4 @@
+{{- if and .Values.enabled .Values.rbac.create .Values.useClusterRole -}}
 # Licensed to the Apache Software Foundation (ASF) under one or more
 # contributor license agreements.  See the NOTICE file distributed with
 # this work for additional information regarding copyright ownership.
@@ -13,23 +14,22 @@
 # See the License for the specific language governing permissions and
 # limitations under the License.
 
-{{- if and .Values.alertmanager.enabled .Values.rbac.create .Values.alertmanager.useClusterRole -}}
 apiVersion: {{ template "rbac.apiVersion" . }}
 kind: ClusterRoleBinding
 metadata:
   labels:
-    {{- include "prometheus.alertmanager.labels" . | nindent 4 }}
-  name: {{ template "prometheus.alertmanager.fullname" . }}
+    {{- include "alertmanager.labels" . | nindent 4 }}
+  name: {{ template "alertmanager.fullname" . }}
 subjects:
   - kind: ServiceAccount
-    name: {{ template "prometheus.serviceAccountName.alertmanager" . }}
+    name: {{ include "alertmanager.serviceAccountName" . }}
 {{ include "prometheus.namespace" . | indent 4 }}
 roleRef:
   apiGroup: rbac.authorization.k8s.io
   kind: ClusterRole
-{{- if (not .Values.alertmanager.useExistingRole) }}
-  name: {{ template "prometheus.alertmanager.fullname" . }}
+{{- if (not .Values.useExistingRole) }}
+  name: {{ template "alertmanager.fullname" . }}
 {{- else }}
-  name: {{ .Values.alertmanager.useExistingRole }}
+  name: {{ .Values.useExistingRole }}
 {{- end }}
 {{- end }}
diff --git a/deploy/charts/admin-stack/charts/prometheus/charts/alertmanager/templates/configmap.yaml b/deploy/charts/admin-stack/charts/prometheus/charts/alertmanager/templates/configmap.yaml
index db673c42..806a09f5 100644
--- a/deploy/charts/admin-stack/charts/prometheus/charts/alertmanager/templates/configmap.yaml
+++ b/deploy/charts/admin-stack/charts/prometheus/charts/alertmanager/templates/configmap.yaml
@@ -13,22 +13,18 @@
 # See the License for the specific language governing permissions and
 # limitations under the License.
 
-{{- if and .Values.alertmanager.enabled (and (empty .Values.alertmanager.configMapOverrideName) (empty .Values.alertmanager.configFromSecret)) -}}
+{{- if .Values.config }}
 apiVersion: v1
 kind: ConfigMap
 metadata:
+  name: {{ include "alertmanager.fullname" . }}
   labels:
-    {{- include "prometheus.alertmanager.labels" . | nindent 4 }}
-  name: {{ template "prometheus.alertmanager.fullname" . }}
-{{ include "prometheus.namespace" . | indent 2 }}
+    {{- include "alertmanager.labels" . | nindent 4 }}
 data:
-{{- $root := . -}}
-{{- range $key, $value := .Values.alertmanagerFiles }}
-  {{- if $key | regexMatch ".*\\.ya?ml$" }}
-  {{ $key }}: |
-{{ toYaml $value | default "{}" | indent 4 }}
-  {{- else }}
-  {{ $key }}: {{ toYaml $value | indent 4 }}
+  alertmanager.yml: |
+    {{- toYaml .Values.config | default "{}" | nindent 4 }}
+  {{- range $key, $value := .Values.templates }}
+  {{ $key }}: |-
+    {{- $value | nindent 4 }}
   {{- end }}
-{{- end -}}
-{{- end -}}
+{{- end }}
diff --git a/deploy/charts/admin-stack/charts/prometheus/charts/alertmanager/templates/deploy.yaml b/deploy/charts/admin-stack/charts/prometheus/charts/alertmanager/templates/deploy.yaml
deleted file mode 100644
index 34514664..00000000
--- a/deploy/charts/admin-stack/charts/prometheus/charts/alertmanager/templates/deploy.yaml
+++ /dev/null
@@ -1,219 +0,0 @@
-# Licensed to the Apache Software Foundation (ASF) under one or more
-# contributor license agreements.  See the NOTICE file distributed with
-# this work for additional information regarding copyright ownership.
-# The ASF licenses this file to You under the Apache License, Version 2.0
-# (the "License"); you may not use this file except in compliance with
-# the License.  You may obtain a copy of the License at
-#
-#     http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-
-{{- if and .Values.alertmanager.enabled (not .Values.alertmanager.statefulSet.enabled) -}}
-apiVersion: {{ template "prometheus.deployment.apiVersion" . }}
-kind: Deployment
-metadata:
-{{- if .Values.alertmanager.deploymentAnnotations }}
-  annotations:
-    {{ toYaml .Values.alertmanager.deploymentAnnotations | nindent 4 }}
-{{- end }}
-  labels:
-    {{- include "prometheus.alertmanager.labels" . | nindent 4 }}
-  name: {{ template "prometheus.alertmanager.fullname" . }}
-{{ include "prometheus.namespace" . | indent 2 }}
-spec:
-  selector:
-    matchLabels:
-      {{- include "prometheus.alertmanager.matchLabels" . | nindent 6 }}
-  replicas: {{ .Values.alertmanager.replicaCount }}
-  {{- if .Values.alertmanager.strategy }}
-  strategy:
-{{ toYaml .Values.alertmanager.strategy | trim | indent 4 }}
-    {{ if eq .Values.alertmanager.strategy.type "Recreate" }}rollingUpdate: null{{ end }}
-{{- end }}
-  template:
-    metadata:
-    {{- if .Values.alertmanager.podAnnotations }}
-      annotations:
-        {{ toYaml .Values.alertmanager.podAnnotations | nindent 8 }}
-    {{- end }}
-      labels:
-        {{- include "prometheus.alertmanager.labels" . | nindent 8 }}
-        {{- if .Values.alertmanager.podLabels}}
-        {{ toYaml .Values.alertmanager.podLabels | nindent 8 }}
-        {{- end}}
-    spec:
-{{- if .Values.alertmanager.schedulerName }}
-      schedulerName: "{{ .Values.alertmanager.schedulerName }}"
-{{- end }}
-      serviceAccountName: {{ template "prometheus.serviceAccountName.alertmanager" . }}
-      {{- if .Values.alertmanager.extraInitContainers }}
-      initContainers:
-{{ toYaml .Values.alertmanager.extraInitContainers | indent 8 }}
-      {{- end }}
-{{- if .Values.alertmanager.priorityClassName }}
-      priorityClassName: "{{ .Values.alertmanager.priorityClassName }}"
-{{- end }}
-      containers:
-        - name: {{ template "prometheus.name" . }}-{{ .Values.alertmanager.name }}
-          image: "{{ .Values.alertmanager.image.repository }}:{{ .Values.alertmanager.image.tag }}"
-          imagePullPolicy: "{{ .Values.alertmanager.image.pullPolicy }}"
-          env:
-            {{- range $key, $value := .Values.alertmanager.extraEnv }}
-            - name: {{ $key }}
-              value: {{ $value }}
-            {{- end }}
-            - name: POD_IP
-              valueFrom:
-                fieldRef:
-                  apiVersion: v1
-                  fieldPath: status.podIP
-          args:
-            - --config.file=/etc/config/{{ .Values.alertmanager.configFileName }}
-            - --storage.path={{ .Values.alertmanager.persistentVolume.mountPath }}
-          {{- if .Values.alertmanager.service.enableMeshPeer }}
-            - --cluster.listen-address=0.0.0.0:6783
-            - --cluster.advertise-address=[$(POD_IP)]:6783
-          {{- else }}
-            - --cluster.listen-address=
-          {{- end }}
-          {{- range $key, $value := .Values.alertmanager.extraArgs }}
-            - --{{ $key }}={{ $value }}
-          {{- end }}
-          {{- if .Values.alertmanager.baseURL }}
-            - --web.external-url={{ .Values.alertmanager.baseURL }}
-          {{- end }}
-          {{- range .Values.alertmanager.clusterPeers }}
-            - --cluster.peer={{ . }}
-          {{- end }}
-
-          ports:
-            - containerPort: 9093
-          readinessProbe:
-            httpGet:
-              path: {{ .Values.alertmanager.prefixURL }}/-/ready
-              port: 9093
-              {{- if .Values.alertmanager.probeHeaders }}
-              httpHeaders:
-              {{- range .Values.alertmanager.probeHeaders }}
-              - name: {{ .name }}
-                value: {{ .value }}
-              {{- end }}
-              {{- end }}
-            initialDelaySeconds: 30
-            timeoutSeconds: 30
-          resources:
-{{ toYaml .Values.alertmanager.resources | indent 12 }}
-          volumeMounts:
-            - name: config-volume
-              mountPath: /etc/config
-            - name: storage-volume
-              mountPath: "{{ .Values.alertmanager.persistentVolume.mountPath }}"
-              subPath: "{{ .Values.alertmanager.persistentVolume.subPath }}"
-          {{- range .Values.alertmanager.extraSecretMounts }}
-            - name: {{ .name }}
-              mountPath: {{ .mountPath }}
-              subPath: {{ .subPath }}
-              readOnly: {{ .readOnly }}
-          {{- end }}
-          {{- range .Values.alertmanager.extraConfigmapMounts }}
-            - name: {{ .name }}
-              mountPath: {{ .mountPath }}
-              subPath: {{ .subPath }}
-              readOnly: {{ .readOnly }}
-          {{- end }}
-
-        {{- if .Values.configmapReload.alertmanager.enabled }}
-        - name: {{ template "prometheus.name" . }}-{{ .Values.alertmanager.name }}-{{ .Values.configmapReload.alertmanager.name }}
-          image: "{{ .Values.configmapReload.alertmanager.image.repository }}:{{ .Values.configmapReload.alertmanager.image.tag }}"
-          imagePullPolicy: "{{ .Values.configmapReload.alertmanager.image.pullPolicy }}"
-          args:
-            - --volume-dir=/etc/config
-            - --webhook-url=http://127.0.0.1:9093{{ .Values.alertmanager.prefixURL }}/-/reload
-          {{- range $key, $value := .Values.configmapReload.alertmanager.extraArgs }}
-            - --{{ $key }}={{ $value }}
-          {{- end }}
-          {{- range .Values.configmapReload.alertmanager.extraVolumeDirs }}
-            - --volume-dir={{ . }}
-          {{- end }}
-          resources:
-{{ toYaml .Values.configmapReload.alertmanager.resources | indent 12 }}
-          volumeMounts:
-            - name: config-volume
-              mountPath: /etc/config
-              readOnly: true
-            {{- range .Values.configmapReload.alertmanager.extraConfigmapMounts }}
-            - name: {{ $.Values.configmapReload.alertmanager.name }}-{{ .name }}
-              mountPath: {{ .mountPath }}
-              subPath: {{ .subPath }}
-              readOnly: {{ .readOnly }}
-            {{- end }}
-        {{- end }}
-    {{- if .Values.imagePullSecrets }}
-      imagePullSecrets:
-{{ toYaml .Values.imagePullSecrets | indent 8 }}
-    {{- end }}
-    {{- if .Values.alertmanager.nodeSelector }}
-      nodeSelector:
-{{ toYaml .Values.alertmanager.nodeSelector | indent 8 }}
-    {{- end }}
-    {{- with .Values.alertmanager.dnsConfig }}
-      dnsConfig:
-{{ toYaml . | indent 8 }}
-    {{- end }}
-    {{- if .Values.alertmanager.securityContext }}
-      securityContext:
-{{ toYaml .Values.alertmanager.securityContext | indent 8 }}
-    {{- end }}
-    {{- if .Values.alertmanager.tolerations }}
-      tolerations:
-{{ toYaml .Values.alertmanager.tolerations | indent 8 }}
-    {{- end }}
-    {{- if .Values.alertmanager.affinity }}
-      affinity:
-{{ toYaml .Values.alertmanager.affinity | indent 8 }}
-    {{- end }}
-      volumes:
-        - name: config-volume
-          {{- if empty .Values.alertmanager.configFromSecret }}
-          configMap:
-            name: {{ if .Values.alertmanager.configMapOverrideName }}{{ .Release.Name }}-{{ .Values.alertmanager.configMapOverrideName }}{{- else }}{{ template "prometheus.alertmanager.fullname" . }}{{- end }}
-          {{- else }}
-          secret:
-            secretName: {{ .Values.alertmanager.configFromSecret }}
-          {{- end }}
-      {{- range .Values.alertmanager.extraSecretMounts }}
-        - name: {{ .name }}
-          secret:
-            secretName: {{ .secretName }}
-            {{- with .optional }}
-            optional: {{ . }}
-            {{- end }}
-      {{- end }}
-      {{- range .Values.alertmanager.extraConfigmapMounts }}
-        - name: {{ .name }}
-          configMap:
-            name: {{ .configMap }}
-      {{- end }}
-      {{- range .Values.configmapReload.alertmanager.extraConfigmapMounts }}
-        - name: {{ $.Values.configmapReload.alertmanager.name }}-{{ .name }}
-          configMap:
-            name: {{ .configMap }}
-      {{- end }}
-        - name: storage-volume
-        {{- if .Values.alertmanager.persistentVolume.enabled }}
-          persistentVolumeClaim:
-            claimName: {{ if .Values.alertmanager.persistentVolume.existingClaim }}{{ .Values.alertmanager.persistentVolume.existingClaim }}{{- else }}{{ template "prometheus.alertmanager.fullname" . }}{{- end }}
-        {{- else }}
-          emptyDir:
-          {{- if .Values.alertmanager.emptyDir.sizeLimit }}
-            sizeLimit: {{ .Values.alertmanager.emptyDir.sizeLimit }}
-          {{- else }}
-            {}
-          {{- end -}}
-        {{- end -}}
-{{- end }}
diff --git a/deploy/charts/admin-stack/charts/prometheus/charts/alertmanager/templates/ingress.yaml b/deploy/charts/admin-stack/charts/prometheus/charts/alertmanager/templates/ingress.yaml
index 4ca45048..dd344d17 100644
--- a/deploy/charts/admin-stack/charts/prometheus/charts/alertmanager/templates/ingress.yaml
+++ b/deploy/charts/admin-stack/charts/prometheus/charts/alertmanager/templates/ingress.yaml
@@ -13,60 +13,58 @@
 # See the License for the specific language governing permissions and
 # limitations under the License.
 
-{{- if and .Values.alertmanager.enabled .Values.alertmanager.ingress.enabled -}}
-{{- $ingressApiIsStable := eq (include "ingress.isStable" .) "true" -}}
-{{- $ingressSupportsIngressClassName := eq (include "ingress.supportsIngressClassName" .) "true" -}}
-{{- $ingressSupportsPathType := eq (include "ingress.supportsPathType" .) "true" -}}
-{{- $releaseName := .Release.Name -}}
-{{- $serviceName := include "prometheus.alertmanager.fullname" . }}
-{{- $servicePort := .Values.alertmanager.service.servicePort -}}
-{{- $ingressPath := .Values.alertmanager.ingress.path -}}
-{{- $ingressPathType := .Values.alertmanager.ingress.pathType -}}
-{{- $extraPaths := .Values.alertmanager.ingress.extraPaths -}}
-apiVersion: {{ template "ingress.apiVersion" . }}
+{{- if .Values.ingress.enabled }}
+{{- $fullName := include "alertmanager.fullname" . }}
+{{- $svcPort := .Values.service.port }}
+{{- if and .Values.ingress.className (not (semverCompare ">=1.18-0" .Capabilities.KubeVersion.GitVersion)) }}
+{{- if not (hasKey .Values.ingress.annotations "kubernetes.io/ingress.class") }}
+{{- $_ := set .Values.ingress.annotations "kubernetes.io/ingress.class" .Values.ingress.className}}
+{{- end }}
+{{- end }}
+apiVersion: {{ include "alertmanager.ingress.apiVersion" . }}
 kind: Ingress
 metadata:
-{{- if .Values.alertmanager.ingress.annotations }}
-  annotations:
-{{ toYaml .Values.alertmanager.ingress.annotations | indent 4 }}
-{{- end }}
+  name: {{ $fullName }}
   labels:
-    {{- include "prometheus.alertmanager.labels" . | nindent 4 }}
-{{- range $key, $value := .Values.alertmanager.ingress.extraLabels }}
-    {{ $key }}: {{ $value }}
-{{- end }}
-  name: {{ template "prometheus.alertmanager.fullname" . }}
-{{ include "prometheus.namespace" . | indent 2 }}
+    {{- include "alertmanager.labels" . | nindent 4 }}
+  {{- with .Values.ingress.annotations }}
+  annotations:
+    {{- toYaml . | nindent 4 }}
+  {{- end }}
 spec:
-  {{- if and $ingressSupportsIngressClassName .Values.alertmanager.ingress.ingressClassName }}
-  ingressClassName: {{ .Values.alertmanager.ingress.ingressClassName }}
+  {{- if and .Values.ingress.className (semverCompare ">=1.18-0" .Capabilities.KubeVersion.GitVersion) }}
+  ingressClassName: {{ .Values.ingress.className }}
+  {{- end }}
+  {{- if .Values.ingress.tls }}
+  tls:
+    {{- range .Values.ingress.tls }}
+    - hosts:
+        {{- range .hosts }}
+        - {{ . | quote }}
+        {{- end }}
+      secretName: {{ .secretName }}
+    {{- end }}
   {{- end }}
   rules:
-  {{- range .Values.alertmanager.ingress.hosts }}
-    {{- $url := splitList "/" . }}
-    - host: {{ first $url }}
+    {{- range .Values.ingress.hosts }}
+    - host: {{ .host | quote }}
       http:
         paths:
-{{ if $extraPaths }}
-{{ toYaml $extraPaths | indent 10 }}
-{{- end }}
-          - path: {{ $ingressPath }}
-            {{- if $ingressSupportsPathType }}
-            pathType: {{ $ingressPathType }}
+          {{- range .paths }}
+          - path: {{ .path }}
+            {{- if and .pathType (semverCompare ">=1.18-0" $.Capabilities.KubeVersion.GitVersion) }}
+            pathType: {{ .pathType }}
             {{- end }}
             backend:
-              {{- if $ingressApiIsStable }}
+              {{- if semverCompare ">=1.19-0" $.Capabilities.KubeVersion.GitVersion }}
               service:
-                name: {{ $serviceName }}
+                name: {{ $fullName }}
                 port:
-                  number: {{ $servicePort }}
+                  number: {{ $svcPort }}
               {{- else }}
-              serviceName: {{ $serviceName }}
-              servicePort: {{ $servicePort }}
+              serviceName: {{ $fullName }}
+              servicePort: {{ $svcPort }}
               {{- end }}
-  {{- end -}}
-{{- if .Values.alertmanager.ingress.tls }}
-  tls:
-{{ toYaml .Values.alertmanager.ingress.tls | indent 4 }}
-  {{- end -}}
-{{- end -}}
\ No newline at end of file
+          {{- end }}
+    {{- end }}
+{{- end }}
diff --git a/deploy/charts/admin-stack/charts/prometheus/charts/alertmanager/templates/networkpolicy.yaml b/deploy/charts/admin-stack/charts/prometheus/charts/alertmanager/templates/networkpolicy.yaml
index b24a6a36..c28a43ee 100644
--- a/deploy/charts/admin-stack/charts/prometheus/charts/alertmanager/templates/networkpolicy.yaml
+++ b/deploy/charts/admin-stack/charts/prometheus/charts/alertmanager/templates/networkpolicy.yaml
@@ -1,3 +1,4 @@
+{{- if and .Values.enabled .Values.networkPolicy.enabled -}}
 # Licensed to the Apache Software Foundation (ASF) under one or more
 # contributor license agreements.  See the NOTICE file distributed with
 # this work for additional information regarding copyright ownership.
@@ -13,14 +14,13 @@
 # See the License for the specific language governing permissions and
 # limitations under the License.
 
-{{- if and .Values.alertmanager.enabled .Values.networkPolicy.enabled -}}
 apiVersion: {{ template "prometheus.networkPolicy.apiVersion" . }}
 kind: NetworkPolicy
 metadata:
-  name: {{ template "prometheus.alertmanager.fullname" . }}
+  name: {{ template "alertmanager.fullname" . }}
 {{ include "prometheus.namespace" . | indent 2 }}
   labels:
-    {{- include "prometheus.alertmanager.labels" . | nindent 4 }}
+    {{- include "alertmanager.labels" . | nindent 4 }}
 spec:
   podSelector:
     matchLabels:
diff --git a/deploy/charts/admin-stack/charts/prometheus/charts/alertmanager/templates/pdb.yaml b/deploy/charts/admin-stack/charts/prometheus/charts/alertmanager/templates/pdb.yaml
index 2b0ef88e..d2df1290 100644
--- a/deploy/charts/admin-stack/charts/prometheus/charts/alertmanager/templates/pdb.yaml
+++ b/deploy/charts/admin-stack/charts/prometheus/charts/alertmanager/templates/pdb.yaml
@@ -13,17 +13,16 @@
 # See the License for the specific language governing permissions and
 # limitations under the License.
 
-{{- if .Values.alertmanager.podDisruptionBudget.enabled }}
-apiVersion: policy/v1beta1
+{{- if .Values.podDisruptionBudget }}
+apiVersion: {{ include "alertmanager.pdb.apiVersion" . }}
 kind: PodDisruptionBudget
 metadata:
-  name: {{ template "prometheus.alertmanager.fullname" . }}
-{{ include "prometheus.namespace" . | indent 2 }}
+  name: {{ include "alertmanager.fullname" . }}
   labels:
-    {{- include "prometheus.alertmanager.labels" . | nindent 4 }}
+    {{- include "alertmanager.labels" . | nindent 4 }}
 spec:
-  maxUnavailable: {{ .Values.alertmanager.podDisruptionBudget.maxUnavailable }}
   selector:
     matchLabels:
-      {{- include "prometheus.alertmanager.labels" . | nindent 6 }}
+      {{- include "alertmanager.selectorLabels" . | nindent 6 }}
+  {{- toYaml .Values.podDisruptionBudget | nindent 2 }}
 {{- end }}
diff --git a/deploy/charts/admin-stack/charts/prometheus/charts/alertmanager/templates/psp.yaml b/deploy/charts/admin-stack/charts/prometheus/charts/alertmanager/templates/psp.yaml
index bb0e4685..496acab5 100644
--- a/deploy/charts/admin-stack/charts/prometheus/charts/alertmanager/templates/psp.yaml
+++ b/deploy/charts/admin-stack/charts/prometheus/charts/alertmanager/templates/psp.yaml
@@ -1,3 +1,4 @@
+{{- if and .Values.enabled .Values.rbac.create .Values.podSecurityPolicy.enabled }}
 # Licensed to the Apache Software Foundation (ASF) under one or more
 # contributor license agreements.  See the NOTICE file distributed with
 # this work for additional information regarding copyright ownership.
@@ -13,16 +14,15 @@
 # See the License for the specific language governing permissions and
 # limitations under the License.
 
-{{- if and .Values.alertmanager.enabled .Values.rbac.create .Values.podSecurityPolicy.enabled }}
-apiVersion: {{ template "prometheus.podSecurityPolicy.apiVersion" . }}
+apiVersion: {{ template "alertmanager.psp.apiVersion" . }}
 kind: PodSecurityPolicy
 metadata:
   name: {{ template "prometheus.alertmanager.fullname" . }}
   labels:
     {{- include "prometheus.alertmanager.labels" . | nindent 4 }}
   annotations:
-{{- if .Values.alertmanager.podSecurityPolicy.annotations }}
-{{ toYaml .Values.alertmanager.podSecurityPolicy.annotations | indent 4 }}
+{{- if .Values.podSecurityPolicy.annotations }}
+{{ toYaml .Values.podSecurityPolicy.annotations | indent 4 }}
 {{- end }}
 spec:
   privileged: false
@@ -37,7 +37,7 @@ spec:
   allowedHostPaths:
     - pathPrefix: /etc
       readOnly: true
-    - pathPrefix: {{ .Values.alertmanager.persistentVolume.mountPath }}
+    - pathPrefix: {{ .Values.persistentVolume.mountPath }}
   hostNetwork: false
   hostPID: false
   hostIPC: false
diff --git a/deploy/charts/admin-stack/charts/prometheus/charts/alertmanager/templates/pvc.yaml b/deploy/charts/admin-stack/charts/prometheus/charts/alertmanager/templates/pvc.yaml
deleted file mode 100644
index ac2a8783..00000000
--- a/deploy/charts/admin-stack/charts/prometheus/charts/alertmanager/templates/pvc.yaml
+++ /dev/null
@@ -1,52 +0,0 @@
-# Licensed to the Apache Software Foundation (ASF) under one or more
-# contributor license agreements.  See the NOTICE file distributed with
-# this work for additional information regarding copyright ownership.
-# The ASF licenses this file to You under the Apache License, Version 2.0
-# (the "License"); you may not use this file except in compliance with
-# the License.  You may obtain a copy of the License at
-#
-#     http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-
-{{- if not .Values.alertmanager.statefulSet.enabled -}}
-{{- if and .Values.alertmanager.enabled .Values.alertmanager.persistentVolume.enabled -}}
-{{- if not .Values.alertmanager.persistentVolume.existingClaim -}}
-apiVersion: v1
-kind: PersistentVolumeClaim
-metadata:
-  {{- if .Values.alertmanager.persistentVolume.annotations }}
-  annotations:
-{{ toYaml .Values.alertmanager.persistentVolume.annotations | indent 4 }}
-  {{- end }}
-  labels:
-    {{- include "prometheus.alertmanager.labels" . | nindent 4 }}
-  name: {{ template "prometheus.alertmanager.fullname" . }}
-{{ include "prometheus.namespace" . | indent 2 }}
-spec:
-  accessModes:
-{{ toYaml .Values.alertmanager.persistentVolume.accessModes | indent 4 }}
-{{- if .Values.alertmanager.persistentVolume.storageClass }}
-{{- if (eq "-" .Values.alertmanager.persistentVolume.storageClass) }}
-  storageClassName: ""
-{{- else }}
-  storageClassName: "{{ .Values.alertmanager.persistentVolume.storageClass }}"
-{{- end }}
-{{- end }}
-{{- if .Values.alertmanager.persistentVolume.volumeBindingMode }}
-  volumeBindingMode: "{{ .Values.alertmanager.persistentVolume.volumeBindingMode }}"
-{{- end }}
-  resources:
-    requests:
-      storage: "{{ .Values.alertmanager.persistentVolume.size }}"
-{{- if .Values.alertmanager.persistentVolume.selector }}
-  selector:
-  {{- toYaml .Values.alertmanager.persistentVolume.selector | nindent 4 }}
-{{- end -}}
-{{- end -}}
-{{- end -}}
-{{- end -}}
diff --git a/deploy/charts/admin-stack/charts/prometheus/charts/alertmanager/templates/role.yaml b/deploy/charts/admin-stack/charts/prometheus/charts/alertmanager/templates/role.yaml
index f48a1797..1f15c0fb 100644
--- a/deploy/charts/admin-stack/charts/prometheus/charts/alertmanager/templates/role.yaml
+++ b/deploy/charts/admin-stack/charts/prometheus/charts/alertmanager/templates/role.yaml
@@ -13,14 +13,14 @@
 # See the License for the specific language governing permissions and
 # limitations under the License.
 
-{{- if and .Values.alertmanager.enabled .Values.rbac.create (eq .Values.alertmanager.useClusterRole false) (not .Values.alertmanager.useExistingRole) -}}
-{{- range $.Values.alertmanager.namespaces }}
+{{- if and .Values.enabled .Values.rbac.create (eq .Values.useClusterRole false) (not .Values.useExistingRole) -}}
+{{- range $.Values.namespaces }}
 apiVersion: {{ template "rbac.apiVersion" . }}
 kind: Role
 metadata:
   labels:
-    {{- include "prometheus.alertmanager.labels" $ | nindent 4 }}
-  name: {{ template "prometheus.alertmanager.fullname" $ }}
+    {{- include "alertmanager.labels" $ | nindent 4 }}
+  name: {{ template "alertmanager.fullname" $ }}
   namespace: {{ . }}
 rules:
 {{- if $.Values.podSecurityPolicy.enabled }}
@@ -31,7 +31,7 @@ rules:
     verbs:
     - use
     resourceNames:
-    - {{ template "prometheus.alertmanager.fullname" $ }}
+    - {{ template "alertmanager.fullname" $ }}
 {{- else }}
   []
 {{- end }}
diff --git a/deploy/charts/admin-stack/charts/prometheus/charts/alertmanager/templates/rolebinding.yaml b/deploy/charts/admin-stack/charts/prometheus/charts/alertmanager/templates/rolebinding.yaml
index a1a92fc6..64e50d06 100644
--- a/deploy/charts/admin-stack/charts/prometheus/charts/alertmanager/templates/rolebinding.yaml
+++ b/deploy/charts/admin-stack/charts/prometheus/charts/alertmanager/templates/rolebinding.yaml
@@ -13,26 +13,26 @@
 # See the License for the specific language governing permissions and
 # limitations under the License.
 
-{{- if and .Values.alertmanager.enabled .Values.rbac.create (eq .Values.alertmanager.useClusterRole false) -}}
-{{ range $.Values.alertmanager.namespaces }}
+{{- if and .Values.enabled .Values.rbac.create (eq .Values.useClusterRole false) -}}
+{{ range $.Values.namespaces }}
 apiVersion: {{ template "rbac.apiVersion" . }}
 kind: RoleBinding
 metadata:
   labels:
-    {{- include "prometheus.alertmanager.labels" $ | nindent 4 }}
-  name: {{ template "prometheus.alertmanager.fullname" $ }}
+    {{- include "alertmanager.labels" $ | nindent 4 }}
+  name: {{ template "alertmanager.fullname" $ }}
   namespace: {{ . }}
 subjects:
   - kind: ServiceAccount
-    name: {{ template "prometheus.serviceAccountName.alertmanager" $ }}
+    name: {{ include "alertmanager.serviceAccountName" . }}
 {{ include "prometheus.namespace" $ | indent 4 }}
 roleRef:
   apiGroup: rbac.authorization.k8s.io
   kind: Role
-{{- if (not $.Values.alertmanager.useExistingRole) }}
-  name: {{ template "prometheus.alertmanager.fullname" $ }}
+{{- if (not $.Values.useExistingRole) }}
+  name: {{ template "alertmanager.fullname" $ }}
 {{- else }}
-  name: {{ $.Values.alertmanager.useExistingRole }}
+  name: {{ $.Values.useExistingRole }}
 {{- end }}
 {{- end }}
 {{ end }}
diff --git a/deploy/charts/admin-stack/charts/prometheus/charts/alertmanager/templates/service.yaml b/deploy/charts/admin-stack/charts/prometheus/charts/alertmanager/templates/service.yaml
index 0003c715..4da5ed66 100644
--- a/deploy/charts/admin-stack/charts/prometheus/charts/alertmanager/templates/service.yaml
+++ b/deploy/charts/admin-stack/charts/prometheus/charts/alertmanager/templates/service.yaml
@@ -13,56 +13,60 @@
 # See the License for the specific language governing permissions and
 # limitations under the License.
 
-{{- if .Values.alertmanager.enabled -}}
 apiVersion: v1
 kind: Service
 metadata:
-{{- if .Values.alertmanager.service.annotations }}
-  annotations:
-{{ toYaml .Values.alertmanager.service.annotations | indent 4 }}
-{{- end }}
+  name: {{ include "alertmanager.fullname" . }}
   labels:
-    {{- include "prometheus.alertmanager.labels" . | nindent 4 }}
-{{- if .Values.alertmanager.service.labels }}
-{{ toYaml .Values.alertmanager.service.labels | indent 4 }}
-{{- end }}
-  name: {{ template "prometheus.alertmanager.fullname" . }}
-{{ include "prometheus.namespace" . | indent 2 }}
+    {{- include "alertmanager.labels" . | nindent 4 }}
+  {{- with .Values.service.annotations }}
+  annotations:
+    {{- toYaml . | nindent 4 }}
+  {{- end }}
 spec:
-{{- if .Values.alertmanager.service.clusterIP }}
-  clusterIP: {{ .Values.alertmanager.service.clusterIP }}
-{{- end }}
-{{- if .Values.alertmanager.service.externalIPs }}
-  externalIPs:
-{{ toYaml .Values.alertmanager.service.externalIPs | indent 4 }}
-{{- end }}
-{{- if .Values.alertmanager.service.loadBalancerIP }}
-  loadBalancerIP: {{ .Values.alertmanager.service.loadBalancerIP }}
-{{- end }}
-{{- if .Values.alertmanager.service.loadBalancerSourceRanges }}
+  type: {{ .Values.service.type }}
+  {{- with .Values.service.loadBalancerIP }}
+  loadBalancerIP: {{ . }}
+  {{- end }}
+  {{- with .Values.service.loadBalancerSourceRanges }}
   loadBalancerSourceRanges:
-  {{- range $cidr := .Values.alertmanager.service.loadBalancerSourceRanges }}
+  {{- range $cidr := . }}
     - {{ $cidr }}
   {{- end }}
-{{- end }}
+  {{- end }}
   ports:
-    - name: http
-      port: {{ .Values.alertmanager.service.servicePort }}
+    - port: {{ .Values.service.port }}
+      targetPort: http
       protocol: TCP
-      targetPort: 9093
-    {{- if .Values.alertmanager.service.nodePort }}
-      nodePort: {{ .Values.alertmanager.service.nodePort }}
-    {{- end }}
-{{- if .Values.alertmanager.service.enableMeshPeer }}
-    - name: meshpeer
-      port: 6783
+      name: http
+      {{- if (and (eq .Values.service.type "NodePort") .Values.service.nodePort) }}
+      nodePort: {{ .Values.service.nodePort }}
+      {{- end }}
+  selector:
+    {{- include "alertmanager.selectorLabels" . | nindent 4 }}
+---
+apiVersion: v1
+kind: Service
+metadata:
+  name: {{ include "alertmanager.fullname" . }}-headless
+  labels:
+    {{- include "alertmanager.labels" . | nindent 4 }}
+spec:
+  clusterIP: None
+  ports:
+    - port: {{ .Values.service.port }}
+      targetPort: http
+      protocol: TCP
+      name: http
+    {{- if or (gt (int .Values.replicaCount) 1) (.Values.additionalPeers) }}
+    - port: {{ .Values.service.clusterPort }}
+      targetPort: {{ .Values.service.clusterPort }}
       protocol: TCP
-      targetPort: 6783
-{{- end }}
+      name: cluster-tcp
+    - port: {{ .Values.service.clusterPort }}
+      targetPort: {{ .Values.service.clusterPort }}
+      protocol: UDP
+      name: cluster-udp
+    {{- end }}
   selector:
-    {{- include "prometheus.alertmanager.matchLabels" . | nindent 4 }}
-{{- if .Values.alertmanager.service.sessionAffinity }}
-  sessionAffinity: {{ .Values.alertmanager.service.sessionAffinity }}
-{{- end }}
-  type: "{{ .Values.alertmanager.service.type }}"
-{{- end }}
+    {{- include "alertmanager.selectorLabels" . | nindent 4 }}
diff --git a/deploy/charts/admin-stack/charts/prometheus/charts/alertmanager/templates/serviceaccount.yaml b/deploy/charts/admin-stack/charts/prometheus/charts/alertmanager/templates/serviceaccount.yaml
index c00ee9cd..a2d17947 100644
--- a/deploy/charts/admin-stack/charts/prometheus/charts/alertmanager/templates/serviceaccount.yaml
+++ b/deploy/charts/admin-stack/charts/prometheus/charts/alertmanager/templates/serviceaccount.yaml
@@ -1,3 +1,4 @@
+{{- if .Values.serviceAccount.create }}
 # Licensed to the Apache Software Foundation (ASF) under one or more
 # contributor license agreements.  See the NOTICE file distributed with
 # this work for additional information regarding copyright ownership.
@@ -13,14 +14,14 @@
 # See the License for the specific language governing permissions and
 # limitations under the License.
 
-{{- if and .Values.alertmanager.enabled .Values.serviceAccounts.alertmanager.create -}}
 apiVersion: v1
 kind: ServiceAccount
 metadata:
+  name: {{ include "alertmanager.serviceAccountName" . }}
   labels:
-    {{- include "prometheus.alertmanager.labels" . | nindent 4 }}
-  name: {{ template "prometheus.serviceAccountName.alertmanager" . }}
-{{ include "prometheus.namespace" . | indent 2 }}
+    {{- include "alertmanager.labels" . | nindent 4 }}
+  {{- with .Values.serviceAccount.annotations }}
   annotations:
-{{ toYaml .Values.serviceAccounts.alertmanager.annotations | indent 4 }}
-{{- end -}}
+    {{- toYaml . | nindent 4 }}
+  {{- end }}
+{{- end }}
diff --git a/deploy/charts/admin-stack/charts/prometheus/charts/alertmanager/templates/statefulset.yaml b/deploy/charts/admin-stack/charts/prometheus/charts/alertmanager/templates/statefulset.yaml
new file mode 100644
index 00000000..5c0bb506
--- /dev/null
+++ b/deploy/charts/admin-stack/charts/prometheus/charts/alertmanager/templates/statefulset.yaml
@@ -0,0 +1,214 @@
+# Licensed to the Apache Software Foundation (ASF) under one or more
+# contributor license agreements.  See the NOTICE file distributed with
+# this work for additional information regarding copyright ownership.
+# The ASF licenses this file to You under the Apache License, Version 2.0
+# (the "License"); you may not use this file except in compliance with
+# the License.  You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+{{- $svcClusterPort := .Values.service.clusterPort }}
+apiVersion: apps/v1
+kind: StatefulSet
+metadata:
+  name: {{ include "alertmanager.fullname" . }}
+  labels:
+    {{- include "alertmanager.labels" . | nindent 4 }}
+  {{- with .Values.statefulSet.annotations }}
+  annotations:
+    {{- toYaml . | nindent 4 }}
+  {{- end }}
+spec:
+  replicas: {{ .Values.replicaCount }}
+  selector:
+    matchLabels:
+      {{- include "alertmanager.selectorLabels" . | nindent 6 }}
+  serviceName: {{ include "alertmanager.fullname" . }}-headless
+  template:
+    metadata:
+      labels:
+        {{- include "alertmanager.selectorLabels" . | nindent 8 }}
+        {{- with .Values.podLabels }}
+        {{- toYaml . | nindent 8 }}
+        {{- end }}
+      annotations:
+        {{- if not .Values.configmapReload.enabled }}
+        checksum/config: {{ include (print $.Template.BasePath "/configmap.yaml") . | sha256sum }}
+        {{- end }}
+        {{- with .Values.podAnnotations }}
+        {{- toYaml . | nindent 8 }}
+        {{- end }}
+    spec:
+      {{- with .Values.imagePullSecrets }}
+      imagePullSecrets:
+        {{- toYaml . | nindent 8 }}
+      {{- end }}
+      serviceAccountName: {{ include "alertmanager.serviceAccountName" . }}
+      {{- with .Values.dnsConfig }}
+      dnsConfig:
+        {{- toYaml . | nindent 8 }}
+      {{- end }}
+      {{- with .Values.nodeSelector }}
+      nodeSelector:
+        {{- toYaml . | nindent 8 }}
+      {{- end }}
+      {{- if or .Values.podAntiAffinity .Values.affinity }}
+      affinity:
+      {{- end }}
+        {{- with .Values.affinity }}
+        {{- toYaml . | nindent 8 }}
+        {{- end }}
+        {{- if eq .Values.podAntiAffinity "hard" }}
+        podAntiAffinity:
+          requiredDuringSchedulingIgnoredDuringExecution:
+            - topologyKey: {{ .Values.podAntiAffinityTopologyKey }}
+              labelSelector:
+                matchExpressions:
+                  - {key: app.kubernetes.io/name, operator: In, values: [{{ include "alertmanager.name" . }}]}
+        {{- else if eq .Values.podAntiAffinity "soft" }}
+        podAntiAffinity:
+          preferredDuringSchedulingIgnoredDuringExecution:
+            - weight: 100
+              podAffinityTerm:
+                topologyKey: {{ .Values.podAntiAffinityTopologyKey }}
+                labelSelector:
+                  matchExpressions:
+                    - {key: app.kubernetes.io/name, operator: In, values: [{{ include "alertmanager.name" . }}]}
+        {{- end }}
+      {{- with .Values.topologySpreadConstraints }}
+      topologySpreadConstraints:
+        {{- toYaml . | nindent 8 }}
+      {{- end }}
+      {{- with .Values.tolerations }}
+      tolerations:
+        {{- toYaml . | nindent 8 }}
+      {{- end }}
+      securityContext:
+        {{- toYaml .Values.podSecurityContext | nindent 8 }}
+      containers:
+        {{- if and (.Values.configmapReload.enabled) (.Values.config) }}
+        - name: {{ .Chart.Name }}-{{ .Values.configmapReload.name }}
+          image: "{{ .Values.configmapReload.image.repository }}:{{ .Values.configmapReload.image.tag }}"
+          imagePullPolicy: "{{ .Values.configmapReload.image.pullPolicy }}"
+          args:
+            - --volume-dir=/etc/alertmanager
+            - --webhook-url=http://127.0.0.1:{{ .Values.service.port }}/-/reload
+          resources:
+            {{- toYaml .Values.configmapReload.resources | nindent 12 }}
+          {{- with .Values.configmapReload.containerPort }}
+          ports:
+            - containerPort: {{ . }}
+          {{- end }}
+          volumeMounts:
+            - name: config
+              mountPath: /etc/alertmanager
+        {{- end }}
+        - name: {{ .Chart.Name }}
+          securityContext:
+            {{- toYaml .Values.securityContext | nindent 12 }}
+          image: "{{ .Values.image.repository }}:{{ .Values.image.tag | default .Chart.AppVersion }}"
+          imagePullPolicy: {{ .Values.image.pullPolicy }}
+          env:
+            - name: POD_IP
+              valueFrom:
+                fieldRef:
+                  apiVersion: v1
+                  fieldPath: status.podIP
+            {{- if .Values.extraEnv }}
+            {{- toYaml .Values.extraEnv | nindent 12 }}
+            {{- end }}
+          {{- with .Values.command }}
+          command:
+            {{- toYaml . | nindent 12 }}
+          {{- end }}
+          args:
+            - --storage.path=/alertmanager
+            - --config.file=/etc/alertmanager/alertmanager.yml
+            {{- if or (gt (int .Values.replicaCount) 1) (.Values.additionalPeers) }}
+            - --cluster.advertise-address=[$(POD_IP)]:{{ $svcClusterPort }}
+            - --cluster.listen-address=0.0.0.0:{{ $svcClusterPort }}
+            {{- end }}
+            {{- if gt (int .Values.replicaCount) 1}}
+            {{- $fullName := include "alertmanager.fullname" . }}
+            {{- range $i := until (int .Values.replicaCount) }}
+            - --cluster.peer={{ $fullName }}-{{ $i }}.{{ $fullName }}-headless:{{ $svcClusterPort }}
+            {{- end }}
+            {{- end }}
+            {{- if .Values.additionalPeers }}
+            {{- range $item := .Values.additionalPeers }}
+            - --cluster.peer={{ $item }}
+            {{- end }}
+            {{- end }}
+            {{- range $key, $value := .Values.extraArgs }}
+            - --{{ $key }}={{ $value }}
+            {{- end }}
+          ports:
+            - name: http
+              containerPort: 9093
+              protocol: TCP
+          livenessProbe:
+            {{- toYaml .Values.livenessProbe | nindent 12 }}
+          readinessProbe:
+            {{- toYaml .Values.readinessProbe | nindent 12 }}
+          resources:
+            {{- toYaml .Values.resources | nindent 12 }}
+          volumeMounts:
+            {{- if .Values.config }}
+            - name: config
+              mountPath: /etc/alertmanager
+            {{- end }}
+            {{- range .Values.extraSecretMounts }}
+            - name: {{ .name }}
+              mountPath: {{ .mountPath }}
+              subPath: {{ .subPath }}
+              readOnly: {{ .readOnly }}
+            {{- end }}
+            - name: storage
+              mountPath: /alertmanager
+            {{- if .Values.extraVolumeMounts }}
+            {{- toYaml .Values.extraVolumeMounts | nindent 12 }}
+            {{- end }}
+      volumes:
+        {{- if .Values.config }}
+        - name: config
+          configMap:
+            name: {{ include "alertmanager.fullname" . }}
+        {{- end }}
+        {{- range .Values.extraSecretMounts }}
+        - name: {{ .name }}
+          secret:
+            secretName: {{ .secretName }}
+            {{- with .optional }}
+            optional: {{ . }}
+            {{- end }}
+        {{- end }}
+        {{- if .Values.extraVolumes }}
+        {{- toYaml .Values.extraVolumes | nindent 8 }}
+        {{- end }}
+  {{- if .Values.persistence.enabled }}
+  volumeClaimTemplates:
+    - metadata:
+        name: storage
+      spec:
+        accessModes:
+          {{- toYaml .Values.persistence.accessModes | nindent 10 }}
+        resources:
+          requests:
+            storage: {{ .Values.persistence.size }}
+      {{- if .Values.persistence.storageClass }}
+      {{- if (eq "-" .Values.persistence.storageClass) }}
+        storageClassName: ""
+      {{- else }}
+        storageClassName: {{ .Values.persistence.storageClass }}
+      {{- end }}
+      {{- end }}
+  {{- else }}
+        - name: storage
+          emptyDir: {}
+  {{- end }}
diff --git a/deploy/charts/admin-stack/charts/prometheus/charts/alertmanager/templates/sts.yaml b/deploy/charts/admin-stack/charts/prometheus/charts/alertmanager/templates/sts.yaml
deleted file mode 100644
index 7be73658..00000000
--- a/deploy/charts/admin-stack/charts/prometheus/charts/alertmanager/templates/sts.yaml
+++ /dev/null
@@ -1,196 +0,0 @@
-# Licensed to the Apache Software Foundation (ASF) under one or more
-# contributor license agreements.  See the NOTICE file distributed with
-# this work for additional information regarding copyright ownership.
-# The ASF licenses this file to You under the Apache License, Version 2.0
-# (the "License"); you may not use this file except in compliance with
-# the License.  You may obtain a copy of the License at
-#
-#     http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-
-{{- if and .Values.alertmanager.enabled .Values.alertmanager.statefulSet.enabled -}}
-apiVersion: apps/v1
-kind: StatefulSet
-metadata:
-{{- if .Values.alertmanager.statefulSet.annotations }}
-  annotations:
-    {{ toYaml .Values.alertmanager.statefulSet.annotations | nindent 4 }}
-{{- end }}
-  labels:
-    {{- include "prometheus.alertmanager.labels" . | nindent 4 }}
-    {{- if .Values.alertmanager.statefulSet.labels}}
-    {{ toYaml .Values.alertmanager.statefulSet.labels | nindent 4 }}
-    {{- end}}
-  name: {{ template "prometheus.alertmanager.fullname" . }}
-{{ include "prometheus.namespace" . | indent 2 }}
-spec:
-  serviceName: {{ template "prometheus.alertmanager.fullname" . }}-headless
-  selector:
-    matchLabels:
-      {{- include "prometheus.alertmanager.matchLabels" . | nindent 6 }}
-  replicas: {{ .Values.alertmanager.replicaCount }}
-  podManagementPolicy: {{ .Values.alertmanager.statefulSet.podManagementPolicy }}
-  template:
-    metadata:
-    {{- if .Values.alertmanager.podAnnotations }}
-      annotations:
-        {{ toYaml .Values.alertmanager.podAnnotations | nindent 8 }}
-    {{- end }}
-      labels:
-        {{- include "prometheus.alertmanager.labels" . | nindent 8 }}
-        {{- if .Values.alertmanager.podLabels}}
-        {{ toYaml .Values.alertmanager.podLabels | nindent 8 }}
-        {{- end}}
-    spec:
-{{- if .Values.alertmanager.affinity }}
-      affinity:
-{{ toYaml .Values.alertmanager.affinity | indent 8 }}
-{{- end }}
-{{- if .Values.alertmanager.schedulerName }}
-      schedulerName: "{{ .Values.alertmanager.schedulerName }}"
-{{- end }}
-      serviceAccountName: {{ template "prometheus.serviceAccountName.alertmanager" . }}
-{{- if .Values.alertmanager.priorityClassName }}
-      priorityClassName: "{{ .Values.alertmanager.priorityClassName }}"
-{{- end }}
-      containers:
-        - name: {{ template "prometheus.name" . }}-{{ .Values.alertmanager.name }}
-          image: "{{ .Values.alertmanager.image.repository }}:{{ .Values.alertmanager.image.tag }}"
-          imagePullPolicy: "{{ .Values.alertmanager.image.pullPolicy }}"
-          env:
-            {{- range $key, $value := .Values.alertmanager.extraEnv }}
-            - name: {{ $key }}
-              value: {{ $value }}
-            {{- end }}
-            - name: POD_IP
-              valueFrom:
-                fieldRef:
-                  apiVersion: v1
-                  fieldPath: status.podIP
-          args:
-            - --config.file=/etc/config/alertmanager.yml
-            - --storage.path={{ .Values.alertmanager.persistentVolume.mountPath }}
-          {{- if .Values.alertmanager.statefulSet.headless.enableMeshPeer }}
-            - --cluster.advertise-address=[$(POD_IP)]:6783
-            - --cluster.listen-address=0.0.0.0:6783
-          {{- range $n := until (.Values.alertmanager.replicaCount | int) }}
-            - --cluster.peer={{ template "prometheus.alertmanager.fullname" $ }}-{{ $n }}.{{ template "prometheus.alertmanager.fullname" $ }}-headless:6783
-          {{- end }}
-          {{- else }}
-            - --cluster.listen-address=
-          {{- end }}
-          {{- range $key, $value := .Values.alertmanager.extraArgs }}
-            - --{{ $key }}={{ $value }}
-          {{- end }}
-          {{- if .Values.alertmanager.baseURL }}
-            - --web.external-url={{ .Values.alertmanager.baseURL }}
-          {{- end }}
-
-          ports:
-            - containerPort: 9093
-          {{- if .Values.alertmanager.statefulSet.headless.enableMeshPeer }}
-            - containerPort: 6783
-          {{- end }}
-          readinessProbe:
-            httpGet:
-              path: {{ .Values.alertmanager.prefixURL }}/#/status
-              port: 9093
-            initialDelaySeconds: 30
-            timeoutSeconds: 30
-          resources:
-{{ toYaml .Values.alertmanager.resources | indent 12 }}
-          volumeMounts:
-            - name: config-volume
-              mountPath: /etc/config
-            - name: storage-volume
-              mountPath: "{{ .Values.alertmanager.persistentVolume.mountPath }}"
-              subPath: "{{ .Values.alertmanager.persistentVolume.subPath }}"
-          {{- range .Values.alertmanager.extraSecretMounts }}
-            - name: {{ .name }}
-              mountPath: {{ .mountPath }}
-              subPath: {{ .subPath }}
-              readOnly: {{ .readOnly }}
-          {{- end }}
-        {{- if .Values.configmapReload.alertmanager.enabled }}
-        - name: {{ template "prometheus.name" . }}-{{ .Values.alertmanager.name }}-{{ .Values.configmapReload.alertmanager.name }}
-          image: "{{ .Values.configmapReload.alertmanager.image.repository }}:{{ .Values.configmapReload.alertmanager.image.tag }}"
-          imagePullPolicy: "{{ .Values.configmapReload.alertmanager.image.pullPolicy }}"
-          args:
-            - --volume-dir=/etc/config
-            - --webhook-url=http://localhost:9093{{ .Values.alertmanager.prefixURL }}/-/reload
-          resources:
-{{ toYaml .Values.configmapReload.alertmanager.resources | indent 12 }}
-          volumeMounts:
-            - name: config-volume
-              mountPath: /etc/config
-              readOnly: true
-        {{- end }}
-    {{- if .Values.imagePullSecrets }}
-      imagePullSecrets:
-{{ toYaml .Values.imagePullSecrets | indent 8 }}
-    {{- end }}
-    {{- if .Values.alertmanager.nodeSelector }}
-      nodeSelector:
-{{ toYaml .Values.alertmanager.nodeSelector | indent 8 }}
-    {{- end }}
-    {{- if .Values.alertmanager.securityContext }}
-      securityContext:
-{{ toYaml .Values.alertmanager.securityContext | indent 8 }}
-    {{- end }}
-    {{- if .Values.alertmanager.tolerations }}
-      tolerations:
-{{ toYaml .Values.alertmanager.tolerations | indent 8 }}
-    {{- end }}
-      volumes:
-        - name: config-volume
-          {{- if empty .Values.alertmanager.configFromSecret }}
-          configMap:
-            name: {{ if .Values.alertmanager.configMapOverrideName }}{{ .Release.Name }}-{{ .Values.alertmanager.configMapOverrideName }}{{- else }}{{ template "prometheus.alertmanager.fullname" . }}{{- end }}
-          {{- else }}
-          secret:
-            secretName: {{ .Values.alertmanager.configFromSecret }}
-          {{- end }}
-      {{- range .Values.alertmanager.extraSecretMounts }}
-        - name: {{ .name }}
-          secret:
-            secretName: {{ .secretName }}
-            {{- with .optional }}
-            optional: {{ . }}
-            {{- end }}
-      {{- end }}
-{{- if .Values.alertmanager.persistentVolume.enabled }}
-  volumeClaimTemplates:
-    - metadata:
-        name: storage-volume
-        {{- if .Values.alertmanager.persistentVolume.annotations }}
-        annotations:
-{{ toYaml .Values.alertmanager.persistentVolume.annotations | indent 10 }}
-        {{- end }}
-      spec:
-        accessModes:
-{{ toYaml .Values.alertmanager.persistentVolume.accessModes | indent 10 }}
-        resources:
-          requests:
-            storage: "{{ .Values.alertmanager.persistentVolume.size }}"
-      {{- if .Values.server.persistentVolume.storageClass }}
-      {{- if (eq "-" .Values.server.persistentVolume.storageClass) }}
-        storageClassName: ""
-      {{- else }}
-        storageClassName: "{{ .Values.alertmanager.persistentVolume.storageClass }}"
-      {{- end }}
-      {{- end }}
-{{- else }}
-        - name: storage-volume
-          emptyDir:
-          {{- if .Values.alertmanager.emptyDir.sizeLimit }}
-            sizeLimit: {{ .Values.alertmanager.emptyDir.sizeLimit }}
-          {{- else }}
-            {}
-          {{- end -}}
-{{- end }}
-{{- end }}
diff --git a/deploy/charts/admin-stack/charts/prometheus/charts/alertmanager/templates/svc-headless.yaml b/deploy/charts/admin-stack/charts/prometheus/charts/alertmanager/templates/svc-headless.yaml
deleted file mode 100644
index cd81d5fa..00000000
--- a/deploy/charts/admin-stack/charts/prometheus/charts/alertmanager/templates/svc-headless.yaml
+++ /dev/null
@@ -1,46 +0,0 @@
-# Licensed to the Apache Software Foundation (ASF) under one or more
-# contributor license agreements.  See the NOTICE file distributed with
-# this work for additional information regarding copyright ownership.
-# The ASF licenses this file to You under the Apache License, Version 2.0
-# (the "License"); you may not use this file except in compliance with
-# the License.  You may obtain a copy of the License at
-#
-#     http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-
-{{- if and .Values.alertmanager.enabled .Values.alertmanager.statefulSet.enabled -}}
-apiVersion: v1
-kind: Service
-metadata:
-{{- if .Values.alertmanager.statefulSet.headless.annotations }}
-  annotations:
-{{ toYaml .Values.alertmanager.statefulSet.headless.annotations | indent 4 }}
-{{- end }}
-  labels:
-    {{- include "prometheus.alertmanager.labels" . | nindent 4 }}
-{{- if .Values.alertmanager.statefulSet.headless.labels }}
-{{ toYaml .Values.alertmanager.statefulSet.headless.labels | indent 4 }}
-{{- end }}
-  name: {{ template "prometheus.alertmanager.fullname" . }}-headless
-{{ include "prometheus.namespace" . | indent 2 }}
-spec:
-  clusterIP: None
-  ports:
-    - name: http
-      port: {{ .Values.alertmanager.statefulSet.headless.servicePort }}
-      protocol: TCP
-      targetPort: 9093
-{{- if .Values.alertmanager.statefulSet.headless.enableMeshPeer }}
-    - name: meshpeer
-      port: 6783
-      protocol: TCP
-      targetPort: 6783
-{{- end }}
-  selector:
-    {{- include "prometheus.alertmanager.matchLabels" . | nindent 4 }}
-{{- end }}
diff --git a/deploy/charts/admin-stack/charts/prometheus/charts/alertmanager/values.yaml b/deploy/charts/admin-stack/charts/prometheus/charts/alertmanager/values.yaml
index 26e1204c..8db07f25 100644
--- a/deploy/charts/admin-stack/charts/prometheus/charts/alertmanager/values.yaml
+++ b/deploy/charts/admin-stack/charts/prometheus/charts/alertmanager/values.yaml
@@ -13,445 +13,247 @@
 # See the License for the specific language governing permissions and
 # limitations under the License.
 
-rbac:
-  create: true
+# Default values for alertmanager.
+# This is a YAML-formatted file.
+# Declare variables to be passed into your templates.
+
+replicaCount: 1
+
+image:
+  repository: quay.io/prometheus/alertmanager
+  pullPolicy: IfNotPresent
+  # Overrides the image tag whose default is the chart appVersion.
+  tag: ""
+
+extraArgs: {}
+
+## Additional Alertmanager Secret mounts
+# Defines additional mounts with secrets. Secrets must be manually created in the namespace.
+extraSecretMounts: []
+  # - name: secret-files
+  #   mountPath: /etc/secrets
+  #   subPath: ""
+  #   secretName: alertmanager-secret-files
+  #   readOnly: true
 
-podSecurityPolicy:
-  enabled: false
+imagePullSecrets: []
+name: alertmanager
+nameOverride: ""
+fullnameOverride: ""
 
-imagePullSecrets:
-# - name: "image-pull-secret"
+rbac:
+  create: true
+  
+## Use a ClusterRole (and ClusterRoleBinding)
+## - If set to false - we define a Role and RoleBinding in the defined namespaces ONLY
+## This makes alertmanager work - for users who do not have ClusterAdmin privs, but wants alertmanager to operate on their own namespaces, instead of clusterwide.
+useClusterRole: true
+
+## Set to a rolename to use existing role - skipping role creating - but still doing serviceaccount and rolebinding to the rolename set here.
+useExistingRole: false
+  
+serviceAccount:
+  # Specifies whether a service account should be created
+  create: true
+  # Annotations to add to the service account
+  annotations: {}
+  # The name of the service account to use.
+  # If not set and create is true, a name is generated using the fullname template
+  name:
+
+podSecurityContext:
+  fsGroup: 65534
+dnsConfig: {}
+  # nameservers:
+  #   - 1.2.3.4
+  # searches:
+  #   - ns1.svc.cluster-domain.example
+  #   - my.dns.search.suffix
+  # options:
+  #   - name: ndots
+  #     value: "2"
+  #   - name: edns0
+securityContext:
+  # capabilities:
+  #   drop:
+  #   - ALL
+  # readOnlyRootFilesystem: true
+  runAsUser: 65534
+  runAsNonRoot: true
+  runAsGroup: 65534
+
+additionalPeers: []
+
+livenessProbe:
+  httpGet:
+    path: /
+    port: http
 
-networkPolicy:
+readinessProbe:
+  httpGet:
+    path: /
+    port: http
+
+service:
+  annotations: {}
+  type: ClusterIP
+  port: 9093
+  clusterPort: 9094
+  loadBalancerIP: ""  # Assign ext IP when Service type is LoadBalancer
+  loadBalancerSourceRanges: []  # Only allow access to loadBalancerIP from these IPs
+  # if you want to force a specific nodePort. Must be use with service.type=NodePort
+  # nodePort:
+
+ingress:
   enabled: false
+  className: ""
+  annotations: {}
+    # kubernetes.io/ingress.class: nginx
+    # kubernetes.io/tls-acme: "true"
+  hosts:
+    - host: alertmanager.domain.com
+      paths:
+        - path: /
+          pathType: ImplementationSpecific
+  tls: []
+  #  - secretName: chart-example-tls
+  #    hosts:
+  #      - alertmanager.domain.com
+
+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:'.
+  # limits:
+  #   cpu: 100m
+  #   memory: 128Mi
+  # requests:
+  #   cpu: 10m
+  #   memory: 32Mi
 
-configmapReload:
-  prometheus:
-    ## If false, the configmap-reload container will not be deployed
-    ##
-    enabled: true
-
-    ## configmap-reload container name
-    ##
-    name: configmap-reload
-
-    ## configmap-reload container image
-    ##
-    image:
-      repository: jimmidyson/configmap-reload
-      tag: v0.8.0
-      pullPolicy: IfNotPresent
-
-    ## Additional configmap-reload container arguments
-    ##
-    extraArgs: {}
-    ## Additional configmap-reload volume directories
-    ##
-    extraVolumeDirs: []
-
-
-    ## Additional configmap-reload mounts
-    ##
-    extraConfigmapMounts: []
-      # - name: prometheus-alerts
-      #   mountPath: /etc/alerts.d
-      #   subPath: ""
-    #   configMap: prometheus-alerts
-    #   readOnly: true
-
-
-    ## configmap-reload resource requests and limits
-    ## Ref: http://kubernetes.io/docs/user-guide/compute-resources/
-    ##
-    resources: {}
-  alertmanager:
-    ## If false, the configmap-reload container will not be deployed
-    ##
-    enabled: true
-
-    ## configmap-reload container name
-    ##
-    name: configmap-reload
-
-    ## configmap-reload container image
-    ##
-    image:
-      repository: jimmidyson/configmap-reload
-      tag: v0.5.0
-      pullPolicy: IfNotPresent
-
-    ## Additional configmap-reload container arguments
-    ##
-    extraArgs: {}
-    ## Additional configmap-reload volume directories
-    ##
-    extraVolumeDirs: []
-
-
-    ## Additional configmap-reload mounts
-    ##
-    extraConfigmapMounts: []
-      # - name: prometheus-alerts
-      #   mountPath: /etc/alerts.d
-      #   subPath: ""
-    #   configMap: prometheus-alerts
-    #   readOnly: true
-
-
-    ## configmap-reload resource requests and limits
-    ## Ref: http://kubernetes.io/docs/user-guide/compute-resources/
-    ##
-    resources: {}
-
-## Define serviceAccount names for components. Defaults to component's fully qualified name.
-##
-serviceAccounts:
-  alertmanager:
-    create: true
-    name:
-    annotations: {}
-alertmanager:
-  ## If false, alertmanager will not be installed
-  ##
-  enabled: true
-
-  ## Use a ClusterRole (and ClusterRoleBinding)
-  ## - If set to false - we define a Role and RoleBinding in the defined namespaces ONLY
-  ## This makes alertmanager work - for users who do not have ClusterAdmin privs, but wants alertmanager to operate on their own namespaces, instead of clusterwide.
-  useClusterRole: true
-
-  ## Set to a rolename to use existing role - skipping role creating - but still doing serviceaccount and rolebinding to the rolename set here.
-  useExistingRole: false
-
-  ## alertmanager container name
-  ##
-  name: alertmanager
-
-  ## alertmanager container image
-  ##
-  image:
-    repository: quay.io/prometheus/alertmanager
-    tag: v0.23.0
-    pullPolicy: IfNotPresent
-
-  ## alertmanager priorityClassName
-  ##
-  priorityClassName: ""
-
-  ## Custom HTTP headers for Readiness Probe
-  ##
-  ## Useful for providing HTTP Basic Auth to healthchecks
-  probeHeaders: []
-
-  ## Additional alertmanager container arguments
-  ##
-  extraArgs: {}
-
-  ## Additional InitContainers to initialize the pod
-  ##
-  extraInitContainers: []
+nodeSelector: {}
 
-  ## The URL prefix at which the container can be accessed. Useful in the case the '-web.external-url' includes a slug
-  ## so that the various internal URLs are still able to access as they are in the default case.
-  ## (Optional)
-  prefixURL: ""
+tolerations: []
 
-  ## External URL which can access alertmanager
-  baseURL: "http://localhost:9093"
+affinity: {}
 
-  ## Additional alertmanager container environment variable
-  ## For instance to add a http_proxy
-  ##
-  extraEnv: {}
-
-  ## Additional alertmanager Secret mounts
-  # Defines additional mounts with secrets. Secrets must be manually created in the namespace.
-  extraSecretMounts: []
-    # - name: secret-files
-    #   mountPath: /etc/secrets
-    #   subPath: ""
-  #   secretName: alertmanager-secret-files
-  #   readOnly: true
+## Pod anti-affinity can prevent the scheduler from placing Alertmanager replicas on the same node.
+## The default value "soft" means that the scheduler should *prefer* to not schedule two replica pods onto the same node but no guarantee is provided.
+## The value "hard" means that the scheduler is *required* to not schedule two replica pods onto the same node.
+## The value "" will disable pod anti-affinity so that no anti-affinity rules will be configured.
+##
+podAntiAffinity: ""
 
-  ## Additional alertmanager Configmap mounts
-  extraConfigmapMounts: []
-    # - name: template-files
-    #   mountPath: /etc/config/templates.d
-  #   configMap: alertmanager-template-files
-  #   readOnly: true
+## If anti-affinity is enabled sets the topologyKey to use for anti-affinity.
+## This can be changed to, for example, failure-domain.beta.kubernetes.io/zone
+##
+podAntiAffinityTopologyKey: kubernetes.io/hostname
 
-  ## ConfigMap override where fullname is {{.Release.Name}}-{{.Values.alertmanager.configMapOverrideName}}
-  ## Defining configMapOverrideName will cause templates/alertmanager-configmap.yaml
-  ## to NOT generate a ConfigMap resource
-  ##
-  configMapOverrideName: ""
+## Topology spread constraints rely on node labels to identify the topology domain(s) that each Node is in.
+## Ref: https://kubernetes.io/docs/concepts/workloads/pods/pod-topology-spread-constraints/
+topologySpreadConstraints: []
+  # - maxSkew: 1
+  #   topologyKey: failure-domain.beta.kubernetes.io/zone
+  #   whenUnsatisfiable: DoNotSchedule
+  #   labelSelector:
+  #     matchLabels:
+  #       app.kubernetes.io/instance: alertmanager
 
-  ## The name of a secret in the same kubernetes namespace which contains the Alertmanager config
-  ## Defining configFromSecret will cause templates/alertmanager-configmap.yaml
-  ## to NOT generate a ConfigMap resource
-  ##
-  configFromSecret: ""
+statefulSet:
+  annotations: {}
 
-  ## The configuration file name to be loaded to alertmanager
-  ## Must match the key within configuration loaded from ConfigMap/Secret
-  ##
-  configFileName: alertmanager.yml
-
-  ingress:
-    ## If true, alertmanager Ingress will be created
-    ##
-    enabled: false
-
-    # For Kubernetes >= 1.18 you should specify the ingress-controller via the field ingressClassName
-    # See https://kubernetes.io/blog/2020/04/02/improvements-to-the-ingress-api-in-kubernetes-1.18/#specifying-the-class-of-an-ingress
-    # ingressClassName: nginx
-
-    ## alertmanager Ingress annotations
-    ##
-    annotations: {}
-    #   kubernetes.io/ingress.class: nginx
-    #   kubernetes.io/tls-acme: 'true'
-
-    ## alertmanager Ingress additional labels
-    ##
-    extraLabels: {}
-
-    ## alertmanager Ingress hostnames with optional path
-    ## Must be provided if Ingress is enabled
-    ##
-    hosts: []
-    #   - alertmanager.domain.com
-    #   - domain.com/alertmanager
+podAnnotations: {}
+podLabels: {}
 
-    path: /
+# Ref: https://kubernetes.io/docs/tasks/run-application/configure-pdb/
+podDisruptionBudget: {}
+  # maxUnavailable: 1
+  # minAvailable: 1
 
-    # pathType is only for k8s >= 1.18
-    pathType: Prefix
-
-    ## Extra paths to prepend to every host configuration. This is useful when working with annotation based services.
-    extraPaths: []
-    # - path: /*
-    #   backend:
-    #     serviceName: ssl-redirect
-    #     servicePort: use-annotation
-
-    ## alertmanager Ingress TLS configuration
-    ## Secrets must be manually created in the namespace
-    ##
-    tls: []
-    #   - secretName: prometheus-alerts-tls
-    #     hosts:
-    #       - alertmanager.domain.com
-
-  ## Alertmanager Deployment Strategy type
-  # strategy:
-  #   type: Recreate
-
-  ## Node tolerations for alertmanager scheduling to nodes with taints
-  ## Ref: https://kubernetes.io/docs/concepts/configuration/assign-pod-node/
-  ##
-  tolerations: []
-    # - key: "key"
-    #   operator: "Equal|Exists"
-  #   value: "value"
-  #   effect: "NoSchedule|PreferNoSchedule|NoExecute(1.6 only)"
-
-  ## Node labels for alertmanager pod assignment
-  ## Ref: https://kubernetes.io/docs/user-guide/node-selection/
-  ##
-  nodeSelector: {}
+command: []
 
-  ## Pod affinity
-  ##
-  affinity: {}
+podSecurityPolicy:
+  enabled: false
 
-  ## PodDisruptionBudget settings
-  ## ref: https://kubernetes.io/docs/concepts/workloads/pods/disruptions/
+networkPolicy:
+  ## Enable creation of NetworkPolicy resources.
   ##
-  podDisruptionBudget:
-    enabled: false
-    maxUnavailable: 1
+  enabled: false
 
-  ## Use an alternate scheduler, e.g. "stork".
-  ## ref: https://kubernetes.io/docs/tasks/administer-cluster/configure-multiple-schedulers/
-  ##
-  # schedulerName:
-
-  persistentVolume:
-    ## If true, alertmanager will create/use a Persistent Volume Claim
-    ## If false, use emptyDir
-    ##
-    enabled: true
-
-    ## alertmanager data Persistent Volume access modes
-    ## Must match those of existing PV or dynamic provisioner
-    ## Ref: http://kubernetes.io/docs/user-guide/persistent-volumes/
-    ##
-    accessModes:
-      - ReadWriteOnce
-
-    ## alertmanager data Persistent Volume Claim annotations
-    ##
-    annotations: {}
-
-    ## alertmanager data Persistent Volume existing claim name
-    ## Requires alertmanager.persistentVolume.enabled: true
-    ## If defined, PVC must be created manually before volume will be bound
-    existingClaim: ""
-
-    ## alertmanager data Persistent Volume mount root path
-    ##
-    mountPath: /data
-
-    ## alertmanager data Persistent Volume size
-    ##
-    size: 2Gi
-
-    ## alertmanager data Persistent Volume Storage Class
-    ## If defined, storageClassName: <storageClass>
-    ## If set to "-", storageClassName: "", which disables dynamic provisioning
-    ## If undefined (the default) or set to null, no storageClassName spec is
-    ##   set, choosing the default provisioner.  (gp2 on AWS, standard on
-    ##   GKE, AWS & OpenStack)
-    ##
-    # storageClass: "-"
-
-    ## alertmanager data Persistent Volume Binding Mode
-    ## If defined, volumeBindingMode: <volumeBindingMode>
-    ## If undefined (the default) or set to null, no volumeBindingMode spec is
-    ##   set, choosing the default mode.
-    ##
-    # volumeBindingMode: ""
-
-    ## Subdirectory of alertmanager data Persistent Volume to mount
-    ## Useful if the volume's root directory is not empty
-    ##
-    subPath: ""
-
-    ## Persistent Volume Claim Selector
-    ## Useful if Persistent Volumes have been provisioned in advance
-    ## Ref: https://kubernetes.io/docs/concepts/storage/persistent-volumes/#selector
-    ##
-    # selector:
-    #  matchLabels:
-    #    release: "stable"
-    #  matchExpressions:
-    #    - { key: environment, operator: In, values: [ dev ] }
-
-  emptyDir:
-    ## alertmanager emptyDir volume size limit
-    ##
-    sizeLimit: ""
-
-  ## Annotations to be added to alertmanager pods
-  ##
-  podAnnotations: {}
-    ## Tell prometheus to use a specific set of alertmanager pods
-    ## instead of all alertmanager pods found in the same namespace
-    ## Useful if you deploy multiple releases within the same namespace
+persistence:
+  enabled: true
+  ## Persistent Volume Storage Class
+  ## If defined, storageClassName: <storageClass>
+  ## If set to "-", storageClassName: "", which disables dynamic provisioning
+  ## If undefined (the default) or set to null, no storageClassName spec is
+  ## set, choosing the default provisioner.
   ##
-  ## prometheus.io/probe: alertmanager-teamA
-
-  ## Labels to be added to Prometheus AlertManager pods
+  # storageClass: "-"
+  accessModes:
+    - ReadWriteOnce
+  size: 50Mi
+
+config:
+  global: {}
+    # slack_api_url: ''
+
+  templates:
+    - '/etc/alertmanager/*.tmpl'
+
+  receivers:
+    - name: default-receiver
+      # slack_configs:
+      #  - channel: '@you'
+      #    send_resolved: true
+
+  route:
+    group_wait: 10s
+    group_interval: 5m
+    receiver: default-receiver
+    repeat_interval: 3h
+
+## Monitors ConfigMap changes and POSTs to a URL
+## Ref: https://github.com/jimmidyson/configmap-reload
+##
+configmapReload:
+  ## If false, the configmap-reload container will not be deployed
   ##
-  podLabels: {}
+  enabled: false
 
-  ## Specify if a Pod Security Policy for node-exporter must be created
-  ## Ref: https://kubernetes.io/docs/concepts/policy/pod-security-policy/
+  ## configmap-reload container name
   ##
-  podSecurityPolicy:
-    annotations: {}
-      ## Specify pod annotations
-      ## Ref: https://kubernetes.io/docs/concepts/policy/pod-security-policy/#apparmor
-      ## Ref: https://kubernetes.io/docs/concepts/policy/pod-security-policy/#seccomp
-      ## Ref: https://kubernetes.io/docs/concepts/policy/pod-security-policy/#sysctl
-      ##
-      # seccomp.security.alpha.kubernetes.io/allowedProfileNames: '*'
-    # seccomp.security.alpha.kubernetes.io/defaultProfileName: 'docker/default'
-    # apparmor.security.beta.kubernetes.io/defaultProfileName: 'runtime/default'
-
-  ## Use a StatefulSet if replicaCount needs to be greater than 1 (see below)
-  ##
-  replicaCount: 1
+  name: configmap-reload
 
-  ## Annotations to be added to deployment
+  ## configmap-reload container image
   ##
-  deploymentAnnotations: {}
-
-  statefulSet:
-    ## If true, use a statefulset instead of a deployment for pod management.
-    ## This allows to scale replicas to more than 1 pod
-    ##
-    enabled: false
-
-    annotations: {}
-    labels: {}
-    podManagementPolicy: OrderedReady
-
-    ## Alertmanager headless service to use for the statefulset
-    ##
-    headless:
-      annotations: {}
-      labels: {}
-
-      ## Enabling peer mesh service end points for enabling the HA alert manager
-      ## Ref: https://github.com/prometheus/alertmanager/blob/master/README.md
-      enableMeshPeer: false
+  image:
+    repository: jimmidyson/configmap-reload
+    tag: v0.8.0
+    pullPolicy: IfNotPresent
 
-      servicePort: 80
+  # containerPort: 9533
 
-  ## alertmanager resource requests and limits
+  ## configmap-reload resource requests and limits
   ## Ref: http://kubernetes.io/docs/user-guide/compute-resources/
   ##
   resources: {}
-    # limits:
-    #   cpu: 10m
-    #   memory: 32Mi
-    # requests:
-  #   cpu: 10m
-  #   memory: 32Mi
 
-  # Custom DNS configuration to be added to alertmanager pods
-  dnsConfig: {}
-    # nameservers:
-    #   - 1.2.3.4
-    # searches:
-    #   - ns1.svc.cluster-domain.example
-    #   - my.dns.search.suffix
-    # options:
-  #   - name: ndots
-  #     value: "2"
-  #   - name: edns0
+templates: {}
+#   alertmanager.tmpl: |-
 
-  ## Security context to be added to alertmanager pods
-  ##
-  securityContext:
-    runAsUser: 65534
-    runAsNonRoot: true
-    runAsGroup: 65534
-    fsGroup: 65534
-
-  service:
-    annotations: {}
-    labels: {}
-    clusterIP: ""
-
-    ## Enabling peer mesh service end points for enabling the HA alert manager
-    ## Ref: https://github.com/prometheus/alertmanager/blob/master/README.md
-    # enableMeshPeer : true
-
-    ## List of IP addresses at which the alertmanager service is available
-    ## Ref: https://kubernetes.io/docs/user-guide/services/#external-ips
-    ##
-    externalIPs: []
-
-    loadBalancerIP: ""
-    loadBalancerSourceRanges: []
-    servicePort: 80
-    # nodePort: 30000
-    sessionAffinity: None
-    type: ClusterIP
-
-  ## List of initial peers
-  ## Ref: https://github.com/prometheus/alertmanager/blob/main/README.md#high-availability
-  clusterPeers: []
\ No newline at end of file
+## Optionally specify extra list of additional volumeMounts
+extraVolumeMounts: []
+  # - name: extras
+  #   mountPath: /usr/share/extras
+  #   readOnly: true
+
+## Optionally specify extra list of additional volumes
+extraVolumes: []
+  # - name: extras
+  #   emptyDir: {}
+
+## Optionally specify extra environment variables to add to alertmanager container
+extraEnv: []
+  # - name: FOO
+  #   value: BAR
diff --git a/deploy/charts/admin-stack/charts/prometheus/charts/kube-state-metrics/.helmignore b/deploy/charts/admin-stack/charts/prometheus/charts/kube-state-metrics/.helmignore
index 0e8a0eb3..f0c13194 100644
--- a/deploy/charts/admin-stack/charts/prometheus/charts/kube-state-metrics/.helmignore
+++ b/deploy/charts/admin-stack/charts/prometheus/charts/kube-state-metrics/.helmignore
@@ -14,10 +14,8 @@
 *.swp
 *.bak
 *.tmp
-*.orig
 *~
 # Various IDEs
 .project
 .idea/
 *.tmproj
-.vscode/
diff --git a/deploy/charts/admin-stack/charts/prometheus/charts/kube-state-metrics/Chart.yaml b/deploy/charts/admin-stack/charts/prometheus/charts/kube-state-metrics/Chart.yaml
index 2958f29e..6d28c2d2 100644
--- a/deploy/charts/admin-stack/charts/prometheus/charts/kube-state-metrics/Chart.yaml
+++ b/deploy/charts/admin-stack/charts/prometheus/charts/kube-state-metrics/Chart.yaml
@@ -14,26 +14,19 @@
 # limitations under the License.
 
 apiVersion: v2
+appVersion: 2.8.0
+description: Install kube-state-metrics to generate and expose cluster-level metrics
+home: https://github.com/kubernetes/kube-state-metrics/
+keywords:
+  - metric
+  - monitoring
+  - prometheus
+  - kubernetes
+maintainers:
+  - email: dev@dubbo.apache.org
+    name: dubbo
 name: kube-state-metrics
-description: A Helm chart for Kubernetes
-
-# A chart can be either an 'application' or a 'library' chart.
-#
-# Application charts are a collection of templates that can be packaged into versioned archives
-# to be deployed.
-#
-# Library charts provide useful utilities or functions for the chart developer. They're included as
-# a dependency of application charts to inject those utilities and functions into the rendering
-# pipeline. Library charts do not define any templates and therefore cannot be deployed.
+sources:
+  - https://github.com/kubernetes/kube-state-metrics/
 type: application
-
-# This is the chart version. This version number should be incremented each time you make changes
-# to the chart and its templates, including the app version.
-# Versions are expected to follow Semantic Versioning (https://semver.org/)
-version: 0.1.0
-
-# This is the version number of the application being deployed. This version number should be
-# incremented each time you make changes to the application. Versions are not expected to
-# follow Semantic Versioning. They should reflect the version the application is using.
-# It is recommended to use it with quotes.
-appVersion: "1.16.0"
+version: 4.30.0
\ No newline at end of file
diff --git a/deploy/charts/admin-stack/charts/prometheus/charts/kube-state-metrics/templates/_charts.tpl b/deploy/charts/admin-stack/charts/prometheus/charts/kube-state-metrics/templates/_charts.tpl
index 09dc7836..c6caec89 100644
--- a/deploy/charts/admin-stack/charts/prometheus/charts/kube-state-metrics/templates/_charts.tpl
+++ b/deploy/charts/admin-stack/charts/prometheus/charts/kube-state-metrics/templates/_charts.tpl
@@ -1,3 +1,11 @@
+{{/* vim: set filetype=mustache: */}}
+{{/*
+Expand the name of the chart.
+*/}}
+{{- define "kube-state-metrics.name" -}}
+{{- default .Chart.Name .Values.nameOverride | trunc 63 | trimSuffix "-" -}}
+{{- end -}}
+
 {{/*
 Create a default fully qualified app name.
 We truncate at 63 chars because some Kubernetes name fields are limited to this (by the DNS naming spec).
@@ -16,14 +24,6 @@ If release name contains chart name it will be used as a full name.
 {{- end -}}
 {{- end -}}
 
-{{/* vim: set filetype=mustache: */}}
-{{/*
-Expand the name of the chart.
-*/}}
-{{- define "kube-state-metrics.name" -}}
-{{- default .Chart.Name .Values.nameOverride | trunc 63 | trimSuffix "-" -}}
-{{- end -}}
-
 {{/*
 Create the name of the service account to use
 */}}
@@ -39,11 +39,11 @@ Create the name of the service account to use
 Allow the release namespace to be overridden for multi-namespace deployments in combined charts
 */}}
 {{- define "kube-state-metrics.namespace" -}}
-{{- if .Values.namespaceOverride -}}
+  {{- if .Values.namespaceOverride -}}
     {{- .Values.namespaceOverride -}}
-{{- else -}}
+  {{- else -}}
     {{- .Release.Namespace -}}
-{{- end -}}
+  {{- end -}}
 {{- end -}}
 
 {{/*
@@ -77,6 +77,42 @@ release: {{ .Release.Name }}
 Selector labels
 */}}
 {{- define "kube-state-metrics.selectorLabels" }}
+{{- if .Values.selectorOverride }}
+{{ toYaml .Values.selectorOverride }}
+{{- else }}
 app.kubernetes.io/name: {{ include "kube-state-metrics.name" . }}
 app.kubernetes.io/instance: {{ .Release.Name }}
-{{- end }}
\ No newline at end of file
+{{- end }}
+{{- end }}
+
+{{/* Sets default scrape limits for servicemonitor */}}
+{{- define "servicemonitor.scrapeLimits" -}}
+{{- with .sampleLimit }}
+sampleLimit: {{ . }}
+{{- end }}
+{{- with .targetLimit }}
+targetLimit: {{ . }}
+{{- end }}
+{{- with .labelLimit }}
+labelLimit: {{ . }}
+{{- end }}
+{{- with .labelNameLengthLimit }}
+labelNameLengthLimit: {{ . }}
+{{- end }}
+{{- with .labelValueLengthLimit }}
+labelValueLengthLimit: {{ . }}
+{{- end }}
+{{- end -}}
+
+{{/* 
+Formats imagePullSecrets. Input is (dict "Values" .Values "imagePullSecrets" .{specific imagePullSecrets})
+*/}}
+{{- define "kube-state-metrics.imagePullSecrets" -}}
+{{- range (concat .Values.global.imagePullSecrets .imagePullSecrets) }}
+  {{- if eq (typeOf .) "map[string]interface {}" }}
+- {{ toYaml . | trim }}
+  {{- else }}
+- name: {{ . }}
+  {{- end }}
+{{- end }}
+{{- end -}}
diff --git a/deploy/charts/admin-stack/charts/prometheus/charts/kube-state-metrics/templates/clusterrolebinding.yaml b/deploy/charts/admin-stack/charts/prometheus/charts/kube-state-metrics/templates/clusterrolebinding.yaml
index b713fa24..ad928731 100644
--- a/deploy/charts/admin-stack/charts/prometheus/charts/kube-state-metrics/templates/clusterrolebinding.yaml
+++ b/deploy/charts/admin-stack/charts/prometheus/charts/kube-state-metrics/templates/clusterrolebinding.yaml
@@ -1,3 +1,4 @@
+{{- if and .Values.rbac.create .Values.rbac.useClusterRole -}}
 # Licensed to the Apache Software Foundation (ASF) under one or more
 # contributor license agreements.  See the NOTICE file distributed with
 # this work for additional information regarding copyright ownership.
@@ -13,7 +14,6 @@
 # See the License for the specific language governing permissions and
 # limitations under the License.
 
-{{- if and .Values.rbac.create .Values.rbac.useClusterRole -}}
 apiVersion: rbac.authorization.k8s.io/v1
 kind: ClusterRoleBinding
 metadata:
diff --git a/deploy/charts/admin-stack/charts/prometheus/charts/kube-state-metrics/templates/deployment.yaml b/deploy/charts/admin-stack/charts/prometheus/charts/kube-state-metrics/templates/deployment.yaml
index 3a910cdb..d37e8e11 100644
--- a/deploy/charts/admin-stack/charts/prometheus/charts/kube-state-metrics/templates/deployment.yaml
+++ b/deploy/charts/admin-stack/charts/prometheus/charts/kube-state-metrics/templates/deployment.yaml
@@ -24,6 +24,10 @@ metadata:
   namespace: {{ template "kube-state-metrics.namespace" . }}
   labels:
     {{- include "kube-state-metrics.labels" . | indent 4 }}
+  {{- if .Values.annotations }}
+  annotations:
+{{ toYaml .Values.annotations | indent 4 }}
+  {{- end }}
 spec:
   selector:
     matchLabels:
@@ -45,16 +49,15 @@ spec:
       hostNetwork: {{ .Values.hostNetwork }}
       serviceAccountName: {{ template "kube-state-metrics.serviceAccountName" . }}
       {{- if .Values.securityContext.enabled }}
-      securityContext:
-        fsGroup: {{ .Values.securityContext.fsGroup }}
-        runAsGroup: {{ .Values.securityContext.runAsGroup }}
-        runAsUser: {{ .Values.securityContext.runAsUser }}
+      securityContext: {{- omit .Values.securityContext "enabled" | toYaml | nindent 8 }}
       {{- end }}
     {{- if .Values.priorityClassName }}
       priorityClassName: {{ .Values.priorityClassName }}
     {{- end }}
       containers:
-      - name: {{ .Chart.Name }}
+      {{- $httpPort := ternary 9090 (.Values.service.port | default 8080) .Values.kubeRBACProxy.enabled}}
+      {{- $telemetryPort := ternary 9091 (.Values.selfMonitor.telemetryPort | default 8081) .Values.kubeRBACProxy.enabled}}
+      - name: {{ template "kube-state-metrics.name" . }}
         {{- if .Values.autosharding.enabled }}
         env:
         - name: POD_NAME
@@ -68,13 +71,9 @@ spec:
         {{- end }}
         args:
         {{-  if .Values.extraArgs  }}
-        {{- range .Values.extraArgs  }}
-        - {{ . }}
-        {{- end  }}
-        {{-  end  }}
-        {{- if .Values.service.port }}
-        - --port={{ .Values.service.port | default 8080}}
+        {{- .Values.extraArgs | toYaml | nindent 8 }}
         {{-  end  }}
+        - --port={{ $httpPort }}
         {{-  if .Values.collectors  }}
         - --resources={{ .Values.collectors | join "," }}
         {{-  end  }}
@@ -90,8 +89,20 @@ spec:
         {{- if .Values.metricDenylist }}
         - --metric-denylist={{ .Values.metricDenylist | join "," }}
         {{- end }}
+        {{- $namespaces := list }}
         {{- if .Values.namespaces }}
-        - --namespaces={{ tpl (.Values.namespaces | join ",") $ }}
+        {{- range $ns := join "," .Values.namespaces | split "," }}
+        {{- $namespaces = append $namespaces (tpl $ns $) }}
+        {{- end }}
+        {{- end }}
+        {{- if .Values.releaseNamespace }}
+        {{- $namespaces = append $namespaces ( include "kube-state-metrics.namespace" . ) }}
+        {{- end }}
+        {{- if $namespaces }}
+        - --namespaces={{ $namespaces | mustUniq | join "," }}
+        {{- end }}
+        {{- if .Values.namespacesDenylist }}
+        - --namespaces-denylist={{ tpl (.Values.namespacesDenylist | join ",") $ }}
         {{- end }}
         {{- if .Values.autosharding.enabled }}
         - --pod=$(POD_NAME)
@@ -100,35 +111,53 @@ spec:
         {{- if .Values.kubeconfig.enabled }}
         - --kubeconfig=/opt/k8s/.kube/config
         {{- end }}
+        {{- if .Values.kubeRBACProxy.enabled }}
+        - --telemetry-host=127.0.0.1
+        - --telemetry-port={{ $telemetryPort }}
+        {{- else }}
         {{- if .Values.selfMonitor.telemetryHost }}
         - --telemetry-host={{ .Values.selfMonitor.telemetryHost }}
         {{- end }}
-        - --telemetry-port={{ .Values.selfMonitor.telemetryPort | default 8081 }}
-        {{- if .Values.kubeconfig.enabled }}
+        {{- if .Values.selfMonitor.telemetryPort }}
+        - --telemetry-port={{ $telemetryPort }}
+        {{- end }}
+        {{- end }}
+        {{- if or (.Values.kubeconfig.enabled) (.Values.volumeMounts) }}
         volumeMounts:
+        {{- if .Values.kubeconfig.enabled }}
         - name: kubeconfig
           mountPath: /opt/k8s/.kube/
           readOnly: true
         {{- end }}
+        {{- if .Values.volumeMounts }}
+{{ toYaml .Values.volumeMounts | indent 8 }}
+        {{- end }}
+        {{- end }}
         imagePullPolicy: {{ .Values.image.pullPolicy }}
-        image: "{{ .Values.image.repository }}:{{ .Values.image.tag }}"
+        {{- if .Values.image.sha }}
+        image: "{{ .Values.image.repository }}:{{ .Values.image.tag | default (print "v" .Chart.AppVersion) }}@sha256:{{ .Values.image.sha }}"
+        {{- else }}
+        image: "{{ .Values.image.repository }}:{{ .Values.image.tag | default (print "v" .Chart.AppVersion) }}"
+        {{- end }}
+        {{- if eq .Values.kubeRBACProxy.enabled false }}
         ports:
         - containerPort: {{ .Values.service.port | default 8080}}
           name: "http"
         {{- if .Values.selfMonitor.enabled }}
-        - containerPort: {{ .Values.selfMonitor.telemetryPort | default 8081 }}
+        - containerPort: {{ $telemetryPort }}
           name: "metrics"
         {{- end }}
+        {{- end }}
         livenessProbe:
           httpGet:
             path: /healthz
-            port: {{ .Values.service.port | default 8080}}
+            port: {{ $httpPort }}
           initialDelaySeconds: 5
           timeoutSeconds: 5
         readinessProbe:
           httpGet:
             path: /
-            port: {{ .Values.service.port | default 8080}}
+            port: {{ $httpPort }}
           initialDelaySeconds: 5
           timeoutSeconds: 5
         {{- if .Values.resources }}
@@ -139,9 +168,89 @@ spec:
         securityContext:
 {{ toYaml .Values.containerSecurityContext | indent 10 }}
 {{- end }}
-{{- if .Values.imagePullSecrets }}
+        {{-  if .Values.kubeRBACProxy.enabled  }}
+      - name: kube-rbac-proxy-http
+        args:
+        {{-  if .Values.kubeRBACProxy.extraArgs  }}
+        {{- .Values.kubeRBACProxy.extraArgs | toYaml | nindent 8 }}
+        {{-  end  }}
+        - --secure-listen-address=:{{ .Values.service.port | default 8080}}
+        - --upstream=http://127.0.0.1:{{ $httpPort }}/
+        - --proxy-endpoints-port=8888
+        - --config-file=/etc/kube-rbac-proxy-config/config-file.yaml
+        volumeMounts:
+          - name: kube-rbac-proxy-config
+            mountPath: /etc/kube-rbac-proxy-config
+        imagePullPolicy: {{ .Values.kubeRBACProxy.image.pullPolicy }}
+        {{- if .Values.kubeRBACProxy.image.sha }}
+        image: "{{ .Values.kubeRBACProxy.image.repository }}:{{ .Values.kubeRBACProxy.image.tag }}@sha256:{{ .Values.kubeRBACProxy.image.sha }}"
+        {{- else }}
+        image: "{{ .Values.kubeRBACProxy.image.repository }}:{{ .Values.kubeRBACProxy.image.tag }}"
+        {{- end }}
+        ports:
+          - containerPort: {{ .Values.service.port | default 8080}}
+            name: "http"
+          - containerPort: 8888
+            name: "http-healthz"
+        readinessProbe:
+          httpGet:
+            scheme: HTTPS
+            port: 8888
+            path: healthz
+          initialDelaySeconds: 5
+          timeoutSeconds: 5
+        {{- if .Values.kubeRBACProxy.resources }}
+        resources:
+{{ toYaml .Values.kubeRBACProxy.resources | indent 10 }}
+{{- end }}
+{{- if .Values.kubeRBACProxy.containerSecurityContext }}
+        securityContext:
+{{ toYaml .Values.kubeRBACProxy.containerSecurityContext | indent 10 }}
+{{- end }}
+      {{-  if .Values.selfMonitor.enabled  }}
+      - name: kube-rbac-proxy-telemetry
+        args:
+        {{-  if .Values.kubeRBACProxy.extraArgs  }}
+        {{- .Values.kubeRBACProxy.extraArgs | toYaml | nindent 8 }}
+        {{-  end  }}
+        - --secure-listen-address=:{{ .Values.selfMonitor.telemetryPort | default 8081 }}
+        - --upstream=http://127.0.0.1:{{ $telemetryPort }}/
+        - --proxy-endpoints-port=8889
+        - --config-file=/etc/kube-rbac-proxy-config/config-file.yaml
+        volumeMounts:
+          - name: kube-rbac-proxy-config
+            mountPath: /etc/kube-rbac-proxy-config
+        imagePullPolicy: {{ .Values.kubeRBACProxy.image.pullPolicy }}
+        {{- if .Values.kubeRBACProxy.image.sha }}
+        image: "{{ .Values.kubeRBACProxy.image.repository }}:{{ .Values.kubeRBACProxy.image.tag }}@sha256:{{ .Values.kubeRBACProxy.image.sha }}"
+        {{- else }}
+        image: "{{ .Values.kubeRBACProxy.image.repository }}:{{ .Values.kubeRBACProxy.image.tag }}"
+        {{- end }}
+        ports:
+          - containerPort: {{ .Values.selfMonitor.telemetryPort | default 8081 }}
+            name: "metrics"
+          - containerPort: 8889
+            name: "metrics-healthz"
+        readinessProbe:
+          httpGet:
+            scheme: HTTPS
+            port: 8889
+            path: healthz
+          initialDelaySeconds: 5
+          timeoutSeconds: 5
+        {{- if .Values.kubeRBACProxy.resources }}
+        resources:
+{{ toYaml .Values.kubeRBACProxy.resources | indent 10 }}
+{{- end }}
+{{- if .Values.kubeRBACProxy.containerSecurityContext }}
+        securityContext:
+{{ toYaml .Values.kubeRBACProxy.containerSecurityContext | indent 10 }}
+{{- end }}
+      {{- end }}
+      {{- end }}
+{{- if or .Values.imagePullSecrets .Values.global.imagePullSecrets }}
       imagePullSecrets:
-{{ toYaml .Values.imagePullSecrets | indent 8 }}
+        {{- include "kube-state-metrics.imagePullSecrets" (dict "Values" .Values "imagePullSecrets" .Values.imagePullSecrets) | indent 8 }}
       {{- end }}
       {{- if .Values.affinity }}
       affinity:
@@ -155,9 +264,23 @@ spec:
       tolerations:
 {{ toYaml .Values.tolerations | indent 8 }}
       {{- end }}
-      {{- if .Values.kubeconfig.enabled}}
+      {{- if .Values.topologySpreadConstraints }}
+      topologySpreadConstraints:
+{{ toYaml .Values.topologySpreadConstraints | indent 8 }}
+      {{- end }}
+      {{- if or (.Values.kubeconfig.enabled) (.Values.volumes) (.Values.kubeRBACProxy.enabled) }}
       volumes:
+      {{- if .Values.kubeconfig.enabled}}
         - name: kubeconfig
           secret:
             secretName: {{ template "kube-state-metrics.fullname" . }}-kubeconfig
       {{- end }}
+      {{- if .Values.kubeRBACProxy.enabled}}
+        - name: kube-rbac-proxy-config
+          configMap:
+            name: {{ template "kube-state-metrics.fullname" . }}-rbac-config
+      {{- end }}
+      {{- if .Values.volumes }}
+{{ toYaml .Values.volumes | indent 8 }}
+      {{- end }}
+      {{- end }}
diff --git a/deploy/charts/admin-stack/charts/prometheus/charts/kube-state-metrics/templates/pdb.yaml b/deploy/charts/admin-stack/charts/prometheus/charts/kube-state-metrics/templates/pdb.yaml
index a08612c2..7890e264 100644
--- a/deploy/charts/admin-stack/charts/prometheus/charts/kube-state-metrics/templates/pdb.yaml
+++ b/deploy/charts/admin-stack/charts/prometheus/charts/kube-state-metrics/templates/pdb.yaml
@@ -14,7 +14,11 @@
 # limitations under the License.
 
 {{- if .Values.podDisruptionBudget -}}
+{{ if $.Capabilities.APIVersions.Has "policy/v1/PodDisruptionBudget" -}}
+apiVersion: policy/v1
+{{- else -}}
 apiVersion: policy/v1beta1
+{{- end }}
 kind: PodDisruptionBudget
 metadata:
   name: {{ template "kube-state-metrics.fullname" . }}
diff --git a/deploy/charts/admin-stack/charts/prometheus/charts/kube-state-metrics/templates/podsecuritypolicy.yaml b/deploy/charts/admin-stack/charts/prometheus/charts/kube-state-metrics/templates/podsecuritypolicy.yaml
index f07d8e62..13e601bd 100644
--- a/deploy/charts/admin-stack/charts/prometheus/charts/kube-state-metrics/templates/podsecuritypolicy.yaml
+++ b/deploy/charts/admin-stack/charts/prometheus/charts/kube-state-metrics/templates/podsecuritypolicy.yaml
@@ -13,7 +13,7 @@
 # See the License for the specific language governing permissions and
 # limitations under the License.
 
-{{- if .Values.podSecurityPolicy.enabled }}
+{{- if and .Values.podSecurityPolicy.enabled (.Capabilities.APIVersions.Has "policy/v1beta1/PodSecurityPolicy") }}
 apiVersion: policy/v1beta1
 kind: PodSecurityPolicy
 metadata:
diff --git a/deploy/charts/admin-stack/charts/prometheus/charts/kube-state-metrics/templates/psp-clusterrole.yaml b/deploy/charts/admin-stack/charts/prometheus/charts/kube-state-metrics/templates/psp-clusterrole.yaml
index 53e33712..20663fb5 100644
--- a/deploy/charts/admin-stack/charts/prometheus/charts/kube-state-metrics/templates/psp-clusterrole.yaml
+++ b/deploy/charts/admin-stack/charts/prometheus/charts/kube-state-metrics/templates/psp-clusterrole.yaml
@@ -1,3 +1,4 @@
+{{- if and .Values.podSecurityPolicy.enabled (.Capabilities.APIVersions.Has "policy/v1beta1/PodSecurityPolicy") }}
 # Licensed to the Apache Software Foundation (ASF) under one or more
 # contributor license agreements.  See the NOTICE file distributed with
 # this work for additional information regarding copyright ownership.
@@ -13,7 +14,6 @@
 # See the License for the specific language governing permissions and
 # limitations under the License.
 
-{{- if and .Values.podSecurityPolicy.enabled .Values.rbac.create -}}
 apiVersion: rbac.authorization.k8s.io/v1
 kind: ClusterRole
 metadata:
diff --git a/deploy/charts/admin-stack/charts/prometheus/charts/kube-state-metrics/templates/psp-clusterrolebinding.yaml b/deploy/charts/admin-stack/charts/prometheus/charts/kube-state-metrics/templates/psp-clusterrolebinding.yaml
index e8b513c2..2ca3cdcb 100644
--- a/deploy/charts/admin-stack/charts/prometheus/charts/kube-state-metrics/templates/psp-clusterrolebinding.yaml
+++ b/deploy/charts/admin-stack/charts/prometheus/charts/kube-state-metrics/templates/psp-clusterrolebinding.yaml
@@ -1,3 +1,4 @@
+{{- if and .Values.podSecurityPolicy.enabled (.Capabilities.APIVersions.Has "policy/v1beta1/PodSecurityPolicy") }}
 # Licensed to the Apache Software Foundation (ASF) under one or more
 # contributor license agreements.  See the NOTICE file distributed with
 # this work for additional information regarding copyright ownership.
@@ -13,7 +14,6 @@
 # See the License for the specific language governing permissions and
 # limitations under the License.
 
-{{- if and .Values.podSecurityPolicy.enabled .Values.rbac.create -}}
 apiVersion: rbac.authorization.k8s.io/v1
 kind: ClusterRoleBinding
 metadata:
diff --git a/deploy/charts/admin-stack/charts/prometheus/charts/kube-state-metrics/templates/kubeconfig-secret.yaml b/deploy/charts/admin-stack/charts/prometheus/charts/kube-state-metrics/templates/rbac-configmap.yaml
similarity index 64%
copy from deploy/charts/admin-stack/charts/prometheus/charts/kube-state-metrics/templates/kubeconfig-secret.yaml
copy to deploy/charts/admin-stack/charts/prometheus/charts/kube-state-metrics/templates/rbac-configmap.yaml
index 0a61be9b..1f32b211 100644
--- a/deploy/charts/admin-stack/charts/prometheus/charts/kube-state-metrics/templates/kubeconfig-secret.yaml
+++ b/deploy/charts/admin-stack/charts/prometheus/charts/kube-state-metrics/templates/rbac-configmap.yaml
@@ -1,3 +1,4 @@
+{{- if .Values.kubeRBACProxy.enabled }}
 # Licensed to the Apache Software Foundation (ASF) under one or more
 # contributor license agreements.  See the NOTICE file distributed with
 # this work for additional information regarding copyright ownership.
@@ -13,15 +14,17 @@
 # See the License for the specific language governing permissions and
 # limitations under the License.
 
-{{- if .Values.kubeconfig.enabled -}}
 apiVersion: v1
-kind: Secret
+kind: ConfigMap
 metadata:
-  name: {{ template "kube-state-metrics.fullname" . }}-kubeconfig
-  namespace: {{ template "kube-state-metrics.namespace" . }}
-  labels:
-    {{- include "kube-state-metrics.labels" . | indent 4 }}
-type: Opaque
+  name: {{ template "kube-state-metrics.fullname" . }}-rbac-config
 data:
-  config: '{{ .Values.kubeconfig.secret }}'
-{{- end -}}
+  config-file.yaml: |+
+    authorization:
+      resourceAttributes:
+        namespace: {{ template "kube-state-metrics.namespace" . }}
+        apiVersion: v1
+        resource: services
+        subresource: {{ template "kube-state-metrics.fullname" . }}
+        name: {{ template "kube-state-metrics.fullname" . }}
+{{- end }}
\ No newline at end of file
diff --git a/deploy/charts/admin-stack/charts/prometheus/charts/kube-state-metrics/templates/role.yaml b/deploy/charts/admin-stack/charts/prometheus/charts/kube-state-metrics/templates/role.yaml
index 55e6554d..eed1796f 100644
--- a/deploy/charts/admin-stack/charts/prometheus/charts/kube-state-metrics/templates/role.yaml
+++ b/deploy/charts/admin-stack/charts/prometheus/charts/kube-state-metrics/templates/role.yaml
@@ -14,8 +14,7 @@
 # limitations under the License.
 
 {{- if and (eq .Values.rbac.create true) (not .Values.rbac.useExistingRole) -}}
-{{- range (ternary (split "," .Values.namespaces) (list "") (eq $.Values.rbac.useClusterRole false)) }}
----
+{{- range (ternary (join "," .Values.namespaces | split "," ) (list "") (eq $.Values.rbac.useClusterRole false)) }}
 apiVersion: rbac.authorization.k8s.io/v1
 {{- if eq $.Values.rbac.useClusterRole false }}
 kind: Role
@@ -84,6 +83,12 @@ rules:
   - jobs
   verbs: ["list", "watch"]
 {{ end -}}
+{{ if has "leases" $.Values.collectors }}
+- apiGroups: ["coordination.k8s.io"]
+  resources:
+  - leases
+  verbs: ["list", "watch"]
+{{ end -}}
 {{ if has "limitranges" $.Values.collectors }}
 - apiGroups: [""]
   resources:
@@ -198,5 +203,18 @@ rules:
     - verticalpodautoscalers
   verbs: ["list", "watch"]
 {{ end -}}
+{{-  if $.Values.kubeRBACProxy.enabled  }}
+- apiGroups: ["authentication.k8s.io"]
+  resources:
+    - tokenreviews
+  verbs: ["create"]
+- apiGroups: ["authorization.k8s.io"]
+  resources:
+    - subjectaccessreviews
+  verbs: ["create"]
+{{- end }}
+{{ if $.Values.rbac.extraRules }}
+{{ toYaml $.Values.rbac.extraRules }}
+{{ end }}
 {{- end -}}
 {{- end -}}
diff --git a/deploy/charts/admin-stack/charts/prometheus/charts/kube-state-metrics/templates/rolebinding.yaml b/deploy/charts/admin-stack/charts/prometheus/charts/kube-state-metrics/templates/rolebinding.yaml
index d986c603..b8e7028f 100644
--- a/deploy/charts/admin-stack/charts/prometheus/charts/kube-state-metrics/templates/rolebinding.yaml
+++ b/deploy/charts/admin-stack/charts/prometheus/charts/kube-state-metrics/templates/rolebinding.yaml
@@ -1,21 +1,20 @@
 # Licensed to the Apache Software Foundation (ASF) under one or more
-  # contributor license agreements.  See the NOTICE file distributed with
-  # this work for additional information regarding copyright ownership.
-  # The ASF licenses this file to You under the Apache License, Version 2.0
-  # (the "License"); you may not use this file except in compliance with
-  # the License.  You may obtain a copy of the License at
-  #
-  #     http://www.apache.org/licenses/LICENSE-2.0
-  #
-  # Unless required by applicable law or agreed to in writing, software
-  # distributed under the License is distributed on an "AS IS" BASIS,
-  # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-  # See the License for the specific language governing permissions and
-  # limitations under the License.
+# contributor license agreements.  See the NOTICE file distributed with
+# this work for additional information regarding copyright ownership.
+# The ASF licenses this file to You under the Apache License, Version 2.0
+# (the "License"); you may not use this file except in compliance with
+# the License.  You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
 
 {{- if and (eq  .Values.rbac.create true) (eq .Values.rbac.useClusterRole false) -}}
-{{- range (split "," $.Values.namespaces) }}
----
+{{- range (join "," $.Values.namespaces) | split "," }}
 apiVersion: rbac.authorization.k8s.io/v1
 kind: RoleBinding
 metadata:
diff --git a/deploy/charts/admin-stack/charts/prometheus/charts/kube-state-metrics/templates/kubeconfig-secret.yaml b/deploy/charts/admin-stack/charts/prometheus/charts/kube-state-metrics/templates/secret.yaml
similarity index 100%
rename from deploy/charts/admin-stack/charts/prometheus/charts/kube-state-metrics/templates/kubeconfig-secret.yaml
rename to deploy/charts/admin-stack/charts/prometheus/charts/kube-state-metrics/templates/secret.yaml
index 0a61be9b..b1127ea3 100644
--- a/deploy/charts/admin-stack/charts/prometheus/charts/kube-state-metrics/templates/kubeconfig-secret.yaml
+++ b/deploy/charts/admin-stack/charts/prometheus/charts/kube-state-metrics/templates/secret.yaml
@@ -1,3 +1,4 @@
+{{- if .Values.kubeconfig.enabled -}}
 # Licensed to the Apache Software Foundation (ASF) under one or more
 # contributor license agreements.  See the NOTICE file distributed with
 # this work for additional information regarding copyright ownership.
@@ -13,7 +14,6 @@
 # See the License for the specific language governing permissions and
 # limitations under the License.
 
-{{- if .Values.kubeconfig.enabled -}}
 apiVersion: v1
 kind: Secret
 metadata:
diff --git a/deploy/charts/admin-stack/charts/prometheus/charts/kube-state-metrics/templates/service.yaml b/deploy/charts/admin-stack/charts/prometheus/charts/kube-state-metrics/templates/service.yaml
index 04de5166..ac804ef7 100644
--- a/deploy/charts/admin-stack/charts/prometheus/charts/kube-state-metrics/templates/service.yaml
+++ b/deploy/charts/admin-stack/charts/prometheus/charts/kube-state-metrics/templates/service.yaml
@@ -42,9 +42,23 @@ spec:
     protocol: TCP
     port: {{ .Values.selfMonitor.telemetryPort | default 8081 }}
     targetPort: {{ .Values.selfMonitor.telemetryPort | default 8081 }}
+  {{- if .Values.selfMonitor.telemetryNodePort }}
+    nodePort: {{ .Values.selfMonitor.telemetryNodePort }}
+  {{- end }}
   {{ end }}
 {{- if .Values.service.loadBalancerIP }}
   loadBalancerIP: "{{ .Values.service.loadBalancerIP }}"
+{{- end }}
+{{- if .Values.service.loadBalancerSourceRanges }}
+  loadBalancerSourceRanges:
+  {{- range $cidr := .Values.service.loadBalancerSourceRanges }}
+    - {{ $cidr }}
+  {{- end }}
+{{- end }}
+{{- if .Values.autosharding.enabled }}
+  clusterIP: None
+{{- else if .Values.service.clusterIP }}
+  clusterIP: "{{ .Values.service.clusterIP }}"
 {{- end }}
   selector:
     {{- include "kube-state-metrics.selectorLabels" . | indent 4 }}
diff --git a/deploy/charts/admin-stack/charts/prometheus/charts/kube-state-metrics/templates/serviceaccount.yaml b/deploy/charts/admin-stack/charts/prometheus/charts/kube-state-metrics/templates/serviceaccount.yaml
index befc6fb3..cd36abe7 100644
--- a/deploy/charts/admin-stack/charts/prometheus/charts/kube-state-metrics/templates/serviceaccount.yaml
+++ b/deploy/charts/admin-stack/charts/prometheus/charts/kube-state-metrics/templates/serviceaccount.yaml
@@ -1,3 +1,4 @@
+{{- if .Values.serviceAccount.create -}}
 # Licensed to the Apache Software Foundation (ASF) under one or more
 # contributor license agreements.  See the NOTICE file distributed with
 # this work for additional information regarding copyright ownership.
@@ -13,7 +14,6 @@
 # See the License for the specific language governing permissions and
 # limitations under the License.
 
-{{- if .Values.serviceAccount.create -}}
 apiVersion: v1
 kind: ServiceAccount
 metadata:
@@ -26,5 +26,5 @@ metadata:
 {{ toYaml .Values.serviceAccount.annotations | indent 4 }}
 {{- end }}
 imagePullSecrets:
-{{ toYaml .Values.serviceAccount.imagePullSecrets | indent 2 }}
+  {{- include "kube-state-metrics.imagePullSecrets" (dict "Values" .Values "imagePullSecrets" .Values.serviceAccount.imagePullSecrets) | indent 2 }}
 {{- end -}}
diff --git a/deploy/charts/admin-stack/charts/prometheus/charts/kube-state-metrics/templates/servicemonitor.yaml b/deploy/charts/admin-stack/charts/prometheus/charts/kube-state-metrics/templates/servicemonitor.yaml
index 27fa92c0..1f3e6e2c 100644
--- a/deploy/charts/admin-stack/charts/prometheus/charts/kube-state-metrics/templates/servicemonitor.yaml
+++ b/deploy/charts/admin-stack/charts/prometheus/charts/kube-state-metrics/templates/servicemonitor.yaml
@@ -1,3 +1,4 @@
+{{- if .Values.prometheus.monitor.enabled }}
 # Licensed to the Apache Software Foundation (ASF) under one or more
 # contributor license agreements.  See the NOTICE file distributed with
 # this work for additional information regarding copyright ownership.
@@ -13,7 +14,6 @@
 # See the License for the specific language governing permissions and
 # limitations under the License.
 
-{{- if .Values.prometheus.monitor.enabled }}
 apiVersion: monitoring.coreos.com/v1
 kind: ServiceMonitor
 metadata:
@@ -26,11 +26,20 @@ metadata:
   {{- end }}
 spec:
   jobLabel: {{ default "app.kubernetes.io/name" .Values.prometheus.monitor.jobLabel }}
+  {{- with .Values.prometheus.monitor.targetLabels }}
+  targetLabels:
+    {{- toYaml . | trim | nindent 4 }}
+  {{- end }}
+  {{- with .Values.prometheus.monitor.podTargetLabels }}
+  podTargetLabels:
+    {{- toYaml . | trim | nindent 4 }}
+  {{- end }}
+  {{- include "servicemonitor.scrapeLimits" .Values.prometheus.monitor | indent 2 }}
   selector:
     matchLabels:
-    {{- if .Values.prometheus.monitor.selectorOverride -}}
-      {{ toYaml .Values.prometheus.monitor.selectorOverride | nindent 6 }}
-    {{ else }}
+    {{- with .Values.prometheus.monitor.selectorOverride }}
+      {{- toYaml . | nindent 6 }}
+    {{- else }}
       {{- include "kube-state-metrics.selectorLabels" . | indent 6 }}
     {{- end }}
   endpoints:
@@ -55,6 +64,13 @@ spec:
       relabelings:
         {{- toYaml .Values.prometheus.monitor.relabelings | nindent 8 }}
     {{- end }}
+    {{- if .Values.prometheus.monitor.scheme }}
+      scheme: {{ .Values.prometheus.monitor.scheme }}
+    {{- end }}
+    {{- if .Values.prometheus.monitor.tlsConfig }}
+      tlsConfig:
+        {{- toYaml .Values.prometheus.monitor.tlsConfig | nindent 8 }}
+    {{- end }}
   {{- if .Values.selfMonitor.enabled }}
     - port: metrics
     {{- if .Values.prometheus.monitor.interval }}
@@ -77,5 +93,12 @@ spec:
       relabelings:
         {{- toYaml .Values.prometheus.monitor.relabelings | nindent 8 }}
     {{- end }}
+    {{- if .Values.prometheus.monitor.scheme }}
+      scheme: {{ .Values.prometheus.monitor.scheme }}
+    {{- end }}
+    {{- if .Values.prometheus.monitor.tlsConfig }}
+      tlsConfig:
+        {{- toYaml .Values.prometheus.monitor.tlsConfig | nindent 8 }}
+    {{- end }}
   {{- end }}
 {{- end }}
diff --git a/deploy/charts/admin-stack/charts/prometheus/charts/kube-state-metrics/templates/stsdiscovery-role.yaml b/deploy/charts/admin-stack/charts/prometheus/charts/kube-state-metrics/templates/sts-role.yaml
similarity index 100%
rename from deploy/charts/admin-stack/charts/prometheus/charts/kube-state-metrics/templates/stsdiscovery-role.yaml
rename to deploy/charts/admin-stack/charts/prometheus/charts/kube-state-metrics/templates/sts-role.yaml
index 558f2942..53cc44be 100644
--- a/deploy/charts/admin-stack/charts/prometheus/charts/kube-state-metrics/templates/stsdiscovery-role.yaml
+++ b/deploy/charts/admin-stack/charts/prometheus/charts/kube-state-metrics/templates/sts-role.yaml
@@ -1,3 +1,4 @@
+{{- if and .Values.autosharding.enabled .Values.rbac.create -}}
 # Licensed to the Apache Software Foundation (ASF) under one or more
 # contributor license agreements.  See the NOTICE file distributed with
 # this work for additional information regarding copyright ownership.
@@ -13,7 +14,6 @@
 # See the License for the specific language governing permissions and
 # limitations under the License.
 
-{{- if and .Values.autosharding.enabled .Values.rbac.create -}}
 apiVersion: rbac.authorization.k8s.io/v1
 kind: Role
 metadata:
diff --git a/deploy/charts/admin-stack/charts/prometheus/charts/kube-state-metrics/templates/stsdiscovery-rolebinding.yaml b/deploy/charts/admin-stack/charts/prometheus/charts/kube-state-metrics/templates/sts-rolebinding.yaml
similarity index 100%
rename from deploy/charts/admin-stack/charts/prometheus/charts/kube-state-metrics/templates/stsdiscovery-rolebinding.yaml
rename to deploy/charts/admin-stack/charts/prometheus/charts/kube-state-metrics/templates/sts-rolebinding.yaml
index 5c81c7e5..71ff6c8d 100644
--- a/deploy/charts/admin-stack/charts/prometheus/charts/kube-state-metrics/templates/stsdiscovery-rolebinding.yaml
+++ b/deploy/charts/admin-stack/charts/prometheus/charts/kube-state-metrics/templates/sts-rolebinding.yaml
@@ -1,3 +1,4 @@
+{{- if and .Values.autosharding.enabled .Values.rbac.create -}}
 # Licensed to the Apache Software Foundation (ASF) under one or more
 # contributor license agreements.  See the NOTICE file distributed with
 # this work for additional information regarding copyright ownership.
@@ -13,7 +14,6 @@
 # See the License for the specific language governing permissions and
 # limitations under the License.
 
-{{- if and .Values.autosharding.enabled .Values.rbac.create -}}
 apiVersion: rbac.authorization.k8s.io/v1
 kind: RoleBinding
 metadata:
diff --git a/deploy/charts/admin-stack/charts/prometheus/charts/kube-state-metrics/templates/verticalpodautoscaler.yaml b/deploy/charts/admin-stack/charts/prometheus/charts/kube-state-metrics/templates/verticalpodautoscaler.yaml
new file mode 100644
index 00000000..7b024f47
--- /dev/null
+++ b/deploy/charts/admin-stack/charts/prometheus/charts/kube-state-metrics/templates/verticalpodautoscaler.yaml
@@ -0,0 +1,49 @@
+{{- if and (.Capabilities.APIVersions.Has "autoscaling.k8s.io/v1") (.Values.verticalPodAutoscaler.enabled) }}
+# Licensed to the Apache Software Foundation (ASF) under one or more
+# contributor license agreements.  See the NOTICE file distributed with
+# this work for additional information regarding copyright ownership.
+# The ASF licenses this file to You under the Apache License, Version 2.0
+# (the "License"); you may not use this file except in compliance with
+# the License.  You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+apiVersion: autoscaling.k8s.io/v1
+kind: VerticalPodAutoscaler
+metadata:
+  name: {{ template "kube-state-metrics.fullname" . }}
+  namespace: {{ template "kube-state-metrics.namespace" . }}
+  labels:
+    {{- include "kube-state-metrics.labels" . | indent 4 }}
+spec:
+  resourcePolicy:
+    containerPolicies:
+    - containerName: {{ template "kube-state-metrics.name" . }}
+      {{- if .Values.verticalPodAutoscaler.controlledResources }}
+      controlledResources: {{ .Values.verticalPodAutoscaler.controlledResources }}
+      {{- end }}
+      {{- if .Values.verticalPodAutoscaler.maxAllowed }}
+      maxAllowed:
+        {{ toYaml .Values.verticalPodAutoscaler.maxAllowed | nindent 8 }}
+      {{- end }}
+      {{- if .Values.verticalPodAutoscaler.minAllowed }}
+      minAllowed:
+        {{ toYaml .Values.verticalPodAutoscaler.minAllowed | nindent 8 }}
+      {{- end }}
+  targetRef:
+    apiVersion: apps/v1
+    kind: Deployment
+    name:  {{ template "kube-state-metrics.fullname" . }}
+  {{- if .Values.verticalPodAutoscaler.updatePolicy }}
+  updatePolicy:
+    {{- if .Values.verticalPodAutoscaler.updatePolicy.updateMode }}
+    updateMode: {{ .Values.verticalPodAutoscaler.updatePolicy.updateMode  }}
+    {{- end }}
+  {{- end }}
+{{- end }}
diff --git a/deploy/charts/admin-stack/charts/prometheus/charts/kube-state-metrics/values.yaml b/deploy/charts/admin-stack/charts/prometheus/charts/kube-state-metrics/values.yaml
index 3538e350..9a7db90c 100644
--- a/deploy/charts/admin-stack/charts/prometheus/charts/kube-state-metrics/values.yaml
+++ b/deploy/charts/admin-stack/charts/prometheus/charts/kube-state-metrics/values.yaml
@@ -14,15 +14,35 @@
 # limitations under the License.
 
 # Default values for kube-state-metrics.
+  
+name: kube-state-metrics
+nameOverride: ""
+fullnameOverride: ""
 prometheusScrape: true
 image:
-  repository: k8s.gcr.io/kube-state-metrics/kube-state-metrics
-  tag: v2.3.0
+  repository: registry.k8s.io/kube-state-metrics/kube-state-metrics
+  # If unset use v + .Charts.appVersion
+  tag: ""
+  sha: ""
   pullPolicy: IfNotPresent
 
 imagePullSecrets: []
 # - name: "image-pull-secret"
 
+global:
+  # To help compatibility with other charts which use global.imagePullSecrets.
+  # Allow either an array of {name: pullSecret} maps (k8s-style), or an array of strings (more common helm-style).
+  # global:
+  #   imagePullSecrets:
+  #   - name: pullSecret1
+  #   - name: pullSecret2
+  # or
+  # global:
+  #   imagePullSecrets:
+  #   - pullSecret1
+  #   - pullSecret2
+  imagePullSecrets: []
+
 # If set to true, this will deploy kube-state-metrics as a StatefulSet and the data
 # will be automatically sharded across <.Values.replicas> pods using the built-in
 # autodiscovery feature: https://github.com/kubernetes/kube-state-metrics#automated-sharding
@@ -43,11 +63,17 @@ service:
   type: ClusterIP
   nodePort: 0
   loadBalancerIP: ""
+  # Only allow access to the loadBalancerIP from these IPs
+  loadBalancerSourceRanges: []
+  clusterIP: ""
   annotations: {}
 
 ## Additional labels to add to all resources
 customLabels: {}
-# app: kube-state-metrics
+  # app: kube-state-metrics
+
+## Override selector labels
+selectorOverride: {}
 
 ## set to true to add the release label so scraping of the servicemonitor with kube-prometheus-stack works out of the box
 releaseLabel: false
@@ -64,6 +90,45 @@ rbac:
   # If set to false - Run without Cluteradmin privs needed - ONLY works if namespace is also set (if useExistingRole is set this name is used as ClusterRole or Role to bind to)
   useClusterRole: true
 
+  # Add permissions for CustomResources' apiGroups in Role/ClusterRole. Should be used in conjunction with Custom Resource State Metrics configuration
+  # Example:
+  # - apiGroups: ["monitoring.coreos.com"]
+  #   resources: ["prometheuses"]
+  #   verbs: ["list", "watch"]
+  extraRules: []
+
+# Configure kube-rbac-proxy. When enabled, creates one kube-rbac-proxy container per exposed HTTP endpoint (metrics and telemetry if enabled).
+# The requests are served through the same service but requests are then HTTPS.
+kubeRBACProxy:
+  enabled: false
+  image:
+    repository: quay.io/brancz/kube-rbac-proxy
+    tag: v0.14.0
+    sha: ""
+    pullPolicy: IfNotPresent
+
+  # List of additional cli arguments to configure kube-rbac-prxy
+  # for example: --tls-cipher-suites, --log-file, etc.
+  # all the possible args can be found here: https://github.com/brancz/kube-rbac-proxy#usage
+  extraArgs: []
+
+  ## Specify security settings for a Container
+  ## Allows overrides and additional options compared to (Pod) securityContext
+  ## Ref: https://kubernetes.io/docs/tasks/configure-pod-container/security-context/#set-the-security-context-for-a-container
+  containerSecurityContext: {}
+
+  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:'.
+    # limits:
+    #  cpu: 100m
+    #  memory: 64Mi
+    # requests:
+    #  cpu: 10m
+    #  memory: 32Mi
+
 serviceAccount:
   # Specifies whether a ServiceAccount should be created, require rbac true
   create: true
@@ -84,13 +149,36 @@ prometheus:
     additionalLabels: {}
     namespace: ""
     jobLabel: ""
+    targetLabels: []
+    podTargetLabels: []
     interval: ""
+    ## SampleLimit defines per-scrape limit on number of scraped samples that will be accepted.
+    ##
+    sampleLimit: 0
+
+    ## TargetLimit defines a limit on the number of scraped targets that will be accepted.
+    ##
+    targetLimit: 0
+
+    ## Per-scrape limit on number of labels that will be accepted for a sample. Only valid in Prometheus versions 2.27.0 and newer.
+    ##
+    labelLimit: 0
+
+    ## Per-scrape limit on length of labels name that will be accepted for a sample. Only valid in Prometheus versions 2.27.0 and newer.
+    ##
+    labelNameLengthLimit: 0
+
+    ## Per-scrape limit on length of labels value that will be accepted for a sample. Only valid in Prometheus versions 2.27.0 and newer.
+    ##
+    labelValueLengthLimit: 0
     scrapeTimeout: ""
     proxyUrl: ""
     selectorOverride: {}
     honorLabels: false
     metricRelabelings: []
     relabelings: []
+    scheme: ""
+    tlsConfig: {}
 
 ## Specify if a Pod Security Policy for kube-state-metrics must be created
 ## Ref: https://kubernetes.io/docs/concepts/policy/pod-security-policy/
@@ -105,7 +193,7 @@ podSecurityPolicy:
     ##
     # seccomp.security.alpha.kubernetes.io/allowedProfileNames: '*'
     # seccomp.security.alpha.kubernetes.io/defaultProfileName: 'docker/default'
-  # apparmor.security.beta.kubernetes.io/defaultProfileName: 'runtime/default'
+    # apparmor.security.beta.kubernetes.io/defaultProfileName: 'runtime/default'
 
   additionalVolumes: []
 
@@ -132,6 +220,13 @@ affinity: {}
 ## Ref: https://kubernetes.io/docs/concepts/configuration/taint-and-toleration/
 tolerations: []
 
+## Topology spread constraints for pod assignment
+## Ref: https://kubernetes.io/docs/concepts/workloads/pods/pod-topology-spread-constraints/
+topologySpreadConstraints: []
+
+# Annotations to be added to the deployment/statefulset
+annotations: {}
+
 # Annotations to be added to the pod
 podAnnotations: {}
 
@@ -158,7 +253,7 @@ metricDenylist: []
 # A single '*' can be provided per resource instead to allow any labels, but that has
 # severe performance implications (Example: '=pods=[*]').
 metricLabelsAllowlist: []
-# - namespaces=[k8s-label-1,k8s-label-n]
+  # - namespaces=[k8s-label-1,k8s-label-n]
 
 # Comma-separated list of Kubernetes annotations keys that will be used in the resource'
 # labels metric. By default the metric contains only name and namespace labels.
@@ -167,7 +262,7 @@ metricLabelsAllowlist: []
 # A single '*' can be provided per resource instead to allow any annotations, but that has
 # severe performance implications (Example: '=pods=[*]').
 metricAnnotationsAllowList: []
-# - pods=[k8s-annotation-1,k8s-annotation-n]
+  # - pods=[k8s-annotation-1,k8s-annotation-n]
 
 # Available collectors for kube-state-metrics.
 # By default, all available resources are enabled, comment out to disable.
@@ -181,6 +276,7 @@ collectors:
   - horizontalpodautoscalers
   - ingresses
   - jobs
+  - leases
   - limitranges
   - mutatingwebhookconfigurations
   - namespaces
@@ -207,9 +303,17 @@ kubeconfig:
   # base64 encoded kube-config file
   secret:
 
-# Comma-separated list of namespaces to be enabled for collecting resources. By default all namespaces are collected.
+# Enable only the release namespace for collecting resources. By default all namespaces are collected.
+# If releaseNamespace and namespaces are both set a merged list will be collected.
+releaseNamespace: false
+
+# Comma-separated list(string) or yaml list of namespaces to be enabled for collecting resources. By default all namespaces are collected.
 namespaces: ""
 
+# Comma-separated list of namespaces not to be enabled. If namespaces and namespaces-denylist are both set,
+# only namespaces that are excluded in namespaces-denylist will be used.
+namespacesDenylist: ""
+
 ## Override the deployment namespace
 ##
 namespaceOverride: ""
@@ -224,7 +328,7 @@ resources: {}
   #  memory: 64Mi
   # requests:
   #  cpu: 10m
-#  memory: 32Mi
+  #  memory: 32Mi
 
 ## Provide a k8s version to define apiGroups for podSecurityPolicy Cluster Role.
 ## For example: kubeTargetVersionOverride: 1.14.9
@@ -233,7 +337,42 @@ kubeTargetVersionOverride: ""
 
 # Enable self metrics configuration for service and Service Monitor
 # Default values for telemetry configuration can be overridden
+# If you set telemetryNodePort, you must also set service.type to NodePort
 selfMonitor:
   enabled: false
   # telemetryHost: 0.0.0.0
   # telemetryPort: 8081
+  # telemetryNodePort: 0
+
+# Enable vertical pod autoscaler support for kube-state-metrics
+verticalPodAutoscaler:
+  enabled: false
+  # List of resources that the vertical pod autoscaler can control. Defaults to cpu and memory
+  controlledResources: []
+
+  # Define the max allowed resources for the pod
+  maxAllowed: {}
+  # cpu: 200m
+  # memory: 100Mi
+  # Define the min allowed resources for the pod
+  minAllowed: {}
+  # cpu: 200m
+  # memory: 100Mi
+
+  # updatePolicy:
+    # Specifies whether recommended updates are applied when a Pod is started and whether recommended updates
+    # are applied during the life of a Pod. Possible values are "Off", "Initial", "Recreate", and "Auto".
+    # updateMode: Auto
+
+# volumeMounts are used to add custom volume mounts to deployment.
+# See example below
+volumeMounts: []
+#  - mountPath: /etc/config
+#    name: config-volume
+
+# volumes are used to add custom volumes to deployment
+# See example below
+volumes: []
+#  - configMap:
+#      name: cm-for-volume
+#    name: config-volume
diff --git a/deploy/charts/admin-stack/charts/prometheus/charts/node-exporter/.helmignore b/deploy/charts/admin-stack/charts/prometheus/charts/node-exporter/.helmignore
index aaa0d115..f0c13194 100644
--- a/deploy/charts/admin-stack/charts/prometheus/charts/node-exporter/.helmignore
+++ b/deploy/charts/admin-stack/charts/prometheus/charts/node-exporter/.helmignore
@@ -16,8 +16,6 @@
 *.tmp
 *~
 # Various IDEs
-.vscode
 .project
 .idea/
 *.tmproj
-OWNERS
\ No newline at end of file
diff --git a/deploy/charts/admin-stack/charts/prometheus/charts/node-exporter/templates/_charts.tpl b/deploy/charts/admin-stack/charts/prometheus/charts/node-exporter/templates/_charts.tpl
index da3968a4..f5e2603e 100644
--- a/deploy/charts/admin-stack/charts/prometheus/charts/node-exporter/templates/_charts.tpl
+++ b/deploy/charts/admin-stack/charts/prometheus/charts/node-exporter/templates/_charts.tpl
@@ -25,14 +25,10 @@ If release name contains chart name it will be used as a full name.
 {{- end }}
 
 {{/*
-Allow the release namespace to be overridden for multi-namespace deployments in combined charts
+Create chart name and version as used by the chart label.
 */}}
-{{- define "prometheus-node-exporter.namespace" -}}
-{{- if .Values.namespaceOverride }}
-{{- .Values.namespaceOverride }}
-{{- else }}
-{{- .Release.Namespace }}
-{{- end }}
+{{- define "prometheus-node-exporter.chart" -}}
+{{- printf "%s-%s" .Chart.Name .Chart.Version | replace "+" "_" | trunc 63 | trimSuffix "-" }}
 {{- end }}
 
 {{/*
@@ -56,16 +52,13 @@ release: {{ .Release.Name }}
 {{- end }}
 
 {{/*
-Create chart name and version as used by the chart label.
+Selector labels
 */}}
-{{- define "prometheus-node-exporter.chart" -}}
-{{- printf "%s-%s" .Chart.Name .Chart.Version | replace "+" "_" | trunc 63 | trimSuffix "-" }}
+{{- define "prometheus-node-exporter.selectorLabels" -}}
+app.kubernetes.io/name: {{ include "prometheus-node-exporter.name" . }}
+app.kubernetes.io/instance: {{ .Release.Name }}
 {{- end }}
 
-{{- define "prometheus.nodeExporter.matchLabels" -}}
-component: {{ .Values.nodeExporter.name | quote }}
-{{ include "prometheus.common.matchLabels" . }}
-{{- end -}}
 
 {{/*
 Create the name of the service account to use
@@ -82,19 +75,22 @@ Create the name of the service account to use
 The image to use
 */}}
 {{- define "prometheus-node-exporter.image" -}}
-{{- if .Values.nodeExporter.image.sha }}
-{{- printf "%s:%s@%s" .Values.nodeExporter.image.repository (default (printf "v%s" .Chart.AppVersion) .Values.nodeExporter.image.tag) .Values.nodeExporter.image.sha }}
+{{- if .Values.image.sha }}
+{{- printf "%s:%s@%s" .Values.image.repository (default (printf "v%s" .Chart.AppVersion) .Values.image.tag) .Values.image.sha }}
 {{- else }}
-{{- printf "%s:%s" .Values.nodeExporter.image.repository (default (printf "v%s" .Chart.AppVersion) .Values.nodeExporter.image.tag) }}
+{{- printf "%s:%s" .Values.image.repository (default (printf "v%s" .Chart.AppVersion) .Values.image.tag) }}
 {{- end }}
 {{- end }}
 
 {{/*
-Selector labels
+Allow the release namespace to be overridden for multi-namespace deployments in combined charts
 */}}
-{{- define "prometheus-node-exporter.selectorLabels" -}}
-app.kubernetes.io/name: {{ include "prometheus-node-exporter.name" . }}
-app.kubernetes.io/instance: {{ .Release.Name }}
+{{- define "prometheus-node-exporter.namespace" -}}
+{{- if .Values.namespaceOverride }}
+{{- .Values.namespaceOverride }}
+{{- else }}
+{{- .Release.Namespace }}
+{{- end }}
 {{- end }}
 
 {{/*
@@ -110,4 +106,23 @@ Create the namespace name of the service monitor
 {{- .Release.Namespace }}
 {{- end }}
 {{- end }}
-{{- end }}
\ No newline at end of file
+{{- end }}
+
+{{/* Sets default scrape limits for servicemonitor */}}
+{{- define "servicemonitor.scrapeLimits" -}}
+{{- with .sampleLimit }}
+sampleLimit: {{ . }}
+{{- end }}
+{{- with .targetLimit }}
+targetLimit: {{ . }}
+{{- end }}
+{{- with .labelLimit }}
+labelLimit: {{ . }}
+{{- end }}
+{{- with .labelNameLengthLimit }}
+labelNameLengthLimit: {{ . }}
+{{- end }}
+{{- with .labelValueLengthLimit }}
+labelValueLengthLimit: {{ . }}
+{{- end }}
+{{- end }}
diff --git a/deploy/charts/admin-stack/charts/prometheus/charts/node-exporter/templates/daemonset.yaml b/deploy/charts/admin-stack/charts/prometheus/charts/node-exporter/templates/daemonset.yaml
index 7f1bdd0b..615a6f2b 100644
--- a/deploy/charts/admin-stack/charts/prometheus/charts/node-exporter/templates/daemonset.yaml
+++ b/deploy/charts/admin-stack/charts/prometheus/charts/node-exporter/templates/daemonset.yaml
@@ -57,7 +57,7 @@ spec:
       containers:
         - name: node-exporter
           image: {{ include "prometheus-node-exporter.image" . }}
-          imagePullPolicy: {{ .Values.nodeExporter.image.pullPolicy }}
+          imagePullPolicy: {{ .Values.image.pullPolicy }}
           args:
             - --path.procfs=/host/proc
             - --path.sysfs=/host/sys
diff --git a/deploy/charts/admin-stack/charts/prometheus/charts/node-exporter/templates/psp.yaml b/deploy/charts/admin-stack/charts/prometheus/charts/node-exporter/templates/psp.yaml
index 62310805..eba1a266 100644
--- a/deploy/charts/admin-stack/charts/prometheus/charts/node-exporter/templates/psp.yaml
+++ b/deploy/charts/admin-stack/charts/prometheus/charts/node-exporter/templates/psp.yaml
@@ -1,3 +1,4 @@
+{{- if and .Values.rbac.create .Values.rbac.pspEnabled (.Capabilities.APIVersions.Has "policy/v1beta1/PodSecurityPolicy") }}
 # Licensed to the Apache Software Foundation (ASF) under one or more
 # contributor license agreements.  See the NOTICE file distributed with
 # this work for additional information regarding copyright ownership.
@@ -13,7 +14,6 @@
 # See the License for the specific language governing permissions and
 # limitations under the License.
 
-{{- if and .Values.rbac.create .Values.rbac.pspEnabled (.Capabilities.APIVersions.Has "policy/v1beta1/PodSecurityPolicy") }}
 apiVersion: policy/v1beta1
 kind: PodSecurityPolicy
 metadata:
diff --git a/deploy/charts/admin-stack/charts/prometheus/charts/node-exporter/templates/serviceaccount.yaml b/deploy/charts/admin-stack/charts/prometheus/charts/node-exporter/templates/serviceaccount.yaml
index 01b4bdb3..e1ecf05a 100644
--- a/deploy/charts/admin-stack/charts/prometheus/charts/node-exporter/templates/serviceaccount.yaml
+++ b/deploy/charts/admin-stack/charts/prometheus/charts/node-exporter/templates/serviceaccount.yaml
@@ -1,3 +1,4 @@
+{{- if and .Values.rbac.create .Values.serviceAccount.create -}}
 # Licensed to the Apache Software Foundation (ASF) under one or more
 # contributor license agreements.  See the NOTICE file distributed with
 # this work for additional information regarding copyright ownership.
@@ -13,7 +14,6 @@
 # See the License for the specific language governing permissions and
 # limitations under the License.
 
-{{- if and .Values.rbac.create .Values.serviceAccount.create -}}
 apiVersion: v1
 kind: ServiceAccount
 metadata:
@@ -25,7 +25,7 @@ metadata:
   annotations:
     {{- toYaml . | nindent 4 }}
   {{- end }}
-{{- with .Values.imagePullSecrets }}
+{{- with .Values.serviceAccount.imagePullSecrets }}
 imagePullSecrets:
   {{- toYaml . | nindent 2 }}
 {{- end }}
diff --git a/deploy/charts/admin-stack/charts/prometheus/charts/node-exporter/values.yaml b/deploy/charts/admin-stack/charts/prometheus/charts/node-exporter/values.yaml
index 07168b6d..d26571c3 100644
--- a/deploy/charts/admin-stack/charts/prometheus/charts/node-exporter/values.yaml
+++ b/deploy/charts/admin-stack/charts/prometheus/charts/node-exporter/values.yaml
@@ -13,13 +13,20 @@
 # See the License for the specific language governing permissions and
 # limitations under the License.
 
-rbac:
-  create: true
-
-podSecurityPolicy:
-  enabled: false
-
-imagePullSecrets:
+# Default values for prometheus-node-exporter.
+# This is a YAML-formatted file.
+# Declare variables to be passed into your templates.
+name: nodeExporter
+nameOverride: ""
+fullnameOverride: ""
+image:
+  repository: quay.io/prometheus/node-exporter
+  # Overrides the image tag whose default is {{ printf "v%s" .Chart.AppVersion }}
+  tag: ""
+  pullPolicy: IfNotPresent
+  sha: ""
+
+imagePullSecrets: []
 # - name: "image-pull-secret"
 
 service:
@@ -32,6 +39,107 @@ service:
   annotations:
     prometheus.io/scrape: "true"
 
+# Additional environment variables that will be passed to the daemonset
+env: {}
+##  env:
+##    VARIABLE: value
+
+prometheus:
+  monitor:
+    enabled: false
+    additionalLabels: {}
+    namespace: ""
+
+    jobLabel: ""
+
+    scheme: http
+    basicAuth: {}
+    bearerTokenFile:
+    tlsConfig: {}
+
+    ## proxyUrl: URL of a proxy that should be used for scraping.
+    ##
+    proxyUrl: ""
+
+    ## Override serviceMonitor selector
+    ##
+    selectorOverride: {}
+
+    relabelings: []
+    metricRelabelings: []
+    interval: ""
+    scrapeTimeout: 10s
+    ## prometheus.monitor.apiVersion ApiVersion for the serviceMonitor Resource(defaults to "monitoring.coreos.com/v1")
+    apiVersion: ""
+
+    ## SampleLimit defines per-scrape limit on number of scraped samples that will be accepted.
+    ##
+    sampleLimit: 0
+
+    ## TargetLimit defines a limit on the number of scraped targets that will be accepted.
+    ##
+    targetLimit: 0
+
+    ## Per-scrape limit on number of labels that will be accepted for a sample. Only valid in Prometheus versions 2.27.0 and newer.
+    ##
+    labelLimit: 0
+
+    ## Per-scrape limit on length of labels name that will be accepted for a sample. Only valid in Prometheus versions 2.27.0 and newer.
+    ##
+    labelNameLengthLimit: 0
+
+    ## Per-scrape limit on length of labels value that will be accepted for a sample. Only valid in Prometheus versions 2.27.0 and newer.
+    ##
+    labelValueLengthLimit: 0
+
+## Customize the updateStrategy if set
+updateStrategy:
+  type: RollingUpdate
+  rollingUpdate:
+    maxUnavailable: 1
+
+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:'.
+  # limits:
+  #   cpu: 200m
+  #   memory: 50Mi
+  # requests:
+  #   cpu: 100m
+  #   memory: 30Mi
+
+serviceAccount:
+  # Specifies whether a ServiceAccount should be created
+  create: true
+  # The name of the ServiceAccount to use.
+  # If not set and create is true, a name is generated using the fullname template
+  name:
+  annotations: {}
+  imagePullSecrets: []
+  automountServiceAccountToken: false
+
+securityContext:
+  fsGroup: 65534
+  runAsGroup: 65534
+  runAsNonRoot: true
+  runAsUser: 65534
+
+containerSecurityContext: {}
+  # capabilities:
+  #   add:
+  #   - SYS_TIME
+
+rbac:
+  ## If true, create & use RBAC resources
+  ##
+  create: true
+  ## If true, create & use Pod Security Policy resources
+  ## https://kubernetes.io/docs/concepts/policy/pod-security-policy/
+  pspEnabled: true
+  pspAnnotations: {}
+
 # for deployments that have node_exporter deployed outside of the cluster, list
 # their addresses here
 endpoints: []
@@ -192,219 +300,10 @@ verticalPodAutoscaler:
   # memory: 100Mi
   # Define the min allowed resources for the pod
   minAllowed: {}
-    # cpu: 200m
-    # memory: 100Mi
+  # cpu: 200m
+  # memory: 100Mi
 
-    # updatePolicy:
+  # updatePolicy:
     # Specifies whether recommended updates are applied when a Pod is started and whether recommended updates
     # are applied during the life of a Pod. Possible values are "Off", "Initial", "Recreate", and "Auto".
-  # updateMode: Auto
-
-## Define serviceAccount names for components. Defaults to component's fully qualified name.
-##
-serviceAccount:
-  create: true
-  name:
-  annotations: {}
-prometheus:
-  monitor:
-    enabled: false
-    additionalLabels: {}
-    namespace: ""
-
-    jobLabel: ""
-
-    scheme: http
-    basicAuth: {}
-    bearerTokenFile:
-    tlsConfig: {}
-
-    ## proxyUrl: URL of a proxy that should be used for scraping.
-    ##
-    proxyUrl: ""
-
-    ## Override serviceMonitor selector
-    ##
-    selectorOverride: {}
-
-    relabelings: []
-    metricRelabelings: []
-    interval: ""
-    scrapeTimeout: 10s
-    ## prometheus.monitor.apiVersion ApiVersion for the serviceMonitor Resource(defaults to "monitoring.coreos.com/v1")
-    apiVersion: ""
-
-    ## SampleLimit defines per-scrape limit on number of scraped samples that will be accepted.
-    ##
-    sampleLimit: 0
-
-    ## TargetLimit defines a limit on the number of scraped targets that will be accepted.
-    ##
-    targetLimit: 0
-
-    ## Per-scrape limit on number of labels that will be accepted for a sample. Only valid in Prometheus versions 2.27.0 and newer.
-    ##
-    labelLimit: 0
-
-    ## Per-scrape limit on length of labels name that will be accepted for a sample. Only valid in Prometheus versions 2.27.0 and newer.
-    ##
-    labelNameLengthLimit: 0
-
-    ## Per-scrape limit on length of labels value that will be accepted for a sample. Only valid in Prometheus versions 2.27.0 and newer.
-    ##
-    labelValueLengthLimit: 0
-## applications
-nodeExporter:
-  ## If false, node-exporter will not be installed
-  ##
-  enabled: true
-
-  ## If true, node-exporter pods share the host network namespace
-  ##
-  hostNetwork: true
-
-  ## If true, node-exporter pods share the host PID namespace
-  ##
-  hostPID: true
-
-  ## If true, node-exporter pods mounts host / at /host/root
-  ##
-  hostRootfs: true
-
-  ## node-exporter container name
-  ##
-  name: node-exporter
-
-  ## node-exporter container image
-  ##
-  image:
-    repository: quay.io/prometheus/node-exporter
-    tag: v1.3.0
-    pullPolicy: IfNotPresent
-
-  ## Specify if a Pod Security Policy for node-exporter must be created
-  ## Ref: https://kubernetes.io/docs/concepts/policy/pod-security-policy/
-  ##
-  podSecurityPolicy:
-    annotations: {}
-      ## Specify pod annotations
-      ## Ref: https://kubernetes.io/docs/concepts/policy/pod-security-policy/#apparmor
-      ## Ref: https://kubernetes.io/docs/concepts/policy/pod-security-policy/#seccomp
-      ## Ref: https://kubernetes.io/docs/concepts/policy/pod-security-policy/#sysctl
-      ##
-      # seccomp.security.alpha.kubernetes.io/allowedProfileNames: '*'
-      # seccomp.security.alpha.kubernetes.io/defaultProfileName: 'docker/default'
-    # apparmor.security.beta.kubernetes.io/defaultProfileName: 'runtime/default'
-
-  ## node-exporter priorityClassName
-  ##
-  priorityClassName: ""
-
-  ## Custom Update Strategy
-  ##
-  updateStrategy:
-    type: RollingUpdate
-
-  ## Additional node-exporter container arguments
-  ##
-  extraArgs: {}
-
-  ## Additional InitContainers to initialize the pod
-  ##
-  extraInitContainers: []
-
-  ## Additional node-exporter hostPath mounts
-  ##
-  extraHostPathMounts: []
-    # - name: textfile-dir
-    #   mountPath: /srv/txt_collector
-    #   hostPath: /var/lib/node-exporter
-    #   readOnly: true
-  #   mountPropagation: HostToContainer
-
-  extraConfigmapMounts: []
-    # - name: certs-configmap
-    #   mountPath: /prometheus
-    #   configMap: certs-configmap
-  #   readOnly: true
-
-  ## Node tolerations for node-exporter scheduling to nodes with taints
-  ## Ref: https://kubernetes.io/docs/concepts/configuration/assign-pod-node/
-  ##
-  tolerations: []
-    # - key: "key"
-    #   operator: "Equal|Exists"
-    #   value: "value"
-  #   effect: "NoSchedule|PreferNoSchedule|NoExecute(1.6 only)"
-
-  ## Node labels for node-exporter pod assignment
-  ## Ref: https://kubernetes.io/docs/user-guide/node-selection/
-  ##
-  nodeSelector: {}
-
-  ## Annotations to be added to node-exporter pods
-  ##
-  podAnnotations: {}
-
-  ## Labels to be added to node-exporter pods
-  ##
-  pod:
-    labels: {}
-
-  ## PodDisruptionBudget settings
-  ## ref: https://kubernetes.io/docs/concepts/workloads/pods/disruptions/
-  ##
-  podDisruptionBudget:
-    enabled: false
-    maxUnavailable: 1
-
-  ## node-exporter resource limits & requests
-  ## Ref: https://kubernetes.io/docs/user-guide/compute-resources/
-  ##
-  resources: {}
-    # limits:
-    #   cpu: 200m
-    #   memory: 50Mi
-    # requests:
-    #   cpu: 100m
-  #   memory: 30Mi
-
-  # Custom DNS configuration to be added to node-exporter pods
-  dnsConfig: {}
-    # nameservers:
-    #   - 1.2.3.4
-    # searches:
-    #   - ns1.svc.cluster-domain.example
-    #   - my.dns.search.suffix
-    # options:
-    #   - name: ndots
-  #     value: "2"
-  #   - name: edns0
-
-  ## Security context to be added to node-exporter pods
-  ##
-  securityContext:
-    fsGroup: 65534
-    runAsGroup: 65534
-    runAsNonRoot: true
-    runAsUser: 65534
-
-  service:
-    annotations:
-      prometheus.io/scrape: "true"
-    labels: {}
-
-    # Exposed as a headless service:
-    # https://kubernetes.io/docs/concepts/services-networking/service/#headless-services
-    clusterIP: None
-
-    ## List of IP addresses at which the node-exporter service is available
-    ## Ref: https://kubernetes.io/docs/user-guide/services/#external-ips
-    ##
-    externalIPs: []
-
-    hostPort: 9100
-    loadBalancerIP: ""
-    loadBalancerSourceRanges: []
-    servicePort: 9100
-    type: ClusterIP
\ No newline at end of file
+    # updateMode: Auto
diff --git a/deploy/charts/admin-stack/charts/prometheus/charts/pushgateway/.helmignore b/deploy/charts/admin-stack/charts/prometheus/charts/pushgateway/.helmignore
index aaa0d115..e90c9f6d 100644
--- a/deploy/charts/admin-stack/charts/prometheus/charts/pushgateway/.helmignore
+++ b/deploy/charts/admin-stack/charts/prometheus/charts/pushgateway/.helmignore
@@ -16,8 +16,9 @@
 *.tmp
 *~
 # Various IDEs
-.vscode
 .project
 .idea/
 *.tmproj
+
+# OWNERS file for Kubernetes
 OWNERS
\ No newline at end of file
diff --git a/deploy/charts/admin-stack/charts/prometheus/charts/pushgateway/templates/_charts.tpl b/deploy/charts/admin-stack/charts/prometheus/charts/pushgateway/templates/_charts.tpl
index 33999df2..6f5023e6 100644
--- a/deploy/charts/admin-stack/charts/prometheus/charts/pushgateway/templates/_charts.tpl
+++ b/deploy/charts/admin-stack/charts/prometheus/charts/pushgateway/templates/_charts.tpl
@@ -1,3 +1,11 @@
+{{/* vim: set filetype=mustache: */}}
+{{/*
+Expand the name of the chart.
+*/}}
+{{- define "prometheus-pushgateway.name" -}}
+{{- default .Chart.Name .Values.nameOverride | trunc 63 | trimSuffix "-" }}
+{{- end }}
+
 {{/*
 Create a default fully qualified app name.
 We truncate at 63 chars because some Kubernetes name fields are limited to this (by the DNS naming spec).
@@ -16,19 +24,22 @@ If release name contains chart name it will be used as a full name.
 {{- end }}
 {{- end }}
 
-{{/* vim: set filetype=mustache: */}}
 {{/*
-Expand the name of the chart.
+Create chart name and version as used by the chart label.
 */}}
-{{- define "prometheus-pushgateway.name" -}}
-{{- default .Chart.Name .Values.nameOverride | trunc 63 | trimSuffix "-" }}
+{{- define "prometheus-pushgateway.chart" -}}
+{{ printf "%s-%s" .Chart.Name .Chart.Version | replace "+" "_" | trunc 63 | trimSuffix "-" }}
 {{- end }}
 
 {{/*
-Create chart name and version as used by the chart label.
+Create the name of the service account to use
 */}}
-{{- define "prometheus-pushgateway.chart" -}}
-{{ printf "%s-%s" .Chart.Name .Chart.Version | replace "+" "_" | trunc 63 | trimSuffix "-" }}
+{{- define "prometheus-pushgateway.serviceAccountName" -}}
+{{- if .Values.serviceAccount.create }}
+{{- default (include "prometheus-pushgateway.fullname" .) .Values.serviceAccount.name }}
+{{- else }}
+{{- default "default" .Values.serviceAccount.name }}
+{{- end }}
 {{- end }}
 
 {{/*
@@ -46,11 +57,6 @@ app.kubernetes.io/managed-by: {{ .Release.Service }}
 {{- end }}
 {{- end }}
 
-{{- define "prometheus.pushgateway.matchLabels" -}}
-component: {{ .Values.pushgateway.name | quote }}
-{{ include "prometheus.common.matchLabels" . }}
-{{- end -}}
-
 {{/*
 Selector labels
 */}}
@@ -60,13 +66,37 @@ app.kubernetes.io/instance: {{ .Release.Name }}
 {{- end }}
 
 {{/*
-Create the name of the service account to use
+Return the appropriate apiVersion for networkpolicy.
 */}}
-{{- define "prometheus-pushgateway.serviceAccountName" -}}
-{{- if .Values.serviceAccount.create }}
-{{- default (include "prometheus-pushgateway.fullname" .) .Values.serviceAccount.name }}
+{{- define "prometheus-pushgateway.networkPolicy.apiVersion" -}}
+{{- if semverCompare ">=1.4-0, <1.7-0" .Capabilities.KubeVersion.GitVersion }}
+{{- print "extensions/v1beta1" }}
+{{- else if semverCompare "^1.7-0" .Capabilities.KubeVersion.GitVersion }}
+{{- print "networking.k8s.io/v1" }}
+{{- end }}
+{{- end }}
+
+{{/*
+Define PDB apiVersion
+*/}}
+{{- define "prometheus-pushgateway.pdb.apiVersion" -}}
+{{- if $.Capabilities.APIVersions.Has "policy/v1/PodDisruptionBudget" }}
+{{- print "policy/v1" }}
 {{- else }}
-{{- default "default" .Values.serviceAccount.name }}
+{{- print "policy/v1beta" }}
+{{- end }}
+{{- end }}
+
+{{/*
+Define Ingress apiVersion
+*/}}
+{{- define "prometheus-pushgateway.ingress.apiVersion" -}}
+{{- if semverCompare ">=1.19-0" .Capabilities.KubeVersion.GitVersion }}
+{{- print "networking.k8s.io/v1" }}
+{{- else if semverCompare ">=1.14-0" .Capabilities.KubeVersion.GitVersion }}
+{{- print "networking.k8s.io/v1beta1" }}
+{{- else }}
+{{- print "extensions/v1beta1" }}
 {{- end }}
 {{- end }}
 
@@ -91,8 +121,8 @@ containers:
   {{- toYaml . | nindent 2 }}
   {{- end }}
   - name: pushgateway
-    image: "{{ .Values.pushgateway.image.repository }}:{{ .Values.pushgateway.image.tag | default .Chart.AppVersion }}"
-    imagePullPolicy: {{ .Values.pushgateway.image.pullPolicy }}
+    image: "{{ .Values.image.repository }}:{{ .Values.image.tag | default .Chart.AppVersion }}"
+    imagePullPolicy: {{ .Values.image.pullPolicy }}
     {{- with .Values.extraVars }}
     env:
       {{- toYaml . | nindent 6 }}
@@ -123,9 +153,9 @@ containers:
     {{- end }}
     volumeMounts:
       - name: storage-volume
-        mountPath: "{{ .Values.pushgateway.persistentVolume.mountPath }}"
-        subPath: "{{ .Values.pushgateway.persistentVolume.subPath }}"
-      {{- with .Values.pushgateway.extraVolumeMounts }}
+        mountPath: "{{ .Values.persistentVolume.mountPath }}"
+        subPath: "{{ .Values.persistentVolume.subPath }}"
+      {{- with .Values.extraVolumeMounts }}
       {{- toYaml . | nindent 6 }}
       {{- end }}
 {{- with .Values.nodeSelector }}
@@ -149,18 +179,18 @@ securityContext:
   {{- toYaml . | nindent 2 }}
 {{- end }}
 volumes:
-  {{- $storageVolumeAsPVCTemplate := and .Values.runAsStatefulSet .Values.pushgateway.persistentVolume.enabled -}}
+  {{- $storageVolumeAsPVCTemplate := and .Values.runAsStatefulSet .Values.persistentVolume.enabled -}}
   {{- if not $storageVolumeAsPVCTemplate }}
   - name: storage-volume
-  {{- if .Values.pushgateway.persistentVolume.enabled }}
+  {{- if .Values.persistentVolume.enabled }}
     persistentVolumeClaim:
-      claimName: {{ if .Values.pushgateway.persistentVolume.existingClaim }}{{ .Values.pushgateway.persistentVolume.existingClaim }}{{- else }}{{ include "prometheus-pushgateway.fullname" . }}{{- end }}
+      claimName: {{ if .Values.persistentVolume.existingClaim }}{{ .Values.persistentVolume.existingClaim }}{{- else }}{{ include "prometheus-pushgateway.fullname" . }}{{- end }}
   {{- else }}
     emptyDir: {}
   {{- end }}
   {{- end }}
-  {{- if .Values.pushgateway.extraVolumes }}
-  {{- toYaml .Values.pushgateway.extraVolumes  | nindent 2 }}
+  {{- if .Values.extraVolumes }}
+  {{- toYaml .Values.extraVolumes  | nindent 2 }}
   {{- else if $storageVolumeAsPVCTemplate }}
   []
   {{- end }}
diff --git a/deploy/charts/admin-stack/charts/prometheus/charts/pushgateway/templates/deployment.yaml b/deploy/charts/admin-stack/charts/prometheus/charts/pushgateway/templates/deployment.yaml
index cbd0a7ad..45c472a6 100644
--- a/deploy/charts/admin-stack/charts/prometheus/charts/pushgateway/templates/deployment.yaml
+++ b/deploy/charts/admin-stack/charts/prometheus/charts/pushgateway/templates/deployment.yaml
@@ -13,7 +13,7 @@
 # See the License for the specific language governing permissions and
 # limitations under the License.
 
-{{- if not .Values.pushgateway.runAsStatefulSet }}
+{{- if not .Values.runAsStatefulSet }}
 apiVersion: apps/v1
 kind: Deployment
 metadata:
@@ -21,8 +21,8 @@ metadata:
     {{- include "prometheus-pushgateway.defaultLabels" . | nindent 4 }}
   name: {{ include "prometheus-pushgateway.fullname" . }}
 spec:
-  replicas: {{ .Values.pushgateway.replicaCount }}
-  {{- with .Values.pushgateway.strategy }}
+  replicas: {{ .Values.replicaCount }}
+  {{- with .Values.strategy }}
   strategy:
     {{- toYaml . | nindent 4 }}
   {{- end }}
@@ -31,13 +31,13 @@ spec:
       {{- include "prometheus-pushgateway.selectorLabels" . | nindent 6 }}
   template:
     metadata:
-      {{- with .Values.pushgateway.podAnnotations }}
+      {{- with .Values.podAnnotations }}
       annotations:
         {{- toYaml . | nindent 8 }}
       {{- end }}
       labels:
         {{- include "prometheus-pushgateway.defaultLabels" . | nindent 8 }}
-        {{- with .Values.pushgateway.podLabels }}
+        {{- with .Values.podLabels }}
         {{- toYaml . | nindent 8 }}
         {{- end }}
     spec:
diff --git a/deploy/charts/admin-stack/charts/prometheus/charts/pushgateway/templates/ingress.yaml b/deploy/charts/admin-stack/charts/prometheus/charts/pushgateway/templates/ingress.yaml
index bacb57dc..a64637b1 100644
--- a/deploy/charts/admin-stack/charts/prometheus/charts/pushgateway/templates/ingress.yaml
+++ b/deploy/charts/admin-stack/charts/prometheus/charts/pushgateway/templates/ingress.yaml
@@ -13,17 +13,17 @@
 # See the License for the specific language governing permissions and
 # limitations under the License.
 
-{{- if .Values.pushgateway.ingress.enabled }}
+{{- if .Values.ingress.enabled }}
 {{- $serviceName := include "prometheus-pushgateway.fullname" . }}
-{{- $servicePort := .Values.pushgateway.service.port }}
-{{- $ingressPath := .Values.pushgateway.ingress.path }}
-{{- $ingressClassName := .Values.pushgateway.ingress.className }}
-{{- $ingressPathType := .Values.pushgateway.ingress.pathType }}
-{{- $extraPaths := .Values.pushgateway.ingress.extraPaths }}
+{{- $servicePort := .Values.service.port }}
+{{- $ingressPath := .Values.ingress.path }}
+{{- $ingressClassName := .Values.ingress.className }}
+{{- $ingressPathType := .Values.ingress.pathType }}
+{{- $extraPaths := .Values.ingress.extraPaths }}
 apiVersion: {{ include "prometheus-pushgateway.ingress.apiVersion" . }}
 kind: Ingress
 metadata:
-  {{- with .Values.pushgateway.ingress.annotations }}
+  {{- with .Values.ingress.annotations }}
   annotations:
     {{- toYaml . | nindent 4 }}
   {{- end }}
@@ -35,7 +35,7 @@ spec:
   ingressClassName: {{ $ingressClassName }}
   {{- end }}
   rules:
-    {{- range $host := .Values.pushgateway.ingress.hosts }}
+    {{- range $host := .Values.ingress.hosts }}
     - host: {{ $host }}
       http:
         paths:
@@ -57,7 +57,7 @@ spec:
               servicePort: {{ $servicePort }}
               {{- end }}
     {{- end -}}
-  {{- with .Values.pushgateway.ingress.tls }}
+  {{- with .Values.ingress.tls }}
   tls:
     {{- toYaml . | nindent 4 }}
   {{- end }}
diff --git a/deploy/charts/admin-stack/charts/prometheus/charts/pushgateway/templates/networkpolicy.yaml b/deploy/charts/admin-stack/charts/prometheus/charts/pushgateway/templates/networkpolicy.yaml
index 557ea658..308e11b0 100644
--- a/deploy/charts/admin-stack/charts/prometheus/charts/pushgateway/templates/networkpolicy.yaml
+++ b/deploy/charts/admin-stack/charts/prometheus/charts/pushgateway/templates/networkpolicy.yaml
@@ -1,3 +1,4 @@
+{{- if .Values.networkPolicy }}
 # Licensed to the Apache Software Foundation (ASF) under one or more
 # contributor license agreements.  See the NOTICE file distributed with
 # this work for additional information regarding copyright ownership.
@@ -13,15 +14,14 @@
 # See the License for the specific language governing permissions and
 # limitations under the License.
 
-{{- if .Values.pushgateway.networkPolicy }}
-apiVersion: networking.k8s.io/v1
+apiVersion: {{ include "prometheus-pushgateway.networkPolicy.apiVersion" . }}
 kind: NetworkPolicy
 metadata:
   labels:
     {{- include "prometheus-pushgateway.defaultLabels" . | nindent 4 }}
-  {{- if .Values.pushgateway.networkPolicy.customSelectors }}
+  {{- if .Values.networkPolicy.customSelectors }}
   name: ingress-allow-customselector-{{ template "prometheus-pushgateway.name" . }}
-  {{- else if .Values.pushgateway.networkPolicy.allowAll }}
+  {{- else if .Values.networkPolicy.allowAll }}
   name: ingress-allow-all-{{ template "prometheus-pushgateway.name" . }}
   {{- else -}}
   {{- fail "One of `allowAll` or `customSelectors` must be specified." }}
@@ -32,8 +32,8 @@ spec:
       {{- include "prometheus-pushgateway.selectorLabels" . | nindent 6 }}
   ingress:
     - ports:
-      - port: {{ .Values.pushgateway.service.targetPort }}
-      {{- with .Values.pushgateway.networkPolicy.customSelectors }}
+      - port: {{ .Values.service.targetPort }}
+      {{- with .Values.networkPolicy.customSelectors }}
       from:
         {{- toYaml . | nindent 8 }}
       {{- end }}
diff --git a/deploy/charts/admin-stack/charts/prometheus/charts/pushgateway/templates/pdb.yaml b/deploy/charts/admin-stack/charts/prometheus/charts/pushgateway/templates/pdb.yaml
index 00ed4cde..efb88d76 100644
--- a/deploy/charts/admin-stack/charts/prometheus/charts/pushgateway/templates/pdb.yaml
+++ b/deploy/charts/admin-stack/charts/prometheus/charts/pushgateway/templates/pdb.yaml
@@ -1,3 +1,4 @@
+{{- if .Values.podDisruptionBudget }}
 # Licensed to the Apache Software Foundation (ASF) under one or more
 # contributor license agreements.  See the NOTICE file distributed with
 # this work for additional information regarding copyright ownership.
@@ -13,7 +14,6 @@
 # See the License for the specific language governing permissions and
 # limitations under the License.
 
-{{- if .Values.podDisruptionBudget }}
 apiVersion: {{ include "prometheus-pushgateway.pdb.apiVersion" . }}
 kind: PodDisruptionBudget
 metadata:
diff --git a/deploy/charts/admin-stack/charts/prometheus/charts/pushgateway/templates/pushgateway-pvc.yaml b/deploy/charts/admin-stack/charts/prometheus/charts/pushgateway/templates/pvc.yaml
similarity index 66%
rename from deploy/charts/admin-stack/charts/prometheus/charts/pushgateway/templates/pushgateway-pvc.yaml
rename to deploy/charts/admin-stack/charts/prometheus/charts/pushgateway/templates/pvc.yaml
index 92f0e3e2..cd97aef7 100644
--- a/deploy/charts/admin-stack/charts/prometheus/charts/pushgateway/templates/pushgateway-pvc.yaml
+++ b/deploy/charts/admin-stack/charts/prometheus/charts/pushgateway/templates/pvc.yaml
@@ -1,3 +1,4 @@
+{{- if and (not .Values.runAsStatefulSet) .Values.persistentVolume.enabled (not .Values.persistentVolume.existingClaim) }}
 # Licensed to the Apache Software Foundation (ASF) under one or more
 # contributor license agreements.  See the NOTICE file distributed with
 # this work for additional information regarding copyright ownership.
@@ -13,31 +14,30 @@
 # See the License for the specific language governing permissions and
 # limitations under the License.
 
-{{- if and (not .Values.runAsStatefulSet) .Values.pushgateway.persistentVolume.enabled (not .Values.persistentVolume.existingClaim) }}
 apiVersion: v1
 kind: PersistentVolumeClaim
 metadata:
-  {{- with .Values.pushgateway.persistentVolume.annotations }}
+  {{- with .Values.persistentVolume.annotations }}
   annotations:
     {{- toYaml . | nindent 4 }}
   {{- end }}
   labels:
     {{- include "prometheus-pushgateway.defaultLabels" . | nindent 4 }}
-    {{- with .Values.pushgateway.persistentVolumeLabels }}
+    {{- with .Values.persistentVolumeLabels }}
     {{- toYaml . | nindent 4 }}
     {{- end }}
   name: {{ include "prometheus-pushgateway.fullname" . }}
 spec:
   accessModes:
-    {{- toYaml .Values.pushgateway.persistentVolume.accessModes | nindent 4 }}
-  {{- if .Values.pushgateway.persistentVolume.storageClass }}
-  {{- if (eq "-" .Values.pushgateway.persistentVolume.storageClass) }}
+    {{- toYaml .Values.persistentVolume.accessModes | nindent 4 }}
+  {{- if .Values.persistentVolume.storageClass }}
+  {{- if (eq "-" .Values.persistentVolume.storageClass) }}
   storageClassName: ""
   {{- else }}
-  storageClassName: "{{ .Values.pushgateway.persistentVolume.storageClass }}"
+  storageClassName: "{{ .Values.persistentVolume.storageClass }}"
   {{- end }}
   {{- end }}
   resources:
     requests:
-      storage: "{{ .Values.pushgateway.persistentVolume.size }}"
+      storage: "{{ .Values.persistentVolume.size }}"
 {{- end }}
diff --git a/deploy/charts/admin-stack/charts/prometheus/charts/pushgateway/templates/service.yaml b/deploy/charts/admin-stack/charts/prometheus/charts/pushgateway/templates/service.yaml
index a676c67a..a90d7340 100644
--- a/deploy/charts/admin-stack/charts/prometheus/charts/pushgateway/templates/service.yaml
+++ b/deploy/charts/admin-stack/charts/prometheus/charts/pushgateway/templates/service.yaml
@@ -1,3 +1,4 @@
+{{- $stsNoHeadlessSvcTypes := list "LoadBalancer" "NodePort" -}}
 # Licensed to the Apache Software Foundation (ASF) under one or more
 # contributor license agreements.  See the NOTICE file distributed with
 # this work for additional information regarding copyright ownership.
@@ -13,41 +14,40 @@
 # See the License for the specific language governing permissions and
 # limitations under the License.
 
-{{- $stsNoHeadlessSvcTypes := list "LoadBalancer" "NodePort" -}}
 apiVersion: v1
 kind: Service
 metadata:
-  {{- with .Values.pushgateway.serviceAnnotations }}
+  {{- with .Values.serviceAnnotations }}
   annotations:
     {{- toYaml . | nindent 4 }}
   {{- end }}
   labels:
     {{- include "prometheus-pushgateway.defaultLabels" . | nindent 4 }}
-    {{- with .Values.pushgateway.serviceLabels }}
+    {{- with .Values.serviceLables }}
     {{- toYaml . | nindent 4 }}
     {{- end }}
   name: {{ include "prometheus-pushgateway.fullname" . }}
 spec:
-  {{- if .Values.pushgateway.service.clusterIP }}
-  clusterIP: {{ .Values.pushgateway.service.clusterIP }}
-  {{ else if and .Values.pushgateway.runAsStatefulSet (not (has .Values.pushgateway.service.type $stsNoHeadlessSvcTypes)) }}
+  {{- if .Values.service.clusterIP }}
+  clusterIP: {{ .Values.service.clusterIP }}
+  {{ else if and .Values.runAsStatefulSet (not (has .Values.service.type $stsNoHeadlessSvcTypes)) }}
   clusterIP: None # Headless service
   {{- end }}
-  type: {{ .Values.pushgateway.service.type }}
-  {{- with .Values.pushgateway.service.loadBalancerIP }}
+  type: {{ .Values.service.type }}
+  {{- with .Values.service.loadBalancerIP }}
   loadBalancerIP: {{ . }}
   {{- end }}
-  {{- if .Values.pushgateway.service.loadBalancerSourceRanges }}
+  {{- if .Values.service.loadBalancerSourceRanges }}
   loadBalancerSourceRanges:
-  {{- range $cidr := .Values.pushgateway.service.loadBalancerSourceRanges }}
+  {{- range $cidr := .Values.service.loadBalancerSourceRanges }}
     - {{ $cidr }}
   {{- end }}
   {{- end }}
   ports:
-    - port: {{ .Values.pushgateway.service.port }}
-      targetPort: {{ .Values.pushgateway.service.targetPort }}
-      {{- if and (eq .Values.pushgateway.service.type "NodePort") .Values.pushgateway.service.nodePort }}
-      nodePort: {{ .Values.pushgateway.service.nodePort }}
+    - port: {{ .Values.service.port }}
+      targetPort: {{ .Values.service.targetPort }}
+      {{- if and (eq .Values.service.type "NodePort") .Values.service.nodePort }}
+      nodePort: {{ .Values.service.nodePort }}
       {{- end }}
       protocol: TCP
       name: http
diff --git a/deploy/charts/admin-stack/charts/prometheus/charts/pushgateway/templates/serviceaccount.yaml b/deploy/charts/admin-stack/charts/prometheus/charts/pushgateway/templates/serviceaccount.yaml
index 834a19dd..ac2f5979 100644
--- a/deploy/charts/admin-stack/charts/prometheus/charts/pushgateway/templates/serviceaccount.yaml
+++ b/deploy/charts/admin-stack/charts/prometheus/charts/pushgateway/templates/serviceaccount.yaml
@@ -1,3 +1,4 @@
+{{- if .Values.serviceAccount.create }}
 # Licensed to the Apache Software Foundation (ASF) under one or more
 # contributor license agreements.  See the NOTICE file distributed with
 # this work for additional information regarding copyright ownership.
@@ -13,7 +14,6 @@
 # See the License for the specific language governing permissions and
 # limitations under the License.
 
-{{- if .Values.serviceAccount.create }}
 apiVersion: v1
 kind: ServiceAccount
 metadata:
diff --git a/deploy/charts/admin-stack/charts/prometheus/charts/pushgateway/templates/statefulset.yaml b/deploy/charts/admin-stack/charts/prometheus/charts/pushgateway/templates/statefulset.yaml
index 42a9d689..0a20c751 100644
--- a/deploy/charts/admin-stack/charts/prometheus/charts/pushgateway/templates/statefulset.yaml
+++ b/deploy/charts/admin-stack/charts/prometheus/charts/pushgateway/templates/statefulset.yaml
@@ -13,7 +13,7 @@
 # See the License for the specific language governing permissions and
 # limitations under the License.
 
-{{- if .Values.pushgateway.runAsStatefulSet }}
+{{- if .Values.runAsStatefulSet }}
 apiVersion: apps/v1
 kind: StatefulSet
 metadata:
@@ -21,28 +21,28 @@ metadata:
     {{- include "prometheus-pushgateway.defaultLabels" . | nindent 4 }}
   name: {{ include "prometheus-pushgateway.fullname" . }}
 spec:
-  replicas: {{ .Values.pushgateway.replicaCount }}
+  replicas: {{ .Values.replicaCount }}
   serviceName: {{ include "prometheus-pushgateway.fullname" . }}
   selector:
     matchLabels:
       {{- include "prometheus-pushgateway.selectorLabels" . | nindent 6 }}
   template:
     metadata:
-      {{- with .Values.pushgateway.podAnnotations }}
+      {{- with .Values.podAnnotations }}
       annotations:
         {{- toYaml . | nindent 8 }}
       {{- end }}
       labels:
         {{- include "prometheus-pushgateway.defaultLabels" . | nindent 8 }}
-        {{- with .Values.pushgateway.podLabels }}
+        {{- with .Values.podLabels }}
         {{- toYaml . | nindent 8 }}
         {{- end }}
     spec:
       {{- include "prometheus-pushgateway.podSpec" . | nindent 6 }}
-  {{- if .Values.pushgateway.persistentVolume.enabled }}
+  {{- if .Values.persistentVolume.enabled }}
   volumeClaimTemplates:
     - metadata:
-        {{- with .Values.pushgateway.persistentVolume.annotations }}
+        {{- with .Values.persistentVolume.annotations }}
         annotations:
           {{- toYaml . | nindent 10 }}
         {{- end }}
@@ -51,16 +51,16 @@ spec:
         name: storage-volume
       spec:
         accessModes:
-          {{ toYaml .Values.pushgateway.persistentVolume.accessModes }}
-      {{- if .Values.pushgateway.persistentVolume.storageClass }}
-      {{- if (eq "-" .Values.pushgateway.persistentVolume.storageClass) }}
+          {{ toYaml .Values.persistentVolume.accessModes }}
+      {{- if .Values.persistentVolume.storageClass }}
+      {{- if (eq "-" .Values.persistentVolume.storageClass) }}
         storageClassName: ""
       {{- else }}
-        storageClassName: "{{ .Values.pushgateway.persistentVolume.storageClass }}"
+        storageClassName: "{{ .Values.persistentVolume.storageClass }}"
       {{- end }}
       {{- end }}
         resources:
           requests:
-            storage: "{{ .Values.pushgateway.persistentVolume.size }}"
+            storage: "{{ .Values.persistentVolume.size }}"
   {{- end }}
 {{- end }}
diff --git a/deploy/charts/admin-stack/charts/prometheus/charts/pushgateway/values.yaml b/deploy/charts/admin-stack/charts/prometheus/charts/pushgateway/values.yaml
index 88fe5e72..56ebb9b7 100644
--- a/deploy/charts/admin-stack/charts/prometheus/charts/pushgateway/values.yaml
+++ b/deploy/charts/admin-stack/charts/prometheus/charts/pushgateway/values.yaml
@@ -13,14 +13,210 @@
 # See the License for the specific language governing permissions and
 # limitations under the License.
 
-rbac:
+# Default values for prometheus-pushgateway.
+# This is a YAML-formatted file.
+# Declare variables to be passed into your templates.
+
+# Provide a name
+name: pushgateway
+# Provide a name in place of prometheus-pushgateway for `app:` labels
+nameOverride: ""
+
+# Provide a name to substitute for the full names of resources
+fullnameOverride: ""
+
+image:
+  repository: prom/pushgateway
+  # if not set appVersion field from Chart.yaml is used
+  tag: ""
+  pullPolicy: IfNotPresent
+
+# Optional pod imagePullSecrets
+imagePullSecrets: []
+
+service:
+  type: ClusterIP
+  port: 9091
+  targetPort: 9091
+  # nodePort: 32100
+
+  # Optional - Can be used for headless if value is "None"
+  clusterIP: ""
+
+  loadBalancerIP: ""
+  loadBalancerSourceRanges: []
+
+# Optional pod annotations
+podAnnotations: {}
+
+# Optional pod labels
+podLabels: {}
+
+# Optional service annotations
+serviceAnnotations: {}
+
+# Optional service labels
+serviceLabels: {}
+
+# Optional serviceAccount labels
+serviceAccountLabels: {}
+
+# Optional persistentVolume labels
+persistentVolumeLabels: {}
+
+# Optional additional environment variables
+extraVars: []
+
+## Additional pushgateway container arguments
+##
+## example:
+## extraArgs:
+##  - --persistence.file=/data/pushgateway.data
+##  - --persistence.interval=5m
+extraArgs: []
+
+## Additional InitContainers to initialize the pod
+##
+extraInitContainers: []
+
+# Optional additional containers (sidecar)
+extraContainers: []
+  # - name: oAuth2-proxy
+  #   args:
+  #     - -https-address=:9092
+  #     - -upstream=http://localhost:9091
+  #     - -skip-auth-regex=^/metrics
+  #     - -openshift-delegate-urls={"/":{"group":"monitoring.coreos.com","resource":"prometheuses","verb":"get"}}
+  #   image: openshift/oauth-proxy:v1.1.0
+  #   ports:
+  #       - containerPort: 9092
+  #         name: proxy
+  #   resources:
+  #       limits:
+  #         memory: 16Mi
+  #       requests:
+  #         memory: 4Mi
+  #         cpu: 20m
+  #   volumeMounts:
+  #     - mountPath: /etc/prometheus/secrets/pushgateway-tls
+  #       name: secret-pushgateway-tls
+
+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:'.
+  # limits:
+  #   cpu: 200m
+  #   memory: 50Mi
+  # requests:
+  #   cpu: 100m
+  #   memory: 30Mi
+
+liveness:
+  enabled: true
+  probe:
+    httpGet:
+      path: /-/ready
+      port: 9091
+    initialDelaySeconds: 10
+    timeoutSeconds: 10
+
+readiness:
+  enabled: true
+  probe:
+    httpGet:
+      path: /-/ready
+      port: 9091
+    initialDelaySeconds: 10
+    timeoutSeconds: 10
+
+serviceAccount:
+  # Specifies whether a ServiceAccount should be created
   create: true
+  # The name of the ServiceAccount to use.
+  # If not set and create is true, a name is generated using the fullname template
+  name:
 
-podSecurityPolicy:
+## Configure ingress resource that allow you to access the
+## pushgateway installation. Set up the URL
+## ref: http://kubernetes.io/docs/user-guide/ingress/
+##
+ingress:
+  ## Enable Ingress.
+  ##
   enabled: false
+  # AWS ALB requires path of /*
+  className: ""
+  path: /
+  pathType: ImplementationSpecific
+
+  ## Extra paths to prepend to every host configuration. This is useful when working with annotation based services.
+  extraPaths: []
+  # - path: /*
+  #   backend:
+  #     serviceName: ssl-redirect
+  #     servicePort: use-annotation
+
+  ## Annotations.
+  ##
+  # annotations:
+  #   kubernetes.io/ingress.class: nginx
+  #   kubernetes.io/tls-acme: 'true'
 
-imagePullSecrets:
-# - name: "image-pull-secret"
+  ## Hostnames.
+  ## Must be provided if Ingress is enabled.
+  ##
+  # hosts:
+  #   - pushgateway.domain.com
+
+  ## TLS configuration.
+  ## Secrets must be manually created in the namespace.
+  ##
+  # tls:
+  #   - secretName: pushgateway-tls
+  #     hosts:
+  #       - pushgateway.domain.com
+
+tolerations: {}
+  # - effect: NoSchedule
+  #   operator: Exists
+
+## Node labels for pushgateway pod assignment
+## Ref: https://kubernetes.io/docs/user-guide/node-selection/
+##
+nodeSelector: {}
+
+replicaCount: 1
+
+## When running more than one replica alongside with persistence, different volumes are needed
+## per replica, since sharing a `persistence.file` across replicas does not keep metrics synced.
+## For this purpose, you can enable the `runAsStatefulSet` to deploy the pushgateway as a
+## StatefulSet instead of as a Deployment.
+runAsStatefulSet: false
+
+## Security context to be added to push-gateway pods
+##
+securityContext:
+  fsGroup: 65534
+  runAsUser: 65534
+  runAsNonRoot: true
+
+## Security context to be added to push-gateway containers
+## Having a separate variable as securityContext differs for pods and containers.
+containerSecurityContext: {}
+#  allowPrivilegeEscalation: false
+#  readOnlyRootFilesystem: true
+#  runAsUser: 65534
+#  runAsNonRoot: true
+
+## Affinity for pod assignment
+## Ref: https://kubernetes.io/docs/concepts/configuration/assign-pod-node/#affinity-and-anti-affinity
+affinity: {}
+
+## Topology spread constraints for pods
+## Ref: https://kubernetes.io/docs/concepts/workloads/pods/pod-topology-spread-constraints/
+topologySpreadConstraints: []
 
 # Enable this if you're using https://github.com/coreos/prometheus-operator
 serviceMonitor:
@@ -66,271 +262,78 @@ serviceMonitor:
   #   replacement: $1
   #   action: replace
 
-liveness:
-  enabled: true
-  probe:
-    httpGet:
-      path: /-/ready
-      port: 9091
-    initialDelaySeconds: 10
-    timeoutSeconds: 10
-
-readiness:
-  enabled: true
-  probe:
-    httpGet:
-      path: /-/ready
-      port: 9091
-    initialDelaySeconds: 10
-    timeoutSeconds: 10
-
-## Define serviceAccount names for components. Defaults to component's fully qualified name.
-##
-serviceAccount:
-    create: true
-    name:
-    annotations: {}
+# The values to set in the PodDisruptionBudget spec (minAvailable/maxUnavailable)
+# If not set then a PodDisruptionBudget will not be created
+podDisruptionBudget: {}
 
-## applications
-pushgateway:
-  ## If false, pushgateway will not be installed
-  ##
-  enabled: true
+priorityClassName:
 
-  ## Use an alternate scheduler, e.g. "stork".
-  ## ref: https://kubernetes.io/docs/tasks/administer-cluster/configure-multiple-schedulers/
-  ##
-  # schedulerName:
+# Deployment Strategy type
+strategy:
+  type: Recreate
 
-  ## pushgateway container name
+persistentVolume:
+  ## If true, pushgateway will create/use a Persistent Volume Claim
+  ## If false, use emptyDir
   ##
-  name: pushgateway
-
-  ## pushgateway container image
-  ##
-  image:
-    repository: prom/pushgateway
-    tag: v1.4.2
-    pullPolicy: IfNotPresent
-
-  ## pushgateway priorityClassName
-  ##
-  priorityClassName: ""
+  enabled: false
 
-  ## Additional pushgateway container arguments
+  ## pushgateway data Persistent Volume access modes
+  ## Must match those of existing PV or dynamic provisioner
+  ## Ref: http://kubernetes.io/docs/user-guide/persistent-volumes/
   ##
-  ## for example: persistence.file: /data/pushgateway.data
-  extraArgs: {}
+  accessModes:
+    - ReadWriteOnce
 
-  ## Additional InitContainers to initialize the pod
-  ##
-  extraInitContainers: []
-
-  ingress:
-    ## If true, pushgateway Ingress will be created
-    ##
-    enabled: false
-
-    # For Kubernetes >= 1.18 you should specify the ingress-controller via the field ingressClassName
-    # See https://kubernetes.io/blog/2020/04/02/improvements-to-the-ingress-api-in-kubernetes-1.18/#specifying-the-class-of-an-ingress
-    # ingressClassName: nginx
-
-    ## pushgateway Ingress annotations
-    ##
-    annotations: {}
-    #   kubernetes.io/ingress.class: nginx
-    #   kubernetes.io/tls-acme: 'true'
-
-    ## pushgateway Ingress hostnames with optional path
-    ## Must be provided if Ingress is enabled
-    ##
-    hosts: []
-    #   - pushgateway.domain.com
-    #   - domain.com/pushgateway
-
-    path: /
-
-    # pathType is only for k8s >= 1.18
-    pathType: Prefix
-
-    ## Extra paths to prepend to every host configuration. This is useful when working with annotation based services.
-    extraPaths: []
-    # - path: /*
-    #   backend:
-    #     serviceName: ssl-redirect
-    #     servicePort: use-annotation
-
-    ## pushgateway Ingress TLS configuration
-    ## Secrets must be manually created in the namespace
-    ##
-    tls: []
-    #   - secretName: prometheus-alerts-tls
-    #     hosts:
-    #       - pushgateway.domain.com
-
-  ## Node tolerations for pushgateway scheduling to nodes with taints
-  ## Ref: https://kubernetes.io/docs/concepts/configuration/assign-pod-node/
+  ## pushgateway data Persistent Volume Claim annotations
   ##
-  tolerations: []
-    # - key: "key"
-    #   operator: "Equal|Exists"
-    #   value: "value"
-  #   effect: "NoSchedule|PreferNoSchedule|NoExecute(1.6 only)"
-
-  ## Node labels for pushgateway pod assignment
-  ## Ref: https://kubernetes.io/docs/user-guide/node-selection/
-  ##
-  nodeSelector: {}
+  annotations: {}
 
-  ## Annotations to be added to pushgateway pods
-  ##
-  podAnnotations: {}
+  ## pushgateway data Persistent Volume existing claim name
+  ## Requires pushgateway.persistentVolume.enabled: true
+  ## If defined, PVC must be created manually before volume will be bound
+  existingClaim: ""
 
-  ## Labels to be added to pushgateway pods
+  ## pushgateway data Persistent Volume mount root path
   ##
-  podLabels: {}
+  mountPath: /data
 
-  ## Specify if a Pod Security Policy for node-exporter must be created
-  ## Ref: https://kubernetes.io/docs/concepts/policy/pod-security-policy/
+  ## pushgateway data Persistent Volume size
   ##
-  podSecurityPolicy:
-    annotations: {}
-      ## Specify pod annotations
-      ## Ref: https://kubernetes.io/docs/concepts/policy/pod-security-policy/#apparmor
-      ## Ref: https://kubernetes.io/docs/concepts/policy/pod-security-policy/#seccomp
-      ## Ref: https://kubernetes.io/docs/concepts/policy/pod-security-policy/#sysctl
-      ##
-      # seccomp.security.alpha.kubernetes.io/allowedProfileNames: '*'
-      # seccomp.security.alpha.kubernetes.io/defaultProfileName: 'docker/default'
-    # apparmor.security.beta.kubernetes.io/defaultProfileName: 'runtime/default'
-
-  replicaCount: 1
-
-  ## Annotations to be added to deployment
+  size: 2Gi
+
+  ## pushgateway data Persistent Volume Storage Class
+  ## If defined, storageClassName: <storageClass>
+  ## If set to "-", storageClassName: "", which disables dynamic provisioning
+  ## If undefined (the default) or set to null, no storageClassName spec is
+  ##   set, choosing the default provisioner.  (gp2 on AWS, standard on
+  ##   GKE, AWS & OpenStack)
   ##
-  deploymentAnnotations: {}
+  # storageClass: "-"
 
-  ## PodDisruptionBudget settings
-  ## ref: https://kubernetes.io/docs/concepts/workloads/pods/disruptions/
-  ##
-  podDisruptionBudget:
-    enabled: false
-    maxUnavailable: 1
-
-  ## pushgateway resource requests and limits
-  ## Ref: http://kubernetes.io/docs/user-guide/compute-resources/
-  ##
-  resources: {}
-    # limits:
-    #   cpu: 10m
-    #   memory: 32Mi
-    # requests:
-    #   cpu: 10m
-  #   memory: 32Mi
-
-  ## Vertical Pod Autoscaler config
-  ## Ref: https://github.com/kubernetes/autoscaler/tree/master/vertical-pod-autoscaler
-  verticalAutoscaler:
-    ## If true a VPA object will be created for the controller
-    enabled: false
-    # updateMode: "Auto"
-    # containerPolicies:
-    # - containerName: 'prometheus-pushgateway'
-
-  # Custom DNS configuration to be added to push-gateway pods
-  dnsConfig: {}
-    # nameservers:
-    #   - 1.2.3.4
-    # searches:
-    #   - ns1.svc.cluster-domain.example
-    #   - my.dns.search.suffix
-    # options:
-    #   - name: ndots
-  #     value: "2"
-  #   - name: edns0
-
-  ## Security context to be added to push-gateway pods
+  ## Subdirectory of pushgateway data Persistent Volume to mount
+  ## Useful if the volume's root directory is not empty
   ##
-  securityContext:
-    runAsUser: 65534
-    runAsNonRoot: true
-
-  service:
-    annotations:
-      prometheus.io/probe: pushgateway
-    labels: {}
-    clusterIP: ""
-
-    ## List of IP addresses at which the pushgateway service is available
-    ## Ref: https://kubernetes.io/docs/user-guide/services/#external-ips
-    ##
-    externalIPs: []
-
-    loadBalancerIP: ""
-    loadBalancerSourceRanges: []
-    servicePort: 9091
-    type: ClusterIP
-
-  ## pushgateway Deployment Strategy type
-  # strategy:
-  #   type: Recreate
-
-  persistentVolume:
-    ## If true, pushgateway will create/use a Persistent Volume Claim
-    ##
-    enabled: false
-
-    ## pushgateway data Persistent Volume access modes
-    ## Must match those of existing PV or dynamic provisioner
-    ## Ref: http://kubernetes.io/docs/user-guide/persistent-volumes/
-    ##
-    accessModes:
-      - ReadWriteOnce
-
-    ## pushgateway data Persistent Volume Claim annotations
-    ##
-    annotations: {}
-
-    ## pushgateway data Persistent Volume existing claim name
-    ## Requires pushgateway.persistentVolume.enabled: true
-    ## If defined, PVC must be created manually before volume will be bound
-    existingClaim: ""
-
-    ## pushgateway data Persistent Volume mount root path
-    ##
-    mountPath: /data
-
-    ## pushgateway data Persistent Volume size
-    ##
-    size: 2Gi
-
-    ## pushgateway data Persistent Volume Storage Class
-    ## If defined, storageClassName: <storageClass>
-    ## If set to "-", storageClassName: "", which disables dynamic provisioning
-    ## If undefined (the default) or set to null, no storageClassName spec is
-    ##   set, choosing the default provisioner.  (gp2 on AWS, standard on
-    ##   GKE, AWS & OpenStack)
-    ##
-    # storageClass: "-"
-
-    ## pushgateway data Persistent Volume Binding Mode
-    ## If defined, volumeBindingMode: <volumeBindingMode>
-    ## If undefined (the default) or set to null, no volumeBindingMode spec is
-    ##   set, choosing the default mode.
-    ##
-    # volumeBindingMode: ""
-
-    ## Subdirectory of pushgateway data Persistent Volume to mount
-    ## Useful if the volume's root directory is not empty
-    ##
-    subPath: ""
-
-  networkPolicy: {}
-    # allowAll: true
-    # customSelectors:
-    #   - namespaceSelector:
-    #       matchLabels:
-    #         type: admin
-    #   - podSelector:
-    #       matchLabels:
-    #         app: myapp
\ No newline at end of file
+  subPath: ""
+
+extraVolumes: []
+  # - name: extra
+  #   emptyDir: {}
+extraVolumeMounts: []
+  # - name: extra
+  #   mountPath: /usr/share/extras
+  #   readOnly: true
+
+# Configuration for clusters with restrictive network policies in place:
+# - allowAll allows access to the PushGateway from any namespace
+# - customSelector is a list of pod/namespaceSelectors to allow access from
+# These options are mutually exclusive and the latter will take precedence.
+networkPolicy: {}
+  # allowAll: true
+  # customSelectors:
+  #   - namespaceSelector:
+  #       matchLabels:
+  #         type: admin
+  #   - podSelector:
+  #       matchLabels:
+  #         app: myapp
diff --git a/deploy/charts/admin-stack/charts/prometheus/templates/_charts.tpl b/deploy/charts/admin-stack/charts/prometheus/templates/_charts.tpl
index 87f041a5..00645db7 100644
--- a/deploy/charts/admin-stack/charts/prometheus/templates/_charts.tpl
+++ b/deploy/charts/admin-stack/charts/prometheus/templates/_charts.tpl
@@ -1,20 +1,3 @@
-{{/*
-Create a default fully qualified app name.
-We truncate at 63 chars because some Kubernetes name fields are limited to this (by the DNS naming spec).
-*/}}
-{{- define "prometheus.fullname" -}}
-{{- if .Values.fullnameOverride -}}
-{{- .Values.fullnameOverride | trunc 63 | trimSuffix "-" -}}
-{{- else -}}
-{{- $name := default .Chart.Name .Values.nameOverride -}}
-{{- if contains $name .Release.Name -}}
-{{- .Release.Name | trunc 63 | trimSuffix "-" -}}
-{{- else -}}
-{{- printf "%s-%s" .Release.Name $name | trunc 63 | trimSuffix "-" -}}
-{{- end -}}
-{{- end -}}
-{{- end -}}
-
 {{/* vim: set filetype=mustache: */}}
 {{/*
 Expand the name of the chart.
@@ -30,6 +13,48 @@ Create chart name and version as used by the chart label.
 {{- printf "%s-%s" .Chart.Name .Chart.Version | replace "+" "_" | trunc 63 | trimSuffix "-" -}}
 {{- end -}}
 
+{{/*
+Create unified labels for prometheus components
+*/}}
+{{- define "prometheus.common.matchLabels" -}}
+app: {{ template "prometheus.name" . }}
+release: {{ .Release.Name }}
+{{- end -}}
+
+{{- define "prometheus.common.metaLabels" -}}
+chart: {{ template "prometheus.chart" . }}
+heritage: {{ .Release.Service }}
+{{- end -}}
+
+{{- define "prometheus.alertmanager.labels" -}}
+{{ include "prometheus.alertmanager.matchLabels" . }}
+{{ include "prometheus.common.metaLabels" . }}
+{{- end -}}
+
+{{- define "prometheus.alertmanager.matchLabels" -}}
+component: {{ .Values.alertmanager.name | quote }}
+{{ include "prometheus.common.matchLabels" . }}
+{{- end -}}
+
+{{- define "prometheus.nodeExporter.labels" -}}
+{{ include "prometheus.nodeExporter.matchLabels" . }}
+{{ include "prometheus.common.metaLabels" . }}
+{{- end -}}
+
+{{- define "prometheus.nodeExporter.matchLabels" -}}
+component: {{ .Values.nodeExporter.name | quote }}
+{{ include "prometheus.common.matchLabels" . }}
+{{- end -}}
+
+{{- define "prometheus.pushgateway.labels" -}}
+{{ include "prometheus.pushgateway.matchLabels" . }}
+{{ include "prometheus.common.metaLabels" . }}
+{{- end -}}
+
+{{- define "prometheus.pushgateway.matchLabels" -}}
+component: {{ .Values.pushgateway.name | quote }}
+{{ include "prometheus.common.matchLabels" . }}
+{{- end -}}
 
 {{- define "prometheus.server.labels" -}}
 {{ include "prometheus.server.matchLabels" . }}
@@ -42,26 +67,54 @@ component: {{ .Values.server.name | quote }}
 {{- end -}}
 
 {{/*
-Create unified labels for prometheus components
+Create a default fully qualified app name.
+We truncate at 63 chars because some Kubernetes name fields are limited to this (by the DNS naming spec).
 */}}
-{{- define "prometheus.common.matchLabels" -}}
-app: {{ template "prometheus.name" . }}
-release: {{ .Release.Name }}
+{{- define "prometheus.fullname" -}}
+{{- if .Values.fullnameOverride -}}
+{{- .Values.fullnameOverride | trunc 63 | trimSuffix "-" -}}
+{{- else -}}
+{{- $name := default .Chart.Name .Values.nameOverride -}}
+{{- if contains $name .Release.Name -}}
+{{- .Release.Name | trunc 63 | trimSuffix "-" -}}
+{{- else -}}
+{{- printf "%s-%s" .Release.Name $name | trunc 63 | trimSuffix "-" -}}
+{{- end -}}
+{{- end -}}
 {{- end -}}
 
-{{- define "prometheus.common.metaLabels" -}}
-chart: {{ template "prometheus.chart" . }}
-heritage: {{ .Release.Service }}
+{{/*
+Create a fully qualified alertmanager name.
+We truncate at 63 chars because some Kubernetes name fields are limited to this (by the DNS naming spec).
+*/}}
+
+{{- define "prometheus.alertmanager.fullname" -}}
+{{- if .Values.alertmanager.fullnameOverride -}}
+{{- .Values.alertmanager.fullnameOverride | trunc 63 | trimSuffix "-" -}}
+{{- else -}}
+{{- $name := default .Chart.Name .Values.nameOverride -}}
+{{- if contains $name .Release.Name -}}
+{{- printf "%s-%s" .Release.Name .Values.alertmanager.name | trunc 63 | trimSuffix "-" -}}
+{{- else -}}
+{{- printf "%s-%s-%s" .Release.Name $name .Values.alertmanager.name | trunc 63 | trimSuffix "-" -}}
+{{- end -}}
+{{- end -}}
 {{- end -}}
 
 {{/*
-Define the prometheus.namespace template if set with forceNamespace or .Release.Namespace is set
+Create a fully qualified node-exporter name.
+We truncate at 63 chars because some Kubernetes name fields are limited to this (by the DNS naming spec).
 */}}
-{{- define "prometheus.namespace" -}}
-{{- if .Values.forceNamespace -}}
-{{ printf "namespace: %s" .Values.forceNamespace }}
+{{- define "prometheus.nodeExporter.fullname" -}}
+{{- if .Values.nodeExporter.fullnameOverride -}}
+{{- .Values.nodeExporter.fullnameOverride | trunc 63 | trimSuffix "-" -}}
 {{- else -}}
-{{ printf "namespace: %s" .Release.Namespace }}
+{{- $name := default .Chart.Name .Values.nameOverride -}}
+{{- if contains $name .Release.Name -}}
+{{- printf "%s-%s" .Release.Name .Values.nodeExporter.name | trunc 63 | trimSuffix "-" -}}
+{{- else -}}
+{{- printf "%s-%s-%s" .Release.Name $name .Values.nodeExporter.name | trunc 63 | trimSuffix "-" -}}
+{{- end -}}
 {{- end -}}
 {{- end -}}
 
@@ -82,6 +135,135 @@ We truncate at 63 chars because some Kubernetes name fields are limited to this
 {{- end -}}
 {{- end -}}
 
+{{/*
+Create a fully qualified pushgateway name.
+We truncate at 63 chars because some Kubernetes name fields are limited to this (by the DNS naming spec).
+*/}}
+{{- define "prometheus.pushgateway.fullname" -}}
+{{- if .Values.pushgateway.fullnameOverride -}}
+{{- .Values.pushgateway.fullnameOverride | trunc 63 | trimSuffix "-" -}}
+{{- else -}}
+{{- $name := default .Chart.Name .Values.nameOverride -}}
+{{- if contains $name .Release.Name -}}
+{{- printf "%s-%s" .Release.Name .Values.pushgateway.name | trunc 63 | trimSuffix "-" -}}
+{{- else -}}
+{{- printf "%s-%s-%s" .Release.Name $name .Values.pushgateway.name | trunc 63 | trimSuffix "-" -}}
+{{- end -}}
+{{- end -}}
+{{- end -}}
+
+{{/*
+Get KubeVersion removing pre-release information.
+*/}}
+{{- define "prometheus.kubeVersion" -}}
+  {{- default .Capabilities.KubeVersion.Version (regexFind "v[0-9]+\\.[0-9]+\\.[0-9]+" .Capabilities.KubeVersion.Version) -}}
+{{- end -}}
+
+{{/*
+Return the appropriate apiVersion for deployment.
+*/}}
+{{- define "prometheus.deployment.apiVersion" -}}
+{{- print "apps/v1" -}}
+{{- end -}}
+{{/*
+Return the appropriate apiVersion for daemonset.
+*/}}
+{{- define "prometheus.daemonset.apiVersion" -}}
+{{- print "apps/v1" -}}
+{{- end -}}
+{{/*
+Return the appropriate apiVersion for networkpolicy.
+*/}}
+{{- define "prometheus.networkPolicy.apiVersion" -}}
+{{- print "networking.k8s.io/v1" -}}
+{{- end -}}
+
+{{/*
+Return the appropriate apiVersion for poddisruptionbudget.
+*/}}
+{{- define "prometheus.podDisruptionBudget.apiVersion" -}}
+{{- if .Capabilities.APIVersions.Has "policy/v1" }}
+{{- print "policy/v1" -}}
+{{- else -}}
+{{- print "policy/v1beta1" -}}
+{{- end -}}
+{{- end -}}
+{{/*
+Return the appropriate apiVersion for rbac.
+*/}}
+{{- define "rbac.apiVersion" -}}
+{{- if .Capabilities.APIVersions.Has "rbac.authorization.k8s.io/v1" }}
+{{- print "rbac.authorization.k8s.io/v1" -}}
+{{- else -}}
+{{- print "rbac.authorization.k8s.io/v1beta1" -}}
+{{- end -}}
+{{- end -}}
+{{/*
+Return the appropriate apiVersion for ingress.
+*/}}
+{{- define "ingress.apiVersion" -}}
+  {{- if and (.Capabilities.APIVersions.Has "networking.k8s.io/v1") (semverCompare ">= 1.19.x" (include "prometheus.kubeVersion" .)) -}}
+      {{- print "networking.k8s.io/v1" -}}
+  {{- else if .Capabilities.APIVersions.Has "networking.k8s.io/v1beta1" -}}
+    {{- print "networking.k8s.io/v1beta1" -}}
+  {{- else -}}
+    {{- print "extensions/v1beta1" -}}
+  {{- end -}}
+{{- end -}}
+
+{{/*
+Return if ingress is stable.
+*/}}
+{{- define "ingress.isStable" -}}
+  {{- eq (include "ingress.apiVersion" .) "networking.k8s.io/v1" -}}
+{{- end -}}
+
+{{/*
+Return if ingress supports ingressClassName.
+*/}}
+{{- define "ingress.supportsIngressClassName" -}}
+  {{- or (eq (include "ingress.isStable" .) "true") (and (eq (include "ingress.apiVersion" .) "networking.k8s.io/v1beta1") (semverCompare ">= 1.18.x" (include "prometheus.kubeVersion" .))) -}}
+{{- end -}}
+{{/*
+Return if ingress supports pathType.
+*/}}
+{{- define "ingress.supportsPathType" -}}
+  {{- or (eq (include "ingress.isStable" .) "true") (and (eq (include "ingress.apiVersion" .) "networking.k8s.io/v1beta1") (semverCompare ">= 1.18.x" (include "prometheus.kubeVersion" .))) -}}
+{{- end -}}
+
+{{/*
+Create the name of the service account to use for the alertmanager component
+*/}}
+{{- define "prometheus.serviceAccountName.alertmanager" -}}
+{{- if .Values.serviceAccounts.alertmanager.create -}}
+    {{ default (include "prometheus.alertmanager.fullname" .) .Values.serviceAccounts.alertmanager.name }}
+{{- else -}}
+    {{ default "default" .Values.serviceAccounts.alertmanager.name }}
+{{- end -}}
+{{- end -}}
+
+{{/*
+Create the name of the service account to use for the nodeExporter component
+*/}}
+{{- define "prometheus.serviceAccountName.nodeExporter" -}}
+{{- if .Values.serviceAccounts.nodeExporter.create -}}
+    {{ default (include "prometheus.nodeExporter.fullname" .) .Values.serviceAccounts.nodeExporter.name }}
+{{- else -}}
+    {{ default "default" .Values.serviceAccounts.nodeExporter.name }}
+{{- end -}}
+{{- end -}}
+
+{{/*
+Create the name of the service account to use for the pushgateway component
+*/}}
+{{- define "prometheus.serviceAccountName.pushgateway" -}}
+{{- if .Values.serviceAccounts.pushgateway.create -}}
+    {{ default (include "prometheus.pushgateway.fullname" .) .Values.serviceAccounts.pushgateway.name }}
+{{- else -}}
+    {{ default "default" .Values.serviceAccounts.pushgateway.name }}
+{{- end -}}
+{{- end -}}
+
 {{/*
 Create the name of the service account to use for the server component
 */}}
@@ -92,3 +274,14 @@ Create the name of the service account to use for the server component
     {{ default "default" .Values.serviceAccounts.server.name }}
 {{- end -}}
 {{- end -}}
+
+{{/*
+Define the prometheus.namespace template if set with forceNamespace or .Release.Namespace is set
+*/}}
+{{- define "prometheus.namespace" -}}
+{{- if .Values.forceNamespace -}}
+{{ printf "namespace: %s" .Values.forceNamespace }}
+{{- else -}}
+{{ printf "namespace: %s" .Release.Namespace }}
+{{- end -}}
+{{- end -}}
diff --git a/deploy/charts/admin-stack/charts/prometheus/templates/clusterrole.yaml b/deploy/charts/admin-stack/charts/prometheus/templates/clusterrole.yaml
index b1c9bd24..28d43293 100644
--- a/deploy/charts/admin-stack/charts/prometheus/templates/clusterrole.yaml
+++ b/deploy/charts/admin-stack/charts/prometheus/templates/clusterrole.yaml
@@ -1,3 +1,4 @@
+{{- if and .Values.rbac.create (empty .Values.server.useExistingClusterRoleName) -}}
 # Licensed to the Apache Software Foundation (ASF) under one or more
 # contributor license agreements.  See the NOTICE file distributed with
 # this work for additional information regarding copyright ownership.
@@ -13,7 +14,6 @@
 # See the License for the specific language governing permissions and
 # limitations under the License.
 
-{{- if and .Values.server.enabled .Values.rbac.create (empty .Values.server.useExistingClusterRoleName) -}}
 apiVersion: {{ template "rbac.apiVersion" . }}
 kind: ClusterRole
 metadata:
diff --git a/deploy/charts/admin-stack/charts/prometheus/templates/clusterrolebinding.yaml b/deploy/charts/admin-stack/charts/prometheus/templates/clusterrolebinding.yaml
index ce048621..cd99204e 100644
--- a/deploy/charts/admin-stack/charts/prometheus/templates/clusterrolebinding.yaml
+++ b/deploy/charts/admin-stack/charts/prometheus/templates/clusterrolebinding.yaml
@@ -1,3 +1,4 @@
+{{- if and .Values.rbac.create (empty .Values.server.namespaces) (empty .Values.server.useExistingClusterRoleName) -}}
 # Licensed to the Apache Software Foundation (ASF) under one or more
 # contributor license agreements.  See the NOTICE file distributed with
 # this work for additional information regarding copyright ownership.
@@ -13,7 +14,6 @@
 # See the License for the specific language governing permissions and
 # limitations under the License.
 
-{{- if and .Values.server.enabled .Values.rbac.create (empty .Values.server.namespaces) (empty .Values.server.useExistingClusterRoleName) -}}
 apiVersion: {{ template "rbac.apiVersion" . }}
 kind: ClusterRoleBinding
 metadata:
diff --git a/deploy/charts/admin-stack/charts/prometheus/templates/cm.yaml b/deploy/charts/admin-stack/charts/prometheus/templates/configmap.yaml
similarity index 87%
rename from deploy/charts/admin-stack/charts/prometheus/templates/cm.yaml
rename to deploy/charts/admin-stack/charts/prometheus/templates/configmap.yaml
index 0e7e93b9..61444949 100644
--- a/deploy/charts/admin-stack/charts/prometheus/templates/cm.yaml
+++ b/deploy/charts/admin-stack/charts/prometheus/templates/configmap.yaml
@@ -1,3 +1,4 @@
+{{- if (empty .Values.server.configMapOverrideName) -}}
 # Licensed to the Apache Software Foundation (ASF) under one or more
 # contributor license agreements.  See the NOTICE file distributed with
 # this work for additional information regarding copyright ownership.
@@ -13,16 +14,18 @@
 # See the License for the specific language governing permissions and
 # limitations under the License.
 
-{{- if .Values.server.enabled -}}
-{{- if (empty .Values.server.configMapOverrideName) -}}
 apiVersion: v1
 kind: ConfigMap
 metadata:
   labels:
     {{- include "prometheus.server.labels" . | nindent 4 }}
+    {{- with .Values.server.extraConfigmapLabels }}
+    {{- toYaml . | nindent 4 }}
+    {{- end }}
   name: {{ template "prometheus.server.fullname" . }}
 {{ include "prometheus.namespace" . | indent 2 }}
 data:
+  allow-snippet-annotations: "false"
 {{- $root := . -}}
 {{- range $key, $value := .Values.ruleFiles }}
   {{ $key }}: {{- toYaml $value | indent 2 }}
@@ -80,14 +83,11 @@ data:
         - source_labels: [__meta_kubernetes_namespace]
           regex: {{ $root.Release.Namespace }}
           action: keep
-        - source_labels: [__meta_kubernetes_pod_label_app]
-          regex: {{ template "prometheus.name" $root }}
+        - source_labels: [__meta_kubernetes_pod_label_app_kubernetes_io_instance]
+          regex: {{ $root.Release.Name }}
           action: keep
-        - source_labels: [__meta_kubernetes_pod_label_component]
-          regex: alertmanager
-          action: keep
-        - source_labels: [__meta_kubernetes_pod_annotation_prometheus_io_probe]
-          regex: {{ index $root.Values.alertmanager.podAnnotations "prometheus.io/probe" | default ".*" }}
+        - source_labels: [__meta_kubernetes_pod_label_app_kubernetes_io_name]
+          regex: {{ default "alertmanager" $root.Values.alertmanager.nameOverride | trunc 63 | trimSuffix "-" }}
           action: keep
         - source_labels: [__meta_kubernetes_pod_container_port_number]
           regex: "9093"
@@ -97,4 +97,3 @@ data:
 {{- end -}}
 {{- end -}}
 {{- end -}}
-{{- end -}}
diff --git a/deploy/charts/admin-stack/charts/prometheus/templates/deploy.yaml b/deploy/charts/admin-stack/charts/prometheus/templates/deployment.yaml
similarity index 90%
rename from deploy/charts/admin-stack/charts/prometheus/templates/deploy.yaml
rename to deploy/charts/admin-stack/charts/prometheus/templates/deployment.yaml
index a0c418ef..29173f9e 100644
--- a/deploy/charts/admin-stack/charts/prometheus/templates/deploy.yaml
+++ b/deploy/charts/admin-stack/charts/prometheus/templates/deployment.yaml
@@ -1,3 +1,4 @@
+{{- if not .Values.server.statefulSet.enabled -}}
 # Licensed to the Apache Software Foundation (ASF) under one or more
 # contributor license agreements.  See the NOTICE file distributed with
 # this work for additional information regarding copyright ownership.
@@ -13,8 +14,6 @@
 # See the License for the specific language governing permissions and
 # limitations under the License.
 
-{{- if .Values.server.enabled -}}
-{{- if not .Values.server.statefulSet.enabled -}}
 apiVersion: {{ template "prometheus.deployment.apiVersion" . }}
 kind: Deployment
 metadata:
@@ -69,8 +68,16 @@ spec:
       containers:
         {{- if .Values.configmapReload.prometheus.enabled }}
         - name: {{ template "prometheus.name" . }}-{{ .Values.server.name }}-{{ .Values.configmapReload.prometheus.name }}
+          {{- if .Values.configmapReload.prometheus.image.digest }}
+          image: "{{ .Values.configmapReload.prometheus.image.repository }}@{{ .Values.configmapReload.prometheus.image.digest }}"
+          {{- else }}
           image: "{{ .Values.configmapReload.prometheus.image.repository }}:{{ .Values.configmapReload.prometheus.image.tag }}"
+          {{- end }}
           imagePullPolicy: "{{ .Values.configmapReload.prometheus.image.pullPolicy }}"
+          {{- with .Values.configmapReload.prometheus.containerSecurityContext }}
+          securityContext:
+            {{- toYaml . | nindent 12 }}
+          {{- end }}
           args:
             - --volume-dir=/etc/config
             - --webhook-url=http://127.0.0.1:9090{{ .Values.server.prefixURL }}/-/reload
@@ -80,6 +87,10 @@ spec:
           {{- range .Values.configmapReload.prometheus.extraVolumeDirs }}
             - --volume-dir={{ . }}
           {{- end }}
+          {{- if .Values.configmapReload.prometheus.containerPort }}
+          ports:
+            - containerPort: {{ .Values.configmapReload.prometheus.containerPort }}
+          {{- end }}
           resources:
 {{ toYaml .Values.configmapReload.prometheus.resources | indent 12 }}
           volumeMounts:
@@ -95,7 +106,11 @@ spec:
         {{- end }}
 
         - name: {{ template "prometheus.name" . }}-{{ .Values.server.name }}
-          image: "{{ .Values.server.image.repository }}:{{ .Values.server.image.tag }}"
+          {{- if .Values.server.image.digest }}
+          image: "{{ .Values.server.image.repository }}@{{ .Values.server.image.digest }}"
+          {{- else }}
+          image: "{{ .Values.server.image.repository }}:{{ .Values.server.image.tag | default .Chart.AppVersion}}"
+          {{- end }}
           imagePullPolicy: "{{ .Values.server.image.pullPolicy }}"
           {{- if .Values.server.env }}
           env:
@@ -140,12 +155,9 @@ spec:
               path: {{ .Values.server.prefixURL }}/-/ready
               port: 9090
               scheme: {{ .Values.server.probeScheme }}
-              {{- if .Values.server.probeHeaders }}
+              {{- with .Values.server.probeHeaders }}
               httpHeaders:
-              {{- range .Values.server.probeHeaders}}
-              - name: {{ .name }}
-                value: {{ .value }}
-              {{- end }}
+{{- toYaml . | nindent 14 }}
               {{- end }}
             {{- else }}
             tcpSocket:
@@ -162,12 +174,9 @@ spec:
               path: {{ .Values.server.prefixURL }}/-/healthy
               port: 9090
               scheme: {{ .Values.server.probeScheme }}
-              {{- if .Values.server.probeHeaders }}
+              {{- with .Values.server.probeHeaders }}
               httpHeaders:
-              {{- range .Values.server.probeHeaders}}
-              - name: {{ .name }}
-                value: {{ .value }}
-              {{- end }}
+{{- toYaml . | nindent 14 }}
               {{- end }}
             {{- else }}
             tcpSocket:
@@ -229,6 +238,10 @@ spec:
           {{- if .Values.server.extraVolumeMounts }}
             {{ toYaml .Values.server.extraVolumeMounts | nindent 12 }}
           {{- end }}
+          {{- with .Values.server.containerSecurityContext }}
+          securityContext:
+            {{- toYaml . | nindent 12 }}
+          {{- end }}
       {{- if .Values.server.sidecarContainers }}
         {{- range $name, $spec :=  .Values.server.sidecarContainers }}
         - name: {{ $name }}
@@ -239,8 +252,10 @@ spec:
           {{- end }}
         {{- end }}
       {{- end }}
-      hostNetwork: {{ .Values.server.hostNetwork }}
-    {{- if .Values.server.dnsPolicy }}
+    {{- if .Values.server.hostNetwork }}
+      hostNetwork: true
+      dnsPolicy: ClusterFirstWithHostNet
+    {{- else }}
       dnsPolicy: {{ .Values.server.dnsPolicy }}
     {{- end }}
     {{- if .Values.imagePullSecrets }}
@@ -259,9 +274,9 @@ spec:
       dnsConfig:
 {{ toYaml .Values.server.dnsConfig | indent 8 }}
     {{- end }}
-    {{- if .Values.server.securityContext }}
+    {{- with .Values.server.securityContext }}
       securityContext:
-{{ toYaml .Values.server.securityContext | indent 8 }}
+        {{- toYaml . | nindent 8 }}
     {{- end }}
     {{- if .Values.server.tolerations }}
       tolerations:
@@ -328,4 +343,3 @@ spec:
           {{- end -}}
         {{- end -}}
 {{- end -}}
-{{- end -}}
diff --git a/deploy/charts/admin-stack/charts/prometheus/templates/ingress.yaml b/deploy/charts/admin-stack/charts/prometheus/templates/ingress.yaml
index 6b2dce13..f6cc37c0 100644
--- a/deploy/charts/admin-stack/charts/prometheus/templates/ingress.yaml
+++ b/deploy/charts/admin-stack/charts/prometheus/templates/ingress.yaml
@@ -13,7 +13,6 @@
 # See the License for the specific language governing permissions and
 # limitations under the License.
 
-{{- if .Values.server.enabled -}}
 {{- if .Values.server.ingress.enabled -}}
 {{- $ingressApiIsStable := eq (include "ingress.isStable" .) "true" -}}
 {{- $ingressSupportsIngressClassName := eq (include "ingress.supportsIngressClassName" .) "true" -}}
@@ -71,4 +70,3 @@ spec:
 {{ toYaml .Values.server.ingress.tls | indent 4 }}
   {{- end -}}
 {{- end -}}
-{{- end -}}
diff --git a/deploy/charts/admin-stack/charts/prometheus/templates/networkpolicy.yaml b/deploy/charts/admin-stack/charts/prometheus/templates/networkpolicy.yaml
index d4617657..ecf0f26f 100644
--- a/deploy/charts/admin-stack/charts/prometheus/templates/networkpolicy.yaml
+++ b/deploy/charts/admin-stack/charts/prometheus/templates/networkpolicy.yaml
@@ -1,3 +1,4 @@
+{{- if .Values.networkPolicy.enabled }}
 # Licensed to the Apache Software Foundation (ASF) under one or more
 # contributor license agreements.  See the NOTICE file distributed with
 # this work for additional information regarding copyright ownership.
@@ -13,8 +14,6 @@
 # See the License for the specific language governing permissions and
 # limitations under the License.
 
-{{- if .Values.server.enabled -}}
-{{- if .Values.networkPolicy.enabled }}
 apiVersion: {{ template "prometheus.networkPolicy.apiVersion" . }}
 kind: NetworkPolicy
 metadata:
@@ -30,4 +29,3 @@ spec:
     - ports:
       - port: 9090
 {{- end }}
-{{- end }}
diff --git a/deploy/charts/admin-stack/charts/prometheus/templates/pdb.yaml b/deploy/charts/admin-stack/charts/prometheus/templates/pdb.yaml
index ea36fa27..b0ea9ebc 100644
--- a/deploy/charts/admin-stack/charts/prometheus/templates/pdb.yaml
+++ b/deploy/charts/admin-stack/charts/prometheus/templates/pdb.yaml
@@ -1,3 +1,4 @@
+{{- if .Values.server.podDisruptionBudget.enabled }}
 # Licensed to the Apache Software Foundation (ASF) under one or more
 # contributor license agreements.  See the NOTICE file distributed with
 # this work for additional information regarding copyright ownership.
@@ -13,8 +14,7 @@
 # See the License for the specific language governing permissions and
 # limitations under the License.
 
-{{- if .Values.server.podDisruptionBudget.enabled }}
-apiVersion: policy/v1beta1
+apiVersion: {{ template "prometheus.podDisruptionBudget.apiVersion" . }}
 kind: PodDisruptionBudget
 metadata:
   name: {{ template "prometheus.server.fullname" . }}
diff --git a/deploy/charts/admin-stack/charts/prometheus/templates/psp.yaml b/deploy/charts/admin-stack/charts/prometheus/templates/psp.yaml
index 16c56f48..3bc1ed19 100644
--- a/deploy/charts/admin-stack/charts/prometheus/templates/psp.yaml
+++ b/deploy/charts/admin-stack/charts/prometheus/templates/psp.yaml
@@ -13,17 +13,18 @@
 # See the License for the specific language governing permissions and
 # limitations under the License.
 
-{{- if and .Values.server.enabled .Values.rbac.create .Values.podSecurityPolicy.enabled }}
-apiVersion: {{ template "prometheus.podSecurityPolicy.apiVersion" . }}
+{{- if and .Values.rbac.create .Values.podSecurityPolicy.enabled }}
+{{- if .Capabilities.APIVersions.Has "policy/v1beta1/PodSecurityPolicy" }}
+apiVersion: policy/v1beta1
 kind: PodSecurityPolicy
 metadata:
   name: {{ template "prometheus.server.fullname" . }}
   labels:
     {{- include "prometheus.server.labels" . | nindent 4 }}
+  {{- with .Values.server.podSecurityPolicy.annotations }}
   annotations:
-{{- if .Values.server.podSecurityPolicy.annotations }}
-{{ toYaml .Values.server.podSecurityPolicy.annotations | indent 4 }}
-{{- end }}
+    {{- toYaml . | nindent 4 }}
+  {{- end }}
 spec:
   privileged: false
   allowPrivilegeEscalation: false
@@ -64,3 +65,4 @@ spec:
         max: 65535
   readOnlyRootFilesystem: false
 {{- end }}
+{{- end }}
diff --git a/deploy/charts/admin-stack/charts/prometheus/templates/pvc.yaml b/deploy/charts/admin-stack/charts/prometheus/templates/pvc.yaml
index 99ebd0e5..f6eeecb9 100644
--- a/deploy/charts/admin-stack/charts/prometheus/templates/pvc.yaml
+++ b/deploy/charts/admin-stack/charts/prometheus/templates/pvc.yaml
@@ -13,7 +13,6 @@
 # See the License for the specific language governing permissions and
 # limitations under the License.
 
-{{- if .Values.server.enabled -}}
 {{- if not .Values.server.statefulSet.enabled -}}
 {{- if .Values.server.persistentVolume.enabled -}}
 {{- if not .Values.server.persistentVolume.existingClaim -}}
@@ -48,6 +47,8 @@ spec:
   selector:
   {{- toYaml .Values.server.persistentVolume.selector | nindent 4 }}
 {{- end -}}
+{{- if .Values.server.persistentVolume.volumeName }}
+  volumeName: "{{ .Values.server.persistentVolume.volumeName }}"
 {{- end -}}
 {{- end -}}
 {{- end -}}
diff --git a/deploy/charts/admin-stack/charts/prometheus/templates/rolebinding.yaml b/deploy/charts/admin-stack/charts/prometheus/templates/rolebinding.yaml
index 0d296e46..72533619 100644
--- a/deploy/charts/admin-stack/charts/prometheus/templates/rolebinding.yaml
+++ b/deploy/charts/admin-stack/charts/prometheus/templates/rolebinding.yaml
@@ -12,9 +12,9 @@
 # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 # See the License for the specific language governing permissions and
 # limitations under the License.
-{{- if and .Values.server.enabled .Values.rbac.create .Values.server.useExistingClusterRoleName .Values.server.namespaces -}}
+
+{{- if and .Values.rbac.create .Values.server.useExistingClusterRoleName .Values.server.namespaces -}}
 {{ range $.Values.server.namespaces -}}
----
 apiVersion: {{ template "rbac.apiVersion" $ }}
 kind: RoleBinding
 metadata:
diff --git a/deploy/charts/admin-stack/charts/prometheus/templates/service.yaml b/deploy/charts/admin-stack/charts/prometheus/templates/service.yaml
index ca5e9700..cfb4543c 100644
--- a/deploy/charts/admin-stack/charts/prometheus/templates/service.yaml
+++ b/deploy/charts/admin-stack/charts/prometheus/templates/service.yaml
@@ -1,3 +1,4 @@
+{{- if .Values.server.service.enabled -}}
 # Licensed to the Apache Software Foundation (ASF) under one or more
 # contributor license agreements.  See the NOTICE file distributed with
 # this work for additional information regarding copyright ownership.
@@ -13,7 +14,6 @@
 # See the License for the specific language governing permissions and
 # limitations under the License.
 
-{{- if .Values.server.enabled -}}
 apiVersion: v1
 kind: Service
 metadata:
diff --git a/deploy/charts/admin-stack/charts/prometheus/templates/serviceaccount.yaml b/deploy/charts/admin-stack/charts/prometheus/templates/serviceaccount.yaml
index 5bf636d2..730726c1 100644
--- a/deploy/charts/admin-stack/charts/prometheus/templates/serviceaccount.yaml
+++ b/deploy/charts/admin-stack/charts/prometheus/templates/serviceaccount.yaml
@@ -1,3 +1,4 @@
+{{- if .Values.serviceAccounts.server.create }}
 # Licensed to the Apache Software Foundation (ASF) under one or more
 # contributor license agreements.  See the NOTICE file distributed with
 # this work for additional information regarding copyright ownership.
@@ -13,8 +14,6 @@
 # See the License for the specific language governing permissions and
 # limitations under the License.
 
-{{- if .Values.server.enabled -}}
-{{- if .Values.serviceAccounts.server.create }}
 apiVersion: v1
 kind: ServiceAccount
 metadata:
@@ -25,4 +24,3 @@ metadata:
   annotations:
 {{ toYaml .Values.serviceAccounts.server.annotations | indent 4 }}
 {{- end }}
-{{- end }}
diff --git a/deploy/charts/admin-stack/charts/prometheus/templates/sts.yaml b/deploy/charts/admin-stack/charts/prometheus/templates/statefulset.yaml
similarity index 83%
rename from deploy/charts/admin-stack/charts/prometheus/templates/sts.yaml
rename to deploy/charts/admin-stack/charts/prometheus/templates/statefulset.yaml
index 7afe2992..be311fee 100644
--- a/deploy/charts/admin-stack/charts/prometheus/templates/sts.yaml
+++ b/deploy/charts/admin-stack/charts/prometheus/templates/statefulset.yaml
@@ -1,3 +1,4 @@
+{{- if .Values.server.statefulSet.enabled -}}
 # Licensed to the Apache Software Foundation (ASF) under one or more
 # contributor license agreements.  See the NOTICE file distributed with
 # this work for additional information regarding copyright ownership.
@@ -13,8 +14,6 @@
 # See the License for the specific language governing permissions and
 # limitations under the License.
 
-{{- if .Values.server.enabled -}}
-{{- if .Values.server.statefulSet.enabled -}}
 apiVersion: apps/v1
 kind: StatefulSet
 metadata:
@@ -69,8 +68,16 @@ spec:
       containers:
         {{- if .Values.configmapReload.prometheus.enabled }}
         - name: {{ template "prometheus.name" . }}-{{ .Values.server.name }}-{{ .Values.configmapReload.prometheus.name }}
+          {{- if .Values.configmapReload.prometheus.image.digest }}
+          image: "{{ .Values.configmapReload.prometheus.image.repository }}@{{ .Values.configmapReload.prometheus.image.digest }}"
+          {{- else }}
           image: "{{ .Values.configmapReload.prometheus.image.repository }}:{{ .Values.configmapReload.prometheus.image.tag }}"
+          {{- end }}
           imagePullPolicy: "{{ .Values.configmapReload.prometheus.image.pullPolicy }}"
+          {{- with .Values.configmapReload.prometheus.containerSecurityContext }}
+          securityContext:
+            {{- toYaml . | nindent 12 }}
+          {{- end }}
           args:
             - --volume-dir=/etc/config
             - --webhook-url=http://127.0.0.1:9090{{ .Values.server.prefixURL }}/-/reload
@@ -80,6 +87,10 @@ spec:
           {{- range .Values.configmapReload.prometheus.extraVolumeDirs }}
             - --volume-dir={{ . }}
           {{- end }}
+          {{- if .Values.configmapReload.prometheus.containerPort }}
+          ports:
+            - containerPort: {{ .Values.configmapReload.prometheus.containerPort }}
+          {{- end }}
           resources:
 {{ toYaml .Values.configmapReload.prometheus.resources | indent 12 }}
           volumeMounts:
@@ -95,7 +106,11 @@ spec:
         {{- end }}
 
         - name: {{ template "prometheus.name" . }}-{{ .Values.server.name }}
-          image: "{{ .Values.server.image.repository }}:{{ .Values.server.image.tag }}"
+          {{- if .Values.server.image.digest }}
+          image: "{{ .Values.server.image.repository }}@{{ .Values.server.image.digest }}"
+          {{- else }}
+          image: "{{ .Values.server.image.repository }}:{{ .Values.server.image.tag | default .Chart.AppVersion }}"
+          {{- end }}
           imagePullPolicy: "{{ .Values.server.image.pullPolicy }}"
           {{- if .Values.server.env }}
           env:
@@ -140,6 +155,10 @@ spec:
               path: {{ .Values.server.prefixURL }}/-/ready
               port: 9090
               scheme: {{ .Values.server.probeScheme }}
+              {{- with .Values.server.probeHeaders }}
+              httpHeaders:
+{{- toYaml . | nindent 14 }}
+              {{- end }}
             {{- else }}
             tcpSocket:
               port: 9090
@@ -155,6 +174,10 @@ spec:
               path: {{ .Values.server.prefixURL }}/-/healthy
               port: 9090
               scheme: {{ .Values.server.probeScheme }}
+              {{- with .Values.server.probeHeaders }}
+              httpHeaders:
+{{- toYaml . | nindent 14 }}
+              {{- end }}
             {{- else }}
             tcpSocket:
               port: 9090
@@ -164,6 +187,28 @@ spec:
             timeoutSeconds: {{ .Values.server.livenessProbeTimeout }}
             failureThreshold: {{ .Values.server.livenessProbeFailureThreshold }}
             successThreshold: {{ .Values.server.livenessProbeSuccessThreshold }}
+          {{- if .Values.server.startupProbe.enabled }}
+          startupProbe:
+            {{- if not .Values.server.tcpSocketProbeEnabled }}
+            httpGet:
+              path: {{ .Values.server.prefixURL }}/-/healthy
+              port: 9090
+              scheme: {{ .Values.server.probeScheme }}
+              {{- if .Values.server.probeHeaders }}
+              httpHeaders:
+              {{- range .Values.server.probeHeaders}}
+              - name: {{ .name }}
+                value: {{ .value }}
+              {{- end }}
+              {{- end }}
+            {{- else }}
+            tcpSocket:
+              port: 9090
+            {{- end }}
+            failureThreshold: {{ .Values.server.startupProbe.failureThreshold }}
+            periodSeconds: {{ .Values.server.startupProbe.periodSeconds }}
+            timeoutSeconds: {{ .Values.server.startupProbe.timeoutSeconds }}
+          {{- end }}
           resources:
 {{ toYaml .Values.server.resources | indent 12 }}
           volumeMounts:
@@ -193,6 +238,10 @@ spec:
           {{- if .Values.server.extraVolumeMounts }}
           {{ toYaml .Values.server.extraVolumeMounts | nindent 12 }}
           {{- end }}
+          {{- with .Values.server.containerSecurityContext }}
+          securityContext:
+            {{- toYaml . | nindent 12 }}
+          {{- end }}
     {{- if .Values.server.sidecarContainers }}
       {{- range $name, $spec :=  .Values.server.sidecarContainers }}
         - name: {{ $name }}
@@ -223,9 +272,9 @@ spec:
       dnsConfig:
 {{ toYaml .Values.server.dnsConfig | indent 8 }}
     {{- end }}
-    {{- if .Values.server.securityContext }}
+    {{- with .Values.server.securityContext }}
       securityContext:
-{{ toYaml .Values.server.securityContext | indent 8 }}
+        {{- toYaml . | nindent 8 }}
     {{- end }}
     {{- if .Values.server.tolerations }}
       tolerations:
@@ -287,6 +336,10 @@ spec:
         annotations:
 {{ toYaml .Values.server.persistentVolume.annotations | indent 10 }}
         {{- end }}
+        {{- if .Values.server.persistentVolume.labels }}
+        labels:
+{{ toYaml .Values.server.persistentVolume.labels | indent 10 }}
+        {{- end }}
       spec:
         accessModes:
 {{ toYaml .Values.server.persistentVolume.accessModes | indent 10 }}
@@ -301,7 +354,7 @@ spec:
       {{- end }}
       {{- end }}
 {{- else }}
-        - name: storage-volume
+      - name: storage-volume
           emptyDir:
           {{- if .Values.server.emptyDir.sizeLimit }}
             sizeLimit: {{ .Values.server.emptyDir.sizeLimit }}
@@ -310,4 +363,3 @@ spec:
           {{- end -}}
 {{- end }}
 {{- end }}
-{{- end }}
diff --git a/deploy/charts/admin-stack/charts/prometheus/templates/svc-headless.yaml b/deploy/charts/admin-stack/charts/prometheus/templates/svc-headless.yaml
index 340e74c9..b5ea1cb5 100644
--- a/deploy/charts/admin-stack/charts/prometheus/templates/svc-headless.yaml
+++ b/deploy/charts/admin-stack/charts/prometheus/templates/svc-headless.yaml
@@ -1,3 +1,4 @@
+{{- if .Values.server.statefulSet.enabled -}}
 # Licensed to the Apache Software Foundation (ASF) under one or more
 # contributor license agreements.  See the NOTICE file distributed with
 # this work for additional information regarding copyright ownership.
@@ -13,8 +14,6 @@
 # See the License for the specific language governing permissions and
 # limitations under the License.
 
-{{- if .Values.server.enabled -}}
-{{- if .Values.server.statefulSet.enabled -}}
 apiVersion: v1
 kind: Service
 metadata:
@@ -49,4 +48,3 @@ spec:
   selector:
     {{- include "prometheus.server.matchLabels" . | nindent 4 }}
 {{- end -}}
-{{- end -}}
diff --git a/deploy/charts/admin-stack/charts/prometheus/templates/verticalpodautoscaler.yaml b/deploy/charts/admin-stack/charts/prometheus/templates/verticalpodautoscaler.yaml
index 07e77b0c..9a5f7b2a 100644
--- a/deploy/charts/admin-stack/charts/prometheus/templates/verticalpodautoscaler.yaml
+++ b/deploy/charts/admin-stack/charts/prometheus/templates/verticalpodautoscaler.yaml
@@ -13,9 +13,12 @@
 # See the License for the specific language governing permissions and
 # limitations under the License.
 
-{{- if .Values.server.enabled -}}
 {{- if .Values.server.verticalAutoscaler.enabled -}}
+{{- if .Capabilities.APIVersions.Has "autoscaling.k8s.io/v1/VerticalPodAutoscaler" }}
+apiVersion: autoscaling.k8s.io/v1
+{{- else }}
 apiVersion: autoscaling.k8s.io/v1beta2
+{{- end }}
 kind: VerticalPodAutoscaler
 metadata:
   labels:
@@ -35,5 +38,4 @@ spec:
     updateMode: {{ .Values.server.verticalAutoscaler.updateMode | default "Off" | quote }}
   resourcePolicy:
     containerPolicies: {{ .Values.server.verticalAutoscaler.containerPolicies | default list | toYaml | trim | nindent 4 }}
-{{- end -}} {{/* if .Values.server.verticalAutoscaler.enabled */}}
-{{- end -}} {{/* .Values.server.enabled */}}
+{{- end -}}
diff --git a/deploy/charts/admin-stack/charts/prometheus/values.yaml b/deploy/charts/admin-stack/charts/prometheus/values.yaml
index c464efcf..dfa58ec1 100644
--- a/deploy/charts/admin-stack/charts/prometheus/values.yaml
+++ b/deploy/charts/admin-stack/charts/prometheus/values.yaml
@@ -19,7 +19,7 @@ rbac:
 podSecurityPolicy:
   enabled: false
 
-imagePullSecrets:
+imagePullSecrets: []
 # - name: "image-pull-secret"
 
 ## Define serviceAccount names for components. Defaults to component's fully qualified name.
@@ -27,8 +27,9 @@ imagePullSecrets:
 serviceAccounts:
   server:
     create: true
-    name:
+    name: ""
     annotations: {}
+
 ## Monitors ConfigMap changes and POSTs to a URL
 ## Ref: https://github.com/jimmidyson/configmap-reload
 ##
@@ -47,45 +48,11 @@ configmapReload:
     image:
       repository: jimmidyson/configmap-reload
       tag: v0.8.0
+      # When digest is set to a non-empty value, images will be pulled by digest (regardless of tag value).
+      digest: ""
       pullPolicy: IfNotPresent
 
-    ## Additional configmap-reload container arguments
-    ##
-    extraArgs: {}
-    ## Additional configmap-reload volume directories
-    ##
-    extraVolumeDirs: []
-
-
-    ## Additional configmap-reload mounts
-    ##
-    extraConfigmapMounts: []
-      # - name: prometheus-alerts
-      #   mountPath: /etc/alerts.d
-      #   subPath: ""
-      #   configMap: prometheus-alerts
-    #   readOnly: true
-
-
-    ## configmap-reload resource requests and limits
-    ## Ref: http://kubernetes.io/docs/user-guide/compute-resources/
-    ##
-    resources: {}
-  alertmanager:
-    ## If false, the configmap-reload container will not be deployed
-    ##
-    enabled: true
-
-    ## configmap-reload container name
-    ##
-    name: configmap-reload
-
-    ## configmap-reload container image
-    ##
-    image:
-      repository: jimmidyson/configmap-reload
-      tag: v0.5.0
-      pullPolicy: IfNotPresent
+    # containerPort: 9533
 
     ## Additional configmap-reload container arguments
     ##
@@ -102,183 +69,20 @@ configmapReload:
       #   mountPath: /etc/alerts.d
       #   subPath: ""
       #   configMap: prometheus-alerts
-    #   readOnly: true
+      #   readOnly: true
 
+    ## Security context to be added to configmap-reload container
+    containerSecurityContext: {}
 
     ## configmap-reload resource requests and limits
     ## Ref: http://kubernetes.io/docs/user-guide/compute-resources/
     ##
     resources: {}
 
-kubeStateMetrics:
-  ## If false, kube-state-metrics sub-chart will not be installed
-  ##
-  enabled: true
-
-## kube-state-metrics sub-chart configurable values
-## Please see https://github.com/prometheus-community/helm-charts/tree/main/charts/kube-state-metrics
-##
-# kube-state-metrics:
-
-nodeExporter:
-  ## If false, node-exporter will not be installed
-  ##
-  enabled: true
-
-  ## If true, node-exporter pods share the host network namespace
-  ##
-  hostNetwork: true
-
-  ## If true, node-exporter pods share the host PID namespace
-  ##
-  hostPID: true
-
-  ## If true, node-exporter pods mounts host / at /host/root
-  ##
-  hostRootfs: true
-
-  ## node-exporter container name
-  ##
-  name: node-exporter
-
-  ## node-exporter container image
-  ##
-  image:
-    repository: quay.io/prometheus/node-exporter
-    tag: v1.3.0
-    pullPolicy: IfNotPresent
-
-  ## Specify if a Pod Security Policy for node-exporter must be created
-  ## Ref: https://kubernetes.io/docs/concepts/policy/pod-security-policy/
-  ##
-  podSecurityPolicy:
-    annotations: {}
-      ## Specify pod annotations
-      ## Ref: https://kubernetes.io/docs/concepts/policy/pod-security-policy/#apparmor
-      ## Ref: https://kubernetes.io/docs/concepts/policy/pod-security-policy/#seccomp
-      ## Ref: https://kubernetes.io/docs/concepts/policy/pod-security-policy/#sysctl
-      ##
-      # seccomp.security.alpha.kubernetes.io/allowedProfileNames: '*'
-      # seccomp.security.alpha.kubernetes.io/defaultProfileName: 'docker/default'
-    # apparmor.security.beta.kubernetes.io/defaultProfileName: 'runtime/default'
-
-  ## node-exporter priorityClassName
-  ##
-  priorityClassName: ""
-
-  ## Custom Update Strategy
-  ##
-  updateStrategy:
-    type: RollingUpdate
-
-  ## Additional node-exporter container arguments
-  ##
-  extraArgs: {}
-
-  ## Additional InitContainers to initialize the pod
-  ##
-  extraInitContainers: []
-
-  ## Additional node-exporter hostPath mounts
-  ##
-  extraHostPathMounts: []
-    # - name: textfile-dir
-    #   mountPath: /srv/txt_collector
-    #   hostPath: /var/lib/node-exporter
-    #   readOnly: true
-  #   mountPropagation: HostToContainer
-
-  extraConfigmapMounts: []
-    # - name: certs-configmap
-    #   mountPath: /prometheus
-    #   configMap: certs-configmap
-  #   readOnly: true
-
-  ## Node tolerations for node-exporter scheduling to nodes with taints
-  ## Ref: https://kubernetes.io/docs/concepts/configuration/assign-pod-node/
-  ##
-  tolerations: []
-    # - key: "key"
-    #   operator: "Equal|Exists"
-    #   value: "value"
-  #   effect: "NoSchedule|PreferNoSchedule|NoExecute(1.6 only)"
-
-  ## Node labels for node-exporter pod assignment
-  ## Ref: https://kubernetes.io/docs/user-guide/node-selection/
-  ##
-  nodeSelector: {}
-
-  ## Annotations to be added to node-exporter pods
-  ##
-  podAnnotations: {}
-
-  ## Labels to be added to node-exporter pods
-  ##
-  pod:
-    labels: {}
-
-  ## PodDisruptionBudget settings
-  ## ref: https://kubernetes.io/docs/concepts/workloads/pods/disruptions/
-  ##
-  podDisruptionBudget:
-    enabled: false
-    maxUnavailable: 1
-
-  ## node-exporter resource limits & requests
-  ## Ref: https://kubernetes.io/docs/user-guide/compute-resources/
-  ##
-  resources: {}
-    # limits:
-    #   cpu: 200m
-    #   memory: 50Mi
-    # requests:
-    #   cpu: 100m
-  #   memory: 30Mi
-
-  # Custom DNS configuration to be added to node-exporter pods
-  dnsConfig: {}
-    # nameservers:
-    #   - 1.2.3.4
-    # searches:
-    #   - ns1.svc.cluster-domain.example
-    #   - my.dns.search.suffix
-    # options:
-    #   - name: ndots
-  #     value: "2"
-  #   - name: edns0
-
-  ## Security context to be added to node-exporter pods
-  ##
-  securityContext:
-    fsGroup: 65534
-    runAsGroup: 65534
-    runAsNonRoot: true
-    runAsUser: 65534
-
-  service:
-    annotations:
-      prometheus.io/scrape: "true"
-    labels: {}
-
-    # Exposed as a headless service:
-    # https://kubernetes.io/docs/concepts/services-networking/service/#headless-services
-    clusterIP: None
-
-    ## List of IP addresses at which the node-exporter service is available
-    ## Ref: https://kubernetes.io/docs/user-guide/services/#external-ips
-    ##
-    externalIPs: []
-
-    hostPort: 9100
-    loadBalancerIP: ""
-    loadBalancerSourceRanges: []
-    servicePort: 9100
-    type: ClusterIP
-
 server:
   ## Prometheus server container name
   ##
-  enabled: true
+  name: server
 
   ## Use a ClusterRole (and ClusterRoleBinding)
   ## - If set to false - we define a RoleBinding in the defined namespaces ONLY
@@ -294,8 +98,6 @@ server:
   # namespaces:
   #   - yournamespace
 
-  name: server
-
   # sidecarContainers - add more containers to prometheus server
   # Key/Value where Key is the sidecar `- name: <Key>`
   # Example:
@@ -320,7 +122,10 @@ server:
   ##
   image:
     repository: quay.io/prometheus/prometheus
-    tag: v2.34.0
+    # if not set appVersion field from Chart.yaml is used
+    tag: ""
+    # When digest is set to a non-empty value, images will be pulled by digest (regardless of tag value).
+    digest: ""
     pullPolicy: IfNotPresent
 
   ## prometheus server priorityClassName
@@ -404,6 +209,8 @@ server:
   ##
   ## Useful for providing HTTP Basic Auth to healthchecks
   probeHeaders: []
+    # - name: "Authorization"
+    #   value: "Bearer ABCDEabcde12345"
 
   ## Additional Prometheus server container arguments
   ##
@@ -428,14 +235,14 @@ server:
     #   mountPath: /etc/kubernetes/certs
     #   subPath: ""
     #   hostPath: /etc/kubernetes/certs
-  #   readOnly: true
+    #   readOnly: true
 
   extraConfigmapMounts: []
     # - name: certs-configmap
     #   mountPath: /prometheus
     #   subPath: ""
     #   configMap: certs-configmap
-  #   readOnly: true
+    #   readOnly: true
 
   ## Additional Prometheus server Secret mounts
   # Defines additional mounts with secrets. Secrets must be manually created in the namespace.
@@ -444,7 +251,7 @@ server:
     #   mountPath: /etc/secrets
     #   subPath: ""
     #   secretName: prom-secret-files
-  #   readOnly: true
+    #   readOnly: true
 
   ## ConfigMap override where fullname is {{.Release.Name}}-{{.Values.server.configMapOverrideName}}
   ## Defining configMapOverrideName will cause templates/server-configmap.yaml
@@ -452,6 +259,9 @@ server:
   ##
   configMapOverrideName: ""
 
+  ## Extra labels for Prometheus server ConfigMap (ConfigMap that holds serverFiles)
+  extraConfigmapLabels: {}
+
   ingress:
     ## If true, Prometheus server Ingress will be created
     ##
@@ -499,8 +309,8 @@ server:
     #       - prometheus.domain.com
 
   ## Server Deployment Strategy type
-  # strategy:
-  #   type: Recreate
+  strategy:
+    type: Recreate
 
   ## hostAliases allows adding entries to /etc/hosts inside the containers
   hostAliases: []
@@ -515,7 +325,7 @@ server:
     # - key: "key"
     #   operator: "Equal|Exists"
     #   value: "value"
-  #   effect: "NoSchedule|PreferNoSchedule|NoExecute(1.6 only)"
+    #   effect: "NoSchedule|PreferNoSchedule|NoExecute(1.6 only)"
 
   ## Node labels for Prometheus server pod assignment
   ## Ref: https://kubernetes.io/docs/user-guide/node-selection/
@@ -542,7 +352,7 @@ server:
     ## If true, Prometheus server will create/use a Persistent Volume Claim
     ## If false, use emptyDir
     ##
-    enabled: true
+    enabled: false 
 
     ## Prometheus server data Persistent Volume access modes
     ## Must match those of existing PV or dynamic provisioner
@@ -551,6 +361,10 @@ server:
     accessModes:
       - ReadWriteOnce
 
+    ## Prometheus server data Persistent Volume labels
+    ##
+    labels: {}
+
     ## Prometheus server data Persistent Volume annotations
     ##
     annotations: {}
@@ -599,6 +413,11 @@ server:
     #  matchExpressions:
     #    - { key: environment, operator: In, values: [ dev ] }
 
+    ## Persistent Volume Name
+    ## Useful if Persistent Volumes have been provisioned in advance and you want to use a specific one
+    ##
+    # volumeName: ""
+
   emptyDir:
     ## Prometheus server emptyDir volume size limit
     ##
@@ -607,7 +426,7 @@ server:
   ## Annotations to be added to Prometheus server pods
   ##
   podAnnotations: {}
-  # iam.amazonaws.com/role: prometheus
+    # iam.amazonaws.com/role: prometheus
 
   ## Labels to be added to Prometheus server pods
   ##
@@ -629,7 +448,7 @@ server:
       ##
       # seccomp.security.alpha.kubernetes.io/allowedProfileNames: '*'
       # seccomp.security.alpha.kubernetes.io/defaultProfileName: 'docker/default'
-    # apparmor.security.beta.kubernetes.io/defaultProfileName: 'runtime/default'
+      # apparmor.security.beta.kubernetes.io/defaultProfileName: 'runtime/default'
 
   ## Use a StatefulSet if replicaCount needs to be greater than 1 (see below)
   ##
@@ -691,14 +510,14 @@ server:
     #   memory: 512Mi
     # requests:
     #   cpu: 500m
-  #   memory: 512Mi
+    #   memory: 512Mi
 
   # Required for use in managed kubernetes clusters (such as AWS EKS) with custom CNI (such as calico),
   # because control-plane managed by AWS cannot communicate with pods' IP CIDR and admission webhooks are not working
   ##
   hostNetwork: false
 
-  # When hostNetwork is enabled, you probably want to set this to ClusterFirstWithHostNet
+  # When hostNetwork is enabled, this will set to ClusterFirstWithHostNet automatically
   dnsPolicy: ClusterFirst
 
   # Use hostPort
@@ -722,8 +541,9 @@ server:
     #   - my.dns.search.suffix
     # options:
     #   - name: ndots
-  #     value: "2"
+    #     value: "2"
   #   - name: edns0
+
   ## Security context to be added to server pods
   ##
   securityContext:
@@ -732,7 +552,15 @@ server:
     runAsGroup: 65534
     fsGroup: 65534
 
+  ## Security context to be added to server container
+  ##
+  containerSecurityContext: {}
+
   service:
+    ## If false, no Service will be created for the Prometheus server
+    ##
+    enabled: true
+
     annotations: {}
     labels: {}
     clusterIP: ""
@@ -746,7 +574,7 @@ server:
     loadBalancerSourceRanges: []
     servicePort: 80
     sessionAffinity: None
-    type: ClusterIP
+    type: NodePort
 
     ## Enable gRPC port on service to allow auto discovery with thanos-querier
     gRPC:
@@ -769,266 +597,12 @@ server:
   ##
   retention: "15d"
 
-pushgateway:
-  ## If false, pushgateway will not be installed
-  ##
-  enabled: true
-
-  ## Use an alternate scheduler, e.g. "stork".
-  ## ref: https://kubernetes.io/docs/tasks/administer-cluster/configure-multiple-schedulers/
-  ##
-  # schedulerName:
-
-  ## pushgateway container name
-  ##
-  name: pushgateway
-
-  ## pushgateway container image
-  ##
-  image:
-    repository: prom/pushgateway
-    tag: v1.4.2
-    pullPolicy: IfNotPresent
-
-  ## pushgateway priorityClassName
-  ##
-  priorityClassName: ""
-
-  ## Additional pushgateway container arguments
-  ##
-  ## for example: persistence.file: /data/pushgateway.data
-  extraArgs: {}
-
-  ## Additional InitContainers to initialize the pod
-  ##
-  extraInitContainers: []
-
-  ingress:
-    ## If true, pushgateway Ingress will be created
-    ##
-    enabled: false
-
-    # For Kubernetes >= 1.18 you should specify the ingress-controller via the field ingressClassName
-    # See https://kubernetes.io/blog/2020/04/02/improvements-to-the-ingress-api-in-kubernetes-1.18/#specifying-the-class-of-an-ingress
-    # ingressClassName: nginx
-
-    ## pushgateway Ingress annotations
-    ##
-    annotations: {}
-    #   kubernetes.io/ingress.class: nginx
-    #   kubernetes.io/tls-acme: 'true'
-
-    ## pushgateway Ingress hostnames with optional path
-    ## Must be provided if Ingress is enabled
-    ##
-    hosts: []
-    #   - pushgateway.domain.com
-    #   - domain.com/pushgateway
-
-    path: /
-
-    # pathType is only for k8s >= 1.18
-    pathType: Prefix
-
-    ## Extra paths to prepend to every host configuration. This is useful when working with annotation based services.
-    extraPaths: []
-    # - path: /*
-    #   backend:
-    #     serviceName: ssl-redirect
-    #     servicePort: use-annotation
-
-    ## pushgateway Ingress TLS configuration
-    ## Secrets must be manually created in the namespace
-    ##
-    tls: []
-    #   - secretName: prometheus-alerts-tls
-    #     hosts:
-    #       - pushgateway.domain.com
-
-  ## Node tolerations for pushgateway scheduling to nodes with taints
-  ## Ref: https://kubernetes.io/docs/concepts/configuration/assign-pod-node/
-  ##
-  tolerations: []
-    # - key: "key"
-    #   operator: "Equal|Exists"
-    #   value: "value"
-  #   effect: "NoSchedule|PreferNoSchedule|NoExecute(1.6 only)"
-
-  ## Node labels for pushgateway pod assignment
-  ## Ref: https://kubernetes.io/docs/user-guide/node-selection/
-  ##
-  nodeSelector: {}
-
-  ## Annotations to be added to pushgateway pods
-  ##
-  podAnnotations: {}
-
-  ## Labels to be added to pushgateway pods
-  ##
-  podLabels: {}
-
-  ## Specify if a Pod Security Policy for node-exporter must be created
-  ## Ref: https://kubernetes.io/docs/concepts/policy/pod-security-policy/
-  ##
-  podSecurityPolicy:
-    annotations: {}
-      ## Specify pod annotations
-      ## Ref: https://kubernetes.io/docs/concepts/policy/pod-security-policy/#apparmor
-      ## Ref: https://kubernetes.io/docs/concepts/policy/pod-security-policy/#seccomp
-      ## Ref: https://kubernetes.io/docs/concepts/policy/pod-security-policy/#sysctl
-      ##
-      # seccomp.security.alpha.kubernetes.io/allowedProfileNames: '*'
-      # seccomp.security.alpha.kubernetes.io/defaultProfileName: 'docker/default'
-    # apparmor.security.beta.kubernetes.io/defaultProfileName: 'runtime/default'
-
-  replicaCount: 1
-
-  ## Annotations to be added to deployment
-  ##
-  deploymentAnnotations: {}
-
-  ## PodDisruptionBudget settings
-  ## ref: https://kubernetes.io/docs/concepts/workloads/pods/disruptions/
-  ##
-  podDisruptionBudget:
-    enabled: false
-    maxUnavailable: 1
-
-  ## pushgateway resource requests and limits
-  ## Ref: http://kubernetes.io/docs/user-guide/compute-resources/
-  ##
-  resources: {}
-    # limits:
-    #   cpu: 10m
-    #   memory: 32Mi
-    # requests:
-    #   cpu: 10m
-  #   memory: 32Mi
-
-  ## Vertical Pod Autoscaler config
-  ## Ref: https://github.com/kubernetes/autoscaler/tree/master/vertical-pod-autoscaler
-  verticalAutoscaler:
-    ## If true a VPA object will be created for the controller
-    enabled: false
-    # updateMode: "Auto"
-    # containerPolicies:
-    # - containerName: 'prometheus-pushgateway'
-
-  # Custom DNS configuration to be added to push-gateway pods
-  dnsConfig: {}
-    # nameservers:
-    #   - 1.2.3.4
-    # searches:
-    #   - ns1.svc.cluster-domain.example
-    #   - my.dns.search.suffix
-    # options:
-    #   - name: ndots
-  #     value: "2"
-  #   - name: edns0
-
-  ## Security context to be added to push-gateway pods
-  ##
-  securityContext:
-    runAsUser: 65534
-    runAsNonRoot: true
-
-  service:
-    annotations:
-      prometheus.io/probe: pushgateway
-    labels: {}
-    clusterIP: ""
-
-    ## List of IP addresses at which the pushgateway service is available
-    ## Ref: https://kubernetes.io/docs/user-guide/services/#external-ips
-    ##
-    externalIPs: []
-
-    loadBalancerIP: ""
-    loadBalancerSourceRanges: []
-    servicePort: 9091
-    type: ClusterIP
-
-  ## pushgateway Deployment Strategy type
-  # strategy:
-  #   type: Recreate
-
-  persistentVolume:
-    ## If true, pushgateway will create/use a Persistent Volume Claim
-    ##
-    enabled: false
-
-    ## pushgateway data Persistent Volume access modes
-    ## Must match those of existing PV or dynamic provisioner
-    ## Ref: http://kubernetes.io/docs/user-guide/persistent-volumes/
-    ##
-    accessModes:
-      - ReadWriteOnce
-
-    ## pushgateway data Persistent Volume Claim annotations
-    ##
-    annotations: {}
-
-    ## pushgateway data Persistent Volume existing claim name
-    ## Requires pushgateway.persistentVolume.enabled: true
-    ## If defined, PVC must be created manually before volume will be bound
-    existingClaim: ""
-
-    ## pushgateway data Persistent Volume mount root path
-    ##
-    mountPath: /data
-
-    ## pushgateway data Persistent Volume size
-    ##
-    size: 2Gi
-
-    ## pushgateway data Persistent Volume Storage Class
-    ## If defined, storageClassName: <storageClass>
-    ## If set to "-", storageClassName: "", which disables dynamic provisioning
-    ## If undefined (the default) or set to null, no storageClassName spec is
-    ##   set, choosing the default provisioner.  (gp2 on AWS, standard on
-    ##   GKE, AWS & OpenStack)
-    ##
-    # storageClass: "-"
-
-    ## pushgateway data Persistent Volume Binding Mode
-    ## If defined, volumeBindingMode: <volumeBindingMode>
-    ## If undefined (the default) or set to null, no volumeBindingMode spec is
-    ##   set, choosing the default mode.
-    ##
-    # volumeBindingMode: ""
-
-    ## Subdirectory of pushgateway data Persistent Volume to mount
-    ## Useful if the volume's root directory is not empty
-    ##
-    subPath: ""
-
-
-## alertmanager ConfigMap entries
-##
-alertmanagerFiles:
-  alertmanager.yml:
-    global: {}
-    # slack_api_url: ''
-
-    receivers:
-      - name: default-receiver
-        # slack_configs:
-        #  - channel: '@you'
-        #    send_resolved: true
-
-    route:
-      group_wait: 10s
-      group_interval: 5m
-      receiver: default-receiver
-      repeat_interval: 3h
-
 ## Prometheus server ConfigMap entries for rule files (allow prometheus labels interpolation)
 ruleFiles: {}
 
 ## Prometheus server ConfigMap entries
 ##
 serverFiles:
-
   ## Alerts configuration
   ## Ref: https://prometheus.io/docs/prometheus/latest/configuration/alerting_rules/
   alerting_rules.yml: {}
@@ -1056,7 +630,7 @@ serverFiles:
     rule_files:
       - /etc/config/recording_rules.yml
       - /etc/config/alerting_rules.yml
-      ## Below two files are DEPRECATED will be removed from this default values file
+    ## Below two files are DEPRECATED will be removed from this default values file
       - /etc/config/rules
       - /etc/config/alerts
 
@@ -1064,7 +638,7 @@ serverFiles:
       - job_name: prometheus
         static_configs:
           - targets:
-              - localhost:9090
+            - localhost:9090
 
       # A scrape configuration for running Prometheus on a Kubernetes cluster.
       # This uses separate scrape configs for cluster components (i.e. API server, node)
@@ -1192,6 +766,12 @@ serverFiles:
             target_label: __metrics_path__
             replacement: /api/v1/nodes/$1/proxy/metrics/cadvisor
 
+        # Metric relabel configs to apply to samples before ingestion.
+        # [Metric Relabeling](https://prometheus.io/docs/prometheus/latest/configuration/configuration/#metric_relabel_configs)
+        # metric_relabel_configs:
+        # - action: labeldrop
+        #   regex: (kubernetes_io_hostname|failure_domain_beta_kubernetes_io_region|beta_kubernetes_io_os|beta_kubernetes_io_arch|beta_kubernetes_io_instance_type|failure_domain_beta_kubernetes_io_zone)
+
       # Scrape config for service endpoints.
       #
       # The relabeling allows the actual service scrape endpoint to be configured
@@ -1207,6 +787,7 @@ serverFiles:
       # * `prometheus.io/param_<parameter>`: If the metrics endpoint uses parameters
       # then you can set any parameter
       - job_name: 'kubernetes-service-endpoints'
+        honor_labels: true
 
         kubernetes_sd_configs:
           - role: endpoints
@@ -1229,7 +810,7 @@ serverFiles:
           - source_labels: [__address__, __meta_kubernetes_service_annotation_prometheus_io_port]
             action: replace
             target_label: __address__
-            regex: ([^:]+)(?::\d+)?;(\d+)
+            regex: (.+?)(?::\d+)?;(\d+)
             replacement: $1:$2
           - action: labelmap
             regex: __meta_kubernetes_service_annotation_prometheus_io_param_(.+)
@@ -1261,6 +842,7 @@ serverFiles:
       # * `prometheus.io/param_<parameter>`: If the metrics endpoint uses parameters
       # then you can set any parameter
       - job_name: 'kubernetes-service-endpoints-slow'
+        honor_labels: true
 
         scrape_interval: 5m
         scrape_timeout: 30s
@@ -1283,7 +865,7 @@ serverFiles:
           - source_labels: [__address__, __meta_kubernetes_service_annotation_prometheus_io_port]
             action: replace
             target_label: __address__
-            regex: ([^:]+)(?::\d+)?;(\d+)
+            regex: (.+?)(?::\d+)?;(\d+)
             replacement: $1:$2
           - action: labelmap
             regex: __meta_kubernetes_service_annotation_prometheus_io_param_(.+)
@@ -1318,6 +900,7 @@ serverFiles:
       #
       # * `prometheus.io/probe`: Only probe services that have a value of `true`
       - job_name: 'kubernetes-services'
+        honor_labels: true
 
         metrics_path: /probe
         params:
@@ -1355,6 +938,7 @@ serverFiles:
       # * `prometheus.io/path`: If the metrics path is not `/metrics` override this.
       # * `prometheus.io/port`: Scrape the pod on the indicated port instead of the default of `9102`.
       - job_name: 'kubernetes-pods'
+        honor_labels: true
 
         kubernetes_sd_configs:
           - role: pod
@@ -1374,10 +958,15 @@ serverFiles:
             action: replace
             target_label: __metrics_path__
             regex: (.+)
-          - source_labels: [__address__, __meta_kubernetes_pod_annotation_prometheus_io_port]
+          - source_labels: [__meta_kubernetes_pod_annotation_prometheus_io_port, __meta_kubernetes_pod_ip]
             action: replace
-            regex: ([^:]+)(?::\d+)?;(\d+)
-            replacement: $1:$2
+            regex: (\d+);(([A-Fa-f0-9]{1,4}::?){1,7}[A-Fa-f0-9]{1,4})
+            replacement: '[$2]:$1'
+            target_label: __address__
+          - source_labels: [__meta_kubernetes_pod_annotation_prometheus_io_port, __meta_kubernetes_pod_ip]
+            action: replace
+            regex: (\d+);((([0-9]+?)(\.|$)){4})
+            replacement: $2:$1
             target_label: __address__
           - action: labelmap
             regex: __meta_kubernetes_pod_annotation_prometheus_io_param_(.+)
@@ -1406,6 +995,7 @@ serverFiles:
       # * `prometheus.io/path`: If the metrics path is not `/metrics` override this.
       # * `prometheus.io/port`: Scrape the pod on the indicated port instead of the default of `9102`.
       - job_name: 'kubernetes-pods-slow'
+        honor_labels: true
 
         scrape_interval: 5m
         scrape_timeout: 30s
@@ -1425,10 +1015,15 @@ serverFiles:
             action: replace
             target_label: __metrics_path__
             regex: (.+)
-          - source_labels: [__address__, __meta_kubernetes_pod_annotation_prometheus_io_port]
+          - source_labels: [__meta_kubernetes_pod_annotation_prometheus_io_port, __meta_kubernetes_pod_ip]
             action: replace
-            regex: ([^:]+)(?::\d+)?;(\d+)
-            replacement: $1:$2
+            regex: (\d+);(([A-Fa-f0-9]{1,4}::?){1,7}[A-Fa-f0-9]{1,4})
+            replacement: '[$2]:$1'
+            target_label: __address__
+          - source_labels: [__meta_kubernetes_pod_annotation_prometheus_io_port, __meta_kubernetes_pod_ip]
+            action: replace
+            regex: (\d+);((([0-9]+?)(\.|$)){4})
+            replacement: $2:$1
             target_label: __address__
           - action: labelmap
             regex: __meta_kubernetes_pod_annotation_prometheus_io_param_(.+)
@@ -1448,29 +1043,29 @@ serverFiles:
 # adds additional scrape configs to prometheus.yml
 # must be a string so you have to add a | after extraScrapeConfigs:
 # example adds prometheus-blackbox-exporter scrape config
-extraScrapeConfigs:
-# - job_name: 'prometheus-blackbox-exporter'
-#   metrics_path: /probe
-#   params:
-#     module: [http_2xx]
-#   static_configs:
-#     - targets:
-#       - https://example.com
-#   relabel_configs:
-#     - source_labels: [__address__]
-#       target_label: __param_target
-#     - source_labels: [__param_target]
-#       target_label: instance
-#     - target_label: __address__
-#       replacement: prometheus-blackbox-exporter:9115
+extraScrapeConfigs: ""
+  # - job_name: 'prometheus-blackbox-exporter'
+  #   metrics_path: /probe
+  #   params:
+  #     module: [http_2xx]
+  #   static_configs:
+  #     - targets:
+  #       - https://example.com
+  #   relabel_configs:
+  #     - source_labels: [__address__]
+  #       target_label: __param_target
+  #     - source_labels: [__param_target]
+  #       target_label: instance
+  #     - target_label: __address__
+  #       replacement: prometheus-blackbox-exporter:9115
 
 # Adds option to add alert_relabel_configs to avoid duplicate alerts in alertmanager
 # useful in H/A prometheus with different external labels but the same alerts
-alertRelabelConfigs:
-# alert_relabel_configs:
-# - source_labels: [dc]
-#   regex: (.+)\d+
-#   target_label: dc
+alertRelabelConfigs: {}
+  # alert_relabel_configs:
+  # - source_labels: [dc]
+  #   regex: (.+)\d+
+  #   target_label: dc
 
 networkPolicy:
   ## Enable creation of NetworkPolicy resources.
@@ -1478,4 +1073,57 @@ networkPolicy:
   enabled: false
 
 # Force namespace of namespaced resources
-forceNamespace: null
+forceNamespace: ""
+
+# Configuration of subcharts defined in Chart.yaml
+
+## alertmanager sub-chart configurable values
+## Please see https://github.com/prometheus-community/helm-charts/tree/main/charts/alertmanager
+##
+alertmanager:
+  ## If false, alertmanager will not be installed
+  ##
+  enabled: true
+  
+  persistence:
+    enabled: false
+
+  podSecurityContext:
+    runAsUser: 65534
+    runAsNonRoot: true
+    runAsGroup: 65534
+    fsGroup: 65534
+
+## kube-state-metrics sub-chart configurable values
+## Please see https://github.com/prometheus-community/helm-charts/tree/main/charts/kube-state-metrics
+##
+kube-state-metrics:
+  ## If false, kube-state-metrics sub-chart will not be installed
+  ##
+  enabled: true
+
+## promtheus-node-exporter sub-chart configurable values
+## Please see https://github.com/prometheus-community/helm-charts/tree/main/charts/prometheus-node-exporter
+##
+prometheus-node-exporter:
+  ## If false, node-exporter will not be installed
+  ##
+  enabled: true
+
+  rbac:
+    pspEnabled: false
+
+  containerSecurityContext:
+    allowPrivilegeEscalation: false
+
+## pprometheus-pushgateway sub-chart configurable values
+## Please see https://github.com/prometheus-community/helm-charts/tree/main/charts/prometheus-pushgateway
+##
+prometheus-pushgateway:
+  ## If false, pushgateway will not be installed
+  ##
+  enabled: true
+
+  # Optional service annotations
+  serviceAnnotations:
+    prometheus.io/probe: pushgateway
diff --git a/deploy/charts/admin-stack/templates/apps/_zookeeper.tpl b/deploy/charts/admin-stack/charts/zookeeper/templates/_charts.tpl
similarity index 100%
rename from deploy/charts/admin-stack/templates/apps/_zookeeper.tpl
rename to deploy/charts/admin-stack/charts/zookeeper/templates/_charts.tpl
diff --git a/deploy/charts/admin-stack/templates/apps/_kube-state-metrics.tpl b/deploy/charts/admin-stack/templates/apps/_kube-state-metrics.tpl
deleted file mode 100644
index 1ecb303b..00000000
--- a/deploy/charts/admin-stack/templates/apps/_kube-state-metrics.tpl
+++ /dev/null
@@ -1,10 +0,0 @@
-{{/*
-Create the name of the service account to use
-*/}}
-{{- define "kube-state-metrics.serviceAccountName" -}}
-{{- if .Values.serviceAccount.create -}}
-    {{ default (include "kube-state-metrics.fullname" .) .Values.serviceAccount.name }}
-{{- else -}}
-    {{ default "default" .Values.serviceAccount.name }}
-{{- end -}}
-{{- end -}}
\ No newline at end of file
diff --git a/deploy/charts/admin-stack/templates/apps/_node-exporter.tpl b/deploy/charts/admin-stack/templates/apps/_node-exporter.tpl
deleted file mode 100644
index f55b21a7..00000000
--- a/deploy/charts/admin-stack/templates/apps/_node-exporter.tpl
+++ /dev/null
@@ -1,43 +0,0 @@
-{{/*
-Common labels
-*/}}
-{{- define "prometheus-node-exporter.labels" -}}
-helm.sh/chart: {{ include "prometheus-node-exporter.chart" . }}
-app.kubernetes.io/managed-by: {{ .Release.Service }}
-app.kubernetes.io/component: metrics
-app.kubernetes.io/part-of: {{ include "prometheus-node-exporter.name" . }}
-{{ include "prometheus-node-exporter.selectorLabels" . }}
-{{- with .Chart.AppVersion }}
-app.kubernetes.io/version: {{ . | quote }}
-{{- end }}
-{{- with .Values.podLabels }}
-{{ toYaml . }}
-{{- end }}
-{{- if .Values.releaseLabel }}
-release: {{ .Release.Name }}
-{{- end }}
-{{- end }}
-
-{{- define "prometheus.nodeExporter.labels" -}}
-{{ include "prometheus.nodeExporter.matchLabels" . }}
-{{ include "prometheus.common.metaLabels" . }}
-{{- end -}}
-
-{{/* Sets default scrape limits for servicemonitor */}}
-{{- define "servicemonitor.scrapeLimits" -}}
-{{- with .sampleLimit }}
-sampleLimit: {{ . }}
-{{- end }}
-{{- with .targetLimit }}
-targetLimit: {{ . }}
-{{- end }}
-{{- with .labelLimit }}
-labelLimit: {{ . }}
-{{- end }}
-{{- with .labelNameLengthLimit }}
-labelNameLengthLimit: {{ . }}
-{{- end }}
-{{- with .labelValueLengthLimit }}
-labelValueLengthLimit: {{ . }}
-{{- end }}
-{{- end }}
diff --git a/deploy/charts/admin-stack/templates/apps/_prometheus.tpl b/deploy/charts/admin-stack/templates/apps/_prometheus.tpl
deleted file mode 100644
index df826519..00000000
--- a/deploy/charts/admin-stack/templates/apps/_prometheus.tpl
+++ /dev/null
@@ -1,122 +0,0 @@
-{{/*
-Create a default fully qualified app name.
-We truncate at 63 chars because some Kubernetes name fields are limited to this (by the DNS naming spec).
-*/}}
-{{- define "prometheus.fullname" -}}
-{{- if .Values.fullnameOverride -}}
-{{- .Values.fullnameOverride | trunc 63 | trimSuffix "-" -}}
-{{- else -}}
-{{- $name := default .Chart.Name .Values.nameOverride -}}
-{{- if contains $name .Release.Name -}}
-{{- .Release.Name | trunc 63 | trimSuffix "-" -}}
-{{- else -}}
-{{- printf "%s-%s" .Release.Name $name | trunc 63 | trimSuffix "-" -}}
-{{- end -}}
-{{- end -}}
-{{- end -}}
-
-{{/* vim: set filetype=mustache: */}}
-{{/*
-Expand the name of the chart.
-*/}}
-{{- define "prometheus.name" -}}
-{{- default .Chart.Name .Values.nameOverride | trunc 63 | trimSuffix "-" -}}
-{{- end -}}
-
-{{/*
-Create chart name and version as used by the chart label.
-*/}}
-{{- define "prometheus.chart" -}}
-{{- printf "%s-%s" .Chart.Name .Chart.Version | replace "+" "_" | trunc 63 | trimSuffix "-" -}}
-{{- end -}}
-
-
-{{- define "prometheus.server.labels" -}}
-{{ include "prometheus.server.matchLabels" . }}
-{{ include "prometheus.common.metaLabels" . }}
-{{- end -}}
-
-{{- define "prometheus.server.matchLabels" -}}
-component: {{ .Values.server.name | quote }}
-{{ include "prometheus.common.matchLabels" . }}
-{{- end -}}
-
-{{/*
-Create unified labels for prometheus components
-*/}}
-{{- define "prometheus.common.matchLabels" -}}
-app: {{ template "prometheus.name" . }}
-release: {{ .Release.Name }}
-{{- end -}}
-
-{{- define "prometheus.common.metaLabels" -}}
-chart: {{ template "prometheus.chart" . }}
-heritage: {{ .Release.Service }}
-{{- end -}}
-
-{{/*
-Define the prometheus.namespace template if set with forceNamespace or .Release.Namespace is set
-*/}}
-{{- define "prometheus.namespace" -}}
-{{- if .Values.forceNamespace -}}
-{{ printf "namespace: %s" .Values.forceNamespace }}
-{{- else -}}
-{{ printf "namespace: %s" .Release.Namespace }}
-{{- end -}}
-{{- end -}}
-
-{{/*
-Create a fully qualified Prometheus server name.
-We truncate at 63 chars because some Kubernetes name fields are limited to this (by the DNS naming spec).
-*/}}
-{{- define "prometheus.server.fullname" -}}
-{{- if .Values.server.fullnameOverride -}}
-{{- .Values.server.fullnameOverride | trunc 63 | trimSuffix "-" -}}
-{{- else -}}
-{{- $name := default .Chart.Name .Values.nameOverride -}}
-{{- if contains $name .Release.Name -}}
-{{- printf "%s-%s" .Release.Name .Values.server.name | trunc 63 | trimSuffix "-" -}}
-{{- else -}}
-{{- printf "%s-%s-%s" .Release.Name $name .Values.server.name | trunc 63 | trimSuffix "-" -}}
-{{- end -}}
-{{- end -}}
-{{- end -}}
-
-{{/*
-Create the name of the service account to use for the server component
-*/}}
-{{- define "prometheus.serviceAccountName.server" -}}
-{{- if .Values.serviceAccounts.server.create -}}
-    {{ default (include "prometheus.server.fullname" .) .Values.serviceAccounts.server.name }}
-{{- else -}}
-    {{ default "default" .Values.serviceAccounts.server.name }}
-{{- end -}}
-{{- end -}}
-
-{{/*
-Get KubeVersion removing pre-release information.
-*/}}
-{{- define "prometheus.kubeVersion" -}}
-  {{- default .Capabilities.KubeVersion.Version (regexFind "v[0-9]+\\.[0-9]+\\.[0-9]+" .Capabilities.KubeVersion.Version) -}}
-{{- end -}}
-
-{{/*
-Return the appropriate apiVersion for daemonset.
-*/}}
-{{- define "prometheus.daemonset.apiVersion" -}}
-{{- print "apps/v1" -}}
-{{- end -}}
-
-{{/*
-Return the appropriate apiVersion for networkpolicy.
-*/}}
-{{- define "prometheus.networkPolicy.apiVersion" -}}
-{{- print "networking.k8s.io/v1" -}}
-{{- end -}}
-
-{{/*
-Return the appropriate apiVersion for podsecuritypolicy.
-*/}}
-{{- define "prometheus.podSecurityPolicy.apiVersion" -}}
-{{- print "policy/v1beta1" -}}
-{{- end -}}
\ No newline at end of file
diff --git a/deploy/charts/admin-stack/templates/apps/_pushgateway.tpl b/deploy/charts/admin-stack/templates/apps/_pushgateway.tpl
deleted file mode 100644
index b31ed217..00000000
--- a/deploy/charts/admin-stack/templates/apps/_pushgateway.tpl
+++ /dev/null
@@ -1,39 +0,0 @@
-{{- define "prometheus.pushgateway.labels" -}}
-{{ include "prometheus.pushgateway.matchLabels" . }}
-{{ include "prometheus.common.metaLabels" . }}
-{{- end -}}
-
-{{/*
-Return the appropriate apiVersion for networkpolicy.
-*/}}
-{{- define "prometheus-pushgateway.networkPolicy.apiVersion" -}}
-{{- if semverCompare ">=1.4-0, <1.7-0" .Capabilities.KubeVersion.GitVersion }}
-{{- print "extensions/v1beta1" }}
-{{- else if semverCompare "^1.7-0" .Capabilities.KubeVersion.GitVersion }}
-{{- print "networking.k8s.io/v1" }}
-{{- end }}
-{{- end }}
-
-{{/*
-Define PDB apiVersion
-*/}}
-{{- define "prometheus-pushgateway.pdb.apiVersion" -}}
-{{- if $.Capabilities.APIVersions.Has "policy/v1/PodDisruptionBudget" }}
-{{- print "policy/v1" }}
-{{- else }}
-{{- print "policy/v1beta" }}
-{{- end }}
-{{- end }}
-
-{{/*
-Define Ingress apiVersion
-*/}}
-{{- define "prometheus-pushgateway.ingress.apiVersion" -}}
-{{- if semverCompare ">=1.19-0" .Capabilities.KubeVersion.GitVersion }}
-{{- print "networking.k8s.io/v1" }}
-{{- else if semverCompare ">=1.14-0" .Capabilities.KubeVersion.GitVersion }}
-{{- print "networking.k8s.io/v1beta1" }}
-{{- else }}
-{{- print "extensions/v1beta1" }}
-{{- end }}
-{{- end }}