diff --git a/jsonnet/kube-prometheus/alertmanager/alertmanager.libsonnet b/jsonnet/kube-prometheus/alertmanager/alertmanager.libsonnet
index 6c9acdaed438ca786d55cd80219f559252167105..c857344df97dbfb2e43fd076ad74333d4813fec5 100644
--- a/jsonnet/kube-prometheus/alertmanager/alertmanager.libsonnet
+++ b/jsonnet/kube-prometheus/alertmanager/alertmanager.libsonnet
@@ -51,6 +51,17 @@
         ],
       },
       replicas: 3,
+      labels: {
+        'app.kubernetes.io/name': 'alertmanager-' + $._config.alertmanager.name,
+        'app.kubernetes.io/version': $._config.versions.alertmanager,
+        'app.kubernetes.io/component': 'router',
+        'app.kubernetes.io/part-of': 'kube-prometheus',
+      },
+      selectorLabels: {
+        [labelName]: $._config.alertmanager.labels[labelName]
+        for labelName in std.objectFields($._config.alertmanager.labels)
+        if !std.setMember(labelName, ['app.kubernetes.io/version'])
+      },
     },
   },
 
@@ -87,13 +98,16 @@
       metadata: {
         name: 'alertmanager-' + $._config.alertmanager.name,
         namespace: $._config.namespace,
-        labels: { alertmanager: $._config.alertmanager.name },
+        labels: { alertmanager: $._config.alertmanager.name } + $._config.alertmanager.labels,
       },
       spec: {
         ports: [
           { name: 'web', targetPort: 'web', port: 9093 },
         ],
-        selector: { app: 'alertmanager', alertmanager: $._config.alertmanager.name },
+        selector: {
+          app: 'alertmanager',
+          alertmanager: $._config.alertmanager.name
+        } + $._config.alertmanager.selectorLabels,
         sessionAffinity: 'ClientIP',
       },
     },
@@ -104,15 +118,13 @@
       metadata: {
         name: 'alertmanager',
         namespace: $._config.namespace,
-        labels: {
-          'k8s-app': 'alertmanager',
-        },
+        labels: $._config.alertmanager.labels,
       },
       spec: {
         selector: {
           matchLabels: {
             alertmanager: $._config.alertmanager.name,
-          },
+          } + $._config.alertmanager.selectorLabels,
         },
         endpoints: [
           { port: 'web', interval: '30s' },
@@ -128,12 +140,15 @@
         namespace: $._config.namespace,
         labels: {
           alertmanager: $._config.alertmanager.name,
-        },
+        } + $._config.alertmanager.labels,
       },
       spec: {
         replicas: $._config.alertmanager.replicas,
         version: $._config.versions.alertmanager,
         image: $._config.imageRepos.alertmanager + ':' + $._config.versions.alertmanager,
+        podMetadata: {
+          labels: $._config.alertmanager.labels,
+        },
         nodeSelector: { 'kubernetes.io/os': 'linux' },
         serviceAccountName: 'alertmanager-' + $._config.alertmanager.name,
         securityContext: {
diff --git a/jsonnet/kube-prometheus/kube-prometheus-bootkube.libsonnet b/jsonnet/kube-prometheus/kube-prometheus-bootkube.libsonnet
index 284544c12196e95179da8cef44329961bfe8421c..8e73509dd8e469b35a8256271ef90ff26b9ab01b 100644
--- a/jsonnet/kube-prometheus/kube-prometheus-bootkube.libsonnet
+++ b/jsonnet/kube-prometheus/kube-prometheus-bootkube.libsonnet
@@ -18,24 +18,24 @@ local service(name, namespace, labels, selector, ports) = {
     kubeControllerManagerPrometheusDiscoveryService: service(
       'kube-controller-manager-prometheus-discovery',
       'kube-system',
-      { 'k8s-app': 'kube-controller-manager' },
-      { 'k8s-app': 'kube-controller-manager' },
+      { 'app.kubernetes.io/name': 'kube-controller-manager' },
+      { 'app.kubernetes.io/name': 'kube-controller-manager' },
       [{ name: 'https-metrics', port: 10257, targetPort: 10257 }]
     ),
 
     kubeSchedulerPrometheusDiscoveryService: service(
       'kube-scheduler-prometheus-discovery',
       'kube-system',
-      { 'k8s-app': 'kube-scheduler' },
-      { 'k8s-app': 'kube-scheduler' },
+      { 'app.kubernetes.io/name': 'kube-scheduler' },
+      { 'app.kubernetes.io/name': 'kube-scheduler' },
       [{ name: 'https-metrics', port: 10259, targetPort: 10259 }]
     ),
 
     kubeDnsPrometheusDiscoveryService: service(
       'kube-dns-prometheus-discovery',
-      'kube-syste',
-      { 'k8s-app': 'kube-dns' },
-      { 'k8s-app': 'kube-dns' },
+      'kube-system',
+      { 'app.kubernetes.io/name': 'kube-dns' },
+      { 'app.kubernetes.io/name': 'kube-dns' },
       [{ name: 'http-metrics-skydns', port: 10055, targetPort: 10055 }, { name: 'http-metrics-dnsmasq', port: 10054, targetPort: 10054 }]
     ),
   },
diff --git a/jsonnet/kube-prometheus/kube-prometheus-eks.libsonnet b/jsonnet/kube-prometheus/kube-prometheus-eks.libsonnet
index d4dd965284f359fb898e8d98506f2d7b748b6b87..3f6ab80dd9e80393a573ddbd860cf2e4b578e1af 100644
--- a/jsonnet/kube-prometheus/kube-prometheus-eks.libsonnet
+++ b/jsonnet/kube-prometheus/kube-prometheus-eks.libsonnet
@@ -23,13 +23,13 @@
       metadata: {
         name: 'aws-node',
         namespace: 'kube-system',
-        labels: { 'k8s-app': 'aws-node' },
+        labels: { 'app.kubernetes.io/name': 'aws-node' },
       },
       spec: {
         ports: [
           { name: 'cni-metrics-port', port: 61678, targetPort: 61678 },
         ],
-        selector: { 'k8s-app': 'aws-node' },
+        selector: { 'app.kubernetes.io/name': 'aws-node' },
         clusterIP: 'None',
       },
     },
@@ -41,14 +41,14 @@
         name: 'awsekscni',
         namespace: $._config.namespace,
         labels: {
-          'k8s-app': 'eks-cni',
+          'app.kubernetes.io/name': 'eks-cni',
         },
       },
       spec: {
-        jobLabel: 'k8s-app',
+        jobLabel: 'app.kubernetes.io/name',
         selector: {
           matchLabels: {
-            'k8s-app': 'aws-node',
+            'app.kubernetes.io/name': 'aws-node',
           },
         },
         namespaceSelector: {
diff --git a/jsonnet/kube-prometheus/kube-prometheus-kops-coredns.libsonnet b/jsonnet/kube-prometheus/kube-prometheus-kops-coredns.libsonnet
index a003fc75af1124207037a4695ea7e61a91133946..749e937c4ff72d02a5a67fc52e887327eeec5b78 100644
--- a/jsonnet/kube-prometheus/kube-prometheus-kops-coredns.libsonnet
+++ b/jsonnet/kube-prometheus/kube-prometheus-kops-coredns.libsonnet
@@ -6,13 +6,13 @@
       metadata: {
         name: 'kube-dns-prometheus-discovery',
         namespace: 'kube-system',
-        labels: { 'k8s-app': 'kube-dns' },
+        labels: { 'app.kubernetes.io/name': 'kube-dns' },
       },
       spec: {
         ports: [
           { name: 'metrics', port: 9153, targetPort: 9153 },
         ],
-        selector: { 'k8s-app': 'kube-dns' },
+        selector: { 'app.kubernetes.io/name': 'kube-dns' },
         clusterIP: 'None',
       },
     },
diff --git a/jsonnet/kube-prometheus/kube-prometheus-kops.libsonnet b/jsonnet/kube-prometheus/kube-prometheus-kops.libsonnet
index 8db8c2990e139dae27b7e8d46f02ed875018c421..5615ae20f4616200ae962ba33077e4fd5ae55ae7 100644
--- a/jsonnet/kube-prometheus/kube-prometheus-kops.libsonnet
+++ b/jsonnet/kube-prometheus/kube-prometheus-kops.libsonnet
@@ -18,22 +18,22 @@ local service(name, namespace, labels, selector, ports) = {
     kubeControllerManagerPrometheusDiscoveryService: service(
       'kube-controller-manager-prometheus-discovery',
       'kube-system',
-      { 'k8s-app': 'kube-controller-manager' },
-      { 'k8s-app': 'kube-controller-manager' },
+      { 'app.kubernetes.io/name': 'kube-controller-manager' },
+      { 'app.kubernetes.io/name': 'kube-controller-manager' },
       [{ name: 'https-metrics', port: 10257, targetPort: 10257 }]
     ),
     kubeSchedulerPrometheusDiscoveryService: service(
       'kube-controller-manager-prometheus-discovery',
       'kube-system',
-      { 'k8s-app': 'kube-scheduler' },
-      { 'k8s-app': 'kube-scheduler' },
+      { 'app.kubernetes.io/name': 'kube-scheduler' },
+      { 'app.kubernetes.io/name': 'kube-scheduler' },
       [{ name: 'https-metrics', port: 10259, targetPort: 10259 }]
     ),
     kubeDnsPrometheusDiscoveryService: service(
       'kube-controller-manager-prometheus-discovery',
       'kube-system',
-      { 'k8s-app': 'kube-dns' },
-      { 'k8s-app': 'kube-dns' },
+      { 'app.kubernetes.io/name': 'kube-dns' },
+      { 'app.kubernetes.io/name': 'kube-dns' },
       [{ name: 'metrics', port: 10055, targetPort: 10055 }, { name: 'http-metrics-dnsmasq', port: 10054, targetPort: 10054 }]
     ),
   },
diff --git a/jsonnet/kube-prometheus/kube-prometheus-kube-aws.libsonnet b/jsonnet/kube-prometheus/kube-prometheus-kube-aws.libsonnet
index ae8d364d2492cf6a05037430ff925187913d3b6b..04d67d0055e0faee5dfcb878c70cb95ce44f61c2 100644
--- a/jsonnet/kube-prometheus/kube-prometheus-kube-aws.libsonnet
+++ b/jsonnet/kube-prometheus/kube-prometheus-kube-aws.libsonnet
@@ -18,15 +18,15 @@ local service(name, namespace, labels, selector, ports) = {
     kubeControllerManagerPrometheusDiscoveryService: service(
       'kube-controller-manager-prometheus-discovery',
       'kube-system',
-      { 'k8s-app': 'kube-controller-manager' },
-      { 'k8s-app': 'kube-controller-manager' },
+      { 'app.kubernetes.io/name': 'kube-controller-manager' },
+      { 'app.kubernetes.io/name': 'kube-controller-manager' },
       [{ name: 'https-metrics', port: 10257, targetPort: 10257 }],
     ),
     kubeSchedulerPrometheusDiscoveryService: service(
       'kube-scheduler-prometheus-discovery',
       'kube-system',
-      { 'k8s-app': 'kube-scheduler' },
-      { 'k8s-app': 'kube-scheduler' },
+      { 'app.kubernetes.io/name': 'kube-scheduler' },
+      { 'app.kubernetes.io/name': 'kube-scheduler' },
       [{ name: 'https-metrics', port: 10259, targetPort: 10259 }],
     ),
   },
diff --git a/jsonnet/kube-prometheus/kube-prometheus-kubeadm.libsonnet b/jsonnet/kube-prometheus/kube-prometheus-kubeadm.libsonnet
index 543e0cea9a413542e897e37323f1c7368f2843a3..3621c2aac5d9493ef2ae2f12e6f8a24759ea333e 100644
--- a/jsonnet/kube-prometheus/kube-prometheus-kubeadm.libsonnet
+++ b/jsonnet/kube-prometheus/kube-prometheus-kubeadm.libsonnet
@@ -18,14 +18,14 @@ local service(name, namespace, labels, selector, ports) = {
     kubeControllerManagerPrometheusDiscoveryService: service(
       'kube-controller-manager-prometheus-discovery',
       'kube-system',
-      { 'k8s-app': 'kube-controller-manager' },
+      { 'app.kubernetes.io/name': 'kube-controller-manager' },
       { component: 'kube-controller-manager' },
       [{ name: 'https-metrics', port: 10257, targetPort: 10257 }]
     ),
     kubeSchedulerPrometheusDiscoveryService: service(
       'kube-scheduler-prometheus-discovery',
       'kube-system',
-      { 'k8s-app': 'kube-scheduler' },
+      { 'app.kubernetes.io/name': 'kube-scheduler' },
       { component: 'kube-scheduler' },
       [{ name: 'https-metrics', port: 10259, targetPort: 10259 }],
     ),
diff --git a/jsonnet/kube-prometheus/kube-prometheus-kubespray.libsonnet b/jsonnet/kube-prometheus/kube-prometheus-kubespray.libsonnet
index c1e7682d57842bfa039cec4bf20c6cca11e93849..f34cab677c51d99611827dcebc8786d98ea255e1 100644
--- a/jsonnet/kube-prometheus/kube-prometheus-kubespray.libsonnet
+++ b/jsonnet/kube-prometheus/kube-prometheus-kubespray.libsonnet
@@ -19,16 +19,16 @@ local service(name, namespace, labels, selector, ports) = {
     kubeControllerManagerPrometheusDiscoveryService: service(
       'kube-controller-manager-prometheus-discovery',
       'kube-system',
-      { 'k8s-app': 'kube-controller-manager' },
-      { 'k8s-app': 'kube-controller-manager' },
+      { 'app.kubernetes.io/name': 'kube-controller-manager' },
+      { 'app.kubernetes.io/name': 'kube-controller-manager' },
       [{ name: 'https-metrics', port: 10257, targetPort: 10257 }]
     ),
 
     kubeSchedulerPrometheusDiscoveryService: service(
       'kube-scheduler-prometheus-discovery',
       'kube-system',
-      { 'k8s-app': 'kube-scheduler' },
-      { 'k8s-app': 'kube-scheduler' },
+      { 'app.kubernetes.io/name': 'kube-scheduler' },
+      { 'app.kubernetes.io/name': 'kube-scheduler' },
       [{ name: 'https-metrics', port: 10259, targetPort: 10259 }],
     ),
 
@@ -36,7 +36,7 @@ local service(name, namespace, labels, selector, ports) = {
       spec+: {
         selector+: {
           matchLabels: {
-            'k8s-app': 'kube-scheduler',
+            'app.kubernetes.io/name': 'kube-scheduler',
           },
         },
       },
@@ -46,7 +46,7 @@ local service(name, namespace, labels, selector, ports) = {
       spec+: {
         selector+: {
           matchLabels: {
-            'k8s-app': 'kube-controller-manager',
+            'app.kubernetes.io/name': 'kube-controller-manager',
           },
         },
       },
diff --git a/jsonnet/kube-prometheus/kube-prometheus-static-etcd.libsonnet b/jsonnet/kube-prometheus/kube-prometheus-static-etcd.libsonnet
index 2994023d39cfd434a39007a19210890c11d69d02..e4c3a14d08b0ef21535432921bb032daa2f6cb9b 100644
--- a/jsonnet/kube-prometheus/kube-prometheus-static-etcd.libsonnet
+++ b/jsonnet/kube-prometheus/kube-prometheus-static-etcd.libsonnet
@@ -16,7 +16,7 @@
       metadata: {
         name: 'etcd',
         namespace: 'kube-system',
-        labels: { 'k8s-app': 'etcd' },
+        labels: { 'app.kubernetes.io/name': 'etcd' },
       },
       spec: {
         ports: [
@@ -31,7 +31,7 @@
       metadata: {
         name: 'etcd',
         namespace: 'kube-system',
-        labels: { 'k8s-app': 'etcd' },
+        labels: { 'app.kubernetes.io/name': 'etcd' },
       },
       subsets: [{
         addresses: [
@@ -50,11 +50,11 @@
         name: 'etcd',
         namespace: 'kube-system',
         labels: {
-          'k8s-app': 'etcd',
+          'app.kubernetes.io/name': 'etcd',
         },
       },
       spec: {
-        jobLabel: 'k8s-app',
+        jobLabel: 'app.kubernetes.io/name',
         endpoints: [
           {
             port: 'metrics',
@@ -72,7 +72,7 @@
         ],
         selector: {
           matchLabels: {
-            'k8s-app': 'etcd',
+            'app.kubernetes.io/name': 'etcd',
           },
         },
       },
diff --git a/jsonnet/kube-prometheus/kube-prometheus-thanos-sidecar.libsonnet b/jsonnet/kube-prometheus/kube-prometheus-thanos-sidecar.libsonnet
index 0f762eb810abb770feea54fc272df6f6bc48184c..01620d4a837f9a23851331e828724a32049fdbd8 100644
--- a/jsonnet/kube-prometheus/kube-prometheus-thanos-sidecar.libsonnet
+++ b/jsonnet/kube-prometheus/kube-prometheus-thanos-sidecar.libsonnet
@@ -56,7 +56,7 @@
           name: 'thanos-sidecar',
           namespace: p.namespace,
           labels: {
-            'k8s-app': 'prometheus',
+            'app.kubernetes.io/name': 'prometheus',
           },
         },
         spec: {
diff --git a/jsonnet/kube-prometheus/kube-prometheus-weave-net.libsonnet b/jsonnet/kube-prometheus/kube-prometheus-weave-net.libsonnet
index 19e7b934294977faa7f326b8854c27a255d94f82..0755e60c83143931fb6861b34db7ca87e25ea68f 100644
--- a/jsonnet/kube-prometheus/kube-prometheus-weave-net.libsonnet
+++ b/jsonnet/kube-prometheus/kube-prometheus-weave-net.libsonnet
@@ -6,7 +6,7 @@
       metadata: {
         name: 'weave-net',
         namespace: 'kube-system',
-        labels: { 'k8s-app': 'weave-net' },
+        labels: { 'app.kubernetes.io/name': 'weave-net' },
       },
       spec: {
         ports: [
@@ -22,12 +22,12 @@
       metadata: {
         name: 'weave-net',
         labels: {
-          'k8s-app': 'weave-net',
+          'app.kubernetes.io/name': 'weave-net',
         },
         namespace: 'monitoring',
       },
       spec: {
-        jobLabel: 'k8s-app',
+        jobLabel: 'app.kubernetes.io/name',
         endpoints: [
           {
             port: 'weave-net-metrics',
@@ -42,7 +42,7 @@
         },
         selector: {
           matchLabels: {
-            'k8s-app': 'weave-net',
+            'app.kubernetes.io/name': 'weave-net',
           },
         },
       },
diff --git a/jsonnet/kube-prometheus/kube-state-metrics/kube-state-metrics.libsonnet b/jsonnet/kube-prometheus/kube-state-metrics/kube-state-metrics.libsonnet
index f3a0e0d9e3f458c30be98083ffedd2ebf7697169..4e1709dd57fef362627af17aca79b458f21c9933 100644
--- a/jsonnet/kube-prometheus/kube-state-metrics/kube-state-metrics.libsonnet
+++ b/jsonnet/kube-prometheus/kube-state-metrics/kube-state-metrics.libsonnet
@@ -12,6 +12,17 @@ local ksm = import 'github.com/kubernetes/kube-state-metrics/jsonnet/kube-state-
     kubeStateMetrics+:: {
       scrapeInterval: '30s',
       scrapeTimeout: '30s',
+      labels: {
+        'app.kubernetes.io/name': 'kube-state-metrics',
+        'app.kubernetes.io/version': $._config.versions.kubeStateMetrics,
+        'app.kubernetes.io/component': 'exporter',
+        'app.kubernetes.io/part-of': 'kube-prometheus',
+      },
+      selectorLabels: {
+        [labelName]: $._config.kubeStateMetrics.labels[labelName]
+        for labelName in std.objectFields($._config.kubeStateMetrics.labels)
+        if !std.setMember(labelName, ['app.kubernetes.io/version'])
+      },
     },
   },
   kubeStateMetrics+::
@@ -21,6 +32,8 @@ local ksm = import 'github.com/kubernetes/kube-state-metrics/jsonnet/kube-state-
       namespace:: $._config.namespace,
       version:: $._config.versions.kubeStateMetrics,
       image:: $._config.imageRepos.kubeStateMetrics + ':v' + $._config.versions.kubeStateMetrics,
+      commonLabels:: $._config.kubeStateMetrics.labels,
+      podLabels:: $._config.kubeStateMetrics.selectorLabels,
       service+: {
         spec+: {
           ports: [
@@ -58,18 +71,11 @@ local ksm = import 'github.com/kubernetes/kube-state-metrics/jsonnet/kube-state-
           metadata: {
             name: 'kube-state-metrics',
             namespace: $._config.namespace,
-            labels: {
-              'app.kubernetes.io/name': 'kube-state-metrics',
-              'app.kubernetes.io/version': version,
-            },
+            labels: $._config.kubeStateMetrics.labels,
           },
           spec: {
             jobLabel: 'app.kubernetes.io/name',
-            selector: {
-              matchLabels: {
-                'app.kubernetes.io/name': 'kube-state-metrics',
-              },
-            },
+            selector: { matchLabels: $._config.kubeStateMetrics.selectorLabels },
             endpoints: [
               {
                 port: 'https-main',
diff --git a/jsonnet/kube-prometheus/node-exporter/node-exporter.libsonnet b/jsonnet/kube-prometheus/node-exporter/node-exporter.libsonnet
index c2288ce7a64ed4261185264570ed49d3890da8bd..44cc2edd11494e17a3b7934daca5b63d0602197f 100644
--- a/jsonnet/kube-prometheus/node-exporter/node-exporter.libsonnet
+++ b/jsonnet/kube-prometheus/node-exporter/node-exporter.libsonnet
@@ -10,6 +10,8 @@
       labels: {
         'app.kubernetes.io/name': 'node-exporter',
         'app.kubernetes.io/version': $._config.versions.nodeExporter,
+        'app.kubernetes.io/component': 'exporter',
+        'app.kubernetes.io/part-of': 'kube-prometheus',
       },
       selectorLabels: {
         [labelName]: $._config.nodeExporter.labels[labelName]
diff --git a/jsonnet/kube-prometheus/prometheus-adapter/prometheus-adapter.libsonnet b/jsonnet/kube-prometheus/prometheus-adapter/prometheus-adapter.libsonnet
index 5863367f6efb2090fc7e867600cfef51de47cf9c..e4ba99e388dea6a242308e48e2a5f5a3a1ad1cf8 100644
--- a/jsonnet/kube-prometheus/prometheus-adapter/prometheus-adapter.libsonnet
+++ b/jsonnet/kube-prometheus/prometheus-adapter/prometheus-adapter.libsonnet
@@ -8,7 +8,17 @@
     prometheusAdapter+:: {
       name: 'prometheus-adapter',
       namespace: $._config.namespace,
-      labels: { name: $._config.prometheusAdapter.name },
+      labels: {
+        'app.kubernetes.io/name': $._config.prometheusAdapter.name,
+        'app.kubernetes.io/version': $._config.versions.prometheusAdapter,
+        'app.kubernetes.io/component': 'metrics-adapter',
+        'app.kubernetes.io/part-of': 'kube-prometheus',
+      },
+      selectorLabels: {
+        [labelName]: $._config.prometheusAdapter.labels[labelName]
+        for labelName in std.objectFields($._config.prometheusAdapter.labels)
+        if !std.setMember(labelName, ['app.kubernetes.io/version'])
+      },
       prometheusURL: 'http://prometheus-' + $._config.prometheus.name + '.' + $._config.namespace + '.svc.cluster.local:9090/',
       config: {
         resourceRules: {
@@ -82,7 +92,7 @@
       },
       spec: {
         selector: {
-          matchLabels: $._config.prometheusAdapter.labels,
+          matchLabels: $._config.prometheusAdapter.selectorLabels,
         },
         endpoints: [
           {
@@ -110,7 +120,7 @@
         ports: [
           { name: 'https', targetPort: 6443, port: 443 },
         ],
-        selector: $._config.prometheusAdapter.labels,
+        selector: $._config.prometheusAdapter.selectorLabels,
       },
     },
 
@@ -143,7 +153,7 @@
         },
         spec: {
           replicas: 1,
-          selector: { matchLabels: $._config.prometheusAdapter.labels },
+          selector: { matchLabels: $._config.prometheusAdapter.selectorLabels },
           strategy: {
             rollingUpdate: {
               maxSurge: 1,
diff --git a/jsonnet/kube-prometheus/prometheus/prometheus.libsonnet b/jsonnet/kube-prometheus/prometheus/prometheus.libsonnet
index 1545b697693bc4d8bf47ef5cb70de0de878eafbc..1a666e1dcd3e90e5871113c82a6c733b0f33de86 100644
--- a/jsonnet/kube-prometheus/prometheus/prometheus.libsonnet
+++ b/jsonnet/kube-prometheus/prometheus/prometheus.libsonnet
@@ -13,6 +13,17 @@ local relabelings = import 'kube-prometheus/dropping-deprecated-metrics-relabeli
       replicas: 2,
       rules: {},
       namespaces: ['default', 'kube-system', $._config.namespace],
+      labels: {
+        'app.kubernetes.io/name': 'prometheus-' + $._config.prometheus.name,
+        'app.kubernetes.io/version': $._config.versions.prometheus,
+        'app.kubernetes.io/component': 'prometheus',
+        'app.kubernetes.io/part-of': 'kube-prometheus',
+      },
+      selectorLabels: {
+        [labelName]: $._config.prometheus.labels[labelName]
+        for labelName in std.objectFields($._config.prometheus.labels)
+        if !std.setMember(labelName, ['app.kubernetes.io/version'])
+      },
     },
   },
 
@@ -41,13 +52,13 @@ local relabelings = import 'kube-prometheus/dropping-deprecated-metrics-relabeli
       metadata: {
         name: 'prometheus-' + p.name,
         namespace: p.namespace,
-        labels: { prometheus: p.name },
+        labels: { prometheus: p.name } + $._config.prometheus.labels,
       },
       spec: {
         ports: [
           { name: 'web', targetPort: 'web', port: 9090 },
         ],
-        selector: { app: 'prometheus', prometheus: p.name },
+        selector: { app: 'prometheus', prometheus: p.name } + $._config.prometheus.selectorLabels,
         sessionAffinity: 'ClientIP',
       },
     },
@@ -192,12 +203,15 @@ local relabelings = import 'kube-prometheus/dropping-deprecated-metrics-relabeli
       metadata: {
         name: p.name,
         namespace: p.namespace,
-        labels: { prometheus: p.name },
+        labels: { prometheus: p.name } + $._config.prometheus.labels,
       },
       spec: {
         replicas: p.replicas,
         version: $._config.versions.prometheus,
         image: $._config.imageRepos.prometheus + ':' + $._config.versions.prometheus,
+        podMetadata: {
+          labels: $._config.prometheus.labels
+        },
         serviceAccountName: 'prometheus-' + p.name,
         serviceMonitorSelector: {},
         podMonitorSelector: {},
@@ -236,11 +250,11 @@ local relabelings = import 'kube-prometheus/dropping-deprecated-metrics-relabeli
       metadata: {
         name: 'prometheus',
         namespace: p.namespace,
-        labels: { 'k8s-app': 'prometheus' },
+        labels: $._config.prometheus.labels,
       },
       spec: {
         selector: {
-          matchLabels: { prometheus: p.name },
+          matchLabels: { prometheus: p.name } + $._config.prometheus.selectorLabels,
         },
         endpoints: [{
           port: 'web',
@@ -255,10 +269,10 @@ local relabelings = import 'kube-prometheus/dropping-deprecated-metrics-relabeli
       metadata: {
         name: 'kube-scheduler',
         namespace: p.namespace,
-        labels: { 'k8s-app': 'kube-scheduler' },
+        labels: { 'app.kubernetes.io/name': 'kube-scheduler' },
       },
       spec: {
-        jobLabel: 'k8s-app',
+        jobLabel: 'app.kubernetes.io/name',
         endpoints: [{
           port: 'https-metrics',
           interval: '30s',
@@ -267,7 +281,7 @@ local relabelings = import 'kube-prometheus/dropping-deprecated-metrics-relabeli
           tlsConfig: { insecureSkipVerify: true },
         }],
         selector: {
-          matchLabels: { 'k8s-app': 'kube-scheduler' },
+          matchLabels: { 'app.kubernetes.io/name': 'kube-scheduler' },
         },
         namespaceSelector: {
           matchNames: ['kube-system'],
@@ -281,10 +295,10 @@ local relabelings = import 'kube-prometheus/dropping-deprecated-metrics-relabeli
       metadata: {
         name: 'kubelet',
         namespace: p.namespace,
-        labels: { 'k8s-app': 'kubelet' },
+        labels: { 'app.kubernetes.io/name': 'kubelet' },
       },
       spec: {
-        jobLabel: 'k8s-app',
+        jobLabel: 'app.kubernetes.io/name',
         endpoints: [
           {
             port: 'https-metrics',
@@ -339,7 +353,7 @@ local relabelings = import 'kube-prometheus/dropping-deprecated-metrics-relabeli
           },
         ],
         selector: {
-          matchLabels: { 'k8s-app': 'kubelet' },
+          matchLabels: { 'app.kubernetes.io/name': 'kubelet' },
         },
         namespaceSelector: {
           matchNames: ['kube-system'],
@@ -353,10 +367,10 @@ local relabelings = import 'kube-prometheus/dropping-deprecated-metrics-relabeli
       metadata: {
         name: 'kube-controller-manager',
         namespace: p.namespace,
-        labels: { 'k8s-app': 'kube-controller-manager' },
+        labels: { 'app.kubernetes.io/name': 'kube-controller-manager' },
       },
       spec: {
-        jobLabel: 'k8s-app',
+        jobLabel: 'app.kubernetes.io/name',
         endpoints: [{
           port: 'https-metrics',
           interval: '30s',
@@ -374,7 +388,7 @@ local relabelings = import 'kube-prometheus/dropping-deprecated-metrics-relabeli
           ],
         }],
         selector: {
-          matchLabels: { 'k8s-app': 'kube-controller-manager' },
+          matchLabels: { 'app.kubernetes.io/name': 'kube-controller-manager' },
         },
         namespaceSelector: {
           matchNames: ['kube-system'],
@@ -388,7 +402,7 @@ local relabelings = import 'kube-prometheus/dropping-deprecated-metrics-relabeli
       metadata: {
         name: 'kube-apiserver',
         namespace: p.namespace,
-        labels: { 'k8s-app': 'apiserver' },
+        labels: { 'app.kubernetes.io/name': 'apiserver' },
       },
       spec: {
         jobLabel: 'component',
@@ -442,12 +456,12 @@ local relabelings = import 'kube-prometheus/dropping-deprecated-metrics-relabeli
       metadata: {
         name: 'coredns',
         namespace: p.namespace,
-        labels: { 'k8s-app': 'coredns' },
+        labels: { 'app.kubernetes.io/name': 'coredns' },
       },
       spec: {
-        jobLabel: 'k8s-app',
+        jobLabel: 'app.kubernetes.io/name',
         selector: {
-          matchLabels: { 'k8s-app': 'kube-dns' },
+          matchLabels: { 'app.kubernetes.io/name': 'kube-dns' },
         },
         namespaceSelector: {
           matchNames: ['kube-system'],
diff --git a/manifests/alertmanager-alertmanager.yaml b/manifests/alertmanager-alertmanager.yaml
index 55b353a8f12b9302a2292b0db66832e5f841bcbb..f873dcc0eb673684fe2b0c450e64ca788afaa278 100644
--- a/manifests/alertmanager-alertmanager.yaml
+++ b/manifests/alertmanager-alertmanager.yaml
@@ -3,12 +3,22 @@ kind: Alertmanager
 metadata:
   labels:
     alertmanager: main
+    app.kubernetes.io/component: router
+    app.kubernetes.io/name: alertmanager-main
+    app.kubernetes.io/part-of: kube-prometheus
+    app.kubernetes.io/version: v0.21.0
   name: main
   namespace: monitoring
 spec:
   image: quay.io/prometheus/alertmanager:v0.21.0
   nodeSelector:
     kubernetes.io/os: linux
+  podMetadata:
+    labels:
+      app.kubernetes.io/component: router
+      app.kubernetes.io/name: alertmanager-main
+      app.kubernetes.io/part-of: kube-prometheus
+      app.kubernetes.io/version: v0.21.0
   replicas: 3
   securityContext:
     fsGroup: 2000
diff --git a/manifests/alertmanager-service.yaml b/manifests/alertmanager-service.yaml
index df4c9ff5d490296d14511caa63fe89cfa3f3c927..19125e9eea5c3d8600e3fc82939b2d501eb7cbc6 100644
--- a/manifests/alertmanager-service.yaml
+++ b/manifests/alertmanager-service.yaml
@@ -3,6 +3,10 @@ kind: Service
 metadata:
   labels:
     alertmanager: main
+    app.kubernetes.io/component: router
+    app.kubernetes.io/name: alertmanager-main
+    app.kubernetes.io/part-of: kube-prometheus
+    app.kubernetes.io/version: v0.21.0
   name: alertmanager-main
   namespace: monitoring
 spec:
@@ -13,4 +17,7 @@ spec:
   selector:
     alertmanager: main
     app: alertmanager
+    app.kubernetes.io/component: router
+    app.kubernetes.io/name: alertmanager-main
+    app.kubernetes.io/part-of: kube-prometheus
   sessionAffinity: ClientIP
diff --git a/manifests/alertmanager-serviceMonitor.yaml b/manifests/alertmanager-serviceMonitor.yaml
index 548af0d6dde9646f2add57c915d9fe25524971aa..ead162696eaaadd47e8572ad6496dddb4c20e89a 100644
--- a/manifests/alertmanager-serviceMonitor.yaml
+++ b/manifests/alertmanager-serviceMonitor.yaml
@@ -2,7 +2,10 @@ apiVersion: monitoring.coreos.com/v1
 kind: ServiceMonitor
 metadata:
   labels:
-    k8s-app: alertmanager
+    app.kubernetes.io/component: router
+    app.kubernetes.io/name: alertmanager-main
+    app.kubernetes.io/part-of: kube-prometheus
+    app.kubernetes.io/version: v0.21.0
   name: alertmanager
   namespace: monitoring
 spec:
@@ -12,3 +15,6 @@ spec:
   selector:
     matchLabels:
       alertmanager: main
+      app.kubernetes.io/component: router
+      app.kubernetes.io/name: alertmanager-main
+      app.kubernetes.io/part-of: kube-prometheus
diff --git a/manifests/kube-state-metrics-clusterRole.yaml b/manifests/kube-state-metrics-clusterRole.yaml
index c04db2900015e53ff0ad3e4475d6d7754c9de364..0f0502d2e519c691004e07f308a67d46fa7183aa 100644
--- a/manifests/kube-state-metrics-clusterRole.yaml
+++ b/manifests/kube-state-metrics-clusterRole.yaml
@@ -2,8 +2,10 @@ apiVersion: rbac.authorization.k8s.io/v1
 kind: ClusterRole
 metadata:
   labels:
+    app.kubernetes.io/component: exporter
     app.kubernetes.io/name: kube-state-metrics
-    app.kubernetes.io/version: v1.9.7
+    app.kubernetes.io/part-of: kube-prometheus
+    app.kubernetes.io/version: 1.9.7
   name: kube-state-metrics
 rules:
 - apiGroups:
diff --git a/manifests/kube-state-metrics-clusterRoleBinding.yaml b/manifests/kube-state-metrics-clusterRoleBinding.yaml
index c8f9434da7b873ee1ef2a14601db301b5b0641a7..f8e8ad8e946135a0a1060d5782395f2bc1cd42ee 100644
--- a/manifests/kube-state-metrics-clusterRoleBinding.yaml
+++ b/manifests/kube-state-metrics-clusterRoleBinding.yaml
@@ -2,8 +2,10 @@ apiVersion: rbac.authorization.k8s.io/v1
 kind: ClusterRoleBinding
 metadata:
   labels:
+    app.kubernetes.io/component: exporter
     app.kubernetes.io/name: kube-state-metrics
-    app.kubernetes.io/version: v1.9.7
+    app.kubernetes.io/part-of: kube-prometheus
+    app.kubernetes.io/version: 1.9.7
   name: kube-state-metrics
 roleRef:
   apiGroup: rbac.authorization.k8s.io
diff --git a/manifests/kube-state-metrics-deployment.yaml b/manifests/kube-state-metrics-deployment.yaml
index 9bda5c69b54b7296c517603f619d2066a769eddd..ab50e622f6b4690c4a0cb83f568e58fc3e70a56e 100644
--- a/manifests/kube-state-metrics-deployment.yaml
+++ b/manifests/kube-state-metrics-deployment.yaml
@@ -2,20 +2,26 @@ apiVersion: apps/v1
 kind: Deployment
 metadata:
   labels:
+    app.kubernetes.io/component: exporter
     app.kubernetes.io/name: kube-state-metrics
-    app.kubernetes.io/version: v1.9.7
+    app.kubernetes.io/part-of: kube-prometheus
+    app.kubernetes.io/version: 1.9.7
   name: kube-state-metrics
   namespace: monitoring
 spec:
   replicas: 1
   selector:
     matchLabels:
+      app.kubernetes.io/component: exporter
       app.kubernetes.io/name: kube-state-metrics
+      app.kubernetes.io/part-of: kube-prometheus
   template:
     metadata:
       labels:
+        app.kubernetes.io/component: exporter
         app.kubernetes.io/name: kube-state-metrics
-        app.kubernetes.io/version: v1.9.7
+        app.kubernetes.io/part-of: kube-prometheus
+        app.kubernetes.io/version: 1.9.7
     spec:
       containers:
       - args:
diff --git a/manifests/kube-state-metrics-service.yaml b/manifests/kube-state-metrics-service.yaml
index d734a19ba110f225e45afe6255c9e664072fc13b..28abe2b6c9f0d41846ab902325d64ab8aa839728 100644
--- a/manifests/kube-state-metrics-service.yaml
+++ b/manifests/kube-state-metrics-service.yaml
@@ -2,8 +2,10 @@ apiVersion: v1
 kind: Service
 metadata:
   labels:
+    app.kubernetes.io/component: exporter
     app.kubernetes.io/name: kube-state-metrics
-    app.kubernetes.io/version: v1.9.7
+    app.kubernetes.io/part-of: kube-prometheus
+    app.kubernetes.io/version: 1.9.7
   name: kube-state-metrics
   namespace: monitoring
 spec:
@@ -16,4 +18,6 @@ spec:
     port: 9443
     targetPort: https-self
   selector:
+    app.kubernetes.io/component: exporter
     app.kubernetes.io/name: kube-state-metrics
+    app.kubernetes.io/part-of: kube-prometheus
diff --git a/manifests/kube-state-metrics-serviceAccount.yaml b/manifests/kube-state-metrics-serviceAccount.yaml
index c23b36c1f180a60be837862d768219bbaab14549..b1ffdc7024872f5789857396684ed3f63216dee1 100644
--- a/manifests/kube-state-metrics-serviceAccount.yaml
+++ b/manifests/kube-state-metrics-serviceAccount.yaml
@@ -2,7 +2,9 @@ apiVersion: v1
 kind: ServiceAccount
 metadata:
   labels:
+    app.kubernetes.io/component: exporter
     app.kubernetes.io/name: kube-state-metrics
-    app.kubernetes.io/version: v1.9.7
+    app.kubernetes.io/part-of: kube-prometheus
+    app.kubernetes.io/version: 1.9.7
   name: kube-state-metrics
   namespace: monitoring
diff --git a/manifests/kube-state-metrics-serviceMonitor.yaml b/manifests/kube-state-metrics-serviceMonitor.yaml
index b860f4c3d34d39b5f455fa8b96bcd682dad8e6df..85b30116dc129720a5e8274139ef0aa84594fa1d 100644
--- a/manifests/kube-state-metrics-serviceMonitor.yaml
+++ b/manifests/kube-state-metrics-serviceMonitor.yaml
@@ -2,7 +2,9 @@ apiVersion: monitoring.coreos.com/v1
 kind: ServiceMonitor
 metadata:
   labels:
+    app.kubernetes.io/component: exporter
     app.kubernetes.io/name: kube-state-metrics
+    app.kubernetes.io/part-of: kube-prometheus
     app.kubernetes.io/version: 1.9.7
   name: kube-state-metrics
   namespace: monitoring
@@ -28,4 +30,6 @@ spec:
   jobLabel: app.kubernetes.io/name
   selector:
     matchLabels:
+      app.kubernetes.io/component: exporter
       app.kubernetes.io/name: kube-state-metrics
+      app.kubernetes.io/part-of: kube-prometheus
diff --git a/manifests/node-exporter-daemonset.yaml b/manifests/node-exporter-daemonset.yaml
index 9a6f163d8462d463ede1f4867942383a323956eb..936aa73731c8bedf680e7260369bfd63108f42fa 100644
--- a/manifests/node-exporter-daemonset.yaml
+++ b/manifests/node-exporter-daemonset.yaml
@@ -2,18 +2,24 @@ apiVersion: apps/v1
 kind: DaemonSet
 metadata:
   labels:
+    app.kubernetes.io/component: exporter
     app.kubernetes.io/name: node-exporter
+    app.kubernetes.io/part-of: kube-prometheus
     app.kubernetes.io/version: v1.0.1
   name: node-exporter
   namespace: monitoring
 spec:
   selector:
     matchLabels:
+      app.kubernetes.io/component: exporter
       app.kubernetes.io/name: node-exporter
+      app.kubernetes.io/part-of: kube-prometheus
   template:
     metadata:
       labels:
+        app.kubernetes.io/component: exporter
         app.kubernetes.io/name: node-exporter
+        app.kubernetes.io/part-of: kube-prometheus
         app.kubernetes.io/version: v1.0.1
     spec:
       containers:
diff --git a/manifests/node-exporter-service.yaml b/manifests/node-exporter-service.yaml
index cb9666013e982be081f15ce8d1e4e5a7dd88395c..4423c3e879e06cc2cab2180b7f8825c272727da6 100644
--- a/manifests/node-exporter-service.yaml
+++ b/manifests/node-exporter-service.yaml
@@ -2,7 +2,9 @@ apiVersion: v1
 kind: Service
 metadata:
   labels:
+    app.kubernetes.io/component: exporter
     app.kubernetes.io/name: node-exporter
+    app.kubernetes.io/part-of: kube-prometheus
     app.kubernetes.io/version: v1.0.1
   name: node-exporter
   namespace: monitoring
@@ -13,4 +15,6 @@ spec:
     port: 9100
     targetPort: https
   selector:
+    app.kubernetes.io/component: exporter
     app.kubernetes.io/name: node-exporter
+    app.kubernetes.io/part-of: kube-prometheus
diff --git a/manifests/node-exporter-serviceMonitor.yaml b/manifests/node-exporter-serviceMonitor.yaml
index 8e5a97c9ba0786445bad9fd577e591cd12472b9c..65432fd66f2090069c815688df5391769dac176d 100644
--- a/manifests/node-exporter-serviceMonitor.yaml
+++ b/manifests/node-exporter-serviceMonitor.yaml
@@ -2,7 +2,9 @@ apiVersion: monitoring.coreos.com/v1
 kind: ServiceMonitor
 metadata:
   labels:
+    app.kubernetes.io/component: exporter
     app.kubernetes.io/name: node-exporter
+    app.kubernetes.io/part-of: kube-prometheus
     app.kubernetes.io/version: v1.0.1
   name: node-exporter
   namespace: monitoring
@@ -24,4 +26,6 @@ spec:
   jobLabel: app.kubernetes.io/name
   selector:
     matchLabels:
+      app.kubernetes.io/component: exporter
       app.kubernetes.io/name: node-exporter
+      app.kubernetes.io/part-of: kube-prometheus
diff --git a/manifests/prometheus-adapter-deployment.yaml b/manifests/prometheus-adapter-deployment.yaml
index bb85e2519f34db7a48908875f72ba1cf4e65f7f7..53f1ee1de2c681142394fa745efb950729dd71cd 100644
--- a/manifests/prometheus-adapter-deployment.yaml
+++ b/manifests/prometheus-adapter-deployment.yaml
@@ -7,7 +7,9 @@ spec:
   replicas: 1
   selector:
     matchLabels:
-      name: prometheus-adapter
+      app.kubernetes.io/component: metrics-adapter
+      app.kubernetes.io/name: prometheus-adapter
+      app.kubernetes.io/part-of: kube-prometheus
   strategy:
     rollingUpdate:
       maxSurge: 1
@@ -15,7 +17,10 @@ spec:
   template:
     metadata:
       labels:
-        name: prometheus-adapter
+        app.kubernetes.io/component: metrics-adapter
+        app.kubernetes.io/name: prometheus-adapter
+        app.kubernetes.io/part-of: kube-prometheus
+        app.kubernetes.io/version: v0.8.2
     spec:
       containers:
       - args:
diff --git a/manifests/prometheus-adapter-service.yaml b/manifests/prometheus-adapter-service.yaml
index e786e01c4aff3ce0e9ca3c3266b1dda817ca8935..41b18f00108f0b7163929aa3a54841ed74a50613 100644
--- a/manifests/prometheus-adapter-service.yaml
+++ b/manifests/prometheus-adapter-service.yaml
@@ -2,7 +2,10 @@ apiVersion: v1
 kind: Service
 metadata:
   labels:
-    name: prometheus-adapter
+    app.kubernetes.io/component: metrics-adapter
+    app.kubernetes.io/name: prometheus-adapter
+    app.kubernetes.io/part-of: kube-prometheus
+    app.kubernetes.io/version: v0.8.2
   name: prometheus-adapter
   namespace: monitoring
 spec:
@@ -11,4 +14,6 @@ spec:
     port: 443
     targetPort: 6443
   selector:
-    name: prometheus-adapter
+    app.kubernetes.io/component: metrics-adapter
+    app.kubernetes.io/name: prometheus-adapter
+    app.kubernetes.io/part-of: kube-prometheus
diff --git a/manifests/prometheus-adapter-serviceMonitor.yaml b/manifests/prometheus-adapter-serviceMonitor.yaml
index 91a8d51a3a8014e741db041b9aa1b1902a05f201..3291e49d69820d4107ea5c0d184b8e86df87287d 100644
--- a/manifests/prometheus-adapter-serviceMonitor.yaml
+++ b/manifests/prometheus-adapter-serviceMonitor.yaml
@@ -2,7 +2,10 @@ apiVersion: monitoring.coreos.com/v1
 kind: ServiceMonitor
 metadata:
   labels:
-    name: prometheus-adapter
+    app.kubernetes.io/component: metrics-adapter
+    app.kubernetes.io/name: prometheus-adapter
+    app.kubernetes.io/part-of: kube-prometheus
+    app.kubernetes.io/version: v0.8.2
   name: prometheus-adapter
   namespace: monitoring
 spec:
@@ -15,4 +18,6 @@ spec:
       insecureSkipVerify: true
   selector:
     matchLabels:
-      name: prometheus-adapter
+      app.kubernetes.io/component: metrics-adapter
+      app.kubernetes.io/name: prometheus-adapter
+      app.kubernetes.io/part-of: kube-prometheus
diff --git a/manifests/prometheus-prometheus.yaml b/manifests/prometheus-prometheus.yaml
index e50cc9bfefa6e10c1904b263335865c4f9b67196..0548a955dd9f17fd37cdd15df20df3d44dad15de 100644
--- a/manifests/prometheus-prometheus.yaml
+++ b/manifests/prometheus-prometheus.yaml
@@ -2,6 +2,10 @@ apiVersion: monitoring.coreos.com/v1
 kind: Prometheus
 metadata:
   labels:
+    app.kubernetes.io/component: prometheus
+    app.kubernetes.io/name: prometheus-k8s
+    app.kubernetes.io/part-of: kube-prometheus
+    app.kubernetes.io/version: v2.22.1
     prometheus: k8s
   name: k8s
   namespace: monitoring
@@ -14,6 +18,12 @@ spec:
   image: quay.io/prometheus/prometheus:v2.22.1
   nodeSelector:
     kubernetes.io/os: linux
+  podMetadata:
+    labels:
+      app.kubernetes.io/component: prometheus
+      app.kubernetes.io/name: prometheus-k8s
+      app.kubernetes.io/part-of: kube-prometheus
+      app.kubernetes.io/version: v2.22.1
   podMonitorNamespaceSelector: {}
   podMonitorSelector: {}
   probeNamespaceSelector: {}
diff --git a/manifests/prometheus-service.yaml b/manifests/prometheus-service.yaml
index 4f61e88ab777a70b7ff106cceb10a42556949e2b..b2e6dcf440f2eb4b3c6a32b6578551f10b1706fa 100644
--- a/manifests/prometheus-service.yaml
+++ b/manifests/prometheus-service.yaml
@@ -2,6 +2,10 @@ apiVersion: v1
 kind: Service
 metadata:
   labels:
+    app.kubernetes.io/component: prometheus
+    app.kubernetes.io/name: prometheus-k8s
+    app.kubernetes.io/part-of: kube-prometheus
+    app.kubernetes.io/version: v2.22.1
     prometheus: k8s
   name: prometheus-k8s
   namespace: monitoring
@@ -12,5 +16,8 @@ spec:
     targetPort: web
   selector:
     app: prometheus
+    app.kubernetes.io/component: prometheus
+    app.kubernetes.io/name: prometheus-k8s
+    app.kubernetes.io/part-of: kube-prometheus
     prometheus: k8s
   sessionAffinity: ClientIP
diff --git a/manifests/prometheus-serviceMonitor.yaml b/manifests/prometheus-serviceMonitor.yaml
index b7605dbeb6e4a4253db105a0a6faee1882880767..c8a74e96e750cfc7d8e66d355a73a43ffb64c49b 100644
--- a/manifests/prometheus-serviceMonitor.yaml
+++ b/manifests/prometheus-serviceMonitor.yaml
@@ -2,7 +2,10 @@ apiVersion: monitoring.coreos.com/v1
 kind: ServiceMonitor
 metadata:
   labels:
-    k8s-app: prometheus
+    app.kubernetes.io/component: prometheus
+    app.kubernetes.io/name: prometheus-k8s
+    app.kubernetes.io/part-of: kube-prometheus
+    app.kubernetes.io/version: v2.22.1
   name: prometheus
   namespace: monitoring
 spec:
@@ -11,4 +14,7 @@ spec:
     port: web
   selector:
     matchLabels:
+      app.kubernetes.io/component: prometheus
+      app.kubernetes.io/name: prometheus-k8s
+      app.kubernetes.io/part-of: kube-prometheus
       prometheus: k8s
diff --git a/manifests/prometheus-serviceMonitorApiserver.yaml b/manifests/prometheus-serviceMonitorApiserver.yaml
index 1ff61fe9f56a0fb27bec7be175f99b2f9024b0a3..cc6f079c62767a43be89f78cfd3b3b1b506f3e83 100644
--- a/manifests/prometheus-serviceMonitorApiserver.yaml
+++ b/manifests/prometheus-serviceMonitorApiserver.yaml
@@ -2,7 +2,7 @@ apiVersion: monitoring.coreos.com/v1
 kind: ServiceMonitor
 metadata:
   labels:
-    k8s-app: apiserver
+    app.kubernetes.io/name: apiserver
   name: kube-apiserver
   namespace: monitoring
 spec:
diff --git a/manifests/prometheus-serviceMonitorCoreDNS.yaml b/manifests/prometheus-serviceMonitorCoreDNS.yaml
index 633aa18cf1d4d352e4f527b726a1127393da6f4d..c4b37433fc42f97f493e00137f697641415f8dc0 100644
--- a/manifests/prometheus-serviceMonitorCoreDNS.yaml
+++ b/manifests/prometheus-serviceMonitorCoreDNS.yaml
@@ -2,7 +2,7 @@ apiVersion: monitoring.coreos.com/v1
 kind: ServiceMonitor
 metadata:
   labels:
-    k8s-app: coredns
+    app.kubernetes.io/name: coredns
   name: coredns
   namespace: monitoring
 spec:
@@ -10,10 +10,10 @@ spec:
   - bearerTokenFile: /var/run/secrets/kubernetes.io/serviceaccount/token
     interval: 15s
     port: metrics
-  jobLabel: k8s-app
+  jobLabel: app.kubernetes.io/name
   namespaceSelector:
     matchNames:
     - kube-system
   selector:
     matchLabels:
-      k8s-app: kube-dns
+      app.kubernetes.io/name: kube-dns
diff --git a/manifests/prometheus-serviceMonitorKubeControllerManager.yaml b/manifests/prometheus-serviceMonitorKubeControllerManager.yaml
index 0f23d84df850d717204ac67428fac0a55db0b3bf..fd9eddbf918dd707e88100f19f35aa8997cbd513 100644
--- a/manifests/prometheus-serviceMonitorKubeControllerManager.yaml
+++ b/manifests/prometheus-serviceMonitorKubeControllerManager.yaml
@@ -2,7 +2,7 @@ apiVersion: monitoring.coreos.com/v1
 kind: ServiceMonitor
 metadata:
   labels:
-    k8s-app: kube-controller-manager
+    app.kubernetes.io/name: kube-controller-manager
   name: kube-controller-manager
   namespace: monitoring
 spec:
@@ -50,10 +50,10 @@ spec:
     scheme: https
     tlsConfig:
       insecureSkipVerify: true
-  jobLabel: k8s-app
+  jobLabel: app.kubernetes.io/name
   namespaceSelector:
     matchNames:
     - kube-system
   selector:
     matchLabels:
-      k8s-app: kube-controller-manager
+      app.kubernetes.io/name: kube-controller-manager
diff --git a/manifests/prometheus-serviceMonitorKubeScheduler.yaml b/manifests/prometheus-serviceMonitorKubeScheduler.yaml
index 8073eaca160709fb041b9f5764eec1abcfc9240a..ca30352e16bdc14ca4b70dc8dd5e203908e8cb38 100644
--- a/manifests/prometheus-serviceMonitorKubeScheduler.yaml
+++ b/manifests/prometheus-serviceMonitorKubeScheduler.yaml
@@ -2,7 +2,7 @@ apiVersion: monitoring.coreos.com/v1
 kind: ServiceMonitor
 metadata:
   labels:
-    k8s-app: kube-scheduler
+    app.kubernetes.io/name: kube-scheduler
   name: kube-scheduler
   namespace: monitoring
 spec:
@@ -13,10 +13,10 @@ spec:
     scheme: https
     tlsConfig:
       insecureSkipVerify: true
-  jobLabel: k8s-app
+  jobLabel: app.kubernetes.io/name
   namespaceSelector:
     matchNames:
     - kube-system
   selector:
     matchLabels:
-      k8s-app: kube-scheduler
+      app.kubernetes.io/name: kube-scheduler
diff --git a/manifests/prometheus-serviceMonitorKubelet.yaml b/manifests/prometheus-serviceMonitorKubelet.yaml
index 7db47ef0ad0d7a3c7f8074ee32b53160ebe708d1..dc329395fb2266db5e4ca2221b55dc879b7cbabf 100644
--- a/manifests/prometheus-serviceMonitorKubelet.yaml
+++ b/manifests/prometheus-serviceMonitorKubelet.yaml
@@ -2,7 +2,7 @@ apiVersion: monitoring.coreos.com/v1
 kind: ServiceMonitor
 metadata:
   labels:
-    k8s-app: kubelet
+    app.kubernetes.io/name: kubelet
   name: kubelet
   namespace: monitoring
 spec:
@@ -81,10 +81,10 @@ spec:
     scheme: https
     tlsConfig:
       insecureSkipVerify: true
-  jobLabel: k8s-app
+  jobLabel: app.kubernetes.io/name
   namespaceSelector:
     matchNames:
     - kube-system
   selector:
     matchLabels:
-      k8s-app: kubelet
+      app.kubernetes.io/name: kubelet