Database Setup
NeMo Helix uses a SQL-based database to store entities such as workspaces, jobs, and other records.
By default, the NeMo Helix Helm chart deploys an embedded PostgreSQL instance (a StatefulSet using the official Postgres image) with simplified authentication to enable quick installation. This should not be used for production use, and an external PostgreSQL instance is recommended.
Preserve embedded PostgreSQL claim-template labels on upgrade
Starting with chart v0.7.3, postgresql.persistence.claimTemplateLabels lets
existing installations retain the labels on the embedded PostgreSQL
StatefulSet’s data volume claim template. Kubernetes treats this template as
immutable, so changing its labels during a Helm upgrade can cause the upgrade
to fail.
Before upgrading an older installation, inspect the existing StatefulSet:
Copy the complete label map from the data entry under
spec.volumeClaimTemplates[].metadata.labels into
postgresql.persistence.claimTemplateLabels in your Helm values. Copy the
claim-template labels, not the StatefulSet or Pod labels. Retain those exact
values on every future upgrade, including any old chart or application version
labels; do not replace them with the new release version. Supplied labels
override the default app.kubernetes.io/component: postgres label.
The default {} keeps the existing chart behavior for fresh installations.
This setting addresses claim-template labels only. Preserve your existing
release name, resource names, storage configuration, and secrets encryption key
and its Secret reference as well. External PostgreSQL installations are not
affected by this embedded-storage setting.
External PostgreSQL Database
To use an external PostgreSQL database in the Helm chart:
- Set
postgresql.enabled: falseand configureexternalDatabase. - Choose one of the following approaches to create a Kubernetes secret with your credentials:
Option 1: Use a full connection URI
Use a secret that holds the full database connection URI and reference it with uriSecret. This is the best option when you need to configure TLS/SSL or want a single secret for the connection string.
- Create a secret containing the connection URI (optionally with SSL parameters):
For SSL, include sslmode in the URI:
- Configure the chart to use that secret:
When uriSecret is set, the platform uses the URI from the secret and ignores host, port, user, database, and existingSecret.
Option 2: Configure individual connection details
Use individual host, port, user, and database values and a secret that contains only the password. The platform builds the connection from these values.
- Create a secret containing the password (the key must be
password, or setexistingSecretPasswordKeyto the key name in your secret):
Or define the secret in YAML:
- Configure the chart with connection details and the secret name: