From ea5c455c467b6b023d0d7549f46f3afe32dcf083 Mon Sep 17 00:00:00 2001
From: Karl Skewes <karl.skewes@gmail.com>
Date: Thu, 7 Mar 2019 08:24:22 +1300
Subject: [PATCH] contrib/kube-prometheus: Jsonnet snippet for managed
 kubernetes clusters

---
 .../kube-prometheus-managed-cluster.jsonnet   | 28 +++++++++++++++++++
 1 file changed, 28 insertions(+)
 create mode 100644 jsonnet/kube-prometheus/kube-prometheus-managed-cluster.jsonnet

diff --git a/jsonnet/kube-prometheus/kube-prometheus-managed-cluster.jsonnet b/jsonnet/kube-prometheus/kube-prometheus-managed-cluster.jsonnet
new file mode 100644
index 00000000..442c0261
--- /dev/null
+++ b/jsonnet/kube-prometheus/kube-prometheus-managed-cluster.jsonnet
@@ -0,0 +1,28 @@
+// On managed Kubernetes clusters some of the control plane components are not exposed to customers.
+// Disable scrape jobs and service monitors for these components by overwriting 'kube-prometheus.libsonnet' defaults
+// Note this doesn't disable generation of associated alerting rules but the rules don't trigger
+
+{
+  _config+:: {
+    // This snippet walks the original object (super.jobs, set as temp var j) and creates a replacement jobs object
+    //     excluding any members of the set specified (eg: controller and scheduler).
+    local j = super.jobs,
+    jobs: {
+      [k]: j[k]
+      for k in std.objectFields(j)
+      if !std.setMember(k, ['KubeControllerManager', 'KubeScheduler'])
+    },
+  },
+
+  // Same as above but for ServiceMonitor's
+  local p = super.prometheus,
+  prometheus: {
+    [q]: p[q]
+    for q in std.objectFields(p)
+    if !std.setMember(q, ['serviceMonitorKubeControllerManager', 'serviceMonitorKubeScheduler'])
+  },
+
+  // TODO: disable generationg of alerting rules
+  // manifests/prometheus-rules.yaml:52:  - name: kube-scheduler.rules
+
+}
-- 
GitLab