Skip to content

Commit

Permalink
BC-5423 - Add POD affinity and anti-affinity (#151)
Browse files Browse the repository at this point in the history
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
  • Loading branch information
mamutmk5 authored Dec 4, 2023
1 parent 0806a86 commit 3c94577
Showing 1 changed file with 37 additions and 0 deletions.
37 changes: 37 additions & 0 deletions ansible/roles/schulcloud-calendar-core/templates/deployment.yml.j2
Original file line number Diff line number Diff line change
Expand Up @@ -81,3 +81,40 @@ spec:
requests:
cpu: {{ CALENDAR_CPU_REQUESTS|default("100m", true) }}
memory: {{ CALENDAR_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:
- calendar
topologyKey: {{ ANIT_AFFINITY_NODEPOOL_TOPOLOGY_KEY }}
{% endif %}
- weight: 20
podAffinityTerm:
labelSelector:
matchExpressions:
- key: app.kubernetes.io/name
operator: In
values:
- calendar
topologyKey: "topology.kubernetes.io/zone"
{% endif %}

0 comments on commit 3c94577

Please sign in to comment.