From 77f7620eca0bf0c4b5f9d51cfa9b5913aa471fc5 Mon Sep 17 00:00:00 2001 From: jenkins Date: Tue, 21 Apr 2026 21:00:56 -0300 Subject: [PATCH] scheduling: de-prefer spillover nodes for non-longhorn services --- infrastructure/cert-manager/helmrelease.yaml | 90 +++++++++++++++++++ infrastructure/traefik/deployment.yaml | 32 +++++++ .../chat-ai-gateway-deployment.yaml | 30 +++++++ services/maintenance/ariadne-deployment.yaml | 30 +++++++ services/maintenance/soteria-deployment.yaml | 15 ++++ services/openldap/statefulset.yaml | 30 +++++++ services/outline/deployment.yaml | 28 ++++++ services/outline/redis-deployment.yaml | 28 ++++++ services/planka/deployment.yaml | 28 ++++++ 9 files changed, 311 insertions(+) diff --git a/infrastructure/cert-manager/helmrelease.yaml b/infrastructure/cert-manager/helmrelease.yaml index 1041dba1..fdcbca9a 100644 --- a/infrastructure/cert-manager/helmrelease.yaml +++ b/infrastructure/cert-manager/helmrelease.yaml @@ -33,6 +33,36 @@ spec: node-role.kubernetes.io/worker: "true" affinity: nodeAffinity: + preferredDuringSchedulingIgnoredDuringExecution: + - weight: 100 + preference: + matchExpressions: + - key: atlas.bstein.dev/spillover + operator: DoesNotExist + - weight: 95 + preference: + matchExpressions: + - key: kubernetes.io/hostname + operator: NotIn + values: + - titan-13 + - titan-15 + - titan-17 + - titan-19 + - weight: 90 + preference: + matchExpressions: + - key: hardware + operator: In + values: + - rpi5 + - weight: 50 + preference: + matchExpressions: + - key: hardware + operator: In + values: + - rpi4 requiredDuringSchedulingIgnoredDuringExecution: nodeSelectorTerms: - matchExpressions: @@ -46,6 +76,36 @@ spec: node-role.kubernetes.io/worker: "true" affinity: nodeAffinity: + preferredDuringSchedulingIgnoredDuringExecution: + - weight: 100 + preference: + matchExpressions: + - key: atlas.bstein.dev/spillover + operator: DoesNotExist + - weight: 95 + preference: + matchExpressions: + - key: kubernetes.io/hostname + operator: NotIn + values: + - titan-13 + - titan-15 + - titan-17 + - titan-19 + - weight: 90 + preference: + matchExpressions: + - key: hardware + operator: In + values: + - rpi5 + - weight: 50 + preference: + matchExpressions: + - key: hardware + operator: In + values: + - rpi4 requiredDuringSchedulingIgnoredDuringExecution: nodeSelectorTerms: - matchExpressions: @@ -59,6 +119,36 @@ spec: node-role.kubernetes.io/worker: "true" affinity: nodeAffinity: + preferredDuringSchedulingIgnoredDuringExecution: + - weight: 100 + preference: + matchExpressions: + - key: atlas.bstein.dev/spillover + operator: DoesNotExist + - weight: 95 + preference: + matchExpressions: + - key: kubernetes.io/hostname + operator: NotIn + values: + - titan-13 + - titan-15 + - titan-17 + - titan-19 + - weight: 90 + preference: + matchExpressions: + - key: hardware + operator: In + values: + - rpi5 + - weight: 50 + preference: + matchExpressions: + - key: hardware + operator: In + values: + - rpi4 requiredDuringSchedulingIgnoredDuringExecution: nodeSelectorTerms: - matchExpressions: diff --git a/infrastructure/traefik/deployment.yaml b/infrastructure/traefik/deployment.yaml index 32108f7d..26a45c21 100644 --- a/infrastructure/traefik/deployment.yaml +++ b/infrastructure/traefik/deployment.yaml @@ -70,6 +70,38 @@ items: dnsPolicy: ClusterFirst nodeSelector: node-role.kubernetes.io/worker: "true" + affinity: + nodeAffinity: + preferredDuringSchedulingIgnoredDuringExecution: + - weight: 100 + preference: + matchExpressions: + - key: atlas.bstein.dev/spillover + operator: DoesNotExist + - weight: 95 + preference: + matchExpressions: + - key: kubernetes.io/hostname + operator: NotIn + values: + - titan-13 + - titan-15 + - titan-17 + - titan-19 + - weight: 90 + preference: + matchExpressions: + - key: hardware + operator: In + values: + - rpi5 + - weight: 50 + preference: + matchExpressions: + - key: hardware + operator: In + values: + - rpi4 restartPolicy: Always schedulerName: default-scheduler serviceAccount: atlas-traefik-ingress-controller diff --git a/services/bstein-dev-home/chat-ai-gateway-deployment.yaml b/services/bstein-dev-home/chat-ai-gateway-deployment.yaml index e5724067..50d4be4f 100644 --- a/services/bstein-dev-home/chat-ai-gateway-deployment.yaml +++ b/services/bstein-dev-home/chat-ai-gateway-deployment.yaml @@ -38,6 +38,36 @@ spec: nodeSelector: kubernetes.io/arch: arm64 node-role.kubernetes.io/worker: "true" + affinity: + nodeAffinity: + preferredDuringSchedulingIgnoredDuringExecution: + - weight: 100 + preference: + matchExpressions: + - key: atlas.bstein.dev/spillover + operator: DoesNotExist + - weight: 95 + preference: + matchExpressions: + - key: kubernetes.io/hostname + operator: NotIn + values: + - titan-13 + - titan-15 + - titan-17 + - titan-19 + - weight: 90 + preference: + matchExpressions: + - key: hardware + operator: In + values: ["rpi5"] + - weight: 50 + preference: + matchExpressions: + - key: hardware + operator: In + values: ["rpi4"] containers: - name: gateway image: python:3.11-slim diff --git a/services/maintenance/ariadne-deployment.yaml b/services/maintenance/ariadne-deployment.yaml index 26801e2f..14e8ec44 100644 --- a/services/maintenance/ariadne-deployment.yaml +++ b/services/maintenance/ariadne-deployment.yaml @@ -106,6 +106,36 @@ spec: nodeSelector: kubernetes.io/arch: arm64 node-role.kubernetes.io/worker: "true" + affinity: + nodeAffinity: + preferredDuringSchedulingIgnoredDuringExecution: + - weight: 100 + preference: + matchExpressions: + - key: atlas.bstein.dev/spillover + operator: DoesNotExist + - weight: 95 + preference: + matchExpressions: + - key: kubernetes.io/hostname + operator: NotIn + values: + - titan-13 + - titan-15 + - titan-17 + - titan-19 + - weight: 90 + preference: + matchExpressions: + - key: hardware + operator: In + values: ["rpi5"] + - weight: 50 + preference: + matchExpressions: + - key: hardware + operator: In + values: ["rpi4"] containers: - name: ariadne image: registry.bstein.dev/bstein/ariadne:latest diff --git a/services/maintenance/soteria-deployment.yaml b/services/maintenance/soteria-deployment.yaml index 387439fc..57ad6564 100644 --- a/services/maintenance/soteria-deployment.yaml +++ b/services/maintenance/soteria-deployment.yaml @@ -32,6 +32,21 @@ spec: operator: NotIn values: ["titan-10"] preferredDuringSchedulingIgnoredDuringExecution: + - weight: 100 + preference: + matchExpressions: + - key: atlas.bstein.dev/spillover + operator: DoesNotExist + - weight: 95 + preference: + matchExpressions: + - key: kubernetes.io/hostname + operator: NotIn + values: + - titan-13 + - titan-15 + - titan-17 + - titan-19 - weight: 90 preference: matchExpressions: diff --git a/services/openldap/statefulset.yaml b/services/openldap/statefulset.yaml index 210d16eb..bbf6686f 100644 --- a/services/openldap/statefulset.yaml +++ b/services/openldap/statefulset.yaml @@ -29,6 +29,36 @@ spec: nodeSelector: kubernetes.io/arch: arm64 node-role.kubernetes.io/worker: "true" + affinity: + nodeAffinity: + preferredDuringSchedulingIgnoredDuringExecution: + - weight: 100 + preference: + matchExpressions: + - key: atlas.bstein.dev/spillover + operator: DoesNotExist + - weight: 95 + preference: + matchExpressions: + - key: kubernetes.io/hostname + operator: NotIn + values: + - titan-13 + - titan-15 + - titan-17 + - titan-19 + - weight: 90 + preference: + matchExpressions: + - key: hardware + operator: In + values: ["rpi5"] + - weight: 50 + preference: + matchExpressions: + - key: hardware + operator: In + values: ["rpi4"] serviceAccountName: sso-vault containers: - name: openldap diff --git a/services/outline/deployment.yaml b/services/outline/deployment.yaml index 80a81dd2..a7b469b9 100644 --- a/services/outline/deployment.yaml +++ b/services/outline/deployment.yaml @@ -54,6 +54,34 @@ spec: node-role.kubernetes.io/worker: "true" affinity: nodeAffinity: + preferredDuringSchedulingIgnoredDuringExecution: + - weight: 100 + preference: + matchExpressions: + - key: atlas.bstein.dev/spillover + operator: DoesNotExist + - weight: 95 + preference: + matchExpressions: + - key: kubernetes.io/hostname + operator: NotIn + values: + - titan-13 + - titan-15 + - titan-17 + - titan-19 + - weight: 90 + preference: + matchExpressions: + - key: hardware + operator: In + values: ["rpi5"] + - weight: 50 + preference: + matchExpressions: + - key: hardware + operator: In + values: ["rpi4"] requiredDuringSchedulingIgnoredDuringExecution: nodeSelectorTerms: - matchExpressions: diff --git a/services/outline/redis-deployment.yaml b/services/outline/redis-deployment.yaml index 5e081285..e8416737 100644 --- a/services/outline/redis-deployment.yaml +++ b/services/outline/redis-deployment.yaml @@ -20,6 +20,34 @@ spec: node-role.kubernetes.io/worker: "true" affinity: nodeAffinity: + preferredDuringSchedulingIgnoredDuringExecution: + - weight: 100 + preference: + matchExpressions: + - key: atlas.bstein.dev/spillover + operator: DoesNotExist + - weight: 95 + preference: + matchExpressions: + - key: kubernetes.io/hostname + operator: NotIn + values: + - titan-13 + - titan-15 + - titan-17 + - titan-19 + - weight: 90 + preference: + matchExpressions: + - key: hardware + operator: In + values: ["rpi5"] + - weight: 50 + preference: + matchExpressions: + - key: hardware + operator: In + values: ["rpi4"] requiredDuringSchedulingIgnoredDuringExecution: nodeSelectorTerms: - matchExpressions: diff --git a/services/planka/deployment.yaml b/services/planka/deployment.yaml index 97500394..84465b3a 100644 --- a/services/planka/deployment.yaml +++ b/services/planka/deployment.yaml @@ -57,6 +57,34 @@ spec: node-role.kubernetes.io/worker: "true" affinity: nodeAffinity: + preferredDuringSchedulingIgnoredDuringExecution: + - weight: 100 + preference: + matchExpressions: + - key: atlas.bstein.dev/spillover + operator: DoesNotExist + - weight: 95 + preference: + matchExpressions: + - key: kubernetes.io/hostname + operator: NotIn + values: + - titan-13 + - titan-15 + - titan-17 + - titan-19 + - weight: 90 + preference: + matchExpressions: + - key: hardware + operator: In + values: ["rpi5"] + - weight: 50 + preference: + matchExpressions: + - key: hardware + operator: In + values: ["rpi4"] requiredDuringSchedulingIgnoredDuringExecution: nodeSelectorTerms: - matchExpressions: