diff --git a/jsonnet/kube-prometheus/addons/anti-affinity.libsonnet b/jsonnet/kube-prometheus/addons/anti-affinity.libsonnet index 3f55d2687a882c243395976851711441eadea97a..56ea5303b900f1af4576295864751567c3481a3a 100644 --- a/jsonnet/kube-prometheus/addons/anti-affinity.libsonnet +++ b/jsonnet/kube-prometheus/addons/anti-affinity.libsonnet @@ -1,38 +1,69 @@ { - local antiaffinity(key, values, namespace) = { + values+:: { + alertmanager+: { + podAntiAffinity: 'soft', + podAntiAffinityTopologyKey: 'kubernetes.io/hostname', + }, + prometheus+: { + podAntiAffinity: 'soft', + podAntiAffinityTopologyKey: 'kubernetes.io/hostname', + }, + blackboxExporter+: { + podAntiAffinity: 'soft', + podAntiAffinityTopologyKey: 'kubernetes.io/hostname', + }, + }, + + local antiaffinity(key, values, namespace, type, topologyKey) = { + local podAffinityTerm = { + namespaces: [namespace], + topologyKey: topologyKey, + labelSelector: { + matchExpressions: [{ + key: key, + operator: 'In', + values: values, + }], + }, + }, + affinity: { - podAntiAffinity: { - preferredDuringSchedulingIgnoredDuringExecution: [ - { - weight: 100, - podAffinityTerm: { - namespaces: [namespace], - topologyKey: 'kubernetes.io/hostname', - labelSelector: { - matchExpressions: [{ - key: key, - operator: 'In', - values: values, - }], - }, - }, - }, + podAntiAffinity: if type == 'soft' then { + preferredDuringSchedulingIgnoredDuringExecution: [{ + weight: 100, + podAffinityTerm: podAffinityTerm, + }], + } else if type == 'hard' then { + requiredDuringSchedulingIgnoredDuringExecution: [ + podAffinityTerm, ], - }, + } else error 'podAntiAffinity must be either "soft" or "hard"', }, }, alertmanager+: { alertmanager+: { spec+: - antiaffinity('alertmanager', [$.values.alertmanager.name], $.values.common.namespace), + antiaffinity( + 'alertmanager', + [$.values.alertmanager.name], + $.values.common.namespace, + $.values.alertmanager.podAntiAffinity, + $.values.alertmanager.podAntiAffinityTopologyKey, + ), }, }, prometheus+: { prometheus+: { spec+: - antiaffinity('prometheus', [$.values.prometheus.name], $.values.common.namespace), + antiaffinity( + 'prometheus', + [$.values.prometheus.name], + $.values.common.namespace, + $.values.prometheus.podAntiAffinity, + $.values.prometheus.podAntiAffinityTopologyKey, + ), }, }, @@ -41,7 +72,13 @@ spec+: { template+: { spec+: - antiaffinity('app.kubernetes.io/name', ['blackbox-exporter'], $.values.common.namespace), + antiaffinity( + 'app.kubernetes.io/name', + ['blackbox-exporter'], + $.values.common.namespace, + $.values.blackboxExporter.podAntiAffinity, + $.values.blackboxExporter.podAntiAffinityTopologyKey, + ), }, }, },