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 0000000000000000000000000000000000000000..6956e3db64ec4ff6926b985cd526a9ab7a601766 --- /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 63df0506396f27b8a651ddf1a7d6444a78ae8a7b..452a89e33a6d57065ec83e77985569ec04ab1830 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',