From ca450f4e0ace98a35976be76db9a619ffe22d941 Mon Sep 17 00:00:00 2001 From: mamutmk5 <3045922+mamutmk5@users.noreply.github.com> Date: Mon, 4 Dec 2023 16:45:15 +0100 Subject: [PATCH] BC-5423 - Add POD affinity and anti-affinity (#6) To Improve the distribution of PODs to the least number of kubernetes worker nodes who is Required but also to secure that the PODs of one Deployment are distributed over the Fault Zones and Node pools the pod affinity and anti affinity are set. Affernety number calculation: Assign Number for an host = 0 - 20 X Fault Zone - 10 X Node Pool + 9 X Host Host = 1 if on the host runs an POD from the Schulcloud-Verbund on any namespace Host = 0 if on the host runs no POD from the Schulcloud-Verbund on any namespace Node Pool = 1 if on a host of this node pool runs an POD from the Deployment Node Pool = 0 if on no host of this node pool runs an POD from the Deployment Fault Pool = 1 if on a host of this fault zone runs an POD from the Deployment Fault Pool = 0 if on no host of this fault zone uns an POD from the Deployment --- .../templates/deployment.yml.j2 | 37 +++++++++++++++++++ 1 file changed, 37 insertions(+) diff --git a/ansible/roles/h5p-staticfiles-server-core/templates/deployment.yml.j2 b/ansible/roles/h5p-staticfiles-server-core/templates/deployment.yml.j2 index 3f3244b..5607ccb 100644 --- a/ansible/roles/h5p-staticfiles-server-core/templates/deployment.yml.j2 +++ b/ansible/roles/h5p-staticfiles-server-core/templates/deployment.yml.j2 @@ -78,3 +78,40 @@ spec: requests: cpu: {{ H5P_STATICFIILES_SERVER_CPU_REQUESTS|default("100m", true) }} memory: {{ H5P_STATICFIILES_SERVER_MEMORY_REQUESTS|default("128Mi", true) }} +{% if AFFINITY_ENABLE is defined and AFFINITY_ENABLE|bool %} + affinity: + podAffinity: + preferredDuringSchedulingIgnoredDuringExecution: + - weight: 9 + podAffinityTerm: + labelSelector: + matchExpressions: + - key: app.kubernetes.io/part-of + operator: In + values: + - schulcloud-verbund + topologyKey: "kubernetes.io/hostname" + namespaceSelector: {} + podAntiAffinity: + preferredDuringSchedulingIgnoredDuringExecution: +{% if ANIT_AFFINITY_NODEPOOL_ENABLE is defined and ANIT_AFFINITY_NODEPOOL_ENABLE|bool %} + - weight: 10 + podAffinityTerm: + labelSelector: + matchExpressions: + - key: app.kubernetes.io/name + operator: In + values: + - h5p-staticfiles-server + topologyKey: {{ ANIT_AFFINITY_NODEPOOL_TOPOLOGY_KEY }} +{% endif %} + - weight: 20 + podAffinityTerm: + labelSelector: + matchExpressions: + - key: app.kubernetes.io/name + operator: In + values: + - h5p-staticfiles-server + topologyKey: "topology.kubernetes.io/zone" +{% endif %}