Merge pull request #862 from paulfantom/alertmanager-global

Remove mutating global state in alertmanager objects
This commit is contained in:
Paweł Krupa 2021-01-07 11:13:25 +01:00 committed by GitHub
commit 6248e73890
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
7 changed files with 162 additions and 155 deletions

View File

@ -1,17 +1,21 @@
{ local defaults = {
_config+:: { local defaults = self,
namespace: 'default', namespace: error 'must provide namespace',
image: error 'must provide image',
versions+:: { version: error 'must provide version',
alertmanager: 'v0.21.0', resources: {},
commonLabels:: {
'app.kubernetes.io/name': 'alertmanager',
'app.kubernetes.io/version': defaults.version,
'app.kubernetes.io/component': 'alert-router',
'app.kubernetes.io/part-of': 'kube-prometheus',
}, },
selectorLabels:: {
imageRepos+:: { [labelName]: defaults.commonLabels[labelName]
alertmanager: 'quay.io/prometheus/alertmanager', for labelName in std.objectFields(defaults.commonLabels)
if !std.setMember(labelName, ['app.kubernetes.io/version'])
}, },
name: error 'must provide name',
alertmanager+:: {
name: 'main',
config: { config: {
global: { global: {
resolve_timeout: '5m', resolve_timeout: '5m',
@ -51,36 +55,32 @@
], ],
}, },
replicas: 3, replicas: 3,
labels: { };
'app.kubernetes.io/name': 'alertmanager',
'app.kubernetes.io/version': $._config.versions.alertmanager,
'app.kubernetes.io/component': 'alert-router',
'app.kubernetes.io/part-of': 'kube-prometheus',
}, function(params) {
selectorLabels: { local am = self,
[labelName]: $._config.alertmanager.labels[labelName] config:: defaults + params,
for labelName in std.objectFields($._config.alertmanager.labels) // Safety check
if !std.setMember(labelName, ['app.kubernetes.io/version']) assert std.isObject(am.config.resources),
},
},
},
alertmanager+:: {
secret: { secret: {
apiVersion: 'v1', apiVersion: 'v1',
kind: 'Secret', kind: 'Secret',
type: 'Opaque', type: 'Opaque',
metadata: { metadata: {
name: 'alertmanager-' + $._config.alertmanager.name, name: 'alertmanager-' + am.config.name,
namespace: $._config.namespace, namespace: am.config.namespace,
labels: { alertmanager: $._config.alertmanager.name } + $._config.alertmanager.labels, labels: { alertmanager: am.config.name } + am.config.commonLabels,
}, },
stringData: { stringData: {
'alertmanager.yaml': if std.type($._config.alertmanager.config) == 'object' 'alertmanager.yaml': if std.type(am.config.config) == 'object'
then then
std.manifestYamlDoc($._config.alertmanager.config) std.manifestYamlDoc(am.config.config)
else else
$._config.alertmanager.config, am.config.config,
}, },
}, },
@ -88,9 +88,9 @@
apiVersion: 'v1', apiVersion: 'v1',
kind: 'ServiceAccount', kind: 'ServiceAccount',
metadata: { metadata: {
name: 'alertmanager-' + $._config.alertmanager.name, name: 'alertmanager-' + am.config.name,
namespace: $._config.namespace, namespace: am.config.namespace,
labels: { alertmanager: $._config.alertmanager.name } + $._config.alertmanager.labels, labels: { alertmanager: am.config.name } + am.config.commonLabels,
}, },
}, },
@ -98,9 +98,9 @@
apiVersion: 'v1', apiVersion: 'v1',
kind: 'Service', kind: 'Service',
metadata: { metadata: {
name: 'alertmanager-' + $._config.alertmanager.name, name: 'alertmanager-' + am.config.name,
namespace: $._config.namespace, namespace: am.config.namespace,
labels: { alertmanager: $._config.alertmanager.name } + $._config.alertmanager.labels, labels: { alertmanager: am.config.name } + am.config.commonLabels,
}, },
spec: { spec: {
ports: [ ports: [
@ -108,8 +108,8 @@
], ],
selector: { selector: {
app: 'alertmanager', app: 'alertmanager',
alertmanager: $._config.alertmanager.name, alertmanager: am.config.name,
} + $._config.alertmanager.selectorLabels, } + am.config.selectorLabels,
sessionAffinity: 'ClientIP', sessionAffinity: 'ClientIP',
}, },
}, },
@ -119,14 +119,14 @@
kind: 'ServiceMonitor', kind: 'ServiceMonitor',
metadata: { metadata: {
name: 'alertmanager', name: 'alertmanager',
namespace: $._config.namespace, namespace: am.config.namespace,
labels: $._config.alertmanager.labels, labels: am.config.commonLabels,
}, },
spec: { spec: {
selector: { selector: {
matchLabels: { matchLabels: {
alertmanager: $._config.alertmanager.name, alertmanager: am.config.name,
} + $._config.alertmanager.selectorLabels, } + am.config.selectorLabels,
}, },
endpoints: [ endpoints: [
{ port: 'web', interval: '30s' }, { port: 'web', interval: '30s' },
@ -138,21 +138,22 @@
apiVersion: 'monitoring.coreos.com/v1', apiVersion: 'monitoring.coreos.com/v1',
kind: 'Alertmanager', kind: 'Alertmanager',
metadata: { metadata: {
name: $._config.alertmanager.name, name: am.config.name,
namespace: $._config.namespace, namespace: am.config.namespace,
labels: { labels: {
alertmanager: $._config.alertmanager.name, alertmanager: am.config.name,
} + $._config.alertmanager.labels, } + am.config.commonLabels,
}, },
spec: { spec: {
replicas: $._config.alertmanager.replicas, replicas: am.config.replicas,
version: $._config.versions.alertmanager, version: am.config.version,
image: $._config.imageRepos.alertmanager + ':' + $._config.versions.alertmanager, image: am.config.image,
podMetadata: { podMetadata: {
labels: $._config.alertmanager.labels, labels: am.config.commonLabels,
}, },
resources: am.config.resources,
nodeSelector: { 'kubernetes.io/os': 'linux' }, nodeSelector: { 'kubernetes.io/os': 'linux' },
serviceAccountName: 'alertmanager-' + $._config.alertmanager.name, serviceAccountName: 'alertmanager-' + am.config.name,
securityContext: { securityContext: {
runAsUser: 1000, runAsUser: 1000,
runAsNonRoot: true, runAsNonRoot: true,
@ -160,5 +161,4 @@
}, },
}, },
}, },
},
} }

View File

@ -1,13 +1,13 @@
local kubeRbacProxyContainer = import './kube-rbac-proxy/containerMixin.libsonnet'; local kubeRbacProxyContainer = import './kube-rbac-proxy/containerMixin.libsonnet';
local nodeExporter = import './node-exporter/node-exporter.libsonnet'; local nodeExporter = import './node-exporter/node-exporter.libsonnet';
local alertmanager = import './alertmanager/alertmanager.libsonnet';
(import 'github.com/brancz/kubernetes-grafana/grafana/grafana.libsonnet') + (import 'github.com/brancz/kubernetes-grafana/grafana/grafana.libsonnet') +
(import './kube-state-metrics/kube-state-metrics.libsonnet') + (import './kube-state-metrics/kube-state-metrics.libsonnet') +
(import 'github.com/kubernetes/kube-state-metrics/jsonnet/kube-state-metrics-mixin/mixin.libsonnet') + (import 'github.com/kubernetes/kube-state-metrics/jsonnet/kube-state-metrics-mixin/mixin.libsonnet') +
(import 'github.com/prometheus/node_exporter/docs/node-mixin/mixin.libsonnet') + (import 'github.com/prometheus/node_exporter/docs/node-mixin/mixin.libsonnet') +
(import './blackbox-exporter/blackbox-exporter.libsonnet') + (import './blackbox-exporter/blackbox-exporter.libsonnet') +
(import './alertmanager/alertmanager.libsonnet') +
(import 'github.com/prometheus/alertmanager/doc/alertmanager-mixin/mixin.libsonnet') + (import 'github.com/prometheus/alertmanager/doc/alertmanager-mixin/mixin.libsonnet') +
(import 'github.com/prometheus-operator/prometheus-operator/jsonnet/prometheus-operator/prometheus-operator.libsonnet') + (import 'github.com/prometheus-operator/prometheus-operator/jsonnet/prometheus-operator/prometheus-operator.libsonnet') +
(import 'github.com/prometheus-operator/prometheus-operator/jsonnet/mixin/mixin.libsonnet') + (import 'github.com/prometheus-operator/prometheus-operator/jsonnet/mixin/mixin.libsonnet') +
@ -23,6 +23,12 @@ local nodeExporter = import './node-exporter/node-exporter.libsonnet';
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',
}), }),
alertmanager: alertmanager({
name: 'main',
namespace: $._config.namespace,
version: '0.21.0',
image: 'quay.io/prometheus/alertmanager:v0.21.0',
}),
kubePrometheus+:: { kubePrometheus+:: {
namespace: { namespace: {
apiVersion: 'v1', apiVersion: 'v1',

View File

@ -6,7 +6,7 @@ metadata:
app.kubernetes.io/component: alert-router app.kubernetes.io/component: alert-router
app.kubernetes.io/name: alertmanager app.kubernetes.io/name: alertmanager
app.kubernetes.io/part-of: kube-prometheus app.kubernetes.io/part-of: kube-prometheus
app.kubernetes.io/version: v0.21.0 app.kubernetes.io/version: 0.21.0
name: main name: main
namespace: monitoring namespace: monitoring
spec: spec:
@ -18,11 +18,12 @@ spec:
app.kubernetes.io/component: alert-router app.kubernetes.io/component: alert-router
app.kubernetes.io/name: alertmanager app.kubernetes.io/name: alertmanager
app.kubernetes.io/part-of: kube-prometheus app.kubernetes.io/part-of: kube-prometheus
app.kubernetes.io/version: v0.21.0 app.kubernetes.io/version: 0.21.0
replicas: 3 replicas: 3
resources: {}
securityContext: securityContext:
fsGroup: 2000 fsGroup: 2000
runAsNonRoot: true runAsNonRoot: true
runAsUser: 1000 runAsUser: 1000
serviceAccountName: alertmanager-main serviceAccountName: alertmanager-main
version: v0.21.0 version: 0.21.0

View File

@ -6,7 +6,7 @@ metadata:
app.kubernetes.io/component: alert-router app.kubernetes.io/component: alert-router
app.kubernetes.io/name: alertmanager app.kubernetes.io/name: alertmanager
app.kubernetes.io/part-of: kube-prometheus app.kubernetes.io/part-of: kube-prometheus
app.kubernetes.io/version: v0.21.0 app.kubernetes.io/version: 0.21.0
name: alertmanager-main name: alertmanager-main
namespace: monitoring namespace: monitoring
stringData: stringData:

View File

@ -6,7 +6,7 @@ metadata:
app.kubernetes.io/component: alert-router app.kubernetes.io/component: alert-router
app.kubernetes.io/name: alertmanager app.kubernetes.io/name: alertmanager
app.kubernetes.io/part-of: kube-prometheus app.kubernetes.io/part-of: kube-prometheus
app.kubernetes.io/version: v0.21.0 app.kubernetes.io/version: 0.21.0
name: alertmanager-main name: alertmanager-main
namespace: monitoring namespace: monitoring
spec: spec:

View File

@ -6,6 +6,6 @@ metadata:
app.kubernetes.io/component: alert-router app.kubernetes.io/component: alert-router
app.kubernetes.io/name: alertmanager app.kubernetes.io/name: alertmanager
app.kubernetes.io/part-of: kube-prometheus app.kubernetes.io/part-of: kube-prometheus
app.kubernetes.io/version: v0.21.0 app.kubernetes.io/version: 0.21.0
name: alertmanager-main name: alertmanager-main
namespace: monitoring namespace: monitoring

View File

@ -5,7 +5,7 @@ metadata:
app.kubernetes.io/component: alert-router app.kubernetes.io/component: alert-router
app.kubernetes.io/name: alertmanager app.kubernetes.io/name: alertmanager
app.kubernetes.io/part-of: kube-prometheus app.kubernetes.io/part-of: kube-prometheus
app.kubernetes.io/version: v0.21.0 app.kubernetes.io/version: 0.21.0
name: alertmanager name: alertmanager
namespace: monitoring namespace: monitoring
spec: spec: