From 916863e4d53a254f0497695d55014ae9d8654612 Mon Sep 17 00:00:00 2001 From: Matthias Loibl <mail@matthiasloibl.com> Date: Tue, 25 Sep 2018 17:14:30 +0200 Subject: [PATCH] contrib/kube-prometheus: Set podAntiAffinity for Prometheus & Alertmanager contrib/kube-prometheus: Generate new manifests with antiAffinity contrib/kube-prometheus: jb update Documentation: Generate after updating kube-prometheus manifests contrib/kube-prometheus: Move antiaffinity into own jsonnet file foobar --- .../kube-prometheus-anti-affinity.libsonnet | 39 +++++++++++++++++++ .../prometheus/prometheus.libsonnet | 10 +++-- 2 files changed, 45 insertions(+), 4 deletions(-) create mode 100644 jsonnet/kube-prometheus/kube-prometheus-anti-affinity.libsonnet diff --git a/jsonnet/kube-prometheus/kube-prometheus-anti-affinity.libsonnet b/jsonnet/kube-prometheus/kube-prometheus-anti-affinity.libsonnet new file mode 100644 index 00000000..6956e3db --- /dev/null +++ b/jsonnet/kube-prometheus/kube-prometheus-anti-affinity.libsonnet @@ -0,0 +1,39 @@ +local k = import 'ksonnet/ksonnet.beta.3/k.libsonnet'; +local statefulSet = k.apps.v1beta2.statefulSet; +local affinity = statefulSet.mixin.spec.template.spec.affinity.podAntiAffinity.preferredDuringSchedulingIgnoredDuringExecutionType; +local matchExpression = affinity.mixin.podAffinityTerm.labelSelector.matchExpressionsType; + +{ + local antiaffinity(key, values) = { + affinity: { + podAntiAffinity: { + preferredDuringSchedulingIgnoredDuringExecution: [ + affinity.new() + + affinity.withWeight(100) + + affinity.mixin.podAffinityTerm.withNamespaces($._config.namespace) + + affinity.mixin.podAffinityTerm.withTopologyKey('kubernetes.io/hostname') + + affinity.mixin.podAffinityTerm.labelSelector.withMatchExpressions([ + matchExpression.new() + + matchExpression.withKey(key) + + matchExpression.withOperator('In') + + matchExpression.withValues(values), + ]), + ], + }, + }, + }, + + alertmanager+:: { + alertmanager+: { + spec+: + antiaffinity('alertmanager', [$._config.alertmanager.name]), + }, + }, + + prometheus+: { + prometheus+: { + spec+: + antiaffinity('prometheus', [$._config.prometheus.name]), + }, + }, +} diff --git a/jsonnet/kube-prometheus/prometheus/prometheus.libsonnet b/jsonnet/kube-prometheus/prometheus/prometheus.libsonnet index 63df0506..452a89e3 100644 --- a/jsonnet/kube-prometheus/prometheus/prometheus.libsonnet +++ b/jsonnet/kube-prometheus/prometheus/prometheus.libsonnet @@ -144,12 +144,14 @@ local k = import 'ksonnet/ksonnet.beta.3/k.libsonnet'; local roleList = k.rbac.v1.roleList; roleList.new([newSpecificRole(x) for x in $._config.prometheus.namespaces]), prometheus: - local container = k.core.v1.pod.mixin.spec.containersType; + local statefulSet = k.apps.v1beta2.statefulSet; + local container = statefulSet.mixin.spec.template.spec.containersType; local resourceRequirements = container.mixin.resourcesType; - local selector = k.apps.v1beta2.deployment.mixin.spec.selectorType; + local selector = statefulSet.mixin.spec.selectorType; - local resources = resourceRequirements.new() + - resourceRequirements.withRequests({ memory: '400Mi' }); + local resources = + resourceRequirements.new() + + resourceRequirements.withRequests({ memory: '400Mi' }); { apiVersion: 'monitoring.coreos.com/v1', -- GitLab