Skip to main content
  • Deployment model: On-premises
  • Configuration reference: Qodo Helm chart 7.21.0 and KEDA 2.17.2.
  • Live validation: KEDA 2.17.2 on GKE, using bounded CPU and RabbitMQ canaries.
Use your existing KEDA installation to adjust the number of Qodo Pods as load changes. The Qodo chart can create a ScaledObject for each enabled Deployment. Your cluster team installs and operates KEDA; the Qodo chart does not install it. The examples below cover CPU scaling for the Platform API and queue scaling for the Git event review worker. They are starting configurations, not capacity recommendations. Validate them against your pinned chart, workload, database connection budget, and model-provider quotas before production use.

Before you begin

Have your cluster administrator install a KEDA release compatible with your Kubernetes version before applying the Qodo scaling values. A standard installation includes the KEDA operator, metrics API server, admission webhooks with working TLS, and CRDs. Pin the operator chart through your approved Helm or GitOps process. The Qodo chart creates workload scaling resources; it does not install these cluster components. For more information, see Deploying KEDA. Also prepare your pinned Qodo chart, existing customer values, namespace, and Kubernetes context. Cluster-wide operator/CRD installation belongs to your platform team; namespaced workload configuration belongs to your Qodo deployment workflow. KEDA scales workloads. Your node provisioning and secrets operators have separate responsibilities. You can use an existing secrets operator to supply the credentials consumed by Qodo and KEDA. For more information, see Manage Qodo secrets with External Secrets Operator. Select your target explicitly. These examples use namespace qodo:
The commands use the standard Helm Deployment names and namespace keda. Substitute your actual names if your platform team customized them. Confirm the external-metrics API belongs to your intended KEDA installation, resolve any failed readiness check, and require yes for both permission checks before proceeding. For CPU scaling, also verify the separate resource-metrics API:
An installed CRD alone does not establish that the operator, webhook, or metrics APIs are working.

1. Choose a workload and metric

Keep minReplicaCount: 1 for the examples. Scaling a webhook receiver or API to zero requires a separate request activation design. CPU metrics alone also cannot reactivate a workload with no running Pods.

2. Configure CPU scaling

Merge this block into your customer values, or save it as keda-cpu-values.yaml if your installation uses separate override files:
keda-cpu-values.yaml
The target is the qodo-platform Deployment. The chart omits the Deployment’s spec.replicas when scaledObject.enabled is true, so Helm does not continually reset KEDA’s desired replica count. KEDA creates and manages an HPA. Do not attach an independent HPA to the same Deployment. Setting autoscaling.enabled: false keeps the chart’s separate autoscaling flag off; it does not remove an HPA managed elsewhere. CPU utilization is relative to CPU requests. Check the resources in your installed values before choosing a threshold. For more information, see KEDA CPU scaler.

3. Configure RabbitMQ queue scaling

Queue scaling is useful when workers spend time waiting for model responses and CPU does not reflect pending work. Use the RabbitMQ subscription queue consumed by the selected worker. The example below targets qodo-git, the Deployment behind pr-agent-litegit, and its subscription vcs-events.pr-agent-pro-__pass_through__. Confirm the queue exists in your broker and release before using it. This is not the queue of the separate pr-agent-agentic Deployment. Replace REPLACE_WITH_RABBITMQ_MANAGEMENT_URL with the management API base URL reachable from KEDA, including its scheme and port. Do not include credentials in the URL. For an in-cluster broker, use a namespace-qualified Service DNS name and include the trailing /. KEDA resolves names from its operator namespace, so a short name that works inside a Qodo Pod can fail here. For more information, see DNS for Services and Pods. Use HTTPS when your broker provides TLS, and configure the trusted CA in your KEDA installation if needed. The http protocol below selects the management API and also supports an HTTPS URL.
keda-rabbitmq-values.yaml
This uses the existing worker username and broker password. If your broker policy requires a dedicated monitoring identity, use a separately managed Secret and configure both username and password through TriggerAuthentication. Grant that identity the broker permissions required to read the selected queue through the management API. The management API includes unacknowledged messages in the queue metric when excludeUnacknowledged is false. This helps account for reviews still being processed. Preserve the chart’s shutdown grace period and test an in-progress review during scale down. For more information, see KEDA RabbitMQ Queue scaler.

4. Render and apply the configuration

Keep your installation’s existing values order. If your bundle provides one editable values file, merge the selected configuration into that file. If using override files, place them after the base and customer values. The following example uses the unpacked chart and separate overrides. Replace my-values.yaml with the customer values file used for your installation. Select only the ScaledObject templates when inspecting the output so the command does not print the chart’s generated credentials:
Confirm each scaleTargetRef matches its intended Deployment and each authenticationRef has a matching resource. Install or upgrade using your existing approved deployment procedure and the same values. For more information, see Deploy Qodo using Helm. For GitOps, let one controller own each ScaledObject and authentication resource. Inspect the rendered Deployments to confirm spec.replicas is absent and that no other application continually reapplies a fixed count. After applying, confirm the ScaledObject resources were created and Qodo Pods are running:

5. Verify scaling with real work

Check that the ScaledObject is ready and the generated HPA has a usable metric. Then:
1
Submit representative code review work through your normal Git integration.
2
Observe the queue or CPU metric and confirm replicas increase when the target is exceeded.
3
Confirm new Pods become ready and reviews complete with the expected findings.
4
Let the load fall and confirm replicas return toward the minimum after the stabilization window, including while a review is still running.
5
Check database connections, model-provider throttling, Pod scheduling, and review failures throughout the run.
A ready ScaledObject or increasing replica count does not establish that reviews complete correctly. Record the workload, limits, and outcome of this exercise before promoting the configuration.

Pause scaling during maintenance

Some Qodo upgrades require services to be stopped temporarily. Pause their KEDA autoscalers before the upgrade so they do not restart workloads the upgrade intentionally stops. Also pause any GitOps reconciliation that would remove your maintenance annotations. For each affected ScaledObject, for example qodo-git:
For Helm-managed objects, also retain the annotation in <component>.scaledObject.annotations for the maintenance upgrade. For GitOps, make the pause part of your desired configuration. Verify the KEDA HPA no longer controls the target before the upgrade starts. Do not use paused-replicas to override the upgrade’s replica decisions. After the upgrade completes successfully and the target Deployments specify the new image and configuration, remove the maintenance annotation from the owning configuration and the live object. Inspect the Deployment’s image and configuration first: resume only after confirming the target configuration is applied. An autoscaled Deployment may remain at zero after the upgrade.
Confirm KEDA recreates its HPA, restores at least the configured minimum, and reports ready. Wait for the target Pods to roll out, then repeat the real review checks before ending maintenance. If the upgrade fails, keep scaling paused and follow the release’s recovery procedure. For more information, see KEDA pausing autoscaling.

Validation scope

Live development-cluster tests verified CPU and RabbitMQ scale-out and scale-in, broker authentication through a namespaced Secret, and HPA removal and recreation during pause/resume. An initial broker DNS failure was reproduced and corrected with namespace-qualified Service DNS. These tests used isolated canaries with at most two replicas and a shortened scale-down stabilization window. They did not scale the shared Qodo Deployments or run a production review under load. Verify your chosen limits, shutdown grace period, and end-to-end review behavior before production use.

Troubleshoot scaling