From 309c677270ad0728e2936afb4bd75d56ad7ac122 Mon Sep 17 00:00:00 2001
From: Frederic Branczyk <fbranczyk@gmail.com>
Date: Thu, 27 Apr 2017 12:35:06 +0200
Subject: [PATCH] kube-prometheus: extract ServiceMonitors into single files

Starting with Kubernetes 1.6 `kubectl apply` works for TPRs so we can
start using it, therefore using multiple files is no issue.
---
 hack/cluster-monitoring/deploy                | 18 +----
 ...heus-k8s-service-monitor-alertmanager.yaml | 12 ++++
 ...metheus-k8s-service-monitor-apiserver.yaml | 23 ++++++
 ...eus-k8s-service-monitor-k8s-apps-http.yaml | 23 ++++++
 ...8s-service-monitor-kube-state-metrics.yaml | 19 +++++
 ...rometheus-k8s-service-monitor-kubelet.yaml | 17 +++++
 ...eus-k8s-service-monitor-node-exporter.yaml | 18 +++++
 ...etheus-k8s-service-monitor-prometheus.yaml | 12 ++++
 .../prometheus-k8s-servicemonitors.yaml       | 72 -------------------
 9 files changed, 126 insertions(+), 88 deletions(-)
 create mode 100644 manifests/prometheus/prometheus-k8s-service-monitor-alertmanager.yaml
 create mode 100644 manifests/prometheus/prometheus-k8s-service-monitor-apiserver.yaml
 create mode 100644 manifests/prometheus/prometheus-k8s-service-monitor-k8s-apps-http.yaml
 create mode 100644 manifests/prometheus/prometheus-k8s-service-monitor-kube-state-metrics.yaml
 create mode 100644 manifests/prometheus/prometheus-k8s-service-monitor-kubelet.yaml
 create mode 100644 manifests/prometheus/prometheus-k8s-service-monitor-node-exporter.yaml
 create mode 100644 manifests/prometheus/prometheus-k8s-service-monitor-prometheus.yaml
 delete mode 100644 manifests/prometheus/prometheus-k8s-servicemonitors.yaml

diff --git a/hack/cluster-monitoring/deploy b/hack/cluster-monitoring/deploy
index 3c3a5dcd..2d0d50ad 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 00000000..d193b676
--- /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 00000000..1fd793e5
--- /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 00000000..fbfcda97
--- /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 00000000..c4ed1afc
--- /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 00000000..4e9aabd8
--- /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 00000000..a7b20301
--- /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 00000000..5e5d17be
--- /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 ac2a26a1..00000000
--- 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
-- 
GitLab