From a200051578ce2613a097e1b2bdc292b335708c6d Mon Sep 17 00:00:00 2001
From: Frederic Branczyk <fbranczyk@gmail.com>
Date: Fri, 23 Dec 2016 17:01:38 +0100
Subject: [PATCH] *: cleanup and unify minikube and self-hosted discovery

---
 assets/prometheus/prometheus.yaml             | 20 ++++++-------
 hack/cluster-monitoring/deploy                | 19 ++++++++-----
 hack/cluster-monitoring/teardown              |  6 +++-
 manifests/etcd/etcd-bootkube-gce.yaml         |  6 ++--
 .../etcd/etcd-bootkube-vagrant-multi.yaml     |  6 ++--
 manifests/k8s/minikube/kube-apiserver.yaml    | 27 ++++++++++++++++++
 .../k8s/minikube/kube-controller-manager.yaml | 28 +++++++++++++++++++
 manifests/k8s/minikube/kube-scheduler.yaml    | 28 +++++++++++++++++++
 manifests/k8s/self-hosted/kube-apiserver.yaml | 16 +++++++++++
 .../kube-controller-manager.yaml}             |  2 +-
 .../kube-dns.yaml}                            |  4 +--
 .../kube-scheduler.yaml}                      |  2 +-
 manifests/prometheus-operator.yaml            |  2 +-
 manifests/prometheus/prometheus-k8s-cm.yaml   | 20 ++++++-------
 14 files changed, 143 insertions(+), 43 deletions(-)
 create mode 100644 manifests/k8s/minikube/kube-apiserver.yaml
 create mode 100644 manifests/k8s/minikube/kube-controller-manager.yaml
 create mode 100644 manifests/k8s/minikube/kube-scheduler.yaml
 create mode 100644 manifests/k8s/self-hosted/kube-apiserver.yaml
 rename manifests/k8s/{kube-controller-manager-bootkube-vagrant-multi.yaml => self-hosted/kube-controller-manager.yaml} (92%)
 rename manifests/k8s/{kube-dns-bootkube-vagrant-multi.yaml => self-hosted/kube-dns.yaml} (83%)
 rename manifests/k8s/{kube-scheduler-bootkube-vagrant-multi.yaml => self-hosted/kube-scheduler.yaml} (92%)

diff --git a/assets/prometheus/prometheus.yaml b/assets/prometheus/prometheus.yaml
index 08df4789..14decf23 100644
--- a/assets/prometheus/prometheus.yaml
+++ b/assets/prometheus/prometheus.yaml
@@ -53,15 +53,10 @@ scrape_configs:
   relabel_configs:
   - action: keep
     source_labels: [__meta_kubernetes_service_name]
-    regex: prometheus|kubernetes|node-exporter|kube-state-metrics|etcd-k8s
+    regex: prometheus|node-exporter|kube-state-metrics
   - action: replace
     source_labels: [__meta_kubernetes_service_name]
     target_label: job
-  - action: replace
-    source_labels: [__meta_kubernetes_service_name]
-    regex: kubernetes
-    target_label: __scheme__
-    replacement: https
 
 # Scrapes the endpoint lists for the kube-dns server. Which we consider
 # part of a default setup.
@@ -75,13 +70,16 @@ scrape_configs:
 
   relabel_configs:
   - action: replace
-    source_labels: [__meta_kubernetes_service_name]
+    source_labels: [__meta_kubernetes_service_label_k8s_app]
     target_label: job
-    regex: "kube-(.*)-prometheus-discovery"
-    replacement: "kube-${1}"
   - action: keep
     source_labels: [__meta_kubernetes_service_name]
-    regex: "kube-(.*)-prometheus-discovery"
+    regex: ".*-prometheus-discovery"
   - action: keep
     source_labels: [__meta_kubernetes_endpoint_port_name]
-    regex: "prometheus.*"
+    regex: "http-metrics.*|https-metrics.*"
+  - action: replace
+    source_labels: [__meta_kubernetes_endpoint_port_name]
+    regex: "https-metrics.*"
+    target_label: __scheme__
+    replacement: https
diff --git a/hack/cluster-monitoring/deploy b/hack/cluster-monitoring/deploy
index a096747e..95a1b54b 100755
--- a/hack/cluster-monitoring/deploy
+++ b/hack/cluster-monitoring/deploy
@@ -4,19 +4,24 @@ if [ -z "${KUBECONFIG}" ]; then
     KUBECONFIG=~/.kube/config
 fi
 
-kubectl --kubeconfig="$KUBECONFIG" create namespace monitoring
+if [ -z "${NAMESPACE}" ]; then
+    NAMESPACE=monitoring
+fi
+
+kubectl --kubeconfig="$KUBECONFIG" create namespace "$NAMESPACE"
 
 kctl() {
-    kubectl --kubeconfig="$KUBECONFIG" -n "monitoring" "$@"
+    kubectl --kubeconfig="$KUBECONFIG" -n "$NAMESPACE" "$@"
 }
 
-kctl apply -f manifests/prometheus-operator.yaml
+kctl create -f manifests/prometheus-operator.yaml
 
 # Wait for TPRs to be ready.
 until kctl get servicemonitor; do sleep 1; done
 until kctl get prometheus; do sleep 1; done
+until kctl get alertmanager; do sleep 1; done
 
-kctl apply -f manifests/exporters
-kctl apply -f manifests/grafana
-kctl apply -f manifests/prometheus
-kctl apply -f manifests/alertmanager
+kctl create -f manifests/exporters
+kctl create -f manifests/grafana
+kctl create -f manifests/prometheus
+kctl create -f manifests/alertmanager
diff --git a/hack/cluster-monitoring/teardown b/hack/cluster-monitoring/teardown
index afa4ce14..490979a1 100755
--- a/hack/cluster-monitoring/teardown
+++ b/hack/cluster-monitoring/teardown
@@ -4,8 +4,12 @@ if [ -z "${KUBECONFIG}" ]; then
     KUBECONFIG=~/.kube/config
 fi
 
+if [ -z "${NAMESPACE}" ]; then
+    NAMESPACE=monitoring
+fi
+
 kctl() {
-    kubectl --kubeconfig="$KUBECONFIG" -n "monitoring" "$@"
+    kubectl --kubeconfig="$KUBECONFIG" -n "$NAMESPACE" "$@"
 }
 
 kctl delete -f manifests/exporters
diff --git a/manifests/etcd/etcd-bootkube-gce.yaml b/manifests/etcd/etcd-bootkube-gce.yaml
index ee8f391c..94e1c020 100644
--- a/manifests/etcd/etcd-bootkube-gce.yaml
+++ b/manifests/etcd/etcd-bootkube-gce.yaml
@@ -3,8 +3,7 @@ kind: Service
 metadata:
   name: etcd-k8s
   labels:
-    app: etcd
-    etcd: k8s
+    k8s-app: etcd
 spec:
   type: ClusterIP
   clusterIP: None
@@ -18,8 +17,7 @@ kind: Endpoints
 metadata:
   name: etcd-k8s
   labels:
-    app: etcd
-    etcd: k8s
+    k8s-app: etcd
 subsets:
 - addresses:
   - ip: 10.142.0.2
diff --git a/manifests/etcd/etcd-bootkube-vagrant-multi.yaml b/manifests/etcd/etcd-bootkube-vagrant-multi.yaml
index 38cdc9c4..51293c60 100644
--- a/manifests/etcd/etcd-bootkube-vagrant-multi.yaml
+++ b/manifests/etcd/etcd-bootkube-vagrant-multi.yaml
@@ -3,8 +3,7 @@ kind: Service
 metadata:
   name: etcd-k8s
   labels:
-    app: etcd
-    etcd: k8s
+    k8s-app: etcd
 spec:
   type: ClusterIP
   clusterIP: None
@@ -18,8 +17,7 @@ kind: Endpoints
 metadata:
   name: etcd-k8s
   labels:
-    app: etcd
-    etcd: k8s
+    k8s-app: etcd
 subsets:
 - addresses:
   - ip: 172.17.4.51
diff --git a/manifests/k8s/minikube/kube-apiserver.yaml b/manifests/k8s/minikube/kube-apiserver.yaml
new file mode 100644
index 00000000..2b35a4ec
--- /dev/null
+++ b/manifests/k8s/minikube/kube-apiserver.yaml
@@ -0,0 +1,27 @@
+apiVersion: v1
+kind: Service
+metadata:
+  name: kube-apiserver-prometheus-discovery
+  labels:
+    k8s-app: kubernetes
+spec:
+  type: ClusterIP
+  clusterIP: None
+  ports:
+  - name: https-metrics
+    port: 8443
+    protocol: TCP
+---
+apiVersion: v1
+kind: Endpoints
+metadata:
+  name: kube-apiserver-prometheus-discovery
+  labels:
+    k8s-app: kubernetes
+subsets:
+- addresses:
+  - ip: 192.168.99.100
+  ports:
+  - name: https-metrics
+    port: 8443
+    protocol: TCP
diff --git a/manifests/k8s/minikube/kube-controller-manager.yaml b/manifests/k8s/minikube/kube-controller-manager.yaml
new file mode 100644
index 00000000..bca65e40
--- /dev/null
+++ b/manifests/k8s/minikube/kube-controller-manager.yaml
@@ -0,0 +1,28 @@
+apiVersion: v1
+kind: Service
+metadata:
+  name: kube-controller-manager-prometheus-discovery
+  labels:
+    k8s-app: kube-controller-manager
+spec:
+  type: ClusterIP
+  clusterIP: None
+  ports:
+  - name: http-metrics
+    port: 10252
+    targetPort: 10252
+    protocol: TCP
+---
+apiVersion: v1
+kind: Endpoints
+metadata:
+  name: kube-controller-manager-prometheus-discovery
+  labels:
+    k8s-app: kube-controller-manager
+subsets:
+- addresses:
+  - ip: 192.168.99.100
+  ports:
+  - name: http-metrics
+    port: 10252
+    protocol: TCP
diff --git a/manifests/k8s/minikube/kube-scheduler.yaml b/manifests/k8s/minikube/kube-scheduler.yaml
new file mode 100644
index 00000000..983e5581
--- /dev/null
+++ b/manifests/k8s/minikube/kube-scheduler.yaml
@@ -0,0 +1,28 @@
+apiVersion: v1
+kind: Service
+metadata:
+  name: kube-scheduler-prometheus-discovery
+  labels:
+    k8s-app: kube-scheduler
+spec:
+  type: ClusterIP
+  clusterIP: None
+  ports:
+  - name: http-metrics
+    port: 10251
+    targetPort: 10251
+    protocol: TCP
+---
+apiVersion: v1
+kind: Endpoints
+metadata:
+  name: kube-scheduler-prometheus-discovery
+  labels:
+    k8s-app: kube-scheduler
+subsets:
+- addresses:
+  - ip: 192.168.99.100
+  ports:
+  - name: http-metrics
+    port: 10251
+    protocol: TCP
diff --git a/manifests/k8s/self-hosted/kube-apiserver.yaml b/manifests/k8s/self-hosted/kube-apiserver.yaml
new file mode 100644
index 00000000..72b1c08f
--- /dev/null
+++ b/manifests/k8s/self-hosted/kube-apiserver.yaml
@@ -0,0 +1,16 @@
+apiVersion: v1
+kind: Service
+metadata:
+  name: kube-apiserver-prometheus-discovery
+  labels:
+    k8s-app: kubernetes
+spec:
+  selector:
+    k8s-app: kube-apiserver
+  type: ClusterIP
+  clusterIP: None
+  ports:
+  - name: https-metrics
+    port: 443
+    targetPort: 443
+    protocol: TCP
diff --git a/manifests/k8s/kube-controller-manager-bootkube-vagrant-multi.yaml b/manifests/k8s/self-hosted/kube-controller-manager.yaml
similarity index 92%
rename from manifests/k8s/kube-controller-manager-bootkube-vagrant-multi.yaml
rename to manifests/k8s/self-hosted/kube-controller-manager.yaml
index 2e6b4db9..2f22a6f2 100644
--- a/manifests/k8s/kube-controller-manager-bootkube-vagrant-multi.yaml
+++ b/manifests/k8s/self-hosted/kube-controller-manager.yaml
@@ -10,7 +10,7 @@ spec:
   type: ClusterIP
   clusterIP: None
   ports:
-  - name: prometheus
+  - name: http-metrics
     port: 10252
     targetPort: 10252
     protocol: TCP
diff --git a/manifests/k8s/kube-dns-bootkube-vagrant-multi.yaml b/manifests/k8s/self-hosted/kube-dns.yaml
similarity index 83%
rename from manifests/k8s/kube-dns-bootkube-vagrant-multi.yaml
rename to manifests/k8s/self-hosted/kube-dns.yaml
index 4ae570f8..36d9a0ad 100644
--- a/manifests/k8s/kube-dns-bootkube-vagrant-multi.yaml
+++ b/manifests/k8s/self-hosted/kube-dns.yaml
@@ -10,11 +10,11 @@ spec:
   type: ClusterIP
   clusterIP: None
   ports:
-  - name: prometheus-skydns
+  - name: http-metrics-skydns
     port: 10055
     targetPort: 10055
     protocol: TCP
-  - name: prometheus-dnsmasq
+  - name: http-metrics-dnsmasq
     port: 10054
     targetPort: 10054
     protocol: TCP
diff --git a/manifests/k8s/kube-scheduler-bootkube-vagrant-multi.yaml b/manifests/k8s/self-hosted/kube-scheduler.yaml
similarity index 92%
rename from manifests/k8s/kube-scheduler-bootkube-vagrant-multi.yaml
rename to manifests/k8s/self-hosted/kube-scheduler.yaml
index b79853d2..331998fe 100644
--- a/manifests/k8s/kube-scheduler-bootkube-vagrant-multi.yaml
+++ b/manifests/k8s/self-hosted/kube-scheduler.yaml
@@ -10,7 +10,7 @@ spec:
   type: ClusterIP
   clusterIP: None
   ports:
-  - name: prometheus
+  - name: http-metrics
     port: 10251
     targetPort: 10251
     protocol: TCP
diff --git a/manifests/prometheus-operator.yaml b/manifests/prometheus-operator.yaml
index f550d241..bb1dab9a 100644
--- a/manifests/prometheus-operator.yaml
+++ b/manifests/prometheus-operator.yaml
@@ -13,7 +13,7 @@ spec:
     spec:
       containers:
        - name: prometheus-operator
-         image: quay.io/coreos/prometheus-operator:v0.1.0
+         image: quay.io/coreos/prometheus-operator:v0.2.1
          resources:
            requests:
              cpu: 100m
diff --git a/manifests/prometheus/prometheus-k8s-cm.yaml b/manifests/prometheus/prometheus-k8s-cm.yaml
index f6d61cdd..5e4a9cd3 100644
--- a/manifests/prometheus/prometheus-k8s-cm.yaml
+++ b/manifests/prometheus/prometheus-k8s-cm.yaml
@@ -56,15 +56,10 @@ data:
       relabel_configs:
       - action: keep
         source_labels: [__meta_kubernetes_service_name]
-        regex: prometheus|kubernetes|node-exporter|kube-state-metrics|etcd-k8s
+        regex: prometheus|node-exporter|kube-state-metrics
       - action: replace
         source_labels: [__meta_kubernetes_service_name]
         target_label: job
-      - action: replace
-        source_labels: [__meta_kubernetes_service_name]
-        regex: kubernetes
-        target_label: __scheme__
-        replacement: https
 
     # Scrapes the endpoint lists for the kube-dns server. Which we consider
     # part of a default setup.
@@ -78,16 +73,19 @@ data:
 
       relabel_configs:
       - action: replace
-        source_labels: [__meta_kubernetes_service_name]
+        source_labels: [__meta_kubernetes_service_label_k8s_app]
         target_label: job
-        regex: "kube-(.*)-prometheus-discovery"
-        replacement: "kube-${1}"
       - action: keep
         source_labels: [__meta_kubernetes_service_name]
-        regex: "kube-(.*)-prometheus-discovery"
+        regex: ".*-prometheus-discovery"
       - action: keep
         source_labels: [__meta_kubernetes_endpoint_port_name]
-        regex: "prometheus.*"
+        regex: "http-metrics.*|https-metrics.*"
+      - action: replace
+        source_labels: [__meta_kubernetes_endpoint_port_name]
+        regex: "https-metrics.*"
+        target_label: __scheme__
+        replacement: https
 kind: ConfigMap
 metadata:
   creationTimestamp: null
-- 
GitLab