diff --git a/example.jsonnet b/example.jsonnet index ca5028c841dfb3cde7f14ef868843ddbbeae64d0..2568be96826783214cb50e4903e2c6895ee69575 100644 --- a/example.jsonnet +++ b/example.jsonnet @@ -25,11 +25,11 @@ local kp = { 'prometheus-operator-serviceMonitor': kp.prometheusOperator.serviceMonitor } + { 'prometheus-operator-prometheusRule': kp.prometheusOperator.prometheusRule } + { 'kube-prometheus-prometheusRule': kp.kubePrometheus.prometheusRule } + -{ ['node-exporter-' + name]: kp.nodeExporter[name] for name in std.objectFields(kp.nodeExporter) } + -{ ['blackbox-exporter-' + name]: kp.blackboxExporter[name] for name in std.objectFields(kp.blackboxExporter) } + -{ ['kube-state-metrics-' + name]: kp.kubeStateMetrics[name] for name in std.objectFields(kp.kubeStateMetrics) } + { ['alertmanager-' + name]: kp.alertmanager[name] for name in std.objectFields(kp.alertmanager) } + -{ ['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) } + +{ ['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.kubernetesMixin[name] for name in std.objectFields(kp.kubernetesMixin) } +{ ['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/examples/additional-namespaces-servicemonitor.jsonnet b/examples/additional-namespaces-servicemonitor.jsonnet index 0f3add96d462392f903fbf64276d3c42f822f459..6cfe37dbd337aa85815e0660a09d0cb6e964ce8e 100644 --- a/examples/additional-namespaces-servicemonitor.jsonnet +++ b/examples/additional-namespaces-servicemonitor.jsonnet @@ -1,11 +1,13 @@ -local kp = (import 'kube-prometheus/kube-prometheus.libsonnet') + { - _config+:: { - namespace: 'monitoring', +local kp = (import 'kube-prometheus/main.libsonnet') + { + values+:: { + common+: { + namespace: 'monitoring', + }, prometheus+:: { namespaces+: ['my-namespace', 'my-second-namespace'], }, }, - prometheus+:: { + prometheus+: { serviceMonitorMyNamespace: { apiVersion: 'monitoring.coreos.com/v1', kind: 'ServiceMonitor', diff --git a/examples/additional-namespaces.jsonnet b/examples/additional-namespaces.jsonnet index 957fd9124741ef75acf4541fe5bfaeea52e4b55d..85cae475e97f772c11e77e488ea4d6f2b455b848 100644 --- a/examples/additional-namespaces.jsonnet +++ b/examples/additional-namespaces.jsonnet @@ -1,6 +1,8 @@ -local kp = (import 'kube-prometheus/kube-prometheus.libsonnet') + { - _config+:: { - namespace: 'monitoring', +local kp = (import 'kube-prometheus/main.libsonnet') + { + values+:: { + common+: { + namespace: 'monitoring', + }, prometheus+:: { namespaces+: ['my-namespace', 'my-second-namespace'], diff --git a/examples/alertmanager-config-external.jsonnet b/examples/alertmanager-config-external.jsonnet index c2b34ccaa36892ce5a0fa28ff1947083d5d93167..5d96d23dec49fc7918f0ddc10f6d13d03cc8ecc7 100644 --- a/examples/alertmanager-config-external.jsonnet +++ b/examples/alertmanager-config-external.jsonnet @@ -1,4 +1,4 @@ -((import 'kube-prometheus/kube-prometheus.libsonnet') + { +((import 'kube-prometheus/main.libsonnet') + { _config+:: { alertmanager+: { config: importstr 'alertmanager-config.yaml', diff --git a/examples/alertmanager-config.jsonnet b/examples/alertmanager-config.jsonnet index f08dbe19e333073d6553fda87bf5b4671787c0ac..9702711aead46d011c90e097dcb818d826bf8c66 100644 --- a/examples/alertmanager-config.jsonnet +++ b/examples/alertmanager-config.jsonnet @@ -1,5 +1,5 @@ -((import 'kube-prometheus/kube-prometheus.libsonnet') + { - _config+:: { +((import 'kube-prometheus/main.libsonnet') + { + values+:: { alertmanager+: { config: ||| global: diff --git a/examples/all-namespaces.jsonnet b/examples/all-namespaces.jsonnet index 7c5d149f1473ae4a856bbf386845562b594aa15f..52534766efa4d2b3f7dc4741a72936d7f7f8340a 100644 --- a/examples/all-namespaces.jsonnet +++ b/examples/all-namespaces.jsonnet @@ -1,9 +1,10 @@ -local kp = (import 'kube-prometheus/kube-prometheus.libsonnet') + - (import 'kube-prometheus/kube-prometheus-all-namespaces.libsonnet') + { - _config+:: { - namespace: 'monitoring', - - prometheus+:: { +local kp = (import 'kube-prometheus/main.libsonnet') + + (import 'kube-prometheus/addons/all-namespaces.libsonnet') + { + values+:: { + common+: { + namespace: 'monitoring', + }, + prometheus+: { namespaces: [], }, }, diff --git a/examples/continuous-delivery/argocd/kube-prometheus/argocd-basic.jsonnet b/examples/continuous-delivery/argocd/kube-prometheus/argocd-basic.jsonnet index 8600d818df6065823be4252f871f9b4902ffd471..94089e0c948155a390b595f130d5f16eae691cae 100644 --- a/examples/continuous-delivery/argocd/kube-prometheus/argocd-basic.jsonnet +++ b/examples/continuous-delivery/argocd/kube-prometheus/argocd-basic.jsonnet @@ -1,7 +1,8 @@ -local kp = (import 'kube-prometheus/kube-prometheus.libsonnet') + { - - _config+:: { - namespace: 'monitoring', +local kp = (import 'kube-prometheus/main.libsonnet') + { + values+:: { + common+: { + namespace: 'monitoring', + }, }, }; diff --git a/examples/eks-cni-example.jsonnet b/examples/eks-cni-example.jsonnet index dcebf6ddcd56240e26d66a84eb378e4566cf003d..77fa5d0bed42b5d564a3eb47b5bdd8a75b155d71 100644 --- a/examples/eks-cni-example.jsonnet +++ b/examples/eks-cni-example.jsonnet @@ -1,20 +1,26 @@ -local kp = (import 'kube-prometheus/kube-prometheus.libsonnet') + - (import 'kube-prometheus/kube-prometheus-eks.libsonnet') + { - _config+:: { - namespace: 'monitoring', +local kp = (import 'kube-prometheus/main.libsonnet') + + (import 'kube-prometheus/platforms/eks.libsonnet') + { + values+:: { + common+: { + namespace: 'monitoring', + }, }, - prometheusRules+:: { - groups+: [ - { - name: 'example-group', - rules: [ + prometheus+: { + prometheusRuleEksCNI+: { + spec+: { + groups+: [ { - record: 'aws_eks_available_ip', - expr: 'sum by(instance) (awscni_total_ip_addresses) - sum by(instance) (awscni_assigned_ip_addresses) < 10', + name: 'example-group', + rules: [ + { + record: 'aws_eks_available_ip', + expr: 'sum by(instance) (awscni_total_ip_addresses) - sum by(instance) (awscni_assigned_ip_addresses) < 10', + }, + ], }, ], }, - ], + }, }, }; diff --git a/examples/etcd-skip-verify.jsonnet b/examples/etcd-skip-verify.jsonnet index 603ba710e48a5cefd0c2c80df0796fb2e5ce5484..9982fa1699eb6ebf995f1bb927362f977511cec1 100644 --- a/examples/etcd-skip-verify.jsonnet +++ b/examples/etcd-skip-verify.jsonnet @@ -1,8 +1,9 @@ -local kp = (import 'kube-prometheus/kube-prometheus.libsonnet') + - (import 'kube-prometheus/kube-prometheus-static-etcd.libsonnet') + { - _config+:: { - namespace: 'monitoring', - +local kp = (import 'kube-prometheus/main.libsonnet') + + (import 'kube-prometheus/addons/static-etcd.libsonnet') + { + values+:: { + common+: { + namespace: 'monitoring', + }, etcd+:: { ips: ['127.0.0.1'], clientCA: importstr 'etcd-client-ca.crt', diff --git a/examples/etcd.jsonnet b/examples/etcd.jsonnet index 03d390cddb69fadd3c575bc97d14557def5fa531..e494b6ad20ffe94f5713b2b49f43b9d0911be864 100644 --- a/examples/etcd.jsonnet +++ b/examples/etcd.jsonnet @@ -1,7 +1,9 @@ -local kp = (import 'kube-prometheus/kube-prometheus.libsonnet') + - (import 'kube-prometheus/kube-prometheus-static-etcd.libsonnet') + { - _config+:: { - namespace: 'monitoring', +local kp = (import 'kube-prometheus/main.libsonnet') + + (import 'kube-prometheus/addons/static-etcd.libsonnet') + { + values+:: { + common+: { + namespace: 'monitoring', + }, // Reference info: https://github.com/coreos/kube-prometheus/blob/master/README.md#static-etcd-configuration etcd+:: { diff --git a/examples/grafana-additional-jsonnet-dashboard-example.jsonnet b/examples/grafana-additional-jsonnet-dashboard-example.jsonnet index b9b26fca552e983ab74d3ea2505240cb0892700e..fcfdd1fb4a90e859e1617cf25c2177cca10796a6 100644 --- a/examples/grafana-additional-jsonnet-dashboard-example.jsonnet +++ b/examples/grafana-additional-jsonnet-dashboard-example.jsonnet @@ -5,7 +5,7 @@ local prometheus = grafana.prometheus; local template = grafana.template; local graphPanel = grafana.graphPanel; -local kp = (import 'kube-prometheus/kube-prometheus.libsonnet') + { +local kp = (import 'kube-prometheus/main.libsonnet') + { _config+:: { namespace: 'monitoring', }, diff --git a/examples/grafana-additional-rendered-dashboard-example-2.jsonnet b/examples/grafana-additional-rendered-dashboard-example-2.jsonnet index 7d0926e99c05885cc1a0dbf1950c50b59db1a4d3..e18c6242479a1213ce3e2e6b3bb5460916eaaad2 100644 --- a/examples/grafana-additional-rendered-dashboard-example-2.jsonnet +++ b/examples/grafana-additional-rendered-dashboard-example-2.jsonnet @@ -1,4 +1,4 @@ -local kp = (import 'kube-prometheus/kube-prometheus.libsonnet') + { +local kp = (import 'kube-prometheus/main.libsonnet') + { _config+:: { namespace: 'monitoring', }, diff --git a/examples/grafana-additional-rendered-dashboard-example.jsonnet b/examples/grafana-additional-rendered-dashboard-example.jsonnet index 883c609700a8e9c6ccdf19ad6d068d9a55c778a5..6c5bb0489cc9d8f971d444e609506a63002613af 100644 --- a/examples/grafana-additional-rendered-dashboard-example.jsonnet +++ b/examples/grafana-additional-rendered-dashboard-example.jsonnet @@ -1,4 +1,4 @@ -local kp = (import 'kube-prometheus/kube-prometheus.libsonnet') + { +local kp = (import 'kube-prometheus/main.libsonnet') + { _config+:: { namespace: 'monitoring', }, diff --git a/examples/ingress.jsonnet b/examples/ingress.jsonnet index 023af577bafad7dddf6a76184108138861cb47d3..a2e26cd7e5d7075f318ec15858fa4ec6a02fd3d4 100644 --- a/examples/ingress.jsonnet +++ b/examples/ingress.jsonnet @@ -14,10 +14,12 @@ local ingress(name, namespace, rules) = { }; local kp = - (import 'kube-prometheus/kube-prometheus.libsonnet') + + (import 'kube-prometheus/main.libsonnet') + { - _config+:: { - namespace: 'monitoring', + values+:: { + common+: { + namespace: 'monitoring', + }, grafana+:: { config+: { sections+: { @@ -47,7 +49,7 @@ local kp = ingress+:: { 'alertmanager-main': ingress( 'alertmanager-main', - $._config.namespace, + $.values.common.namespace, [{ host: 'alertmanager.example.com', http: { @@ -64,7 +66,7 @@ local kp = ), grafana: ingress( 'grafana', - $._config.namespace, + $.values.common.namespace, [{ host: 'grafana.example.com', http: { @@ -81,7 +83,7 @@ local kp = ), 'prometheus-k8s': ingress( 'prometheus-k8s', - $._config.namespace, + $.values.common.namespace, [{ host: 'prometheus.example.com', http: { @@ -105,7 +107,7 @@ local kp = kind: 'Secret', metadata: { name: 'basic-auth', - namespace: $._config.namespace, + namespace: $.values.common.namespace, }, data: { auth: std.base64(importstr 'auth') }, type: 'Opaque', diff --git a/examples/internal-registry.jsonnet b/examples/internal-registry.jsonnet index f1d1e8ac9e49774b16cc4b97a5803f67b0f790c2..fc470de61da6e5e140aafa53fdd8f172b4630539 100644 --- a/examples/internal-registry.jsonnet +++ b/examples/internal-registry.jsonnet @@ -1,7 +1,9 @@ -local mixin = import 'kube-prometheus/kube-prometheus-config-mixins.libsonnet'; -local kp = (import 'kube-prometheus/kube-prometheus.libsonnet') + { - _config+:: { - namespace: 'monitoring', +local mixin = import 'kube-prometheus/addons/config-mixins.libsonnet'; +local kp = (import 'kube-prometheus/main.libsonnet') + { + values+:: { + common+: { + namespace: 'monitoring', + }, }, } + mixin.withImageRepository('internal-registry.com/organization'); diff --git a/examples/ksonnet-example.jsonnet b/examples/ksonnet-example.jsonnet index eadd2cb79c7309558abece9a1a05747cf7359366..36640ab4309282810785c58cb6a1c91e9f59bdd5 100644 --- a/examples/ksonnet-example.jsonnet +++ b/examples/ksonnet-example.jsonnet @@ -1,4 +1,4 @@ -((import 'kube-prometheus/kube-prometheus.libsonnet') + { +((import 'kube-prometheus/main.libsonnet') + { nodeExporter+: { daemonset+: { metadata+: { diff --git a/examples/minikube.jsonnet b/examples/minikube.jsonnet index 3073612a4849c849d0e366c366795edbed243c7b..dd2f77b42dc9987f48ee8b44c89c4d1f0fdcf0be 100644 --- a/examples/minikube.jsonnet +++ b/examples/minikube.jsonnet @@ -1,11 +1,13 @@ local kp = - (import 'kube-prometheus/kube-prometheus.libsonnet') + - (import 'kube-prometheus/kube-prometheus-kubeadm.libsonnet') + + (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/kube-prometheus-node-ports.libsonnet') + + (import 'kube-prometheus/addons/node-ports.libsonnet') + { - _config+:: { - namespace: 'monitoring', + values+:: { + common+: { + namespace: 'monitoring', + }, alertmanager+:: { config: importstr 'alertmanager-config.yaml', }, @@ -22,7 +24,7 @@ local kp = // For simplicity, each of the following values for 'externalUrl': // * assume that `minikube ip` prints "192.168.99.100" // * hard-code the NodePort for each app - prometheus+:: { + prometheus+: { prometheus+: { // Reference info: https://coreos.com/operators/prometheus/docs/latest/api.html#prometheusspec spec+: { diff --git a/examples/prometheus-additional-alert-rule-example.jsonnet b/examples/prometheus-additional-alert-rule-example.jsonnet index 6e63382e20e97b43d9342562cda2c0981706b766..63ec2ea740944ba0f8f6526a54e583067d8c3a51 100644 --- a/examples/prometheus-additional-alert-rule-example.jsonnet +++ b/examples/prometheus-additional-alert-rule-example.jsonnet @@ -1,25 +1,31 @@ -local kp = (import 'kube-prometheus/kube-prometheus.libsonnet') + { - _config+:: { - namespace: 'monitoring', +local kp = (import 'kube-prometheus/main.libsonnet') + { + values+:: { + common+: { + namespace: 'monitoring', + }, }, - prometheusAlerts+:: { - groups+: [ - { - name: 'example-group', - rules: [ + prometheus+: { + prometheusRule+: { + spec+: { + groups+: [ { - alert: 'Watchdog', - expr: 'vector(1)', - labels: { - severity: 'none', - }, - annotations: { - description: 'This is a Watchdog meant to ensure that the entire alerting pipeline is functional.', - }, + name: 'example-group', + rules: [ + { + alert: 'Watchdog', + expr: 'vector(1)', + labels: { + severity: 'none', + }, + annotations: { + description: 'This is a Watchdog meant to ensure that the entire alerting pipeline is functional.', + }, + }, + ], }, ], }, - ], + }, }, }; diff --git a/examples/prometheus-additional-recording-rule-example.jsonnet b/examples/prometheus-additional-recording-rule-example.jsonnet index 132bd0db0f4a1b891385c455064c71068d35a94b..c2abc4d39c9b669b2deba19518cce8e59ae2fc1c 100644 --- a/examples/prometheus-additional-recording-rule-example.jsonnet +++ b/examples/prometheus-additional-recording-rule-example.jsonnet @@ -1,19 +1,25 @@ -local kp = (import 'kube-prometheus/kube-prometheus.libsonnet') + { - _config+:: { - namespace: 'monitoring', +local kp = (import 'kube-prometheus/main.libsonnet') + { + values+:: { + common+: { + namespace: 'monitoring', + }, }, - prometheusRules+:: { - groups+: [ - { - name: 'example-group', - rules: [ + prometheus+: { + prometheusRule+: { + spec+: { + groups+: [ { - record: 'some_recording_rule_name', - expr: 'vector(1)', + name: 'example-group', + rules: [ + { + record: 'some_recording_rule_name', + expr: 'vector(1)', + }, + ], }, ], }, - ], + }, }, }; diff --git a/examples/prometheus-additional-rendered-rule-example.jsonnet b/examples/prometheus-additional-rendered-rule-example.jsonnet index b6d39a4052e168bc7f46fc1278eb32d9c48fe482..296768512d59e88cbee858833a52e7425cc5b5e1 100644 --- a/examples/prometheus-additional-rendered-rule-example.jsonnet +++ b/examples/prometheus-additional-rendered-rule-example.jsonnet @@ -1,9 +1,15 @@ -local kp = (import 'kube-prometheus/kube-prometheus.libsonnet') + { - _config+:: { - namespace: 'monitoring', +local kp = (import 'kube-prometheus/main.libsonnet') + { + values+:: { + common+: { + namespace: 'monitoring', + }, }, - prometheusAlerts+:: { - groups+: (import 'existingrule.json').groups, + prometheus+: { + prometheusRule+: { + spec+: { + groups+: (import 'existingrule.json').groups, + }, + }, }, }; diff --git a/examples/prometheus-name-override.jsonnet b/examples/prometheus-name-override.jsonnet index 862180129d9f3440ccc158ea07e33bc440b22561..b6c3906059b88c938d60e84dd1a7f603fbfadbc5 100644 --- a/examples/prometheus-name-override.jsonnet +++ b/examples/prometheus-name-override.jsonnet @@ -1,4 +1,4 @@ -((import 'kube-prometheus/kube-prometheus.libsonnet') + { +((import 'kube-prometheus/main.libsonnet') + { prometheus+: { prometheus+: { metadata+: { diff --git a/examples/prometheus-pvc.jsonnet b/examples/prometheus-pvc.jsonnet index e753499e17b273a588875332634af842410acc2e..ee0f5c245afbfca3dbf12b12637b2666298b8fa0 100644 --- a/examples/prometheus-pvc.jsonnet +++ b/examples/prometheus-pvc.jsonnet @@ -1,14 +1,16 @@ local kp = - (import 'kube-prometheus/kube-prometheus.libsonnet') + + (import 'kube-prometheus/main.libsonnet') + // Uncomment the following imports to enable its patches - // (import 'kube-prometheus/kube-prometheus-anti-affinity.libsonnet') + - // (import 'kube-prometheus/kube-prometheus-managed-cluster.libsonnet') + - // (import 'kube-prometheus/kube-prometheus-node-ports.libsonnet') + - // (import 'kube-prometheus/kube-prometheus-static-etcd.libsonnet') + - // (import 'kube-prometheus/kube-prometheus-thanos-sidecar.libsonnet') + + // (import 'kube-prometheus/addons/anti-affinity.libsonnet') + + // (import 'kube-prometheus/addons/managed-cluster.libsonnet') + + // (import 'kube-prometheus/addons/node-ports.libsonnet') + + // (import 'kube-prometheus/addons/static-etcd.libsonnet') + + // (import 'kube-prometheus/addons/thanos-sidecar.libsonnet') + { - _config+:: { - namespace: 'monitoring', + values+:: { + common+: { + namespace: 'monitoring', + }, }, prometheus+:: { diff --git a/examples/strip-limits.jsonnet b/examples/strip-limits.jsonnet index 69912b648d471f4a97aad3a012436f65ba80dd1f..fc43e286066a0409388e5edd70c0c51ab9481aa6 100644 --- a/examples/strip-limits.jsonnet +++ b/examples/strip-limits.jsonnet @@ -1,7 +1,9 @@ -local kp = (import 'kube-prometheus/kube-prometheus.libsonnet') + - (import 'kube-prometheus/kube-prometheus-strip-limits.libsonnet') + { - _config+:: { - namespace: 'monitoring', +local kp = (import 'kube-prometheus/main.libsonnet') + + (import 'kube-prometheus/addons/strip-limits.libsonnet') + { + values+:: { + common+: { + namespace: 'monitoring', + }, }, }; diff --git a/examples/tolerations.libsonnet b/examples/tolerations.libsonnet index 35776f397b93813d56f709666014a4b703bd45da..f244cebf3a5e1d6684b46e678876a38ca60eb360 100644 --- a/examples/tolerations.libsonnet +++ b/examples/tolerations.libsonnet @@ -1,23 +1,19 @@ { - _config+:: { - tolerations+:: [ - { - key: 'key1', - operator: 'Equal', - value: 'value1', - effect: 'NoSchedule', - }, - { - key: 'key2', - operator: 'Exists', - }, - ], - }, - prometheus+: { prometheus+: { spec+: { - tolerations: [t for t in $._config.tolerations], + tolerations: [ + { + key: 'key1', + operator: 'Equal', + value: 'value1', + effect: 'NoSchedule', + }, + { + key: 'key2', + operator: 'Exists', + }, + ], }, }, }, diff --git a/examples/weave-net-example.jsonnet b/examples/weave-net-example.jsonnet index c6cc733c27a465b5ddd169d0314451d7d328950a..9d708761bc7008134abd7d9f28b7cd0a001462ab 100644 --- a/examples/weave-net-example.jsonnet +++ b/examples/weave-net-example.jsonnet @@ -1,33 +1,39 @@ -local kp = (import 'kube-prometheus/kube-prometheus.libsonnet') + - (import 'kube-prometheus/kube-prometheus-weave-net.libsonnet') + { - _config+:: { - namespace: 'monitoring', +local kp = (import 'kube-prometheus/main.libsonnet') + + (import 'kube-prometheus/addons/weave-net.libsonnet') + { + values+:: { + common+: { + namespace: 'monitoring', + }, }, - prometheusAlerts+:: { - groups: std.map( - function(group) - if group.name == 'weave-net' then - group { - rules: std.map( - function(rule) - if rule.alert == 'WeaveNetFastDPFlowsLow' then - rule { - expr: 'sum(weave_flows) < 20000', - } - else if rule.alert == 'WeaveNetIPAMUnreachable' then - rule { - expr: 'weave_ipam_unreachable_percentage > 25', - } - else - rule - , - group.rules - ), - } - else - group, - super.groups - ), + prometheus+: { + prometheusRule+: { + spec+: { + groups: std.map( + function(group) + if group.name == 'weave-net' then + group { + rules: std.map( + function(rule) + if rule.alert == 'WeaveNetFastDPFlowsLow' then + rule { + expr: 'sum(weave_flows) < 20000', + } + else if rule.alert == 'WeaveNetIPAMUnreachable' then + rule { + expr: 'weave_ipam_unreachable_percentage > 25', + } + else + rule + , + group.rules + ), + } + else + group, + super.groups + ), + }, + }, }, }; diff --git a/jsonnet/kube-prometheus/addons/anti-affinity.libsonnet b/jsonnet/kube-prometheus/addons/anti-affinity.libsonnet index 6358236206fb982e1e8c58d65acd2bf072a10c32..014f32a900d33e4335d22b92eb3df2ea00c0a4ee 100644 --- a/jsonnet/kube-prometheus/addons/anti-affinity.libsonnet +++ b/jsonnet/kube-prometheus/addons/anti-affinity.libsonnet @@ -25,14 +25,14 @@ alertmanager+:: { alertmanager+: { spec+: - antiaffinity('alertmanager', [$._config.alertmanager.name], $._config.namespace), + antiaffinity('alertmanager', [$.values.alertmanager.name], $.values.common.namespace), }, }, prometheus+:: { prometheus+: { spec+: - antiaffinity('prometheus', [$._config.prometheus.name], $._config.namespace), + antiaffinity('prometheus', [$.values.prometheus.name], $.values.common.namespace), }, }, } diff --git a/jsonnet/kube-prometheus/addons/config-mixins.libsonnet b/jsonnet/kube-prometheus/addons/config-mixins.libsonnet index 5798e71d7134c8ca2905cf5b425f3e18ae0ea72a..ff8fd2979f506e96ec0c464f4435a19044ed7c20 100644 --- a/jsonnet/kube-prometheus/addons/config-mixins.libsonnet +++ b/jsonnet/kube-prometheus/addons/config-mixins.libsonnet @@ -1,4 +1,4 @@ -local l = import 'image.libsonnet'; +local l = import 'lib/lib.libsonnet'; // withImageRepository is a mixin that replaces all images prefixes by repository. eg. // quay.io/coreos/addon-resizer -> $repository/addon-resizer diff --git a/jsonnet/kube-prometheus/addons/custom-metrics.libsonnet b/jsonnet/kube-prometheus/addons/custom-metrics.libsonnet index d98b133f93b925f88ab65d7a446e914a9605b4b0..55e03bd7186ed77579e31d0ea5301946f98a3972 100644 --- a/jsonnet/kube-prometheus/addons/custom-metrics.libsonnet +++ b/jsonnet/kube-prometheus/addons/custom-metrics.libsonnet @@ -2,9 +2,9 @@ // For more details on usage visit https://github.com/DirectXMan12/k8s-prometheus-adapter#quick-links { - _config+:: { - prometheusAdapter+:: { - namespace: $._config.namespace, + values+:: { + prometheusAdapter+: { + namespace: $.values.common.namespace, // Rules for custom-metrics config+:: { rules+: [ @@ -88,7 +88,7 @@ spec: { service: { name: $.prometheusAdapter.service.metadata.name, - namespace: $._config.prometheusAdapter.namespace, + namespace: $.values.prometheusAdapter.namespace, }, group: 'custom.metrics.k8s.io', version: 'v1beta1', @@ -106,7 +106,7 @@ spec: { service: { name: $.prometheusAdapter.service.metadata.name, - namespace: $._config.prometheusAdapter.namespace, + namespace: $.values.prometheusAdapter.namespace, }, group: 'custom.metrics.k8s.io', version: 'v1beta2', @@ -141,7 +141,7 @@ subjects: [{ kind: 'ServiceAccount', name: $.prometheusAdapter.serviceAccount.metadata.name, - namespace: $._config.prometheusAdapter.namespace, + namespace: $.values.prometheusAdapter.namespace, }], }, customMetricsClusterRoleBindingHPA: { diff --git a/jsonnet/kube-prometheus/addons/external-metrics.libsonnet b/jsonnet/kube-prometheus/addons/external-metrics.libsonnet index abe35b0c2881247a2b821d5a10e756bb6c8c2799..928d29e7248293dd06859cfb769b192ed6adc1ee 100644 --- a/jsonnet/kube-prometheus/addons/external-metrics.libsonnet +++ b/jsonnet/kube-prometheus/addons/external-metrics.libsonnet @@ -2,9 +2,9 @@ // For more details on usage visit https://github.com/DirectXMan12/k8s-prometheus-adapter#quick-links { - _config+:: { - prometheusAdapter+:: { - namespace: $._config.namespace, + values+:: { + prometheusAdapter+: { + namespace: $.values.common.namespace, // Rules for external-metrics config+:: { externalRules+: [ @@ -24,7 +24,7 @@ }, }, - prometheusAdapter+:: { + prometheusAdapter+: { externalMetricsApiService: { apiVersion: 'apiregistration.k8s.io/v1', kind: 'APIService', @@ -34,7 +34,7 @@ spec: { service: { name: $.prometheusAdapter.service.metadata.name, - namespace: $._config.prometheusAdapter.namespace, + namespace: $.values.prometheusAdapter.namespace, }, group: 'external.metrics.k8s.io', version: 'v1beta1', @@ -70,7 +70,7 @@ subjects: [{ kind: 'ServiceAccount', name: $.prometheusAdapter.serviceAccount.metadata.name, - namespace: $._config.prometheusAdapter.namespace, + namespace: $.values.prometheusAdapter.namespace, }], }, externalMetricsClusterRoleBindingHPA: { diff --git a/jsonnet/kube-prometheus/addons/image.libsonnet b/jsonnet/kube-prometheus/addons/image.libsonnet deleted file mode 100644 index 723d1b38981f1d4d3c6cb40ae3d690e63e7f9cae..0000000000000000000000000000000000000000 --- a/jsonnet/kube-prometheus/addons/image.libsonnet +++ /dev/null @@ -1,21 +0,0 @@ -// imageName extracts the image name from a fully qualified image string. eg. -// quay.io/coreos/addon-resizer -> addon-resizer -// grafana/grafana -> grafana -local imageName(image) = - local parts = std.split(image, '/'); - local len = std.length(parts); - if len == 3 then - // registry.com/org/image - parts[2] - else if len == 2 then - // org/image - parts[1] - else if len == 1 then - // image, ie. busybox - parts[0] - else - error 'unknown image format: ' + image; - -{ - imageName:: imageName, -} diff --git a/jsonnet/kube-prometheus/addons/insecure-kubelet.libsonnet b/jsonnet/kube-prometheus/addons/insecure-kubelet.libsonnet index 73d0b9d741e9413425d56ee643f754af6039279d..ab6f29434e1eb460b6d242519fc694f5e1f491fe 100644 --- a/jsonnet/kube-prometheus/addons/insecure-kubelet.libsonnet +++ b/jsonnet/kube-prometheus/addons/insecure-kubelet.libsonnet @@ -1,5 +1,5 @@ { - prometheus+:: { + prometheus+: { serviceMonitorKubelet+: { spec+: { diff --git a/jsonnet/kube-prometheus/addons/ksm-autoscaler.libsonnet b/jsonnet/kube-prometheus/addons/ksm-autoscaler.libsonnet index 88154ac1039d84d9f2e41cf1818c5a680702d2f3..98755169d6d3d8501c485e95fb928ba4f1cd5d1b 100644 --- a/jsonnet/kube-prometheus/addons/ksm-autoscaler.libsonnet +++ b/jsonnet/kube-prometheus/addons/ksm-autoscaler.libsonnet @@ -1,5 +1,5 @@ { - _config+:: { + values+:: { versions+:: { clusterVerticalAutoscaler: '0.8.1' }, imageRepos+:: { clusterVerticalAutoscaler: 'gcr.io/google_containers/cpvpa-amd64' }, @@ -29,7 +29,7 @@ kind: 'ClusterRole', name: 'ksm-autoscaler', }, - subjects: [{ kind: 'ServiceAccount', name: 'ksm-autoscaler', namespace: $._config.namespace }], + subjects: [{ kind: 'ServiceAccount', name: 'ksm-autoscaler', namespace: $.values.common.namespace }], }, roleBinding: { @@ -37,7 +37,7 @@ kind: 'RoleBinding', metadata: { name: 'ksm-autoscaler', - namespace: $._config.namespace, + namespace: $.values.common.namespace, }, roleRef: { apiGroup: 'rbac.authorization.k8s.io', @@ -52,7 +52,7 @@ kind: 'Role', metadata: { name: 'ksm-autoscaler', - namespace: $._config.namespace, + namespace: $.values.common.namespace, }, rules: [ { @@ -75,7 +75,7 @@ kind: 'ServiceAccount', metadata: { name: 'ksm-autoscaler', - namespace: $._config.namespace, + namespace: $.values.common.namespace, }, }, @@ -83,14 +83,14 @@ local podLabels = { app: 'ksm-autoscaler' }; local c = { name: 'ksm-autoscaler', - image: $._config.imageRepos.clusterVerticalAutoscaler + ':v' + $._config.versions.clusterVerticalAutoscaler, + image: $.values.imageRepos.clusterVerticalAutoscaler + ':v' + $.values.versions.clusterVerticalAutoscaler, args: [ '/cpvpa', '--target=deployment/kube-state-metrics', - '--namespace=' + $._config.namespace, + '--namespace=' + $.values.common.namespace, '--logtostderr=true', '--poll-period-seconds=10', - '--default-config={"kube-state-metrics":{"requests":{"cpu":{"base":"' + $._config.kubeStateMetrics.baseCPU + '","step":"' + $._config.kubeStateMetrics.stepCPU + '","nodesPerStep":1},"memory":{"base":"' + $._config.kubeStateMetrics.baseMemory + '","step":"' + $._config.kubeStateMetrics.stepMemory + '","nodesPerStep":1}},"limits":{"cpu":{"base":"' + $._config.kubeStateMetrics.baseCPU + '","step":"' + $._config.kubeStateMetrics.stepCPU + '","nodesPerStep":1},"memory":{"base":"' + $._config.kubeStateMetrics.baseMemory + '","step":"' + $._config.kubeStateMetrics.stepMemory + '","nodesPerStep":1}}}}', + '--default-config={"kube-state-metrics":{"requests":{"cpu":{"base":"' + $.values.kubeStateMetrics.baseCPU + '","step":"' + $.values.kubeStateMetrics.stepCPU + '","nodesPerStep":1},"memory":{"base":"' + $.values.kubeStateMetrics.baseMemory + '","step":"' + $.values.kubeStateMetrics.stepMemory + '","nodesPerStep":1}},"limits":{"cpu":{"base":"' + $.values.kubeStateMetrics.baseCPU + '","step":"' + $.values.kubeStateMetrics.stepCPU + '","nodesPerStep":1},"memory":{"base":"' + $.values.kubeStateMetrics.baseMemory + '","step":"' + $.values.kubeStateMetrics.stepMemory + '","nodesPerStep":1}}}}', ], resources: { requests: { cpu: '20m', memory: '10Mi' }, @@ -102,7 +102,7 @@ kind: 'Deployment', metadata: { name: 'ksm-autoscaler', - namespace: $._config.namespace, + namespace: $.values.common.namespace, labels: podLabels, }, spec: { diff --git a/jsonnet/kube-prometheus/addons/managed-cluster.libsonnet b/jsonnet/kube-prometheus/addons/managed-cluster.libsonnet index 8e09330c1159f2fa4e861b4dd7722ec1d8bcd71c..5b37c56e569d2f34f914daf41912d06eb14f672c 100644 --- a/jsonnet/kube-prometheus/addons/managed-cluster.libsonnet +++ b/jsonnet/kube-prometheus/addons/managed-cluster.libsonnet @@ -2,7 +2,7 @@ // Disable scrape jobs, service monitors, and alert groups for these components by overwriting 'main.libsonnet' defaults { - _config+:: { + values+:: { // 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, @@ -13,7 +13,7 @@ }, // Skip alerting rules too - prometheus+:: { + prometheus+: { rules+:: { local g = super.groups, groups: [ diff --git a/jsonnet/kube-prometheus/addons/static-etcd.libsonnet b/jsonnet/kube-prometheus/addons/static-etcd.libsonnet index e4c3a14d08b0ef21535432921bb032daa2f6cb9b..d029d6c1ea6afa1c10a929a95db22aaf62bd4424 100644 --- a/jsonnet/kube-prometheus/addons/static-etcd.libsonnet +++ b/jsonnet/kube-prometheus/addons/static-etcd.libsonnet @@ -1,5 +1,5 @@ (import 'github.com/etcd-io/etcd/Documentation/etcd-mixin/mixin.libsonnet') + { - _config+:: { + values+:: { etcd: { ips: [], clientCA: null, @@ -36,7 +36,7 @@ subsets: [{ addresses: [ { ip: etcdIP } - for etcdIP in $._config.etcd.ips + for etcdIP in $.values.etcd.ips ], ports: [ { name: 'metrics', port: 2379, protocol: 'TCP' }, @@ -65,8 +65,8 @@ caFile: '/etc/prometheus/secrets/kube-etcd-client-certs/etcd-client-ca.crt', keyFile: '/etc/prometheus/secrets/kube-etcd-client-certs/etcd-client.key', certFile: '/etc/prometheus/secrets/kube-etcd-client-certs/etcd-client.crt', - [if $._config.etcd.serverName != null then 'serverName']: $._config.etcd.serverName, - [if $._config.etcd.insecureSkipVerify != null then 'insecureSkipVerify']: $._config.etcd.insecureSkipVerify, + [if $.values.etcd.serverName != null then 'serverName']: $.values.etcd.serverName, + [if $.values.etcd.insecureSkipVerify != null then 'insecureSkipVerify']: $.values.etcd.insecureSkipVerify, }, }, ], @@ -84,12 +84,12 @@ type: 'Opaque', metadata: { name: 'kube-etcd-client-certs', - namespace: $._config.namespace, + namespace: $.values.common.namespace, }, data: { - 'etcd-client-ca.crt': std.base64($._config.etcd.clientCA), - 'etcd-client.key': std.base64($._config.etcd.clientKey), - 'etcd-client.crt': std.base64($._config.etcd.clientCert), + 'etcd-client-ca.crt': std.base64($.values.etcd.clientCA), + 'etcd-client.key': std.base64($.values.etcd.clientKey), + 'etcd-client.crt': std.base64($.values.etcd.clientCert), }, }, prometheus+: { diff --git a/jsonnet/kube-prometheus/addons/thanos-sidecar.libsonnet b/jsonnet/kube-prometheus/addons/thanos-sidecar.libsonnet index 01620d4a837f9a23851331e828724a32049fdbd8..9a195e9d3f123fa9499301b9fc56df462b3629e3 100644 --- a/jsonnet/kube-prometheus/addons/thanos-sidecar.libsonnet +++ b/jsonnet/kube-prometheus/addons/thanos-sidecar.libsonnet @@ -1,6 +1,6 @@ (import 'github.com/thanos-io/thanos/mixin/alerts/sidecar.libsonnet') + { - _config+:: { + values+:: { versions+:: { thanos: 'v0.14.0' }, imageRepos+:: { thanos: 'quay.io/thanos/thanos' }, thanos+:: { @@ -10,7 +10,7 @@ }, }, }, - prometheus+:: { + prometheus+: { local p = self, // Add the grpc port to the Prometheus service to be able to query it with the Thanos Querier diff --git a/jsonnet/kube-prometheus/platforms/eks.libsonnet b/jsonnet/kube-prometheus/platforms/eks.libsonnet index 3f6ab80dd9e80393a573ddbd860cf2e4b578e1af..c72e5c8ba219964e72396b945669e10f44969181 100644 --- a/jsonnet/kube-prometheus/platforms/eks.libsonnet +++ b/jsonnet/kube-prometheus/platforms/eks.libsonnet @@ -1,5 +1,5 @@ { - _config+:: { + values+:: { eks: { minimumAvailableIPs: 10, minimumAvailableIPsTime: '10m', @@ -39,7 +39,7 @@ kind: 'ServiceMonitor', metadata: { name: 'awsekscni', - namespace: $._config.namespace, + namespace: $.values.common.namespace, labels: { 'app.kubernetes.io/name': 'eks-cni', }, @@ -65,25 +65,34 @@ ], }, }, - }, - prometheusRules+: { - groups+: [ - { - name: 'kube-prometheus-eks.rules', - rules: [ + prometheusRuleEksCNI: { + apiVersion: 'monitoring.coreos.com/v1', + kind: 'PrometheusRule', + metadata: { + labels: $.prometheus.config.commonLabels + $.prometheus.config.mixin.ruleLabels, + name: 'eks-rules', + namespace: $.prometheus.config.namespace, + }, + spec: { + groups: [ { - expr: 'sum by(instance) (awscni_ip_max) - sum by(instance) (awscni_assigned_ip_addresses) < %s' % $._config.eks.minimumAvailableIPs, - labels: { - severity: 'critical', - }, - annotations: { - message: 'Instance {{ $labels.instance }} has less than 10 IPs available.', - }, - 'for': $._config.eks.minimumAvailableIPsTime, - alert: 'EksAvailableIPs', + name: 'kube-prometheus-eks.rules', + rules: [ + { + expr: 'sum by(instance) (awscni_ip_max) - sum by(instance) (awscni_assigned_ip_addresses) < %s' % $.values.eks.minimumAvailableIPs, + labels: { + severity: 'critical', + }, + annotations: { + message: 'Instance {{ $labels.instance }} has less than 10 IPs available.', + }, + 'for': $.values.eks.minimumAvailableIPsTime, + alert: 'EksAvailableIPs', + }, + ], }, ], }, - ], + }, }, }