From d9ac51aed0b500089eb6788ae6b5010a6d135ac1 Mon Sep 17 00:00:00 2001 From: James Sturtevant <jstur@microsoft.com> Date: Tue, 2 Feb 2021 12:14:05 -0800 Subject: [PATCH] Windows addon Signed-off-by: James Sturtevant <jstur@microsoft.com> --- docs/windows.md | 21 +++++++ examples/windows.jsonnet | 33 +++++++++++ .../kube-prometheus/addons/windows.libsonnet | 58 +++++++++++++++++++ 3 files changed, 112 insertions(+) create mode 100644 docs/windows.md create mode 100644 examples/windows.jsonnet create mode 100644 jsonnet/kube-prometheus/addons/windows.libsonnet diff --git a/docs/windows.md b/docs/windows.md new file mode 100644 index 00000000..b0ca2277 --- /dev/null +++ b/docs/windows.md @@ -0,0 +1,21 @@ +# Windows + +The [Windows addon](../examples/windows.jsonnet) adds the dashboards and rules from [kubernetes-monitoring/kubernetes-mixin](https://github.com/kubernetes-monitoring/kubernetes-mixin#dashboards-for-windows-nodes). + +Currently, Windows does not support running with [windows_exporter](https://github.com/prometheus-community/windows_exporter) in a pod so this add on uses [additional scrap configuration](https://github.com/prometheus-operator/prometheus-operator/blob/master/Documentation/additional-scrape-config.md) to set up a static configs to scrape the node ports where windows_exporter is configured. + +The addon requires you to specify the node ips and ports where it can find the windows_exporter. See the [full example](../examples/windows.jsonnet) for setup. + +``` +local kp = (import 'kube-prometheus/main.libsonnet') + + (import 'kube-prometheus/addons/windows.libsonnet') + + { + values+:: { + windowsScrapeConfig+:: { + static_configs: { + targets: ["10.240.0.65:5000", "10.240.0.63:5000"], + }, + }, + }, + }; +``` diff --git a/examples/windows.jsonnet b/examples/windows.jsonnet new file mode 100644 index 00000000..0c9ff36f --- /dev/null +++ b/examples/windows.jsonnet @@ -0,0 +1,33 @@ +local kp = + (import 'kube-prometheus/main.libsonnet') + + (import 'kube-prometheus/addons/windows.libsonnet') + + { + values+:: { + common+: { + namespace: 'monitoring', + }, + windowsScrapeConfig+:: { + static_configs: { + targets: ['10.240.0.65:5000', '10.240.0.63:5000'], + }, + }, + }, + }; + +{ 'setup/0namespace-namespace': kp.kubePrometheus.namespace } + +{ + ['setup/prometheus-operator-' + name]: kp.prometheusOperator[name] + for name in std.filter((function(name) name != 'serviceMonitor' && name != 'prometheusRule'), std.objectFields(kp.prometheusOperator)) +} + +// serviceMonitor and prometheusRule are separated so that they can be created after the CRDs are ready +{ 'prometheus-operator-serviceMonitor': kp.prometheusOperator.serviceMonitor } + +{ 'prometheus-operator-prometheusRule': kp.prometheusOperator.prometheusRule } + +{ 'kube-prometheus-prometheusRule': kp.kubePrometheus.prometheusRule } + +{ ['alertmanager-' + name]: kp.alertmanager[name] for name in std.objectFields(kp.alertmanager) } + +{ ['blackbox-exporter-' + name]: kp.blackboxExporter[name] for name in std.objectFields(kp.blackboxExporter) } + +{ ['grafana-' + name]: kp.grafana[name] for name in std.objectFields(kp.grafana) } + +{ ['kube-state-metrics-' + name]: kp.kubeStateMetrics[name] for name in std.objectFields(kp.kubeStateMetrics) } + +{ ['kubernetes-' + name]: kp.kubernetesControlPlane[name] for name in std.objectFields(kp.kubernetesControlPlane) } +{ ['node-exporter-' + name]: kp.nodeExporter[name] for name in std.objectFields(kp.nodeExporter) } + +{ ['prometheus-' + name]: kp.prometheus[name] for name in std.objectFields(kp.prometheus) } + +{ ['prometheus-adapter-' + name]: kp.prometheusAdapter[name] for name in std.objectFields(kp.prometheusAdapter) } diff --git a/jsonnet/kube-prometheus/addons/windows.libsonnet b/jsonnet/kube-prometheus/addons/windows.libsonnet new file mode 100644 index 00000000..04d2f6f4 --- /dev/null +++ b/jsonnet/kube-prometheus/addons/windows.libsonnet @@ -0,0 +1,58 @@ +local windowsdashboards = import 'kubernetes-mixin/dashboards/windows.libsonnet'; +local windowsrules = import 'kubernetes-mixin/rules/windows.libsonnet'; + +{ + values+:: { + windowsScrapeConfig+:: { + job_name: 'windows-exporter', + static_configs: [ + { + targets: [error 'must provide targets array'], + }, + ], + }, + + grafana+:: { + dashboards+:: windowsdashboards { + _config: $.kubernetesControlPlane.mixin._config { + wmiExporterSelector: 'job="' + $.values.windowsScrapeConfig.job_name + '"', + }, + }.grafanaDashboards, + }, + }, + kubernetesControlPlane+: { + mixin+:: { + prometheusRules+:: { + groups+: windowsrules { + _config: $.kubernetesControlPlane.mixin._config { + wmiExporterSelector: 'job="' + $.values.windowsScrapeConfig.job_name + '"', + }, + }.prometheusRules.groups, + }, + }, + }, + prometheus+: { + local p = self, + local sc = [$.values.windowsScrapeConfig], + prometheus+: { + spec+: { + additionalScrapeConfigs: { + name: 'prometheus-' + p.config.name + '-additional-scrape-config', + key: 'prometheus-additional.yaml', + }, + }, + + }, + windowsConfig: { + apiVersion: 'v1', + kind: 'Secret', + metadata: { + name: 'prometheus-' + p.config.name + '-additional-scrape-config', + namespace: p.config.namespace, + }, + stringData: { + 'prometheus-additional.yaml': std.manifestYamlDoc(sc), + }, + }, + }, +} -- GitLab