jsonnet: separate mixins into components
Signed-off-by: paulfantom <pawel@krupa.net.pl>
This commit is contained in:
@@ -55,6 +55,14 @@ local defaults = {
|
|||||||
],
|
],
|
||||||
},
|
},
|
||||||
replicas: 3,
|
replicas: 3,
|
||||||
|
mixin: {
|
||||||
|
ruleLabels: {},
|
||||||
|
_config: {
|
||||||
|
alertmanagerName: '{{ $labels.namespace }}/{{ $labels.pod}}',
|
||||||
|
alertmanagerClusterLabels: 'namespace,service',
|
||||||
|
alertmanagerSelector: 'job="alertmanager-' + defaults.name + '",namespace="' + defaults.namespace + '"',
|
||||||
|
},
|
||||||
|
},
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
@@ -63,6 +71,26 @@ function(params) {
|
|||||||
config:: defaults + params,
|
config:: defaults + params,
|
||||||
// Safety check
|
// Safety check
|
||||||
assert std.isObject(am.config.resources),
|
assert std.isObject(am.config.resources),
|
||||||
|
assert std.isObject(am.config.mixin._config),
|
||||||
|
|
||||||
|
mixin:: (import 'github.com/prometheus/alertmanager/doc/alertmanager-mixin/mixin.libsonnet') {
|
||||||
|
_config+:: am.config.mixin._config,
|
||||||
|
},
|
||||||
|
|
||||||
|
prometheusRule: {
|
||||||
|
apiVersion: 'monitoring.coreos.com/v1',
|
||||||
|
kind: 'PrometheusRule',
|
||||||
|
metadata: {
|
||||||
|
labels: am.config.commonLabels + am.config.mixin.ruleLabels,
|
||||||
|
name: am.config.name + '-rules',
|
||||||
|
namespace: am.config.namespace,
|
||||||
|
},
|
||||||
|
spec: {
|
||||||
|
local r = if std.objectHasAll(am.mixin, 'prometheusRules') then am.mixin.prometheusRules else {},
|
||||||
|
local a = if std.objectHasAll(am.mixin, 'prometheusAlerts') then am.mixin.prometheusAlerts else {},
|
||||||
|
groups: a + r,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
|
||||||
secret: {
|
secret: {
|
||||||
apiVersion: 'v1',
|
apiVersion: 'v1',
|
||||||
|
|||||||
@@ -5,6 +5,7 @@ local nodeExporter = import './node-exporter/node-exporter.libsonnet';
|
|||||||
local prometheusAdapter = import './prometheus-adapter/prometheus-adapter.libsonnet';
|
local prometheusAdapter = import './prometheus-adapter/prometheus-adapter.libsonnet';
|
||||||
local prometheusOperator = import './prometheus-operator/prometheus-operator.libsonnet';
|
local prometheusOperator = import './prometheus-operator/prometheus-operator.libsonnet';
|
||||||
local prometheus = import './prometheus/prometheus.libsonnet';
|
local prometheus = import './prometheus/prometheus.libsonnet';
|
||||||
|
local prometheusOperator = import './prometheus-operator/prometheus-operator.libsonnet';
|
||||||
|
|
||||||
local monitoringMixins = import './mixins/monitoring-mixins.libsonnet';
|
local monitoringMixins = import './mixins/monitoring-mixins.libsonnet';
|
||||||
|
|
||||||
@@ -15,6 +16,9 @@ local monitoringMixins = import './mixins/monitoring-mixins.libsonnet';
|
|||||||
namespace: $._config.namespace,
|
namespace: $._config.namespace,
|
||||||
version: '0.21.0',
|
version: '0.21.0',
|
||||||
image: 'quay.io/prometheus/alertmanager:v0.21.0',
|
image: 'quay.io/prometheus/alertmanager:v0.21.0',
|
||||||
|
mixin+: {
|
||||||
|
ruleLabels: $._config.ruleLabels,
|
||||||
|
},
|
||||||
}),
|
}),
|
||||||
blackboxExporter: blackboxExporter({
|
blackboxExporter: blackboxExporter({
|
||||||
namespace: $._config.namespace,
|
namespace: $._config.namespace,
|
||||||
@@ -25,11 +29,17 @@ local monitoringMixins = import './mixins/monitoring-mixins.libsonnet';
|
|||||||
namespace: $._config.namespace,
|
namespace: $._config.namespace,
|
||||||
version: '1.9.7',
|
version: '1.9.7',
|
||||||
image: 'quay.io/coreos/kube-state-metrics:v1.9.7',
|
image: 'quay.io/coreos/kube-state-metrics:v1.9.7',
|
||||||
|
mixin+: {
|
||||||
|
ruleLabels: $._config.ruleLabels,
|
||||||
|
},
|
||||||
}),
|
}),
|
||||||
nodeExporter: nodeExporter({
|
nodeExporter: nodeExporter({
|
||||||
namespace: $._config.namespace,
|
namespace: $._config.namespace,
|
||||||
version: '1.0.1',
|
version: '1.0.1',
|
||||||
image: 'quay.io/prometheus/node-exporter:v1.0.1',
|
image: 'quay.io/prometheus/node-exporter:v1.0.1',
|
||||||
|
mixin+: {
|
||||||
|
ruleLabels: $._config.ruleLabels,
|
||||||
|
},
|
||||||
}),
|
}),
|
||||||
prometheus: prometheus({
|
prometheus: prometheus({
|
||||||
namespace: $._config.namespace,
|
namespace: $._config.namespace,
|
||||||
@@ -37,7 +47,9 @@ local monitoringMixins = import './mixins/monitoring-mixins.libsonnet';
|
|||||||
image: 'quay.io/prometheus/prometheus:v2.24.0',
|
image: 'quay.io/prometheus/prometheus:v2.24.0',
|
||||||
name: $._config.prometheusName,
|
name: $._config.prometheusName,
|
||||||
alertmanagerName: $._config.alertmanagerName,
|
alertmanagerName: $._config.alertmanagerName,
|
||||||
rules: $.allRules,
|
mixin+: {
|
||||||
|
ruleLabels: $._config.ruleLabels,
|
||||||
|
},
|
||||||
}),
|
}),
|
||||||
prometheusAdapter: prometheusAdapter({
|
prometheusAdapter: prometheusAdapter({
|
||||||
namespace: $._config.namespace,
|
namespace: $._config.namespace,
|
||||||
@@ -53,25 +65,26 @@ local monitoringMixins = import './mixins/monitoring-mixins.libsonnet';
|
|||||||
commonLabels+: {
|
commonLabels+: {
|
||||||
'app.kubernetes.io/part-of': 'kube-prometheus',
|
'app.kubernetes.io/part-of': 'kube-prometheus',
|
||||||
},
|
},
|
||||||
|
mixin+: {
|
||||||
|
ruleLabels: $._config.ruleLabels,
|
||||||
|
},
|
||||||
}),
|
}),
|
||||||
mixins+:: monitoringMixins({
|
mixins+:: monitoringMixins({
|
||||||
namespace: $._config.namespace,
|
namespace: $._config.namespace,
|
||||||
alertmanagerName: $._config.alertmanagerName,
|
|
||||||
prometheusName: $._config.prometheusName,
|
|
||||||
}),
|
}),
|
||||||
|
|
||||||
// FIXME(paulfantom) Remove this variable by moving each mixin to its own component
|
// FIXME(paulfantom) Remove this variable by moving each mixin to its own component
|
||||||
// Example: node_exporter mixin could be added in ./node-exporter/node-exporter.libsonnet
|
// Example: node_exporter mixin could be added in ./node-exporter/node-exporter.libsonnet
|
||||||
allRules::
|
allRules::
|
||||||
$.mixins.nodeExporter.prometheusRules +
|
//$.mixins.nodeExporter.prometheusRules +
|
||||||
$.mixins.kubernetes.prometheusRules +
|
$.mixins.kubernetes.prometheusRules +
|
||||||
$.mixins.base.prometheusRules +
|
$.mixins.base.prometheusRules +
|
||||||
$.mixins.kubeStateMetrics.prometheusAlerts +
|
//$.mixins.kubeStateMetrics.prometheusAlerts +
|
||||||
$.mixins.nodeExporter.prometheusAlerts +
|
//$.mixins.nodeExporter.prometheusAlerts +
|
||||||
$.mixins.alertmanager.prometheusAlerts +
|
//$.mixins.alertmanager.prometheusAlerts +
|
||||||
$.mixins.prometheusOperator.prometheusAlerts +
|
//$.mixins.prometheusOperator.prometheusAlerts +
|
||||||
$.mixins.kubernetes.prometheusAlerts +
|
$.mixins.kubernetes.prometheusAlerts +
|
||||||
$.mixins.prometheus.prometheusAlerts +
|
//$.mixins.prometheus.prometheusAlerts +
|
||||||
$.mixins.base.prometheusAlerts,
|
$.mixins.base.prometheusAlerts,
|
||||||
|
|
||||||
kubePrometheus+:: {
|
kubePrometheus+:: {
|
||||||
@@ -118,6 +131,10 @@ local monitoringMixins = import './mixins/monitoring-mixins.libsonnet';
|
|||||||
namespace: 'default',
|
namespace: 'default',
|
||||||
prometheusName: 'k8s',
|
prometheusName: 'k8s',
|
||||||
alertmanagerName: 'main',
|
alertmanagerName: 'main',
|
||||||
|
ruleLabels: {
|
||||||
|
role: 'alert-rules',
|
||||||
|
prometheus: $._config.prometheusName,
|
||||||
|
},
|
||||||
|
|
||||||
versions+:: { grafana: '7.3.5' },
|
versions+:: { grafana: '7.3.5' },
|
||||||
|
|
||||||
@@ -131,9 +148,9 @@ local monitoringMixins = import './mixins/monitoring-mixins.libsonnet';
|
|||||||
// FIXME(paulfantom): Same as with rules and alerts.
|
// FIXME(paulfantom): Same as with rules and alerts.
|
||||||
// This should be gathering all dashboards from components without having to enumerate all dashboards.
|
// This should be gathering all dashboards from components without having to enumerate all dashboards.
|
||||||
dashboards:
|
dashboards:
|
||||||
$.mixins.nodeExporter.grafanaDashboards +
|
//$.mixins.nodeExporter.grafanaDashboards +
|
||||||
$.mixins.kubernetes.grafanaDashboards +
|
$.mixins.kubernetes.grafanaDashboards,
|
||||||
$.mixins.prometheus.grafanaDashboards,
|
//$.mixins.prometheus.grafanaDashboards,
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -2,6 +2,7 @@ local krp = (import '../kube-rbac-proxy/container.libsonnet');
|
|||||||
|
|
||||||
local defaults = {
|
local defaults = {
|
||||||
local defaults = self,
|
local defaults = self,
|
||||||
|
name: 'kube-state-metrics',
|
||||||
namespace: error 'must provide namespace',
|
namespace: error 'must provide namespace',
|
||||||
version: error 'must provide version',
|
version: error 'must provide version',
|
||||||
image: error 'must provide version',
|
image: error 'must provide version',
|
||||||
@@ -13,7 +14,7 @@ local defaults = {
|
|||||||
scrapeInterval: '30s',
|
scrapeInterval: '30s',
|
||||||
scrapeTimeout: '30s',
|
scrapeTimeout: '30s',
|
||||||
commonLabels:: {
|
commonLabels:: {
|
||||||
'app.kubernetes.io/name': 'kube-state-metrics',
|
'app.kubernetes.io/name': defaults.name,
|
||||||
'app.kubernetes.io/version': defaults.version,
|
'app.kubernetes.io/version': defaults.version,
|
||||||
'app.kubernetes.io/component': 'exporter',
|
'app.kubernetes.io/component': 'exporter',
|
||||||
'app.kubernetes.io/part-of': 'kube-prometheus',
|
'app.kubernetes.io/part-of': 'kube-prometheus',
|
||||||
@@ -23,6 +24,12 @@ local defaults = {
|
|||||||
for labelName in std.objectFields(defaults.commonLabels)
|
for labelName in std.objectFields(defaults.commonLabels)
|
||||||
if !std.setMember(labelName, ['app.kubernetes.io/version'])
|
if !std.setMember(labelName, ['app.kubernetes.io/version'])
|
||||||
},
|
},
|
||||||
|
mixin: {
|
||||||
|
ruleLabels: {},
|
||||||
|
_config: {
|
||||||
|
kubeStateMetricsSelector: 'job="' + defaults.name + '"',
|
||||||
|
},
|
||||||
|
},
|
||||||
};
|
};
|
||||||
|
|
||||||
function(params) (import 'github.com/kubernetes/kube-state-metrics/jsonnet/kube-state-metrics/kube-state-metrics.libsonnet') {
|
function(params) (import 'github.com/kubernetes/kube-state-metrics/jsonnet/kube-state-metrics/kube-state-metrics.libsonnet') {
|
||||||
@@ -30,14 +37,34 @@ function(params) (import 'github.com/kubernetes/kube-state-metrics/jsonnet/kube-
|
|||||||
config:: defaults + params,
|
config:: defaults + params,
|
||||||
// Safety check
|
// Safety check
|
||||||
assert std.isObject(ksm.config.resources),
|
assert std.isObject(ksm.config.resources),
|
||||||
|
assert std.isObject(ksm.config.mixin._config),
|
||||||
|
|
||||||
name:: 'kube-state-metrics',
|
name:: ksm.config.name,
|
||||||
namespace:: ksm.config.namespace,
|
namespace:: ksm.config.namespace,
|
||||||
version:: ksm.config.version,
|
version:: ksm.config.version,
|
||||||
image:: ksm.config.image,
|
image:: ksm.config.image,
|
||||||
commonLabels:: ksm.config.commonLabels,
|
commonLabels:: ksm.config.commonLabels,
|
||||||
podLabels:: ksm.config.selectorLabels,
|
podLabels:: ksm.config.selectorLabels,
|
||||||
|
|
||||||
|
mixin:: (import 'github.com/kubernetes/kube-state-metrics/jsonnet/kube-state-metrics-mixin/mixin.libsonnet') {
|
||||||
|
_config+:: ksm.config.mixin._config,
|
||||||
|
},
|
||||||
|
|
||||||
|
prometheusRule: {
|
||||||
|
apiVersion: 'monitoring.coreos.com/v1',
|
||||||
|
kind: 'PrometheusRule',
|
||||||
|
metadata: {
|
||||||
|
labels: ksm.config.commonLabels + ksm.config.mixin.ruleLabels,
|
||||||
|
name: ksm.config.name + '-rules',
|
||||||
|
namespace: ksm.config.namespace,
|
||||||
|
},
|
||||||
|
spec: {
|
||||||
|
local r = if std.objectHasAll(ksm.mixin, 'prometheusRules') then ksm.mixin.prometheusRules else {},
|
||||||
|
local a = if std.objectHasAll(ksm.mixin, 'prometheusAlerts') then ksm.mixin.prometheusAlerts else {},
|
||||||
|
groups: a + r,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
|
||||||
service+: {
|
service+: {
|
||||||
spec+: {
|
spec+: {
|
||||||
ports: [
|
ports: [
|
||||||
|
|||||||
@@ -1,7 +1,5 @@
|
|||||||
local defaults = {
|
local defaults = {
|
||||||
namespace: error 'must provide namespace',
|
namespace: error 'must provide namespace',
|
||||||
prometheusName: error 'must provide Prometheus resource name',
|
|
||||||
alertmanagerName: error 'must provide Alertmanager resource name',
|
|
||||||
};
|
};
|
||||||
|
|
||||||
function(params) {
|
function(params) {
|
||||||
@@ -34,44 +32,4 @@ function(params) {
|
|||||||
hostNetworkInterfaceSelector: 'device!~"veth.+"',
|
hostNetworkInterfaceSelector: 'device!~"veth.+"',
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
|
||||||
kubeStateMetrics:
|
|
||||||
(import 'github.com/kubernetes/kube-state-metrics/jsonnet/kube-state-metrics-mixin/mixin.libsonnet') {
|
|
||||||
_config+:: {
|
|
||||||
kubeStateMetricsSelector: 'job="kube-state-metrics"',
|
|
||||||
},
|
|
||||||
},
|
|
||||||
|
|
||||||
prometheusOperator:
|
|
||||||
(import 'github.com/prometheus-operator/prometheus-operator/jsonnet/mixin/mixin.libsonnet') {
|
|
||||||
_config+:: {
|
|
||||||
prometheusOperatorSelector: 'job="prometheus-operator",namespace="' + m.config.namespace + '"',
|
|
||||||
},
|
|
||||||
},
|
|
||||||
|
|
||||||
prometheus:
|
|
||||||
(import 'github.com/prometheus/prometheus/documentation/prometheus-mixin/mixin.libsonnet') {
|
|
||||||
_config+:: {
|
|
||||||
prometheusSelector: 'job="prometheus-' + m.config.prometheusName + '",namespace="' + m.config.namespace + '"',
|
|
||||||
prometheusName: '{{$labels.namespace}}/{{$labels.pod}}',
|
|
||||||
},
|
|
||||||
},
|
|
||||||
|
|
||||||
alertmanager:
|
|
||||||
(import 'github.com/prometheus/alertmanager/doc/alertmanager-mixin/mixin.libsonnet') {
|
|
||||||
_config+:: {
|
|
||||||
alertmanagerName: '{{ $labels.namespace }}/{{ $labels.pod}}',
|
|
||||||
alertmanagerClusterLabels: 'namespace,service',
|
|
||||||
alertmanagerSelector: 'job="alertmanager-' + m.config.alertmanagerName + '",namespace="' + m.config.namespace + '"',
|
|
||||||
},
|
|
||||||
},
|
|
||||||
|
|
||||||
nodeExporter:
|
|
||||||
(import 'github.com/prometheus/node_exporter/docs/node-mixin/mixin.libsonnet') {
|
|
||||||
_config+:: {
|
|
||||||
nodeExporterSelector: 'job="node-exporter"',
|
|
||||||
fsSpaceFillingUpCriticalThreshold: 15,
|
|
||||||
diskDeviceSelector: 'device=~"mmcblk.p.+|nvme.+|rbd.+|sd.+|vd.+|xvd.+|dm-.+|dasd.+"',
|
|
||||||
},
|
|
||||||
},
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -2,6 +2,7 @@ local krp = (import '../kube-rbac-proxy/container.libsonnet');
|
|||||||
|
|
||||||
local defaults = {
|
local defaults = {
|
||||||
local defaults = self,
|
local defaults = self,
|
||||||
|
name: 'node-exporter',
|
||||||
namespace: error 'must provide namespace',
|
namespace: error 'must provide namespace',
|
||||||
version: error 'must provide version',
|
version: error 'must provide version',
|
||||||
image: error 'must provide version',
|
image: error 'must provide version',
|
||||||
@@ -12,7 +13,7 @@ local defaults = {
|
|||||||
listenAddress: '127.0.0.1',
|
listenAddress: '127.0.0.1',
|
||||||
port: 9100,
|
port: 9100,
|
||||||
commonLabels:: {
|
commonLabels:: {
|
||||||
'app.kubernetes.io/name': 'node-exporter',
|
'app.kubernetes.io/name': defaults.name,
|
||||||
'app.kubernetes.io/version': defaults.version,
|
'app.kubernetes.io/version': defaults.version,
|
||||||
'app.kubernetes.io/component': 'exporter',
|
'app.kubernetes.io/component': 'exporter',
|
||||||
'app.kubernetes.io/part-of': 'kube-prometheus',
|
'app.kubernetes.io/part-of': 'kube-prometheus',
|
||||||
@@ -22,6 +23,14 @@ local defaults = {
|
|||||||
for labelName in std.objectFields(defaults.commonLabels)
|
for labelName in std.objectFields(defaults.commonLabels)
|
||||||
if !std.setMember(labelName, ['app.kubernetes.io/version'])
|
if !std.setMember(labelName, ['app.kubernetes.io/version'])
|
||||||
},
|
},
|
||||||
|
mixin: {
|
||||||
|
ruleLabels: {},
|
||||||
|
_config: {
|
||||||
|
nodeExporterSelector: 'job="' + defaults.name + '"',
|
||||||
|
fsSpaceFillingUpCriticalThreshold: 15,
|
||||||
|
diskDeviceSelector: 'device=~"mmcblk.p.+|nvme.+|rbd.+|sd.+|vd.+|xvd.+|dm-.+|dasd.+"',
|
||||||
|
},
|
||||||
|
},
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
@@ -30,22 +39,42 @@ function(params) {
|
|||||||
config:: defaults + params,
|
config:: defaults + params,
|
||||||
// Safety check
|
// Safety check
|
||||||
assert std.isObject(ne.config.resources),
|
assert std.isObject(ne.config.resources),
|
||||||
|
assert std.isObject(ne.config.mixin._config),
|
||||||
|
|
||||||
|
mixin:: (import 'github.com/prometheus/node_exporter/docs/node-mixin/mixin.libsonnet') {
|
||||||
|
_config+:: ne.config.mixin._config,
|
||||||
|
},
|
||||||
|
|
||||||
|
prometheusRule: {
|
||||||
|
apiVersion: 'monitoring.coreos.com/v1',
|
||||||
|
kind: 'PrometheusRule',
|
||||||
|
metadata: {
|
||||||
|
labels: ne.config.commonLabels + ne.config.mixin.ruleLabels,
|
||||||
|
name: ne.config.name + '-rules',
|
||||||
|
namespace: ne.config.namespace,
|
||||||
|
},
|
||||||
|
spec: {
|
||||||
|
local r = if std.objectHasAll(ne.mixin, 'prometheusRules') then ne.mixin.prometheusRules else {},
|
||||||
|
local a = if std.objectHasAll(ne.mixin, 'prometheusAlerts') then ne.mixin.prometheusAlerts else {},
|
||||||
|
groups: a + r,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
|
||||||
clusterRoleBinding: {
|
clusterRoleBinding: {
|
||||||
apiVersion: 'rbac.authorization.k8s.io/v1',
|
apiVersion: 'rbac.authorization.k8s.io/v1',
|
||||||
kind: 'ClusterRoleBinding',
|
kind: 'ClusterRoleBinding',
|
||||||
metadata: {
|
metadata: {
|
||||||
name: 'node-exporter',
|
name: ne.config.name,
|
||||||
labels: ne.config.commonLabels,
|
labels: ne.config.commonLabels,
|
||||||
},
|
},
|
||||||
roleRef: {
|
roleRef: {
|
||||||
apiGroup: 'rbac.authorization.k8s.io',
|
apiGroup: 'rbac.authorization.k8s.io',
|
||||||
kind: 'ClusterRole',
|
kind: 'ClusterRole',
|
||||||
name: 'node-exporter',
|
name: ne.config.name,
|
||||||
},
|
},
|
||||||
subjects: [{
|
subjects: [{
|
||||||
kind: 'ServiceAccount',
|
kind: 'ServiceAccount',
|
||||||
name: 'node-exporter',
|
name: ne.config.name,
|
||||||
namespace: ne.config.namespace,
|
namespace: ne.config.namespace,
|
||||||
}],
|
}],
|
||||||
},
|
},
|
||||||
@@ -54,7 +83,7 @@ function(params) {
|
|||||||
apiVersion: 'rbac.authorization.k8s.io/v1',
|
apiVersion: 'rbac.authorization.k8s.io/v1',
|
||||||
kind: 'ClusterRole',
|
kind: 'ClusterRole',
|
||||||
metadata: {
|
metadata: {
|
||||||
name: 'node-exporter',
|
name: ne.config.name,
|
||||||
labels: ne.config.commonLabels,
|
labels: ne.config.commonLabels,
|
||||||
},
|
},
|
||||||
rules: [
|
rules: [
|
||||||
@@ -75,7 +104,7 @@ function(params) {
|
|||||||
apiVersion: 'v1',
|
apiVersion: 'v1',
|
||||||
kind: 'ServiceAccount',
|
kind: 'ServiceAccount',
|
||||||
metadata: {
|
metadata: {
|
||||||
name: 'node-exporter',
|
name: ne.config.name,
|
||||||
namespace: ne.config.namespace,
|
namespace: ne.config.namespace,
|
||||||
labels: ne.config.commonLabels,
|
labels: ne.config.commonLabels,
|
||||||
},
|
},
|
||||||
@@ -85,7 +114,7 @@ function(params) {
|
|||||||
apiVersion: 'v1',
|
apiVersion: 'v1',
|
||||||
kind: 'Service',
|
kind: 'Service',
|
||||||
metadata: {
|
metadata: {
|
||||||
name: 'node-exporter',
|
name: ne.config.name,
|
||||||
namespace: ne.config.namespace,
|
namespace: ne.config.namespace,
|
||||||
labels: ne.config.commonLabels,
|
labels: ne.config.commonLabels,
|
||||||
},
|
},
|
||||||
@@ -102,7 +131,7 @@ function(params) {
|
|||||||
apiVersion: 'monitoring.coreos.com/v1',
|
apiVersion: 'monitoring.coreos.com/v1',
|
||||||
kind: 'ServiceMonitor',
|
kind: 'ServiceMonitor',
|
||||||
metadata: {
|
metadata: {
|
||||||
name: 'node-exporter',
|
name: ne.config.name,
|
||||||
namespace: ne.config.namespace,
|
namespace: ne.config.namespace,
|
||||||
labels: ne.config.commonLabels,
|
labels: ne.config.commonLabels,
|
||||||
},
|
},
|
||||||
@@ -134,7 +163,7 @@ function(params) {
|
|||||||
|
|
||||||
daemonset:
|
daemonset:
|
||||||
local nodeExporter = {
|
local nodeExporter = {
|
||||||
name: 'node-exporter',
|
name: ne.config.name,
|
||||||
image: ne.config.image,
|
image: ne.config.image,
|
||||||
args: [
|
args: [
|
||||||
'--web.listen-address=' + std.join(':', [ne.config.listenAddress, std.toString(ne.config.port)]),
|
'--web.listen-address=' + std.join(':', [ne.config.listenAddress, std.toString(ne.config.port)]),
|
||||||
@@ -177,7 +206,7 @@ function(params) {
|
|||||||
apiVersion: 'apps/v1',
|
apiVersion: 'apps/v1',
|
||||||
kind: 'DaemonSet',
|
kind: 'DaemonSet',
|
||||||
metadata: {
|
metadata: {
|
||||||
name: 'node-exporter',
|
name: ne.config.name,
|
||||||
namespace: ne.config.namespace,
|
namespace: ne.config.namespace,
|
||||||
labels: ne.config.commonLabels,
|
labels: ne.config.commonLabels,
|
||||||
},
|
},
|
||||||
@@ -199,7 +228,7 @@ function(params) {
|
|||||||
{ name: 'sys', hostPath: { path: '/sys' } },
|
{ name: 'sys', hostPath: { path: '/sys' } },
|
||||||
{ name: 'root', hostPath: { path: '/' } },
|
{ name: 'root', hostPath: { path: '/' } },
|
||||||
],
|
],
|
||||||
serviceAccountName: 'node-exporter',
|
serviceAccountName: ne.config.name,
|
||||||
securityContext: {
|
securityContext: {
|
||||||
runAsUser: 65534,
|
runAsUser: 65534,
|
||||||
runAsNonRoot: true,
|
runAsNonRoot: true,
|
||||||
@@ -210,4 +239,6 @@ function(params) {
|
|||||||
},
|
},
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -23,6 +23,15 @@ local defaults = {
|
|||||||
for labelName in std.objectFields(defaults.commonLabels)
|
for labelName in std.objectFields(defaults.commonLabels)
|
||||||
if !std.setMember(labelName, ['app.kubernetes.io/version'])
|
if !std.setMember(labelName, ['app.kubernetes.io/version'])
|
||||||
},
|
},
|
||||||
|
mixin: {
|
||||||
|
ruleLabels: {
|
||||||
|
role: 'alert-rules',
|
||||||
|
prometheus: defaults.name,
|
||||||
|
},
|
||||||
|
_config: {
|
||||||
|
prometheusOperatorSelector: 'job="prometheus-operator",namespace="' + defaults.namespace + '"',
|
||||||
|
},
|
||||||
|
},
|
||||||
};
|
};
|
||||||
|
|
||||||
function(params)
|
function(params)
|
||||||
@@ -31,6 +40,26 @@ function(params)
|
|||||||
assert std.isObject(config.resources);
|
assert std.isObject(config.resources);
|
||||||
|
|
||||||
prometheusOperator(config) {
|
prometheusOperator(config) {
|
||||||
|
local po = self,
|
||||||
|
mixin:: (import 'github.com/prometheus-operator/prometheus-operator/jsonnet/mixin/mixin.libsonnet') {
|
||||||
|
_config+:: config.mixin._config,
|
||||||
|
},
|
||||||
|
|
||||||
|
prometheusRule: {
|
||||||
|
apiVersion: 'monitoring.coreos.com/v1',
|
||||||
|
kind: 'PrometheusRule',
|
||||||
|
metadata: {
|
||||||
|
labels: config.commonLabels + config.mixin.ruleLabels,
|
||||||
|
name: config.name + '-rules',
|
||||||
|
namespace: config.namespace,
|
||||||
|
},
|
||||||
|
spec: {
|
||||||
|
local r = if std.objectHasAll(po.mixin, 'prometheusRules') then po.mixin.prometheusRules else {},
|
||||||
|
local a = if std.objectHasAll(po.mixin, 'prometheusAlerts') then po.mixin.prometheusAlerts else {},
|
||||||
|
groups: a + r,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
|
||||||
service+: {
|
service+: {
|
||||||
spec+: {
|
spec+: {
|
||||||
ports: [
|
ports: [
|
||||||
|
|||||||
@@ -13,9 +13,6 @@ local defaults = {
|
|||||||
alertmanagerName: error 'must provide alertmanagerName',
|
alertmanagerName: error 'must provide alertmanagerName',
|
||||||
namespaces: ['default', 'kube-system', defaults.namespace],
|
namespaces: ['default', 'kube-system', defaults.namespace],
|
||||||
replicas: 2,
|
replicas: 2,
|
||||||
rules: {
|
|
||||||
groups: [],
|
|
||||||
},
|
|
||||||
commonLabels:: {
|
commonLabels:: {
|
||||||
'app.kubernetes.io/name': 'prometheus',
|
'app.kubernetes.io/name': 'prometheus',
|
||||||
'app.kubernetes.io/version': defaults.version,
|
'app.kubernetes.io/version': defaults.version,
|
||||||
@@ -27,6 +24,19 @@ local defaults = {
|
|||||||
for labelName in std.objectFields(defaults.commonLabels)
|
for labelName in std.objectFields(defaults.commonLabels)
|
||||||
if !std.setMember(labelName, ['app.kubernetes.io/version'])
|
if !std.setMember(labelName, ['app.kubernetes.io/version'])
|
||||||
} + { prometheus: defaults.name },
|
} + { prometheus: defaults.name },
|
||||||
|
ruleSelector: {
|
||||||
|
matchLabels: defaults.mixin.ruleLabels,
|
||||||
|
},
|
||||||
|
mixin: {
|
||||||
|
ruleLabels: {
|
||||||
|
role: 'alert-rules',
|
||||||
|
prometheus: defaults.name,
|
||||||
|
},
|
||||||
|
_config: {
|
||||||
|
prometheusSelector: 'job="prometheus-' + defaults.name + '",namespace="' + defaults.namespace + '"',
|
||||||
|
prometheusName: '{{$labels.namespace}}/{{$labels.pod}}',
|
||||||
|
},
|
||||||
|
},
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
@@ -35,6 +45,26 @@ function(params) {
|
|||||||
config:: defaults + params,
|
config:: defaults + params,
|
||||||
// Safety check
|
// Safety check
|
||||||
assert std.isObject(p.config.resources),
|
assert std.isObject(p.config.resources),
|
||||||
|
assert std.isObject(p.config.mixin._config),
|
||||||
|
|
||||||
|
mixin:: (import 'github.com/prometheus/prometheus/documentation/prometheus-mixin/mixin.libsonnet') {
|
||||||
|
_config+:: p.config.mixin._config,
|
||||||
|
},
|
||||||
|
|
||||||
|
prometheusRule: {
|
||||||
|
apiVersion: 'monitoring.coreos.com/v1',
|
||||||
|
kind: 'PrometheusRule',
|
||||||
|
metadata: {
|
||||||
|
labels: p.config.commonLabels + p.config.mixin.ruleLabels,
|
||||||
|
name: p.config.name + '-rules',
|
||||||
|
namespace: p.config.namespace,
|
||||||
|
},
|
||||||
|
spec: {
|
||||||
|
local r = if std.objectHasAll(p.mixin, 'prometheusRules') then p.mixin.prometheusRules else {},
|
||||||
|
local a = if std.objectHasAll(p.mixin, 'prometheusAlerts') then p.mixin.prometheusAlerts else {},
|
||||||
|
groups: a + r,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
|
||||||
serviceAccount: {
|
serviceAccount: {
|
||||||
apiVersion: 'v1',
|
apiVersion: 'v1',
|
||||||
@@ -63,22 +93,6 @@ function(params) {
|
|||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
|
||||||
rules: {
|
|
||||||
apiVersion: 'monitoring.coreos.com/v1',
|
|
||||||
kind: 'PrometheusRule',
|
|
||||||
metadata: {
|
|
||||||
labels: {
|
|
||||||
prometheus: p.config.name,
|
|
||||||
role: 'alert-rules',
|
|
||||||
} + p.config.commonLabels,
|
|
||||||
name: 'prometheus-' + p.config.name + '-rules',
|
|
||||||
namespace: p.config.namespace,
|
|
||||||
},
|
|
||||||
spec: {
|
|
||||||
groups: p.config.rules.groups,
|
|
||||||
},
|
|
||||||
},
|
|
||||||
|
|
||||||
roleBindingSpecificNamespaces:
|
roleBindingSpecificNamespaces:
|
||||||
local newSpecificRoleBinding(namespace) = {
|
local newSpecificRoleBinding(namespace) = {
|
||||||
apiVersion: 'rbac.authorization.k8s.io/v1',
|
apiVersion: 'rbac.authorization.k8s.io/v1',
|
||||||
@@ -230,12 +244,7 @@ function(params) {
|
|||||||
podMonitorNamespaceSelector: {},
|
podMonitorNamespaceSelector: {},
|
||||||
probeNamespaceSelector: {},
|
probeNamespaceSelector: {},
|
||||||
nodeSelector: { 'kubernetes.io/os': 'linux' },
|
nodeSelector: { 'kubernetes.io/os': 'linux' },
|
||||||
ruleSelector: {
|
ruleSelector: p.config.ruleSelector,
|
||||||
matchLabels: {
|
|
||||||
role: 'alert-rules',
|
|
||||||
prometheus: p.config.name,
|
|
||||||
},
|
|
||||||
},
|
|
||||||
resources: p.config.resources,
|
resources: p.config.resources,
|
||||||
alerting: {
|
alerting: {
|
||||||
alertmanagers: [{
|
alertmanagers: [{
|
||||||
|
|||||||
Reference in New Issue
Block a user