- Deployment model: On-premises
- Configuration reference: Qodo Helm chart
7.22.0.
Identify the required claims
The standard configuration uses an external PostgreSQL server and creates three claims. Choosing bundled PostgreSQL adds a fourth. These are the initial sizes and names for releaseqodo with one replica of each datastore:
PostgreSQL holds application databases, including identity and Context Engine
data, whether you use the bundled server or your external database service.
Gitway’s PVC is a Helm-managed resource. The datastore PVCs are created by
StatefulSet controllers from their
volumeClaimTemplates; they are not
standalone PVC documents in helm template output. Each StatefulSet Pod
gets its own claim. Increasing a datastore’s replica count is not a
supported shortcut to database or broker high availability.
The Platform API, portal, review workers, LiteGit, Context Engine services,
Qodo Agent Runtime, and Zitadel do not request additional data PVCs in this
configuration. Durable application state lives in the configured databases
and backing services. Secret and ConfigMap mounts are configuration inputs;
emptyDir volumes provide temporary files and do not replace durable storage.
For more information, see Kubernetes volume types.
If you use external PostgreSQL or the supported external Redis option,
manage that service’s storage and backups outside this chart. Initial claim
sizes are not production sizing recommendations. Size Gitway for the number
and size of repositories and their history, then validate I/O latency,
free-space headroom, and growth under representative reviews and indexing.
Prepare your cluster storage
Choose an existing StorageClass approved by your platform team. Confirm its CSI driver, capacity, filesystem permissions, availability zones, expansion, and reclaim policy support the services above.ReadWriteOnce (RWO), which permits read-write mounts
from one node and can permit several Pods on that node. It is not a
single-writer lock. Keep Gitway at one replica and preserve the chart’s
no-surge rollout strategy for its shared repository store. Changing RWO to
ReadWriteMany does not establish safe concurrent Gitway access. Review a
multi-replica storage design with Qodo before changing it. For more
information, see Persistent volumes.
For zonal storage, use the storage driver’s scheduling guidance. A class
with WaitForFirstConsumer can leave a PVC Pending until its consuming
Pod is scheduled. Do not require every claim to bind before creating those
Pods. For more information, see Storage classes.
Configure values before the first installation
Use component values: Gitway usesgitway.pvcs.repo-store, while bundled
Redis, RabbitMQ, and PostgreSQL use their component’s
statefulSets.volumeClaimTemplates. There is no shared global.storage
switch in this released chart.
Let the chart create claims
Save this asstorage-values.yaml. Replace each class placeholder with an
actual StorageClass name; different services can use different classes.
Keep the data template names and the Gitway repo-store key unchanged.
storage-values.yaml
volumeClaimTemplates. For more
information, see Helm values merging.
The Gitway
annotation in this example tells Helm to retain that claim when a Helm
operation would remove it. It is not present in the default chart. Review
the retention details below before adopting this policy.
Add storage for bundled PostgreSQL
Use this additional file only when you choose bundled PostgreSQL for a fresh installation. It enables the server and points applications to it. This is not a migration from an existing external database.bundled-postgres-storage-values.yaml
Use a customer-managed Gitway claim
Use this alternative when your storage team owns Gitway’s PVC lifecycle. Create the claim independently of the Qodo Helm release, using your storage controller or approved GitOps workflow. This example is a Kubernetes manifest, not Helm values:gitway-pvc.yaml
existing-gitway-claim-values.yaml
storage-values.yaml. The null removes the
chart-created claim definition during Helm merging. useShortName: false
keeps the customer’s claim name exact; otherwise the module can prefix it
with the component’s full name. Keep the existing /repo-store mount.
For more information about the null merge behavior, see
Remove a default values key.
Create the claim in the Qodo namespace before installation; a delayed-binding
class can still leave it Pending until Gitway is scheduled.
This example does not transfer ownership or copy data from an existing
Helm-managed claim. On an existing installation, removing its claim from
Helm’s desired resources can delete it unless retention was already in the
installed release. Arrange backup, data transfer, ownership, and rollback
before switching claims. Do not apply this alternative as a live conversion.
For a pre-provisioned volume, have your storage administrator prepare the PV
and bind it to the intended claim. Match capacity, access mode, class, and
zone. A classless claim needs spec.storageClassName: ""; omitting the field
can select the cluster default. Set spec.volumeName when explicitly binding
to a prepared PV. Keep cluster-scoped PV creation in your storage workflow.
For more information, see Persistent volume binding.
Render and deploy
Use theonprem-base.yaml at the root of your release bundle, beside the
qodo-onprem/ chart directory. If you pulled and unpacked the chart from the
registry, copy its matching base file to that location first:
-f existing-gitway-claim-values.yaml, omit the Gitway PVC --show-only
argument, and inspect charts/gitway/templates/deployment.yaml instead.
There should be no chart-created Gitway PVC, and its Deployment should
reference customer-gitway-repositories.
For bundled PostgreSQL, append
-f bundled-postgres-storage-values.yaml and
--show-only charts/postgres/templates/statefulset.yaml when rendering.
Then deploy through your normal Helm or GitOps procedure. For a fresh
external-database installation with chart-created claims:
storage-values.yaml. Follow the remaining installation prerequisites,
including database, identity, and credentials. For more information, see
Deploy Qodo using Helm.
Verify persistence
After the consumers are created, inspect the actual claims and mount events:customer-gitway-repositories in the describe command if you selected
the customer-managed claim. Include qodo-postgres when using the bundled
database. Confirm each expected claim is Bound and consumers are ready.
Verify the application path as well:
- Run a code review or indexing request against a representative repository.
- Confirm Gitway mounts the intended claim at
/repo-storeand completes repository access. - During planned maintenance, restart Gitway through your approved rollout procedure and confirm it remounts the same claim and repository files remain available.
- Run another review or indexing request and check completion, errors, disk usage, and latency.
- Rehearse datastore backup and restore separately; a Bound claim is not proof of a restorable database or broker.
Retain, resize, and recover
PVC retention and the backing PV’s reclaim policy are separate. A
Delete
reclaim policy can remove the backing volume when its PVC is deleted.
Neither a keep annotation nor a retained PVC protects against explicit
claim or namespace deletion, storage failure, or an unsuitable GitOps
pruning policy. Encrypt the repository store as sensitive source code and
set backup and restore ownership for every datastore. For more information,
see Helm resource retention
and StatefulSet volume retention.
Choose class and initial size before installation. Existing PVCs cannot be
shrunk or moved to a different StorageClass in place. Expansion requires a
class and driver that support it. Changing a StatefulSet’s claim-template
size in values is not enough: Kubernetes normally rejects edits to existing
volumeClaimTemplates, and existing claims do not resize from that edit.
Have your storage team plan growth of the actual claims and align future
templates through a reviewed maintenance procedure. Do not uninstall Qodo
or delete claims to force a size change. For more information, see
Expand persistent volumes.
The bundled values-emptydir.yaml profile is for disposable evaluation. It
removes persistent storage from Gitway and bundled datastores; their local
data is lost when the Pod is replaced. It is not a production fallback for
failed PVC provisioning. For more information, see
Clusters without persistent volumes.
Troubleshoot storage
Next steps
- Infrastructure requirements: Prepare capacity, database access, and cluster dependencies.
- Deploy Qodo using Helm: Apply the full installation and upgrade procedure.
- Autoscale Qodo with KEDA: Review workload and shared-storage constraints before enabling scaling.