diff --git a/charts/gha-runner-scale-set-controller-experimental/templates/_controller_template.tpl b/charts/gha-runner-scale-set-controller-experimental/templates/_controller_template.tpl index 44a17b3c..18cd6ccf 100644 --- a/charts/gha-runner-scale-set-controller-experimental/templates/_controller_template.tpl +++ b/charts/gha-runner-scale-set-controller-experimental/templates/_controller_template.tpl @@ -73,6 +73,11 @@ args: {{- with .Values.controller.manager.config.k8sClientRateLimiterBurst }} - "--k8s-client-rate-limiter-burst={{ . }}" {{- end }} +{{- with .Values.controller.manager.config.rateLimiter }} +{{- with .name }} + - "--workqueue-rate-limiter={{ . }}" +{{- end }} +{{- end }} {{- with .Values.controller.manager.config.healthProbeBindAddress }} - "--health-probe-bind-address={{ . }}" {{- end }} diff --git a/charts/gha-runner-scale-set-controller-experimental/tests/controller_deployment_rate_limiter_test.yaml b/charts/gha-runner-scale-set-controller-experimental/tests/controller_deployment_rate_limiter_test.yaml new file mode 100644 index 00000000..30039ed3 --- /dev/null +++ b/charts/gha-runner-scale-set-controller-experimental/tests/controller_deployment_rate_limiter_test.yaml @@ -0,0 +1,66 @@ +suite: "Controller Deployment rate limiter" +templates: + - deployment.yaml +tests: + - it: should omit workqueue-rate-limiter flag by default + release: + name: "test-arc" + namespace: "test-ns" + asserts: + - notContains: + path: spec.template.spec.containers[0].args + content: "--workqueue-rate-limiter=bucket_rate_limiter" + - notContains: + path: spec.template.spec.containers[0].args + content: "--workqueue-rate-limiter=typed_rate_limiter" + + - it: should include workqueue-rate-limiter flag when bucket_rate_limiter is configured + set: + controller: + manager: + config: + rateLimiter: + name: "bucket_rate_limiter" + release: + name: "test-arc" + namespace: "test-ns" + asserts: + - contains: + path: spec.template.spec.containers[0].args + content: "--workqueue-rate-limiter=bucket_rate_limiter" + + - it: should include workqueue-rate-limiter flag when typed_rate_limiter is configured + set: + controller: + manager: + config: + rateLimiter: + name: "typed_rate_limiter" + release: + name: "test-arc" + namespace: "test-ns" + asserts: + - contains: + path: spec.template.spec.containers[0].args + content: "--workqueue-rate-limiter=typed_rate_limiter" + + - it: should render both config and extraArgs in deterministic order + set: + controller: + manager: + config: + rateLimiter: + name: "bucket_rate_limiter" + container: + extraArgs: + - "--workqueue-rate-limiter=typed_rate_limiter" + release: + name: "test-arc" + namespace: "test-ns" + asserts: + - contains: + path: spec.template.spec.containers[0].args + content: "--workqueue-rate-limiter=bucket_rate_limiter" + - contains: + path: spec.template.spec.containers[0].args + content: "--workqueue-rate-limiter=typed_rate_limiter" diff --git a/charts/gha-runner-scale-set-controller-experimental/values.yaml b/charts/gha-runner-scale-set-controller-experimental/values.yaml index 75bcc314..a06d86c6 100644 --- a/charts/gha-runner-scale-set-controller-experimental/values.yaml +++ b/charts/gha-runner-scale-set-controller-experimental/values.yaml @@ -44,6 +44,13 @@ controller: k8sClientRateLimiterQPS: null k8sClientRateLimiterBurst: null + ## Workqueue rate limiter configuration. + ## By default, controller-runtime uses a combined rate limiter with both a per-item + ## exponential backoff and an overall token bucket (10 QPS, 100 bucket size). + ## Valid names: "bucket_rate_limiter" (default), "typed_rate_limiter" (per-item only, no global token bucket). + # rateLimiter: + # name: "bucket_rate_limiter" + # The address the health probe endpoint binds to. Disabled if empty/null. # When set, liveness and readiness probes are added to the controller pod. # healthProbeBindAddress: ":8081"