From 875d3a110f4faca47764e40d67f21e729cc1fd1e Mon Sep 17 00:00:00 2001 From: InputObject2 <30133702+InputObject2@users.noreply.github.com> Date: Wed, 22 Nov 2023 00:57:25 -0500 Subject: [PATCH] feat(charts): Add topologySpreadConstraint to whole stack --- .../templates/jackett-resources.yml | 22 ++++++++++++++++ .../templates/plex-resources.yml | 24 +++++++++++++++++ .../templates/prowlarr-resources.yml | 26 ++++++++++++++++++- .../templates/radarr-resources.yml | 22 ++++++++++++++++ .../templates/sabnzbd-resources.yml | 24 +++++++++++++++++ .../templates/sonarr-resources.yml | 22 ++++++++++++++++ .../templates/transmission-resources.yml | 24 +++++++++++++++++ helm-charts/k8s-mediaserver/values.yaml | 1 + 8 files changed, 164 insertions(+), 1 deletion(-) diff --git a/helm-charts/k8s-mediaserver/templates/jackett-resources.yml b/helm-charts/k8s-mediaserver/templates/jackett-resources.yml index 5335917..d65564f 100644 --- a/helm-charts/k8s-mediaserver/templates/jackett-resources.yml +++ b/helm-charts/k8s-mediaserver/templates/jackett-resources.yml @@ -115,6 +115,28 @@ spec: nodeSelector: {{- toYaml . | nindent 8 }} {{- end }} + {{- if eq .Values.general.podDistribution "cluster" }} + affinity: + podAffinity: + preferredDuringSchedulingIgnoredDuringExecution: + - podAffinityTerm: + labelSelector: + matchExpressions: + - key: app.kubernetes.io/instance + operator: In + values: + - {{ .Release.Name }} + topologyKey: "kubernetes.io/hostname" + weight: 100 + {{- else if eq .Values.general.podDistribution "spread" }} + topologySpreadConstraints: + - maxSkew: 1 + topologyKey: "kubernetes.io/hostname" + whenUnsatisfiable: "ScheduleAnyway" + labelSelector: + matchLabels: + app.kubernetes.io/instance: {{ .Release.Name }} + {{- end }} --- ### SERVICES apiVersion: v1 diff --git a/helm-charts/k8s-mediaserver/templates/plex-resources.yml b/helm-charts/k8s-mediaserver/templates/plex-resources.yml index d922e44..c27813d 100644 --- a/helm-charts/k8s-mediaserver/templates/plex-resources.yml +++ b/helm-charts/k8s-mediaserver/templates/plex-resources.yml @@ -18,6 +18,8 @@ metadata: labels: {{- include "k8s-mediaserver.labels" . | nindent 4 }} spec: + strategy: + type: Recreate replicas: {{ .Values.plex.replicaCount }} selector: matchLabels: @@ -81,6 +83,28 @@ spec: nodeSelector: {{- toYaml . | nindent 8 }} {{- end }} + {{- if eq .Values.general.podDistribution "cluster" }} + affinity: + podAffinity: + preferredDuringSchedulingIgnoredDuringExecution: + - podAffinityTerm: + labelSelector: + matchExpressions: + - key: app.kubernetes.io/instance + operator: In + values: + - {{ .Release.Name }} + topologyKey: "kubernetes.io/hostname" + weight: 100 + {{- else if eq .Values.general.podDistribution "spread" }} + topologySpreadConstraints: + - maxSkew: 1 + topologyKey: "kubernetes.io/hostname" + whenUnsatisfiable: "ScheduleAnyway" + labelSelector: + matchLabels: + app.kubernetes.io/instance: {{ .Release.Name }} + {{- end }} --- ### SERVICE apiVersion: v1 diff --git a/helm-charts/k8s-mediaserver/templates/prowlarr-resources.yml b/helm-charts/k8s-mediaserver/templates/prowlarr-resources.yml index 2fbcbfb..63b292b 100644 --- a/helm-charts/k8s-mediaserver/templates/prowlarr-resources.yml +++ b/helm-charts/k8s-mediaserver/templates/prowlarr-resources.yml @@ -36,6 +36,8 @@ metadata: labels: {{- include "k8s-mediaserver.labels" . | nindent 4 }} spec: + strategy: + type: Recreate replicas: 1 selector: matchLabels: @@ -111,10 +113,32 @@ spec: configMap: defaultMode: 493 name: init-prowlarr-cm - {{- with merge .Values.prowlarr.container.nodeSelector .Values.general.nodeSelector }} + {{- with merge .Values.prowlarr.container.nodeSelector .Values.general.nodeSelector }} nodeSelector: {{- toYaml . | nindent 8 }} {{- end }} + {{- if eq .Values.general.podDistribution "cluster" }} + affinity: + podAffinity: + preferredDuringSchedulingIgnoredDuringExecution: + - podAffinityTerm: + labelSelector: + matchExpressions: + - key: app.kubernetes.io/instance + operator: In + values: + - {{ .Release.Name }} + topologyKey: "kubernetes.io/hostname" + weight: 100 + {{- else if eq .Values.general.podDistribution "spread" }} + topologySpreadConstraints: + - maxSkew: 1 + topologyKey: "kubernetes.io/hostname" + whenUnsatisfiable: "ScheduleAnyway" + labelSelector: + matchLabels: + app.kubernetes.io/instance: {{ .Release.Name }} + {{- end }} --- ### SERVICES apiVersion: v1 diff --git a/helm-charts/k8s-mediaserver/templates/radarr-resources.yml b/helm-charts/k8s-mediaserver/templates/radarr-resources.yml index b8e3e0b..503ce11 100644 --- a/helm-charts/k8s-mediaserver/templates/radarr-resources.yml +++ b/helm-charts/k8s-mediaserver/templates/radarr-resources.yml @@ -124,6 +124,28 @@ spec: nodeSelector: {{- toYaml . | nindent 8 }} {{- end }} + {{- if eq .Values.general.podDistribution "cluster" }} + affinity: + podAffinity: + preferredDuringSchedulingIgnoredDuringExecution: + - podAffinityTerm: + labelSelector: + matchExpressions: + - key: app.kubernetes.io/instance + operator: In + values: + - {{ .Release.Name }} + topologyKey: "kubernetes.io/hostname" + weight: 100 + {{- else if eq .Values.general.podDistribution "spread" }} + topologySpreadConstraints: + - maxSkew: 1 + topologyKey: "kubernetes.io/hostname" + whenUnsatisfiable: "ScheduleAnyway" + labelSelector: + matchLabels: + app.kubernetes.io/instance: {{ .Release.Name }} + {{- end }} --- ### SERVICES apiVersion: v1 diff --git a/helm-charts/k8s-mediaserver/templates/sabnzbd-resources.yml b/helm-charts/k8s-mediaserver/templates/sabnzbd-resources.yml index bfcfb46..e42c586 100644 --- a/helm-charts/k8s-mediaserver/templates/sabnzbd-resources.yml +++ b/helm-charts/k8s-mediaserver/templates/sabnzbd-resources.yml @@ -339,6 +339,8 @@ metadata: labels: {{- include "k8s-mediaserver.labels" . | nindent 4 }} spec: + strategy: + type: Recreate replicas: 1 selector: matchLabels: @@ -424,6 +426,28 @@ spec: nodeSelector: {{- toYaml . | nindent 8 }} {{- end }} + {{- if eq .Values.general.podDistribution "cluster" }} + affinity: + podAffinity: + preferredDuringSchedulingIgnoredDuringExecution: + - podAffinityTerm: + labelSelector: + matchExpressions: + - key: app.kubernetes.io/instance + operator: In + values: + - {{ .Release.Name }} + topologyKey: "kubernetes.io/hostname" + weight: 100 + {{- else if eq .Values.general.podDistribution "spread" }} + topologySpreadConstraints: + - maxSkew: 1 + topologyKey: "kubernetes.io/hostname" + whenUnsatisfiable: "ScheduleAnyway" + labelSelector: + matchLabels: + app.kubernetes.io/instance: {{ .Release.Name }} + {{- end }} --- ### SERVICES apiVersion: v1 diff --git a/helm-charts/k8s-mediaserver/templates/sonarr-resources.yml b/helm-charts/k8s-mediaserver/templates/sonarr-resources.yml index 4900753..6e99e11 100644 --- a/helm-charts/k8s-mediaserver/templates/sonarr-resources.yml +++ b/helm-charts/k8s-mediaserver/templates/sonarr-resources.yml @@ -123,6 +123,28 @@ spec: nodeSelector: {{- toYaml . | nindent 8 }} {{- end }} + {{- if eq .Values.general.podDistribution "cluster" }} + affinity: + podAffinity: + preferredDuringSchedulingIgnoredDuringExecution: + - podAffinityTerm: + labelSelector: + matchExpressions: + - key: app.kubernetes.io/instance + operator: In + values: + - {{ .Release.Name }} + topologyKey: "kubernetes.io/hostname" + weight: 100 + {{- else if eq .Values.general.podDistribution "spread" }} + topologySpreadConstraints: + - maxSkew: 1 + topologyKey: "kubernetes.io/hostname" + whenUnsatisfiable: "ScheduleAnyway" + labelSelector: + matchLabels: + app.kubernetes.io/instance: {{ .Release.Name }} + {{- end }} --- ### SERVICES apiVersion: v1 diff --git a/helm-charts/k8s-mediaserver/templates/transmission-resources.yml b/helm-charts/k8s-mediaserver/templates/transmission-resources.yml index 7d23ffa..6ba6dd9 100644 --- a/helm-charts/k8s-mediaserver/templates/transmission-resources.yml +++ b/helm-charts/k8s-mediaserver/templates/transmission-resources.yml @@ -103,6 +103,8 @@ metadata: labels: {{- include "k8s-mediaserver.labels" . | nindent 4 }} spec: + strategy: + type: Recreate replicas: 1 selector: matchLabels: @@ -191,6 +193,28 @@ spec: nodeSelector: {{- toYaml . | nindent 8 }} {{- end }} + {{- if eq .Values.general.podDistribution "cluster" }} + affinity: + podAffinity: + preferredDuringSchedulingIgnoredDuringExecution: + - podAffinityTerm: + labelSelector: + matchExpressions: + - key: app.kubernetes.io/instance + operator: In + values: + - {{ .Release.Name }} + topologyKey: "kubernetes.io/hostname" + weight: 100 + {{- else if eq .Values.general.podDistribution "spread" }} + topologySpreadConstraints: + - maxSkew: 1 + topologyKey: "kubernetes.io/hostname" + whenUnsatisfiable: "ScheduleAnyway" + labelSelector: + matchLabels: + app.kubernetes.io/instance: {{ .Release.Name }} + {{- end }} --- ### SERVICES apiVersion: v1 diff --git a/helm-charts/k8s-mediaserver/values.yaml b/helm-charts/k8s-mediaserver/values.yaml index ae6dac9..8f0eea4 100644 --- a/helm-charts/k8s-mediaserver/values.yaml +++ b/helm-charts/k8s-mediaserver/values.yaml @@ -6,6 +6,7 @@ general: ingress_host: k8s-mediaserver.k8s.test plex_ingress_host: k8s-plex.k8s.test image_tag: latest + podDistribution: cluster # can be "spread" or "cluster" #UID to run the process with puid: 1000 #GID to run the process with