Make the prometheus & alertmanager name configurable

This commit is contained in:
Matthias Loibl
2018-05-25 18:02:23 +02:00
parent c11db46863
commit da6fc256b5
2 changed files with 41 additions and 35 deletions

View File

@@ -15,6 +15,7 @@ local alertmanagerConfig = "\nglobal:\n resolve_timeout: 5m\nroute:\n group_by
}, },
alertmanager+:: { alertmanager+:: {
name: $._config.alertmanager.name,
config: alertmanagerConfig, config: alertmanagerConfig,
replicas: 3, replicas: 3,
}, },
@@ -24,13 +25,13 @@ local alertmanagerConfig = "\nglobal:\n resolve_timeout: 5m\nroute:\n group_by
secret: secret:
local secret = k.core.v1.secret; local secret = k.core.v1.secret;
secret.new('alertmanager-main', { 'alertmanager.yaml': std.base64($._config.alertmanager.config) }) + secret.new('alertmanager-' + $._config.alertmanager.name, { 'alertmanager.yaml': std.base64($._config.alertmanager.config) }) +
secret.mixin.metadata.withNamespace($._config.namespace), secret.mixin.metadata.withNamespace($._config.namespace),
serviceAccount: serviceAccount:
local serviceAccount = k.core.v1.serviceAccount; local serviceAccount = k.core.v1.serviceAccount;
serviceAccount.new('alertmanager-main') + serviceAccount.new('alertmanager-' + $._config.alertmanager.name) +
serviceAccount.mixin.metadata.withNamespace($._config.namespace), serviceAccount.mixin.metadata.withNamespace($._config.namespace),
service: service:
@@ -39,9 +40,9 @@ local alertmanagerConfig = "\nglobal:\n resolve_timeout: 5m\nroute:\n group_by
local alertmanagerPort = servicePort.newNamed('web', 9093, 'web'); local alertmanagerPort = servicePort.newNamed('web', 9093, 'web');
service.new('alertmanager-main', { app: 'alertmanager', alertmanager: 'main' }, alertmanagerPort) + service.new('alertmanager-' + $._config.alertmanager.name, { app: 'alertmanager', alertmanager: $._config.alertmanager.name }, alertmanagerPort) +
service.mixin.metadata.withNamespace($._config.namespace) + service.mixin.metadata.withNamespace($._config.namespace) +
service.mixin.metadata.withLabels({ alertmanager: 'main' }), service.mixin.metadata.withLabels({ alertmanager: $._config.alertmanager.name }),
serviceMonitor: serviceMonitor:
{ {
@@ -57,7 +58,7 @@ local alertmanagerConfig = "\nglobal:\n resolve_timeout: 5m\nroute:\n group_by
spec: { spec: {
selector: { selector: {
matchLabels: { matchLabels: {
alertmanager: 'main', alertmanager: $._config.alertmanager.name,
}, },
}, },
namespaceSelector: { namespaceSelector: {
@@ -79,10 +80,10 @@ local alertmanagerConfig = "\nglobal:\n resolve_timeout: 5m\nroute:\n group_by
apiVersion: 'monitoring.coreos.com/v1', apiVersion: 'monitoring.coreos.com/v1',
kind: 'Alertmanager', kind: 'Alertmanager',
metadata: { metadata: {
name: 'main', name: $._config.alertmanager.name,
namespace: $._config.namespace, namespace: $._config.namespace,
labels: { labels: {
alertmanager: 'main', alertmanager: $._config.alertmanager.name,
}, },
}, },
spec: { spec: {
@@ -90,7 +91,7 @@ local alertmanagerConfig = "\nglobal:\n resolve_timeout: 5m\nroute:\n group_by
version: $._config.versions.alertmanager, version: $._config.versions.alertmanager,
baseImage: $._config.imageRepos.alertmanager, baseImage: $._config.imageRepos.alertmanager,
nodeSelector: { 'beta.kubernetes.io/os': 'linux' }, nodeSelector: { 'beta.kubernetes.io/os': 'linux' },
serviceAccountName: 'alertmanager-main', serviceAccountName: 'alertmanager-' + $._config.alertmanager.name,
}, },
}, },
}, },

View File

@@ -12,7 +12,12 @@ local k = import 'ksonnet/ksonnet.beta.3/k.libsonnet';
prometheus: 'quay.io/prometheus/prometheus', prometheus: 'quay.io/prometheus/prometheus',
}, },
alertmanager+:: {
name: 'main',
},
prometheus+:: { prometheus+:: {
name: 'k8s',
replicas: 2, replicas: 2,
rules: {}, rules: {},
renderedRules: {}, renderedRules: {},
@@ -23,7 +28,7 @@ local k = import 'ksonnet/ksonnet.beta.3/k.libsonnet';
serviceAccount: serviceAccount:
local serviceAccount = k.core.v1.serviceAccount; local serviceAccount = k.core.v1.serviceAccount;
serviceAccount.new('prometheus-k8s') + serviceAccount.new('prometheus-' + $._config.prometheus.name) +
serviceAccount.mixin.metadata.withNamespace($._config.namespace), serviceAccount.mixin.metadata.withNamespace($._config.namespace),
service: service:
local service = k.core.v1.service; local service = k.core.v1.service;
@@ -31,25 +36,25 @@ local k = import 'ksonnet/ksonnet.beta.3/k.libsonnet';
local prometheusPort = servicePort.newNamed('web', 9090, 'web'); local prometheusPort = servicePort.newNamed('web', 9090, 'web');
service.new('prometheus-k8s', { app: 'prometheus', prometheus: 'k8s' }, prometheusPort) + service.new('prometheus-' + $._config.prometheus.name, { app: 'prometheus', prometheus: $._config.prometheus.name }, prometheusPort) +
service.mixin.metadata.withNamespace($._config.namespace) + service.mixin.metadata.withNamespace($._config.namespace) +
service.mixin.metadata.withLabels({ prometheus: 'k8s' }), service.mixin.metadata.withLabels({ prometheus: $._config.prometheus.name }),
rules: rules:
local configMap = k.core.v1.configMap; local configMap = k.core.v1.configMap;
configMap.new('prometheus-k8s-rules', ({ 'all.rules.yaml': std.manifestYamlDoc($._config.prometheus.rules) } + $._config.prometheus.renderedRules)) + configMap.new('prometheus-k8s-rules', ({ 'all.rules.yaml': std.manifestYamlDoc($._config.prometheus.rules) } + $._config.prometheus.renderedRules)) +
configMap.mixin.metadata.withLabels({ role: 'alert-rules', prometheus: 'k8s' }) + configMap.mixin.metadata.withLabels({ role: 'alert-rules', prometheus: $._config.prometheus.name }) +
configMap.mixin.metadata.withNamespace($._config.namespace), configMap.mixin.metadata.withNamespace($._config.namespace),
roleBindingDefault: roleBindingDefault:
local roleBinding = k.rbac.v1.roleBinding; local roleBinding = k.rbac.v1.roleBinding;
roleBinding.new() + roleBinding.new() +
roleBinding.mixin.metadata.withName('prometheus-k8s') + roleBinding.mixin.metadata.withName('prometheus-' + $._config.prometheus.name) +
roleBinding.mixin.metadata.withNamespace('default') + roleBinding.mixin.metadata.withNamespace('default') +
roleBinding.mixin.roleRef.withApiGroup('rbac.authorization.k8s.io') + roleBinding.mixin.roleRef.withApiGroup('rbac.authorization.k8s.io') +
roleBinding.mixin.roleRef.withName('prometheus-k8s') + roleBinding.mixin.roleRef.withName('prometheus-' + $._config.prometheus.name) +
roleBinding.mixin.roleRef.mixinInstance({ kind: 'Role' }) + roleBinding.mixin.roleRef.mixinInstance({ kind: 'Role' }) +
roleBinding.withSubjects([{ kind: 'ServiceAccount', name: 'prometheus-k8s', namespace: $._config.namespace }]), roleBinding.withSubjects([{ kind: 'ServiceAccount', name: 'prometheus-' + $._config.prometheus.name, namespace: $._config.namespace }]),
clusterRole: clusterRole:
local clusterRole = k.rbac.v1.clusterRole; local clusterRole = k.rbac.v1.clusterRole;
local policyRule = clusterRole.rulesType; local policyRule = clusterRole.rulesType;
@@ -66,7 +71,7 @@ local k = import 'ksonnet/ksonnet.beta.3/k.libsonnet';
local rules = [nodeMetricsRule, metricsRule]; local rules = [nodeMetricsRule, metricsRule];
clusterRole.new() + clusterRole.new() +
clusterRole.mixin.metadata.withName('prometheus-k8s') + clusterRole.mixin.metadata.withName('prometheus-' + $._config.prometheus.name) +
clusterRole.withRules(rules), clusterRole.withRules(rules),
roleConfig: roleConfig:
local role = k.rbac.v1.role; local role = k.rbac.v1.role;
@@ -92,26 +97,26 @@ local k = import 'ksonnet/ksonnet.beta.3/k.libsonnet';
roleBinding.mixin.roleRef.withApiGroup('rbac.authorization.k8s.io') + roleBinding.mixin.roleRef.withApiGroup('rbac.authorization.k8s.io') +
roleBinding.mixin.roleRef.withName('prometheus-k8s-config') + roleBinding.mixin.roleRef.withName('prometheus-k8s-config') +
roleBinding.mixin.roleRef.mixinInstance({ kind: 'Role' }) + roleBinding.mixin.roleRef.mixinInstance({ kind: 'Role' }) +
roleBinding.withSubjects([{ kind: 'ServiceAccount', name: 'prometheus-k8s', namespace: $._config.namespace }]), roleBinding.withSubjects([{ kind: 'ServiceAccount', name: 'prometheus-' + $._config.prometheus.name, namespace: $._config.namespace }]),
roleBindingNamespace: roleBindingNamespace:
local roleBinding = k.rbac.v1.roleBinding; local roleBinding = k.rbac.v1.roleBinding;
roleBinding.new() + roleBinding.new() +
roleBinding.mixin.metadata.withName('prometheus-k8s') + roleBinding.mixin.metadata.withName('prometheus-' + $._config.prometheus.name) +
roleBinding.mixin.metadata.withNamespace($._config.namespace) + roleBinding.mixin.metadata.withNamespace($._config.namespace) +
roleBinding.mixin.roleRef.withApiGroup('rbac.authorization.k8s.io') + roleBinding.mixin.roleRef.withApiGroup('rbac.authorization.k8s.io') +
roleBinding.mixin.roleRef.withName('prometheus-k8s') + roleBinding.mixin.roleRef.withName('prometheus-' + $._config.prometheus.name) +
roleBinding.mixin.roleRef.mixinInstance({ kind: 'Role' }) + roleBinding.mixin.roleRef.mixinInstance({ kind: 'Role' }) +
roleBinding.withSubjects([{ kind: 'ServiceAccount', name: 'prometheus-k8s', namespace: $._config.namespace }]), roleBinding.withSubjects([{ kind: 'ServiceAccount', name: 'prometheus-' + $._config.prometheus.name, namespace: $._config.namespace }]),
clusterRoleBinding: clusterRoleBinding:
local clusterRoleBinding = k.rbac.v1.clusterRoleBinding; local clusterRoleBinding = k.rbac.v1.clusterRoleBinding;
clusterRoleBinding.new() + clusterRoleBinding.new() +
clusterRoleBinding.mixin.metadata.withName('prometheus-k8s') + clusterRoleBinding.mixin.metadata.withName('prometheus-' + $._config.prometheus.name) +
clusterRoleBinding.mixin.roleRef.withApiGroup('rbac.authorization.k8s.io') + clusterRoleBinding.mixin.roleRef.withApiGroup('rbac.authorization.k8s.io') +
clusterRoleBinding.mixin.roleRef.withName('prometheus-k8s') + clusterRoleBinding.mixin.roleRef.withName('prometheus-' + $._config.prometheus.name) +
clusterRoleBinding.mixin.roleRef.mixinInstance({ kind: 'ClusterRole' }) + clusterRoleBinding.mixin.roleRef.mixinInstance({ kind: 'ClusterRole' }) +
clusterRoleBinding.withSubjects([{ kind: 'ServiceAccount', name: 'prometheus-k8s', namespace: $._config.namespace }]), clusterRoleBinding.withSubjects([{ kind: 'ServiceAccount', name: 'prometheus-' + $._config.prometheus.name, namespace: $._config.namespace }]),
roleKubeSystem: roleKubeSystem:
local role = k.rbac.v1.role; local role = k.rbac.v1.role;
local policyRule = role.rulesType; local policyRule = role.rulesType;
@@ -127,7 +132,7 @@ local k = import 'ksonnet/ksonnet.beta.3/k.libsonnet';
policyRule.withVerbs(['get', 'list', 'watch']); policyRule.withVerbs(['get', 'list', 'watch']);
role.new() + role.new() +
role.mixin.metadata.withName('prometheus-k8s') + role.mixin.metadata.withName('prometheus-' + $._config.prometheus.name) +
role.mixin.metadata.withNamespace('kube-system') + role.mixin.metadata.withNamespace('kube-system') +
role.withRules(coreRule), role.withRules(coreRule),
roleDefault: roleDefault:
@@ -145,19 +150,19 @@ local k = import 'ksonnet/ksonnet.beta.3/k.libsonnet';
policyRule.withVerbs(['get', 'list', 'watch']); policyRule.withVerbs(['get', 'list', 'watch']);
role.new() + role.new() +
role.mixin.metadata.withName('prometheus-k8s') + role.mixin.metadata.withName('prometheus-' + $._config.prometheus.name) +
role.mixin.metadata.withNamespace('default') + role.mixin.metadata.withNamespace('default') +
role.withRules(coreRule), role.withRules(coreRule),
roleBindingKubeSystem: roleBindingKubeSystem:
local roleBinding = k.rbac.v1.roleBinding; local roleBinding = k.rbac.v1.roleBinding;
roleBinding.new() + roleBinding.new() +
roleBinding.mixin.metadata.withName('prometheus-k8s') + roleBinding.mixin.metadata.withName('prometheus-' + $._config.prometheus.name) +
roleBinding.mixin.metadata.withNamespace('kube-system') + roleBinding.mixin.metadata.withNamespace('kube-system') +
roleBinding.mixin.roleRef.withApiGroup('rbac.authorization.k8s.io') + roleBinding.mixin.roleRef.withApiGroup('rbac.authorization.k8s.io') +
roleBinding.mixin.roleRef.withName('prometheus-k8s') + roleBinding.mixin.roleRef.withName('prometheus-' + $._config.prometheus.name) +
roleBinding.mixin.roleRef.mixinInstance({ kind: 'Role' }) + roleBinding.mixin.roleRef.mixinInstance({ kind: 'Role' }) +
roleBinding.withSubjects([{ kind: 'ServiceAccount', name: 'prometheus-k8s', namespace: $._config.namespace }]), roleBinding.withSubjects([{ kind: 'ServiceAccount', name: 'prometheus-' + $._config.prometheus.name, namespace: $._config.namespace }]),
roleNamespace: roleNamespace:
local role = k.rbac.v1.role; local role = k.rbac.v1.role;
local policyRule = role.rulesType; local policyRule = role.rulesType;
@@ -173,7 +178,7 @@ local k = import 'ksonnet/ksonnet.beta.3/k.libsonnet';
policyRule.withVerbs(['get', 'list', 'watch']); policyRule.withVerbs(['get', 'list', 'watch']);
role.new() + role.new() +
role.mixin.metadata.withName('prometheus-k8s') + role.mixin.metadata.withName('prometheus-' + $._config.prometheus.name) +
role.mixin.metadata.withNamespace($._config.namespace) + role.mixin.metadata.withNamespace($._config.namespace) +
role.withRules(coreRule), role.withRules(coreRule),
prometheus: prometheus:
@@ -188,29 +193,29 @@ local k = import 'ksonnet/ksonnet.beta.3/k.libsonnet';
apiVersion: 'monitoring.coreos.com/v1', apiVersion: 'monitoring.coreos.com/v1',
kind: 'Prometheus', kind: 'Prometheus',
metadata: { metadata: {
name: 'k8s', name: $._config.prometheus.name,
namespace: $._config.namespace, namespace: $._config.namespace,
labels: { labels: {
prometheus: 'k8s', prometheus: $._config.prometheus.name,
}, },
}, },
spec: { spec: {
replicas: $._config.prometheus.replicas, replicas: $._config.prometheus.replicas,
version: $._config.versions.prometheus, version: $._config.versions.prometheus,
baseImage: $._config.imageRepos.prometheus, baseImage: $._config.imageRepos.prometheus,
serviceAccountName: 'prometheus-k8s', serviceAccountName: 'prometheus-' + $._config.prometheus.name,
serviceMonitorSelector: selector.withMatchExpressions({ key: 'k8s-app', operator: 'Exists' }), serviceMonitorSelector: selector.withMatchExpressions({ key: 'k8s-app', operator: 'Exists' }),
nodeSelector: { 'beta.kubernetes.io/os': 'linux' }, nodeSelector: { 'beta.kubernetes.io/os': 'linux' },
ruleSelector: selector.withMatchLabels({ ruleSelector: selector.withMatchLabels({
role: 'alert-rules', role: 'alert-rules',
prometheus: 'k8s', prometheus: $._config.prometheus.name,
}), }),
resources: resources, resources: resources,
alerting: { alerting: {
alertmanagers: [ alertmanagers: [
{ {
namespace: $._config.namespace, namespace: $._config.namespace,
name: 'alertmanager-main', name: 'alertmanager-' + $._config.alertmanager.name,
port: 'web', port: 'web',
}, },
], ],
@@ -231,7 +236,7 @@ local k = import 'ksonnet/ksonnet.beta.3/k.libsonnet';
spec: { spec: {
selector: { selector: {
matchLabels: { matchLabels: {
prometheus: 'k8s', prometheus: $._config.prometheus.name,
}, },
}, },
namespaceSelector: { namespaceSelector: {