From d67149ebc030c9c41b5e47fca84cc895da157f94 Mon Sep 17 00:00:00 2001 From: zhanghao Date: Wed, 28 Oct 2026 17:25:19 +0800 Subject: [PATCH] llm-slo-decision-gen: schedule onto tainted nodes; slo-api 0.2.1 The three Deployments (decision-gen, its unstable twin and slo-api) had no tolerations, nodeSelector or affinity, so on a cluster whose every node is tainted -- an NPU cluster with huawei.com/npu:NoSchedule -- none of them could schedule. Add the three as top-level values applied to every pod of the release; unset renders nothing, as before. Also default slo-api to 0.2.1, which syncs on a cluster with no LLMSLORequirement (0.2.0 crash-looped there). --- charts/llm-slo-decision-gen/Chart.yaml | 2 +- .../templates/decision-gen-deployment.yaml | 12 ++++++++++++ .../templates/decision-gen-unstable-deployment.yaml | 12 ++++++++++++ .../templates/slo-api-deployment.yaml | 12 ++++++++++++ charts/llm-slo-decision-gen/values.yaml | 10 +++++++++- 5 files changed, 46 insertions(+), 2 deletions(-) diff --git a/charts/llm-slo-decision-gen/Chart.yaml b/charts/llm-slo-decision-gen/Chart.yaml index 4e199c9..d27e7be 100644 --- a/charts/llm-slo-decision-gen/Chart.yaml +++ b/charts/llm-slo-decision-gen/Chart.yaml @@ -17,7 +17,7 @@ description: | separate chart (llmscaleoperator / llmscaleoperator-system). Deploy that one first if you need autoscaling, not just SLO storage. type: application -version: 0.3.5 +version: 0.3.6 # Matches decisionGen.image.tag (4pdosc/llm-scaler-decision-gen:0.7.0), the # first release that reads LLMSLORequirement from inference.modelsphere.dev. appVersion: "0.7.0" diff --git a/charts/llm-slo-decision-gen/templates/decision-gen-deployment.yaml b/charts/llm-slo-decision-gen/templates/decision-gen-deployment.yaml index eaca10e..9ab7bac 100644 --- a/charts/llm-slo-decision-gen/templates/decision-gen-deployment.yaml +++ b/charts/llm-slo-decision-gen/templates/decision-gen-deployment.yaml @@ -24,6 +24,18 @@ spec: app: decision-gen spec: serviceAccountName: decision-gen + {{- with .Values.nodeSelector }} + nodeSelector: + {{- toYaml . | nindent 8 }} + {{- end }} + {{- with .Values.affinity }} + affinity: + {{- toYaml . | nindent 8 }} + {{- end }} + {{- with .Values.tolerations }} + tolerations: + {{- toYaml . | nindent 8 }} + {{- end }} containers: - name: decision-gen image: "{{ .Values.decisionGen.image.repository }}:{{ .Values.decisionGen.image.tag }}" diff --git a/charts/llm-slo-decision-gen/templates/decision-gen-unstable-deployment.yaml b/charts/llm-slo-decision-gen/templates/decision-gen-unstable-deployment.yaml index 5041a24..c47233d 100644 --- a/charts/llm-slo-decision-gen/templates/decision-gen-unstable-deployment.yaml +++ b/charts/llm-slo-decision-gen/templates/decision-gen-unstable-deployment.yaml @@ -24,6 +24,18 @@ spec: app: decision-gen-unstable spec: serviceAccountName: decision-gen + {{- with .Values.nodeSelector }} + nodeSelector: + {{- toYaml . | nindent 8 }} + {{- end }} + {{- with .Values.affinity }} + affinity: + {{- toYaml . | nindent 8 }} + {{- end }} + {{- with .Values.tolerations }} + tolerations: + {{- toYaml . | nindent 8 }} + {{- end }} containers: - name: decision-gen # Same image as stable; unstable differs only by env (LOG_LEVEL=DEBUG). diff --git a/charts/llm-slo-decision-gen/templates/slo-api-deployment.yaml b/charts/llm-slo-decision-gen/templates/slo-api-deployment.yaml index 88024da..e78e460 100644 --- a/charts/llm-slo-decision-gen/templates/slo-api-deployment.yaml +++ b/charts/llm-slo-decision-gen/templates/slo-api-deployment.yaml @@ -24,6 +24,18 @@ spec: app: slo-api spec: serviceAccountName: slo-api + {{- with .Values.nodeSelector }} + nodeSelector: + {{- toYaml . | nindent 8 }} + {{- end }} + {{- with .Values.affinity }} + affinity: + {{- toYaml . | nindent 8 }} + {{- end }} + {{- with .Values.tolerations }} + tolerations: + {{- toYaml . | nindent 8 }} + {{- end }} containers: - name: slo-api image: "{{ .Values.sloApi.image.repository }}:{{ .Values.sloApi.image.tag }}" diff --git a/charts/llm-slo-decision-gen/values.yaml b/charts/llm-slo-decision-gen/values.yaml index 81cf8ab..df00566 100644 --- a/charts/llm-slo-decision-gen/values.yaml +++ b/charts/llm-slo-decision-gen/values.yaml @@ -4,6 +4,14 @@ # `helm upgrade --install -n `. Workloads use {{ .Release.Namespace }}. # Service DNS is http://decision-gen..svc:80 (and siblings). +# Scheduling for every pod of this release (decision-gen, its unstable twin and slo-api): they are +# small CPU-only services that land wherever the cluster lets them. Set tolerations when all nodes +# are tainted -- an NPU cluster can carry huawei.com/npu:NoSchedule on every node, and then nothing +# here schedules without one. +tolerations: [] +nodeSelector: {} +affinity: {} + # --------------------------------------------------------------------------- # decision-gen: emits per-service replica decisions on :8080/decisions. # The "unstable" variant (when enabled) is a second Deployment/Service so a @@ -82,7 +90,7 @@ sloApi: replicas: 1 image: repository: 4pdosc/llm-slo-api - tag: "0.2.0" + tag: "0.2.1" pullPolicy: IfNotPresent service: port: 80