From 84a740518b5de81e1528f1043b96858f228685c4 Mon Sep 17 00:00:00 2001 From: Claude Date: Wed, 10 Jun 2026 15:49:14 +0000 Subject: [PATCH] feat(worker): support per-replica replicaCount override Allow each dedicated worker replica configured under `worker.replicas` to specify its own `replicaCount`, falling back to the top-level `worker.replicaCount` when unset. This lets operators scale individual workers horizontally only for jobs that are safe to do so. https://claude.ai/code/session_01L76QgBN8t9M3gbJo5NdyZo --- charts/sourcegraph/CHANGELOG.md | 1 + charts/sourcegraph/templates/_worker.tpl | 3 +- .../templates/worker/worker.Deployment.yaml | 10 +++- charts/sourcegraph/tests/worker_test.yaml | 58 +++++++++++++++++++ charts/sourcegraph/values.yaml | 3 + 5 files changed, 71 insertions(+), 4 deletions(-) diff --git a/charts/sourcegraph/CHANGELOG.md b/charts/sourcegraph/CHANGELOG.md index 0f2b8e0e..d67e9f8c 100644 --- a/charts/sourcegraph/CHANGELOG.md +++ b/charts/sourcegraph/CHANGELOG.md @@ -8,6 +8,7 @@ Use `**BREAKING**:` to denote a breaking change ## Unreleased +- Added support for overriding `replicaCount` per dedicated `worker` replica via `worker.replicas[].replicaCount`, falling back to `worker.replicaCount` when unset - Added support for overriding the image repository on a per-service basis via `.image.repository`, falling back to the global `sourcegraph.image.repository` when unset - Added livenessProbe to zoekt-webserver in indexed-search to detect and restart hung pods - Fix Pod Disruption Budget for sourcegraph-frontend diff --git a/charts/sourcegraph/templates/_worker.tpl b/charts/sourcegraph/templates/_worker.tpl index 899bf03b..73429d30 100644 --- a/charts/sourcegraph/templates/_worker.tpl +++ b/charts/sourcegraph/templates/_worker.tpl @@ -4,6 +4,7 @@ {{- $allowlist := index . 2 -}} {{- $blocklist := index . 3 -}} {{- $resources := index . 4 -}} +{{- $replicaCount := index . 5 -}} {{- $name := $top.Values.worker.name -}} {{- if $suffix -}} @@ -24,7 +25,7 @@ metadata: name: {{ $name }} spec: minReadySeconds: 10 - replicas: {{ $top.Values.worker.replicaCount }} + replicas: {{ $replicaCount }} revisionHistoryLimit: {{ $top.Values.sourcegraph.revisionHistoryLimit }} selector: matchLabels: diff --git a/charts/sourcegraph/templates/worker/worker.Deployment.yaml b/charts/sourcegraph/templates/worker/worker.Deployment.yaml index 902f3396..4600a8fb 100644 --- a/charts/sourcegraph/templates/worker/worker.Deployment.yaml +++ b/charts/sourcegraph/templates/worker/worker.Deployment.yaml @@ -4,7 +4,7 @@ {{- end }} {{- if not .Values.worker.replicas }} - {{- include "sourcegraph.worker" (list . "" "" $globalBlocklist .Values.worker.resources ) | nindent 0 }} + {{- include "sourcegraph.worker" (list . "" "" $globalBlocklist .Values.worker.resources .Values.worker.replicaCount ) | nindent 0 }} {{- else }} {{- $dedicatedJobs := list }} {{- $dedicatedJobs = $dedicatedJobs | concat .Values.worker.blocklist }} @@ -13,7 +13,7 @@ {{- end }} {{- $primaryBlocklist := join "," ($dedicatedJobs | uniq | sortAlpha) }} --- - {{- include "sourcegraph.worker" (list . "" "all" $primaryBlocklist $.Values.worker.resources) | nindent 0 }} + {{- include "sourcegraph.worker" (list . "" "all" $primaryBlocklist $.Values.worker.resources $.Values.worker.replicaCount) | nindent 0 }} {{- range $idx, $item := .Values.worker.replicas }} --- @@ -23,6 +23,10 @@ {{- if $item.resources -}} {{- $resources = $item.resources -}} {{- end -}} - {{- include "sourcegraph.worker" (list $ $replicaName $allowlist "" $resources) | nindent 0 }} + {{- $replicaCount := $.Values.worker.replicaCount -}} + {{- if $item.replicaCount -}} + {{- $replicaCount = $item.replicaCount -}} + {{- end -}} + {{- include "sourcegraph.worker" (list $ $replicaName $allowlist "" $resources $replicaCount) | nindent 0 }} {{- end }} {{- end }} diff --git a/charts/sourcegraph/tests/worker_test.yaml b/charts/sourcegraph/tests/worker_test.yaml index 72d9db09..a366f48f 100644 --- a/charts/sourcegraph/tests/worker_test.yaml +++ b/charts/sourcegraph/tests/worker_test.yaml @@ -147,3 +147,61 @@ tests: requests: cpu: 2000m memory: 4Gi +- it: should default each replica deployment to worker.replicaCount when replicaCount is not overridden + template: worker/worker.Deployment.yaml + set: + worker: + replicaCount: 2 + replicas: + - jobs: ["job1", "job2"] + - jobs: ["job3", "job4"] + asserts: + - equal: + path: spec.replicas + value: 2 + documentIndex: 0 + - equal: + path: spec.replicas + value: 2 + documentIndex: 1 + - equal: + path: spec.replicas + value: 2 + documentIndex: 2 +- it: should override replicaCount per replica deployment + template: worker/worker.Deployment.yaml + set: + worker: + replicaCount: 1 + replicas: + - jobs: ["job1", "job2"] + replicaCount: 3 + - jobs: ["job3", "job4"] + asserts: + - containsDocument: + kind: Deployment + apiVersion: apps/v1 + name: worker + documentIndex: 0 + - equal: + path: spec.replicas + value: 1 + documentIndex: 0 + - containsDocument: + kind: Deployment + apiVersion: apps/v1 + name: worker-0 + documentIndex: 1 + - equal: + path: spec.replicas + value: 3 + documentIndex: 1 + - containsDocument: + kind: Deployment + apiVersion: apps/v1 + name: worker-1 + documentIndex: 2 + - equal: + path: spec.replicas + value: 1 + documentIndex: 2 diff --git a/charts/sourcegraph/values.yaml b/charts/sourcegraph/values.yaml index 9c5e6c0f..55cebae9 100644 --- a/charts/sourcegraph/values.yaml +++ b/charts/sourcegraph/values.yaml @@ -1314,6 +1314,9 @@ worker: replicas: [] # - jobs: [] + # # -- Number of pods for this dedicated worker replica. Defaults to worker.replicaCount. + # # Only increase this for replicas whose jobs are safe to scale horizontally. + # replicaCount: 1 # resources: # limits: # cpu: "2"