diff --git a/hack/cluster-monitoring/deploy b/hack/cluster-monitoring/deploy
index 3c3a5dcdb9e50a4bcb085e3734e698a7301b0be0..2d0d50ad326fd25bebabd3d39a9878974c29ee62 100755
--- a/hack/cluster-monitoring/deploy
+++ b/hack/cluster-monitoring/deploy
@@ -26,20 +26,6 @@ echo "done!"
 kctl apply -f manifests/exporters
 kctl apply -f manifests/grafana/grafana-credentials.yaml
 kctl apply -f manifests/grafana
-
-kctl apply -f manifests/prometheus/prometheus-k8s-rules.yaml
-kctl apply -f manifests/prometheus/prometheus-k8s-service.yaml
-kctl apply -f manifests/prometheus/prometheus-cluster-role-binding.yaml
-kctl apply -f manifests/prometheus/prometheus-cluster-role.yaml
-kctl apply -f manifests/prometheus/prometheus-k8s-service-account.yaml
-
-kctl apply -f manifests/alertmanager/alertmanager-config.yaml
-kctl apply -f manifests/alertmanager/alertmanager-service.yaml
-
-# `kubectl apply` is currently not working for third party resources so we are
-# using `kubectl create` here for the time being.
-# (https://github.com/kubernetes/kubernetes/issues/29542)
-kctl create -f manifests/prometheus/prometheus-k8s-servicemonitors.yaml
-kctl create -f manifests/prometheus/prometheus-k8s.yaml
-kctl create -f manifests/alertmanager/alertmanager.yaml
+kctl apply -f manifests/prometheus/
+kctl apply -f manifests/alertmanager/
 
diff --git a/manifests/prometheus/prometheus-k8s-service-monitor-alertmanager.yaml b/manifests/prometheus/prometheus-k8s-service-monitor-alertmanager.yaml
new file mode 100644
index 0000000000000000000000000000000000000000..d193b6769caaa587672e91eacbae7c40d6eef47d
--- /dev/null
+++ b/manifests/prometheus/prometheus-k8s-service-monitor-alertmanager.yaml
@@ -0,0 +1,12 @@
+apiVersion: monitoring.coreos.com/v1alpha1
+kind: ServiceMonitor
+metadata:
+  labels:
+    alertmanager: main
+  name: alertmanager
+spec:
+  endpoints:
+  - port: web
+  selector:
+    matchExpressions:
+    - {key: alertmanager, operator: In, values: [main]}
diff --git a/manifests/prometheus/prometheus-k8s-service-monitor-apiserver.yaml b/manifests/prometheus/prometheus-k8s-service-monitor-apiserver.yaml
new file mode 100644
index 0000000000000000000000000000000000000000..1fd793e511f658c52c5b6da5a772f9f0b08fb39c
--- /dev/null
+++ b/manifests/prometheus/prometheus-k8s-service-monitor-apiserver.yaml
@@ -0,0 +1,23 @@
+apiVersion: monitoring.coreos.com/v1alpha1
+kind: ServiceMonitor
+metadata:
+  name: kube-apiserver
+  labels:
+    k8s-apps: https
+spec:
+  jobLabel: provider
+  selector:
+    matchLabels:
+      component: apiserver
+      provider: kubernetes
+  namespaceSelector:
+    matchNames:
+    - default
+  endpoints:
+  - port: https
+    interval: 15s
+    scheme: https
+    tlsConfig:
+      caFile: /var/run/secrets/kubernetes.io/serviceaccount/ca.crt
+      serverName: kubernetes
+    bearerTokenFile: /var/run/secrets/kubernetes.io/serviceaccount/token
diff --git a/manifests/prometheus/prometheus-k8s-service-monitor-k8s-apps-http.yaml b/manifests/prometheus/prometheus-k8s-service-monitor-k8s-apps-http.yaml
new file mode 100644
index 0000000000000000000000000000000000000000..fbfcda97b31b4be1e15eb1e6e789337adee38da0
--- /dev/null
+++ b/manifests/prometheus/prometheus-k8s-service-monitor-k8s-apps-http.yaml
@@ -0,0 +1,23 @@
+apiVersion: monitoring.coreos.com/v1alpha1
+kind: ServiceMonitor
+metadata:
+  name: k8s-apps-http
+  namespace: monitoring
+  labels:
+    k8s-apps: http
+spec:
+  jobLabel: k8s-app
+  selector:
+    matchExpressions:
+    - {key: k8s-app, operator: Exists}
+    - {key: k8s-app, operator: NotIn, values: [kubelet]}
+  namespaceSelector:
+    matchNames:
+    - kube-system
+  endpoints:
+  - port: http-metrics
+    interval: 15s
+  - port: http-metrics-dnsmasq
+    interval: 15s
+  - port: http-metrics-skydns
+    interval: 15s
diff --git a/manifests/prometheus/prometheus-k8s-service-monitor-kube-state-metrics.yaml b/manifests/prometheus/prometheus-k8s-service-monitor-kube-state-metrics.yaml
new file mode 100644
index 0000000000000000000000000000000000000000..c4ed1afced6c8852d76167dbc6334b7533582d7e
--- /dev/null
+++ b/manifests/prometheus/prometheus-k8s-service-monitor-kube-state-metrics.yaml
@@ -0,0 +1,19 @@
+apiVersion: monitoring.coreos.com/v1alpha1
+kind: ServiceMonitor
+metadata:
+  name: kube-state-metrics
+  namespace: monitoring
+  labels:
+    k8s-apps: http
+spec:
+  jobLabel: k8s-app
+  selector:
+    matchLabels:
+      k8s-app: kube-state-metrics
+  namespaceSelector:
+    matchNames:
+    - monitoring
+  endpoints:
+  - port: http-metrics
+    interval: 15s
+    honorLabels: true
diff --git a/manifests/prometheus/prometheus-k8s-service-monitor-kubelet.yaml b/manifests/prometheus/prometheus-k8s-service-monitor-kubelet.yaml
new file mode 100644
index 0000000000000000000000000000000000000000..4e9aabd8cbc9791e42062c582d1572e2ef662869
--- /dev/null
+++ b/manifests/prometheus/prometheus-k8s-service-monitor-kubelet.yaml
@@ -0,0 +1,17 @@
+apiVersion: monitoring.coreos.com/v1alpha1
+kind: ServiceMonitor
+metadata:
+  name: kubelet
+  labels:
+    k8s-apps: http
+spec:
+  jobLabel: k8s-app
+  selector:
+    matchLabels:
+      k8s-app: kubelet
+  namespaceSelector:
+    matchNames:
+    - kube-system
+  endpoints:
+  - port: http-metrics
+    interval: 15s
diff --git a/manifests/prometheus/prometheus-k8s-service-monitor-node-exporter.yaml b/manifests/prometheus/prometheus-k8s-service-monitor-node-exporter.yaml
new file mode 100644
index 0000000000000000000000000000000000000000..a7b20301d38756d4da4acaa05f71249a58962566
--- /dev/null
+++ b/manifests/prometheus/prometheus-k8s-service-monitor-node-exporter.yaml
@@ -0,0 +1,18 @@
+apiVersion: monitoring.coreos.com/v1alpha1
+kind: ServiceMonitor
+metadata:
+  name: node-exporter
+  namespace: monitoring
+  labels:
+    k8s-apps: http
+spec:
+  jobLabel: k8s-app
+  selector:
+    matchLabels:
+      k8s-app: node-exporter
+  namespaceSelector:
+    matchNames:
+    - monitoring
+  endpoints:
+  - port: http-metrics
+    interval: 15s
diff --git a/manifests/prometheus/prometheus-k8s-service-monitor-prometheus.yaml b/manifests/prometheus/prometheus-k8s-service-monitor-prometheus.yaml
new file mode 100644
index 0000000000000000000000000000000000000000..5e5d17be37dbd573c6fa813c59cbf41e912a1a4c
--- /dev/null
+++ b/manifests/prometheus/prometheus-k8s-service-monitor-prometheus.yaml
@@ -0,0 +1,12 @@
+apiVersion: monitoring.coreos.com/v1alpha1
+kind: ServiceMonitor
+metadata:
+  name: prometheus
+  labels:
+    prometheus: k8s
+spec:
+  endpoints:
+  - port: web
+  selector:
+    matchExpressions:
+    - {key: prometheus, operator: In, values: [k8s]}
diff --git a/manifests/prometheus/prometheus-k8s-servicemonitors.yaml b/manifests/prometheus/prometheus-k8s-servicemonitors.yaml
deleted file mode 100644
index ac2a26a17244b51716bbb7e945595e6643e01b13..0000000000000000000000000000000000000000
--- a/manifests/prometheus/prometheus-k8s-servicemonitors.yaml
+++ /dev/null
@@ -1,72 +0,0 @@
-apiVersion: monitoring.coreos.com/v1alpha1
-kind: ServiceMonitor
-metadata:
-  name: kube-apiserver
-  labels:
-    k8s-apps: https
-spec:
-  jobLabel: provider
-  selector:
-    matchLabels:
-      component: apiserver
-      provider: kubernetes
-  namespaceSelector:
-    matchNames:
-    - default
-  endpoints:
-  - port: https
-    interval: 15s
-    scheme: https
-    tlsConfig:
-      caFile: /var/run/secrets/kubernetes.io/serviceaccount/ca.crt
-      serverName: kubernetes
-    bearerTokenFile: /var/run/secrets/kubernetes.io/serviceaccount/token
----
-apiVersion: monitoring.coreos.com/v1alpha1
-kind: ServiceMonitor
-metadata:
-  name: k8s-apps-http
-  labels:
-    k8s-apps: http
-spec:
-  jobLabel: k8s-app
-  selector:
-    matchExpressions:
-    - {key: k8s-app, operator: Exists}
-  namespaceSelector:
-    matchNames:
-    - kube-system
-    - monitoring
-  endpoints:
-  - port: http-metrics
-    interval: 15s
-  - port: http-metrics-dnsmasq
-    interval: 15s
-  - port: http-metrics-skydns
-    interval: 15s
----
-apiVersion: monitoring.coreos.com/v1alpha1
-kind: ServiceMonitor
-metadata:
-  name: prometheus
-  labels:
-    prometheus: k8s
-spec:
-  endpoints:
-  - port: web
-  selector:
-    matchExpressions:
-    - {key: prometheus, operator: In, values: [k8s]}
----
-apiVersion: monitoring.coreos.com/v1alpha1
-kind: ServiceMonitor
-metadata:
-  labels:
-    alertmanager: main
-  name: alertmanager
-spec:
-  endpoints:
-  - port: web
-  selector:
-    matchExpressions:
-    - {key: alertmanager, operator: In, values: [main]}
\ No newline at end of file