From 1795a62841f5cee5ea7135cece353d1d15b00c5e Mon Sep 17 00:00:00 2001
From: Frederic Branczyk <fbranczyk@gmail.com>
Date: Tue, 1 Nov 2016 12:25:43 +0100
Subject: [PATCH] manifests: add headless services for k8s components

This way they are discoverable via the kubernetes endpoints discovery of
Prometheus.
---
 ...roller-manager-bootkube-vagrant-multi.yaml | 18 ++++++++++++++
 .../kube-dns-prom-bootkube-vagrant-multi.yaml | 18 ++++++++++++++
 ...kube-scheduler-bootkube-vagrant-multi.yaml | 18 ++++++++++++++
 manifests/prometheus/prometheus-k8s-cm.yaml   | 24 +++++++++++++++++++
 4 files changed, 78 insertions(+)
 create mode 100644 manifests/k8s/kube-controller-manager-bootkube-vagrant-multi.yaml
 create mode 100644 manifests/k8s/kube-dns-prom-bootkube-vagrant-multi.yaml
 create mode 100644 manifests/k8s/kube-scheduler-bootkube-vagrant-multi.yaml

diff --git a/manifests/k8s/kube-controller-manager-bootkube-vagrant-multi.yaml b/manifests/k8s/kube-controller-manager-bootkube-vagrant-multi.yaml
new file mode 100644
index 00000000..316076f3
--- /dev/null
+++ b/manifests/k8s/kube-controller-manager-bootkube-vagrant-multi.yaml
@@ -0,0 +1,18 @@
+apiVersion: v1
+kind: Service
+metadata:
+  name: kube-controller-manager-prometheus-discovery
+  labels:
+    k8s-app: kube-controller-manager
+  annotations:
+    prometheus.io/scrape: 'true'
+spec:
+  selector:
+    k8s-app: kube-controller-manager
+  type: ClusterIP
+  clusterIP: None
+  ports:
+  - name: prometheus
+    port: 10252
+    targetPort: 10252
+    protocol: TCP
diff --git a/manifests/k8s/kube-dns-prom-bootkube-vagrant-multi.yaml b/manifests/k8s/kube-dns-prom-bootkube-vagrant-multi.yaml
new file mode 100644
index 00000000..ec949c99
--- /dev/null
+++ b/manifests/k8s/kube-dns-prom-bootkube-vagrant-multi.yaml
@@ -0,0 +1,18 @@
+apiVersion: v1
+kind: Service
+metadata:
+  name: kube-dns-prometheus-discovery
+  labels:
+    k8s-app: kube-dns
+  annotations:
+    prometheus.io/scrape: 'true'
+spec:
+  selector:
+    k8s-app: kube-dns
+  type: ClusterIP
+  clusterIP: None
+  ports:
+  - name: prometheus
+    port: 8082
+    targetPort: 8082
+    protocol: TCP
diff --git a/manifests/k8s/kube-scheduler-bootkube-vagrant-multi.yaml b/manifests/k8s/kube-scheduler-bootkube-vagrant-multi.yaml
new file mode 100644
index 00000000..67360ec2
--- /dev/null
+++ b/manifests/k8s/kube-scheduler-bootkube-vagrant-multi.yaml
@@ -0,0 +1,18 @@
+apiVersion: v1
+kind: Service
+metadata:
+  name: kube-scheduler-prometheus-discovery
+  labels:
+    k8s-app: kube-scheduler
+  annotations:
+    prometheus.io/scrape: 'true'
+spec:
+  selector:
+    k8s-app: kube-scheduler
+  type: ClusterIP
+  clusterIP: None
+  ports:
+  - name: prometheus
+    port: 10251
+    targetPort: 10251
+    protocol: TCP
diff --git a/manifests/prometheus/prometheus-k8s-cm.yaml b/manifests/prometheus/prometheus-k8s-cm.yaml
index 0a9fc30e..73389f51 100644
--- a/manifests/prometheus/prometheus-k8s-cm.yaml
+++ b/manifests/prometheus/prometheus-k8s-cm.yaml
@@ -50,3 +50,27 @@ data:
         regex: kubernetes
         target_label: __scheme__
         replacement: https
+
+    # Scrapes the endpoint lists for the kube-dns server. Which we consider
+    # part of a default setup.
+    - job_name: kube-components
+      scrape_interval: 20s
+      tls_config:
+        ca_file: /var/run/secrets/kubernetes.io/serviceaccount/ca.crt
+      bearer_token_file: /var/run/secrets/kubernetes.io/serviceaccount/token
+
+      kubernetes_sd_configs:
+      - role: endpoints
+
+      relabel_configs:
+      - action: replace
+        source_labels: [__meta_kubernetes_service_name]
+        target_label: job
+        regex: "kube-(.*)-prometheus-discovery"
+        replacement: "kube-${1}"
+      - action: keep
+        source_labels: [__meta_kubernetes_service_name]
+        regex: "kube-(.*)-prometheus-discovery"
+      - action: keep
+        source_labels: [__meta_kubernetes_endpoint_port_name]
+        regex: "prometheus"
-- 
GitLab