From f06175bb3bc3bc0208cf750b2e9d46761ce134ca Mon Sep 17 00:00:00 2001 From: Damien Grisonnet Date: Wed, 31 Mar 2021 17:12:42 +0200 Subject: [PATCH 1/3] jsonnet: add function to apply platform patches Signed-off-by: Damien Grisonnet --- jsonnet/kube-prometheus/main.libsonnet | 5 ++++- jsonnet/kube-prometheus/platforms/README.md | 18 ++++++++++++++++++ .../platforms/platforms.libsonnet | 16 ++++++++++++++++ 3 files changed, 38 insertions(+), 1 deletion(-) create mode 100644 jsonnet/kube-prometheus/platforms/README.md create mode 100644 jsonnet/kube-prometheus/platforms/platforms.libsonnet diff --git a/jsonnet/kube-prometheus/main.libsonnet b/jsonnet/kube-prometheus/main.libsonnet index 462f9aef..ddb241d8 100644 --- a/jsonnet/kube-prometheus/main.libsonnet +++ b/jsonnet/kube-prometheus/main.libsonnet @@ -9,6 +9,8 @@ local prometheusAdapter = import './components/prometheus-adapter.libsonnet'; local prometheusOperator = import './components/prometheus-operator.libsonnet'; local prometheus = import './components/prometheus.libsonnet'; +local platformPatch = (import './platforms/platforms.libsonnet').platformPatch; + { // using `values` as this is similar to helm values:: { @@ -104,6 +106,7 @@ local prometheus = import './components/prometheus.libsonnet'; kubePrometheus: { namespace: $.values.common.namespace, mixin+: { ruleLabels: $.values.common.ruleLabels }, + platform: null, }, }, @@ -124,5 +127,5 @@ local prometheus = import './components/prometheus.libsonnet'; name: $.values.kubePrometheus.namespace, }, }, - }, + } + platformPatch($.values.kubePrometheus.platform), } diff --git a/jsonnet/kube-prometheus/platforms/README.md b/jsonnet/kube-prometheus/platforms/README.md new file mode 100644 index 00000000..8edeade6 --- /dev/null +++ b/jsonnet/kube-prometheus/platforms/README.md @@ -0,0 +1,18 @@ +# Adding a new platform specific configuration + +Adding a new platform specific configuration requires to update the +[platforms.jsonnet](./platform.jsonnet) file by adding the platform to the list +of existing ones. + +This allow configuring the new platform in the following way: + +```jsonnet +(import 'kube-prometheus/main.libsonnet') + + { + values+:: { + kubePrometheus+: { + platform: 'example-platform', + } + } + } +``` diff --git a/jsonnet/kube-prometheus/platforms/platforms.libsonnet b/jsonnet/kube-prometheus/platforms/platforms.libsonnet new file mode 100644 index 00000000..9c6f07c7 --- /dev/null +++ b/jsonnet/kube-prometheus/platforms/platforms.libsonnet @@ -0,0 +1,16 @@ +local platforms = { + aws: import './aws.libsonnet', + bootkube: import './bootkube.libsonnet', + gke: import './gke.libsonnet', + eks: import './eks.libsonnet', + kops: import './kops.libsonnet', + kops_coredns: (import './kops.libsonnet') + (import './kops-coredns.libsonnet'), + kubeadm: import './kubeadm.libsonnet', + kubespray: import './kubespray.libsonnet', +}; + +{ + // platformPatch returns the platform specific patch associated to the given + // platform. + platformPatch(p): if p != null && std.objectHas(platforms, p) then platforms[p] else {}, +} From b59b2c23d85292e559750feca9fee9d3041989b8 Mon Sep 17 00:00:00 2001 From: Damien Grisonnet Date: Tue, 6 Apr 2021 11:33:07 +0200 Subject: [PATCH 2/3] examples: update platform snippets and doc Signed-off-by: Damien Grisonnet --- README.md | 65 +++++-------------- docs/EKS-cni-support.md | 6 +- examples/eks-cni-example.jsonnet | 6 +- examples/jsonnet-snippets/aws.jsonnet | 2 - examples/jsonnet-snippets/bootkube.jsonnet | 2 - .../jsonnet-snippets/kops-coredns.jsonnet | 3 - examples/jsonnet-snippets/kops.jsonnet | 2 - examples/jsonnet-snippets/kubeadm.jsonnet | 2 - examples/jsonnet-snippets/kubespray.jsonnet | 2 - examples/jsonnet-snippets/platform.jsonnet | 8 +++ examples/minikube.jsonnet | 4 +- jsonnet/kube-prometheus/platforms/README.md | 17 +---- 12 files changed, 38 insertions(+), 81 deletions(-) delete mode 100644 examples/jsonnet-snippets/aws.jsonnet delete mode 100644 examples/jsonnet-snippets/bootkube.jsonnet delete mode 100644 examples/jsonnet-snippets/kops-coredns.jsonnet delete mode 100644 examples/jsonnet-snippets/kops.jsonnet delete mode 100644 examples/jsonnet-snippets/kubeadm.jsonnet delete mode 100644 examples/jsonnet-snippets/kubespray.jsonnet create mode 100644 examples/jsonnet-snippets/platform.jsonnet diff --git a/README.md b/README.md index 794063bd..b6e7624f 100644 --- a/README.md +++ b/README.md @@ -360,57 +360,28 @@ Jsonnet is a turing complete language, any logic can be reflected in it. It also ### Cluster Creation Tools -A common example is that not all Kubernetes clusters are created exactly the same way, meaning the configuration to monitor them may be slightly different. For [kubeadm](examples/jsonnet-snippets/kubeadm.jsonnet), [bootkube](examples/jsonnet-snippets/bootkube.jsonnet), [kops](examples/jsonnet-snippets/kops.jsonnet) and [kubespray](examples/jsonnet-snippets/kubespray.jsonnet) clusters there are mixins available to easily configure these: +A common example is that not all Kubernetes clusters are created exactly the same way, meaning the configuration to monitor them may be slightly different. For the following clusters there are mixins available to easily configure them: -kubeadm: +* aws +* bootkube +* eks +* gke +* kops-coredns +* kubeadm +* kubespray -[embedmd]:# (examples/jsonnet-snippets/kubeadm.jsonnet) +These mixins are selectable via the `platform` field of kubePrometheus: + +[embedmd]:# (examples/jsonnet-snippets/platform.jsonnet) ```jsonnet (import 'kube-prometheus/main.libsonnet') + -(import 'kube-prometheus/platforms/kubeadm.libsonnet') -``` - -bootkube: - -[embedmd]:# (examples/jsonnet-snippets/bootkube.jsonnet) -```jsonnet -(import 'kube-prometheus/main.libsonnet') + -(import 'kube-prometheus/platforms/bootkube.libsonnet') -``` - -kops: - -[embedmd]:# (examples/jsonnet-snippets/kops.jsonnet) -```jsonnet -(import 'kube-prometheus/main.libsonnet') + -(import 'kube-prometheus/platforms/kops.libsonnet') -``` - -kops with CoreDNS: - -If your kops cluster is using CoreDNS, there is an additional mixin to import. - -[embedmd]:# (examples/jsonnet-snippets/kops-coredns.jsonnet) -```jsonnet -(import 'kube-prometheus/main.libsonnet') + -(import 'kube-prometheus/platforms/kops.libsonnet') + -(import 'kube-prometheus/platforms/kops-coredns.libsonnet') -``` - -kubespray: - -[embedmd]:# (examples/jsonnet-snippets/kubespray.jsonnet) -```jsonnet -(import 'kube-prometheus/main.libsonnet') + -(import 'kube-prometheus/platforms/kubespray.libsonnet') -``` - -aws: - -[embedmd]:# (examples/jsonnet-snippets/aws.jsonnet) -```jsonnet -(import 'kube-prometheus/main.libsonnet') + -(import 'kube-prometheus/platforms/aws.libsonnet') +{ + values+:: { + kubePrometheus+: { + platform: 'example-platform', + }, + }, +} ``` ### Internal Registry diff --git a/docs/EKS-cni-support.md b/docs/EKS-cni-support.md index 266d5fcb..1cd8b146 100644 --- a/docs/EKS-cni-support.md +++ b/docs/EKS-cni-support.md @@ -7,12 +7,14 @@ One fatal issue that can occur is that you run out of IP addresses in your eks c You can monitor the `awscni` using kube-promethus with : [embedmd]:# (../examples/eks-cni-example.jsonnet) ```jsonnet -local kp = (import 'kube-prometheus/main.libsonnet') + - (import 'kube-prometheus/platforms/eks.libsonnet') + { +local kp = (import 'kube-prometheus/main.libsonnet') + { values+:: { common+: { namespace: 'monitoring', }, + kubePrometheus+: { + platform: 'eks', + }, }, kubernetesControlPlane+: { prometheusRuleEksCNI+: { diff --git a/examples/eks-cni-example.jsonnet b/examples/eks-cni-example.jsonnet index c92236fe..1b37af50 100644 --- a/examples/eks-cni-example.jsonnet +++ b/examples/eks-cni-example.jsonnet @@ -1,9 +1,11 @@ -local kp = (import 'kube-prometheus/main.libsonnet') + - (import 'kube-prometheus/platforms/eks.libsonnet') + { +local kp = (import 'kube-prometheus/main.libsonnet') + { values+:: { common+: { namespace: 'monitoring', }, + kubePrometheus+: { + platform: 'eks', + }, }, kubernetesControlPlane+: { prometheusRuleEksCNI+: { diff --git a/examples/jsonnet-snippets/aws.jsonnet b/examples/jsonnet-snippets/aws.jsonnet deleted file mode 100644 index 6eaca09f..00000000 --- a/examples/jsonnet-snippets/aws.jsonnet +++ /dev/null @@ -1,2 +0,0 @@ -(import 'kube-prometheus/main.libsonnet') + -(import 'kube-prometheus/platforms/aws.libsonnet') diff --git a/examples/jsonnet-snippets/bootkube.jsonnet b/examples/jsonnet-snippets/bootkube.jsonnet deleted file mode 100644 index 3d9f3482..00000000 --- a/examples/jsonnet-snippets/bootkube.jsonnet +++ /dev/null @@ -1,2 +0,0 @@ -(import 'kube-prometheus/main.libsonnet') + -(import 'kube-prometheus/platforms/bootkube.libsonnet') diff --git a/examples/jsonnet-snippets/kops-coredns.jsonnet b/examples/jsonnet-snippets/kops-coredns.jsonnet deleted file mode 100644 index d1af478b..00000000 --- a/examples/jsonnet-snippets/kops-coredns.jsonnet +++ /dev/null @@ -1,3 +0,0 @@ -(import 'kube-prometheus/main.libsonnet') + -(import 'kube-prometheus/platforms/kops.libsonnet') + -(import 'kube-prometheus/platforms/kops-coredns.libsonnet') diff --git a/examples/jsonnet-snippets/kops.jsonnet b/examples/jsonnet-snippets/kops.jsonnet deleted file mode 100644 index 9271b993..00000000 --- a/examples/jsonnet-snippets/kops.jsonnet +++ /dev/null @@ -1,2 +0,0 @@ -(import 'kube-prometheus/main.libsonnet') + -(import 'kube-prometheus/platforms/kops.libsonnet') diff --git a/examples/jsonnet-snippets/kubeadm.jsonnet b/examples/jsonnet-snippets/kubeadm.jsonnet deleted file mode 100644 index 0750b4b3..00000000 --- a/examples/jsonnet-snippets/kubeadm.jsonnet +++ /dev/null @@ -1,2 +0,0 @@ -(import 'kube-prometheus/main.libsonnet') + -(import 'kube-prometheus/platforms/kubeadm.libsonnet') diff --git a/examples/jsonnet-snippets/kubespray.jsonnet b/examples/jsonnet-snippets/kubespray.jsonnet deleted file mode 100644 index d9bb3bd5..00000000 --- a/examples/jsonnet-snippets/kubespray.jsonnet +++ /dev/null @@ -1,2 +0,0 @@ -(import 'kube-prometheus/main.libsonnet') + -(import 'kube-prometheus/platforms/kubespray.libsonnet') diff --git a/examples/jsonnet-snippets/platform.jsonnet b/examples/jsonnet-snippets/platform.jsonnet new file mode 100644 index 00000000..a3ad9c3d --- /dev/null +++ b/examples/jsonnet-snippets/platform.jsonnet @@ -0,0 +1,8 @@ +(import 'kube-prometheus/main.libsonnet') + +{ + values+:: { + kubePrometheus+: { + platform: 'example-platform', + }, + }, +} diff --git a/examples/minikube.jsonnet b/examples/minikube.jsonnet index 87b88d69..c5a1bc68 100644 --- a/examples/minikube.jsonnet +++ b/examples/minikube.jsonnet @@ -1,6 +1,5 @@ local kp = (import 'kube-prometheus/main.libsonnet') + - (import 'kube-prometheus/platforms/kubeadm.libsonnet') + // Note that NodePort type services is likely not a good idea for your production use case, it is only used for demonstration purposes here. (import 'kube-prometheus/addons/node-ports.libsonnet') + { @@ -19,6 +18,9 @@ local kp = }, }, }, + kubePrometheus+: { + platform: 'kubeadm', + }, }, // For simplicity, each of the following values for 'externalUrl': diff --git a/jsonnet/kube-prometheus/platforms/README.md b/jsonnet/kube-prometheus/platforms/README.md index 8edeade6..45eb76d1 100644 --- a/jsonnet/kube-prometheus/platforms/README.md +++ b/jsonnet/kube-prometheus/platforms/README.md @@ -1,18 +1,3 @@ # Adding a new platform specific configuration -Adding a new platform specific configuration requires to update the -[platforms.jsonnet](./platform.jsonnet) file by adding the platform to the list -of existing ones. - -This allow configuring the new platform in the following way: - -```jsonnet -(import 'kube-prometheus/main.libsonnet') + - { - values+:: { - kubePrometheus+: { - platform: 'example-platform', - } - } - } -``` +Adding a new platform specific configuration requires to update the [README](../../../README.md#cluster-creation-tools) and the [platforms.jsonnet](./platform.jsonnet) file by adding the platform to the list of existing ones. This allow the new platform to be discoverable and easily configurable by the users. From ed5a2f94fcfd1091ec3abb6ca7ce0ceb2c73dcb9 Mon Sep 17 00:00:00 2001 From: Damien Grisonnet Date: Fri, 9 Apr 2021 12:44:51 +0200 Subject: [PATCH 3/3] jsonnet: fix test failures with platformPatch Signed-off-by: Damien Grisonnet --- jsonnet/kube-prometheus/main.libsonnet | 6 ++-- .../platforms/platforms.libsonnet | 31 +++++++++++++++++-- 2 files changed, 31 insertions(+), 6 deletions(-) diff --git a/jsonnet/kube-prometheus/main.libsonnet b/jsonnet/kube-prometheus/main.libsonnet index ddb241d8..1c13b7b9 100644 --- a/jsonnet/kube-prometheus/main.libsonnet +++ b/jsonnet/kube-prometheus/main.libsonnet @@ -9,7 +9,7 @@ local prometheusAdapter = import './components/prometheus-adapter.libsonnet'; local prometheusOperator = import './components/prometheus-operator.libsonnet'; local prometheus = import './components/prometheus.libsonnet'; -local platformPatch = (import './platforms/platforms.libsonnet').platformPatch; +local platformPatch = import './platforms/platforms.libsonnet'; { // using `values` as this is similar to helm @@ -127,5 +127,5 @@ local platformPatch = (import './platforms/platforms.libsonnet').platformPatch; name: $.values.kubePrometheus.namespace, }, }, - } + platformPatch($.values.kubePrometheus.platform), -} + }, +} + platformPatch diff --git a/jsonnet/kube-prometheus/platforms/platforms.libsonnet b/jsonnet/kube-prometheus/platforms/platforms.libsonnet index 9c6f07c7..979190f2 100644 --- a/jsonnet/kube-prometheus/platforms/platforms.libsonnet +++ b/jsonnet/kube-prometheus/platforms/platforms.libsonnet @@ -9,8 +9,33 @@ local platforms = { kubespray: import './kubespray.libsonnet', }; +// platformPatch returns the platform specific patch associated to the given +// platform. +local platformPatch(p) = if p != null && std.objectHas(platforms, p) then platforms[p] else {}; + { - // platformPatch returns the platform specific patch associated to the given - // platform. - platformPatch(p): if p != null && std.objectHas(platforms, p) then platforms[p] else {}, + // initialize the object to prevent "Indexed object has no field" lint errors + local p = { + alertmanager: {}, + blackboxExporter: {}, + grafana: {}, + kubeStateMetrics: {}, + nodeExporter: {}, + prometheus: {}, + prometheusAdapter: {}, + prometheusOperator: {}, + kubernetesControlPlane: {}, + kubePrometheus: {}, + } + platformPatch($.values.kubePrometheus.platform), + + alertmanager+: p.alertmanager, + blackboxExporter+: p.blackboxExporter, + grafana+: p.grafana, + kubeStateMetrics+: p.kubeStateMetrics, + nodeExporter+: p.nodeExporter, + prometheus+: p.prometheus, + prometheusAdapter+: p.prometheusAdapter, + prometheusOperator+: p.prometheusOperator, + kubernetesControlPlane+: p.kubernetesControlPlane, + kubePrometheus+: p.kubePrometheus, }