- A Kubernetes cluster
- A PostgreSQL database
- Any of the following Large Language Models providers:
- Amazon Bedrock
- Azure OpenAI
- Google GenAI
- OpenAI or anything OpenAI API-compatible
- Ollama or anything Ollama API-compatible
- One of the following vector databases:
- Azure AI Search
- PostgreSQL with PGVector
helm install codecentric-c4-genai-suite oci://ghcr.io/codecentric/c4-genai-suite/charts/c4-genai-suite -f values.yamlingress:
enabled: true
host: c4.example.com
tls: true
backend:
auth:
enablePassword: true
initialAdminUsername: my-admin-username
initialAdminPassword: my-admin-password
postgresql:
connectionString: postgresql://my-username:my-password@my-host:my-port/my-db
sessionSecret: my-session-secret
reis:
enabled: true
embeddings:
type: azure-openai
azureOpenAi:
apiKey: my-openai-api-key
endpoint: https://example-sweden-dev.openai.azure.com/
deploymentName: text-embedding-3-large
apiVersion: 2023-07-01-preview
modelName: text-embedding-3-large
vectorDatabase:
type: azure-ai-search
azureAiSearch:
apiKey: my-search-api-key
endpoint: https://example.search.windows.net
indexName: cc-prod-rei-server| Name | Description | Value |
|---|---|---|
fullnameOverride |
Overrides the name of the resources | "" |
nameOverride |
Overrides the name of the chart | "" |
networkPolicy.enabled |
Specifies whether NetworkPolicies should be created | false |
grafanaDashboards.enabled |
Specifies whether a ConfigMap containing Grafana dashboards should be created | false |
| Name | Description | Value |
|---|---|---|
ingress.enabled |
Specifies whether an Ingress resource should be created. | false |
ingress.ingressClassName |
The name of the ingressClass. One of: public-traefik, internal-traefik | "" |
ingress.host |
The host for ingress | "" |
ingress.annotations |
Map of annotations to add for ingress | {} |
ingress.tls |
Specifies if a tls section should be created. |
false |
| Name | Description | Value |
|---|---|---|
backend.enabled |
Specifies whether c4 should be deployed | true |
backend.baseUrl |
Base URL should match https://{{ingress.host}}. Required for OpenID Connect or assistants using Dall-E image generation. |
"" |
backend.ssl.rootCertificateConfigMapName |
Name of the ConfigMap containing the root certificate for the external services. | "" |
backend.ssl.rootCertificateConfigMapKey |
Key in the ConfigMap that holds the root certificate for the external services. | ca.crt |
backend.auth.enablePassword |
Specifies if the built-in username & password auth is used | false |
backend.auth.initialAdminUsername |
The initial admin user Username saved in DB | "" |
backend.auth.initialAdminPassword |
The initial admin user Password hashed and saved in DB | "" |
backend.auth.existingAdminSecret |
The name of the existing k8s secret. c4.auth.initialAdminUsername and c4.auth.initialAdminPassword will be ignored. The keys must be adminUsername and adminPassword. |
"" |
backend.auth.authorizationUrl |
The OpenID Connect authorizationUrl | "" |
backend.auth.tokenUrl |
The OpenID Connect tokenUrl | "" |
backend.auth.userInfoUrl |
The OpenID Connect userInfoUrl | "" |
backend.auth.clientId |
The OpenID Connect clientId | "" |
backend.auth.clientSecret |
The OpenID Connect clientSecret | "" |
backend.auth.existingClientId |
The name of the existing k8s secret. c4.auth.clientId will be ignored. The key must be clientId |
"" |
backend.auth.existingClientSecret |
The name of the existing k8s secret. c4.auth.clientSecret will be ignored. The key must be clientSecret |
"" |
backend.auth.microsoftClientId |
The Microsoft Entra ID clientId | "" |
backend.auth.microsoftClientSecret |
The Microsoft Entra ID clientSecret | "" |
backend.auth.microsoftTenant |
The Microsoft Entra ID tenant | "" |
backend.auth.existingMicrosoftClientId |
The name of the existing k8s secret. c4.auth.microsoftClientId will be ignored. The key must be microsoftClientId |
"" |
backend.auth.existingMicrosoftClientSecret |
The name of the existing k8s secret. c4.auth.microsoftClientSecret will be ignored. The key must be microsoftClientSecret |
"" |
backend.auth.existingMicrosoftTenant |
The name of the existing k8s secret. c4.auth.microsoftTenant will be ignored. The key must be microsoftTenant |
"" |
backend.auth.acceptUserGroupsFromAuthProvider |
Sets if user groups from the identity provider are saved in the c4 user. (All groups manually selected in c4 will be overwritten!) | false |
backend.auth.userGroupsPropertyName |
The property in the auth token from where the user groups are read. Default is "groups". | "" |
backend.auth.loginAllowedGroups |
Defines which user groups are allowed to log in, separated by commas. A user must have at least one of the groups to log in. The default defines no groups which allows any group or none for login. | "" |
backend.postgresql.connectionString |
Connection string of an external Postgres. Will be ignored when postgresql.enabled is true. |
"" |
backend.postgresql.existingConnectionStringSecret |
The name of the existing k8s secret. postgresql.connectionString will be ignored. The key must be connectionString Will be ignored when postgresql.enabled is true. |
"" |
backend.postgresql.ssl.rootCertificateConfigMapName |
Name of the ConfigMap containing the root certificate for the external PostgreSQL database. | "" |
backend.postgresql.ssl.rootCertificateConfigMapKey |
Key in the ConfigMap that holds the root certificate for the external PostgreSQL database. Make sure that the connection string contains sslmode=verify-ca&sslrootcert=/etc/ssl/certs/<rootCertificateConfigMapKey>. |
ca.crt |
backend.postgresql.ssl.clientCertificateSecretName |
Name of the Kubernetes Secret containing the client certificate for the external PostgreSQL database. | "" |
backend.postgresql.ssl.clientCertificateSecretKey |
Key in the Secret that holds the client certificate for the external PostgreSQL database. Make sure that the connection string contains sslcert=/etc/ssl/certs/<clientCertificateSecretKey>. |
client.crt |
backend.postgresql.ssl.clientKeySecretKey |
Key in the Secret that holds the client key for the external PostgreSQL database. Make sure that the connection string contains sslkey=/etc/ssl/certs/<clientKeySecretKey>. |
client.key |
backend.image.repository |
The image repository including host, port, repo | ghcr.io/codecentric/c4-genai-suite/backend |
backend.image.tag |
The image tag | "" |
backend.extraEnvVars |
An extra list of environment variables to add to the deployment. | [] |
backend.extraVolumes |
An extra list of volumes to add to the deployment. | [] |
backend.extraVolumeMounts |
An extra list of volume mounts to add to the deployment. | [] |
backend.replicaCount |
The number of replicas to create. | 1 |
backend.updateStrategy.type |
c4 deployment strategy type. | RollingUpdate |
backend.resources |
Set container requests and limits for different resources like CPU or memory | {} |
backend.sessionSecret |
The secret used to sign the session cookie | "" |
backend.existingSessionSecret |
The name of the existing k8s secret. sessionSecret will be ignored. The key must be sessionSecret |
"" |
backend.metrics.enabled |
Specifies whether a service for c4 metrics should be created | false |
backend.metrics.port |
The c4 metrics port | 9100 |
backend.metrics.prometheusRule.enabled |
Specifies whether a PrometheusRule for c4 should be created | false |
backend.metrics.prometheusRule.ruleGroupLabels |
Labels to add to the c4 rule group | {} |
backend.metrics.serviceMonitor.enabled |
Specifies whether a c4 ServiceMonitor should be created | false |
backend.metrics.serviceMonitor.interval |
Interval at which Prometheus scrapes the metrics from the target. If empty, Prometheus uses the global scrape interval. | "" |
backend.metrics.serviceMonitor.scrapeTimeout |
Timeout after which Prometheus considers the scrape to be failed. If empty, Prometheus uses the global scrape timeout. | "" |
backend.metrics.serviceMonitor.labels |
Map of labels to add to the c4 ServiceMonitor | {} |
backend.service.type |
The service type to use, one of: ClusterIP, NodePort, LoadBalancer | "" |
backend.labels |
Map of labels to add to the c4 deployment | {} |
backend.annotations |
Map of annotations to add to the c4 deployment | {} |
backend.podLabels |
Map of labels to add to the c4 pods | {} |
backend.podAnnotations |
Map of annotations to add to the c4 pods | {} |
backend.podSecurityContext |
Configure the Security Context for the Pod | {} |
backend.containerSecurityContext |
Configure the Security Context for the Container | {} |
| Name | Description | Value |
|---|---|---|
frontend.enabled |
Specifies whether the frontend should be deployed | true |
frontend.image.repository |
The image repository including host, port, repo | ghcr.io/codecentric/c4-genai-suite/frontend |
frontend.image.tag |
The image tag | "" |
frontend.replicaCount |
The number of replicas to create | 1 |
frontend.updateStrategy.type |
Frontend deployment strategy type | RollingUpdate |
frontend.resources |
Set container requests and limits for different resources like CPU or memory | {} |
frontend.extraEnvVars |
An extra list of environment variables to add to the deployment | [] |
frontend.metrics.enabled |
Specifies whether a service for REIS metrics should be created. | false |
frontend.metrics.serviceMonitor.enabled |
Specifies whether a ServiceMonitor should be created for the frontend. | false |
frontend.metrics.serviceMonitor.interval |
Interval at which Prometheus scrapes the metrics from the target. If empty, Prometheus uses the global scrape interval. | "" |
frontend.metrics.serviceMonitor.scrapeTimeout |
Timeout after which Prometheus considers the scrape to be failed. If empty, Prometheus uses the global scrape timeout. | "" |
frontend.metrics.serviceMonitor.labels |
Map of labels to add to the Frontend ServiceMonitor. | {} |
frontend.extraVolumes |
An extra list of volumes to add to the deployment | [] |
frontend.extraVolumeMounts |
An extra list of volume mounts to add to the deployment | [] |
frontend.labels |
Map of labels to add to the frontend deployment | {} |
frontend.annotations |
Map of annotations to add to the frontend deployment | {} |
frontend.podLabels |
Map of labels to add to the frontend pods | {} |
frontend.podAnnotations |
Map of annotations to add to the frontend pods | {} |
frontend.podSecurityContext |
Configure the Security Context for the Pod | {} |
frontend.containerSecurityContext |
Configure the Security Context for the Container | {} |
| Name | Description | Value |
|---|---|---|
reis.enabled |
Specifies whether the REIS microservice should be deployed | false |
reis.replicaCount |
The number of replicas to create. | 1 |
reis.updateStrategy.type |
REIS deployment strategy type. | RollingUpdate |
reis.host |
The REIS container host to bind to | 0.0.0.0 |
reis.image.repository |
The image repository including host, port, repo | ghcr.io/codecentric/c4-genai-suite/reis |
reis.image.tag |
The image tag | "" |
reis.metrics.enabled |
Specifies whether a service for REIS metrics should be created | false |
reis.metrics.port |
The REIS metrics port | 9200 |
reis.metrics.prometheusRule.enabled |
Specifies whether a PrometheusRule for REIS should be created | false |
reis.metrics.prometheusRule.ruleGroupLabels |
Labels to add to the c4 rule group | {} |
reis.metrics.serviceMonitor.enabled |
Specifies whether a REIS ServiceMonitor should be created | false |
reis.metrics.serviceMonitor.interval |
Interval at which Prometheus scrapes the metrics from the target. If empty, Prometheus uses the global scrape interval. | "" |
reis.metrics.serviceMonitor.scrapeTimeout |
Timeout after which Prometheus considers the scrape to be failed. If empty, Prometheus uses the global scrape timeout. | "" |
reis.metrics.serviceMonitor.labels |
Map of labels to add to the REIS ServiceMonitor | {} |
reis.embeddings.type |
The embedding api type to use, one of: azure-openai, openai, bedrock, nvidia, ollama | "" |
reis.embeddings.azureOpenAi.apiKey |
API key for Azure OpenAI. | "" |
reis.embeddings.azureOpenAi.existingApiKeySecret |
Name of the Kubernetes Secret containing the Azure OpenAI API Key. The key must be azureOpenAiApiKey. |
"" |
reis.embeddings.azureOpenAi.endpoint |
The Azure OpenAI endpoint. | "" |
reis.embeddings.azureOpenAi.deploymentName |
The Azure OpenAI deployment name. | "" |
reis.embeddings.azureOpenAi.apiVersion |
The Azure OpenAI API version. | "" |
reis.embeddings.azureOpenAi.modelName |
The Azure OpenAI model name. | "" |
reis.embeddings.openAi.apiKey |
API key for OpenAI. | "" |
reis.embeddings.openAi.existingApiKeySecret |
Name of the Kubernetes Secret containing the OpenAI API Key. The key must be openAiApiKey. |
"" |
reis.embeddings.openAi.endpoint |
The OpenAI endpoint. | "" |
reis.embeddings.openAi.deploymentName |
The OpenAI deployment name. | "" |
reis.embeddings.openAi.modelName |
The OpenAI model name. | "" |
reis.embeddings.openAiCompatible.apiKey |
API key for OpenAI Compatible. | "" |
reis.embeddings.openAiCompatible.existingApiKeySecret |
Name of the Kubernetes Secret containing the OpenAI Compatible API Key. The key must be openAiCompatibleApiKey. |
"" |
reis.embeddings.openAiCompatible.endpoint |
The OpenAI Compatible endpoint. | "" |
reis.embeddings.openAiCompatible.modelName |
The OpenAI Compatible model name. | "" |
reis.embeddings.bedrock.modelId |
The model ID. | "" |
reis.embeddings.bedrock.regionName |
The AWS region. | "" |
reis.embeddings.bedrock.accessKeyId |
The AWS access key Id. | "" |
reis.embeddings.bedrock.secretAccessKey |
The AWS secret access key. | "" |
reis.embeddings.bedrock.existingAccessKeySecret |
Name of the Kubernetes Secret containing the Bedrock Secret Access Key. The secret must have the keys bedrockAccessKeyId and bedrockSecretAccessKey. |
"" |
reis.embeddings.nvidia.baseUrl |
The API URL for NVIDIA. | "" |
reis.embeddings.nvidia.apiKey |
API key for NVIDIA. | "" |
reis.embeddings.nvidia.existingApiKeySecret |
Name of the Kubernetes Secret containing the NVIDIA API Key. The key must be nvidiaApiKey. |
"" |
reis.embeddings.nvidia.model |
The model for NVIDIA. | "" |
reis.embeddings.ollama.endpoint |
The endpoint for Ollama. | "" |
reis.embeddings.ollama.modelName |
The model name for Ollama. | "" |
reis.speechToText.type |
The speech-to-text api type to use, one of: azure-openai-whisper. Leave empty to disable. | "" |
reis.speechToText.azureOpenAiWhisper.apiKey |
API key for Azure OpenAI Whisper. | "" |
reis.speechToText.azureOpenAiWhisper.existingApiKeySecret |
Name of the Kubernetes Secret containing the Azure OpenAI Whisper API Key. The key must be azureOpenAiWhisperApiKey. |
"" |
reis.speechToText.azureOpenAiWhisper.endpoint |
The Azure OpenAI Whisper endpoint. | "" |
reis.speechToText.azureOpenAiWhisper.deploymentName |
The Azure OpenAI Whisper deployment name. | "" |
reis.speechToText.azureOpenAiWhisper.apiVersion |
The Azure OpenAI Whisper API version. | "" |
reis.extraEnvVars |
An extra list of environment variables to add to the deployment. | [] |
reis.extraVolumes |
An extra list of volumes to add to the deployment. | [] |
reis.extraVolumeMounts |
An extra list of volume mounts to add to the deployment. | [] |
reis.resources |
Set container requests and limits for different resources like CPU or memory | {} |
reis.vectorDatabase.type |
The search api type to use, one of: azure-ai-search, pgvector | "" |
reis.vectorDatabase.azureAiSearch.apiKey |
API Key for Azure AI Search. | "" |
reis.vectorDatabase.azureAiSearch.existingApiKeySecret |
Name of the Kubernetes Secret containing the Azure AI Search API Key. The key must be azureAiSearchApiKey. |
"" |
reis.vectorDatabase.azureAiSearch.endpoint |
The Azure AI Search endpoint. | "" |
reis.vectorDatabase.azureAiSearch.indexName |
The Azure AI Search index. | "" |
reis.vectorDatabase.pgVector.connectionString |
PostgreSQL connection string for a PGVector database. Must use protocol postgresql+psycopg://. |
"" |
reis.vectorDatabase.pgVector.existingConnectionStringSecret |
The name of an existing k8s secret. reis.search.connectionString will be ignored. The key must be connectionString. |
"" |
reis.vectorDatabase.pgVector.indexName |
Name of the collection used for the PGVector store (this is a logical distinction in the same table). | "" |
reis.fileStore.type |
The file store to use, one of: s3 | "" |
reis.fileStore.s3.endpointUrl |
The s3 compatible endpoint. | "" |
reis.fileStore.s3.bucketName |
The s3 compatible bucket name. | "" |
reis.fileStore.s3.regionName |
The AWS region. | "" |
reis.fileStore.s3.accessKeyId |
The s3 compatible access key Id. | "" |
reis.fileStore.s3.secretAccessKey |
The s3 compatible secret access key. | "" |
reis.fileStore.s3.existingAccessKeySecret |
Name of the Kubernetes Secret containing the s3 compatible secret access key. The secret must have the keys s3AccessKeyId and s3SecretAccessKey. |
"" |
reis.workers |
Number of concurrent threads to process the uploaded files | 2 |
reis.batchSize |
Number of chunks uploaded to the vectorstore at once | 100 |
reis.tmpFilesRoot |
The root directory for temporary files | "" |
reis.labels |
Map of labels to add to the REI-S deployment | {} |
reis.annotations |
Map of annotations to add to the REI-S deployment | {} |
reis.podLabels |
Map of labels to add to the REI-S pods | {} |
reis.podAnnotations |
Map of annotations to add to the REI-S pods | {} |
reis.podSecurityContext |
Configure the Security Context for the Pod | {} |
reis.containerSecurityContext |
Configure the Security Context for the Container | {} |
- secrets section in
values.yamlwas removed - registry section was added and is required to pull images
c4-specific values have been moved under the c4 key. The following values have been moved:
replicaCount->c4.replicaCountport->c4.portauth.*->c4.auth.*externalPostgresql.*->c4.externalPostgresql.*image.*->c4.image.*ingress.*->c4.ingress.*sessionSecret->c4.sessionSecretexistingSessionSecret->c4.existingSessionSecretservice.type->c4.service.typetlsOption.enabled->c4.tlsOptions.enabled
The following default values have been changed:
postgresql.enablednow defaults tofalserag.enablednow defaults tofalse
The method for generating the chart's full name has been revised. This change might result in the recreation of
resources under different names, but no data will be lost. If you want to prevent resources from being renamed, set the
fullnameOverride value to match the release name. You can obtain the release name by using the helm list command,
where it is found in the name column.
Additionally, all labels and selectors have been updated to support multiple deployments within the same namespace. Since deployment selectors are immutable, deployments and the ingress have been renamed in this release. Depending on your deployment method, you may need to manually delete the old resources. Old resources can be identified by these names:
- The deployment
{{ .Release.Name }}(now called{{ .Release.Name }}-c4) - The deployment
{{ .Release.Name }}-rag(now called{{ .Release.Name }}-rag-deprecated) - The deployment
{{ .Release.Name }}-reis(now called{{ .Release.Name }}-rei-s) - The ingress
{{ .Release.Name }}-ingress(now called{{ .Release.Name }}-c4)
The rag-server was removed. If it is configured for any Bucket in the Files extension of the Deployment, it has to be replaced by REIS.
To migrate the data managed by the rag-server to REIS, the rag-server offers an enpoint for the versions >=1.0.0, <= 2.4.4. The import-endpoint of REIS is available for all versions >=1.0.0.
The rag-server api offers a dump endpoint, which dumps the content of the configured
vectorstore.
REIS offers an import endpoint, which adds the dump to its vector store.
Note that the embedding will be recalculated on import.
In theory, the following two example calls to curl should be enough to migrate the data from the rag-server to REIS. Note that every index must be dumped separately, if you use multiple indexes (look it up in the web interface of Azure AI Search or your pgvector database if unsure).
If you import the same data twice, the entries in the vector store should be updated instead of duplicated. Also note there is no undo button for the import.
For example, a migration can be performed with these calls to the endpoints. Ensure that you use the correct hostnames and index names.
curl http://rag:3200/files/dump?indexName=cc-rag-server > dump.json
curl -X POST --data "@dump.json" -H 'Content-Type: application/json' http://reis:3201/files/import?indexName=cc-reis-serverAfter the import, the endpoint of the bucket configuration can be switched in the admin menu of c4 under Files > Bucket.
It seems that for pgvector the indexName (e.g. cc-reis-server) can not be updated if it was first imported with, e.g., a typo.
In the presumably very rare case that it is needed, there are some solution strategies depending on the content of the database before the import:
- if pgvector was never used for REIS before: drop the
langchain_pg_embeddingtable. - if the
indexNamewith the typo did not exist before: remove all entries oflangchain_pg_embeddingwith the wrong value in the columncollection_id - otherwise, you might have to parse the dump for all ids and delete those from
langchain_pg_embedding
The values reis.embeddings.instanceName and reis.search.apiVersion are not needed anymore.
The value c4.auth.baseUrl was moved to c4.baseUrl.
The following values were moved:
reis.search.typetoreis.vectorDatabase.typereis.search.endpointtoreis.vectorDatabase.azureAiSearch.endpointreis.search.indexNametoreis.vectorDatabase.azureAiSearch.indexName
The Bitnami PostgreSQL subchart has been removed. An external PostgreSQL database is now required before deploying this chart. If you were previously using the included PostgreSQL subchart, you will need to migrate your data to an external database.
The following configuration values have been moved to new locations:
c4.externalPostgresql.connectionStringmoved toc4.postgresql.connectionStringc4.externalPostgresql.existingConnectionStringmoved toc4.postgresql.existingConnectionStringSecretc4.externalPostgresql.ssl.*moved toc4.postgresql.ssl.*
The following configuration values have been moved to new locations:
reis.secrets.openAiKeymoved toreis.embeddings.azureOpenAi.apiKeyand/orreis.speechToText.azureOpenAiWhisper.apiKey( see Speech-to-Text changes below)reis.secrets.existingOpenaiApiKeymoved toreis.embeddings.azureOpenAi.existingApiKeySecretand/orreis.speechToText.azureOpenAiWhisper.existingApiKeySecretreis.secrets.searchApiKeymoved toreis.vectorDatabase.azureAiSearch.apiKeyreis.secrets.existingSearchApiKeymoved toreis.vectorDatabase.azureAiSearch.existingApiKeySecret
Additionally, the key names inside existing Kubernetes secrets have changed:
- For Azure OpenAI: The secret referenced by
reis.embeddings.azureOpenAi.existingApiKeySecretmust use keyazureOpenaiApiKey(previouslyopenaiApiKey) - For Azure OpenAI Whisper: The secret referenced by
reis.speechToText.azureOpenAiWhisper.existingApiKeySecretmust use keyazureOpenAiWhisperApiKey(previouslyopenaiApiKey) - For Azure AI Search: The secret referenced by
reis.vectorDatabase.azureAiSearch.existingApiKeySecretmust use keyazureAiSearchApiKey(previouslysearchApiKey)
Azure OpenAI Whisper now uses a separate API key configuration instead of sharing the Azure OpenAI embeddings API key. While you can still use the same API key value for both services, it needs to be configured separately in two locations.
If you previously had an API key configured at reis.secrets.openAiKey, you now need to configure it in these locations
as needed:
reis.embeddings.azureOpenAi.apiKeyfor embeddings functionalityreis.speechToText.azureOpenAiWhisper.apiKeyfor speech-to-text functionality
If using existing secrets (previously configured at reis.secrets.existingOpenaiApiKey), you need to reference them in:
reis.embeddings.azureOpenAi.existingApiKeySecret- For embeddings functionalityreis.speechToText.azureOpenAiWhisper.existingApiKeySecret- For speech-to-text functionality
Additionally, the following Speech-to-Text configuration values have been relocated:
reis.speechToText.endpointmoved toreis.speechToText.azureOpenAiWhisper.endpointreis.speechToText.deploymentNamemoved toreis.speechToText.azureOpenAiWhisper.deploymentNamereis.speechToText.apiVersionmoved toreis.speechToText.azureOpenAiWhisper.apiVersion
The value networkPolicy.customIngressRuleFrom has been removed. Custom network policies should now be managed
separately outside this Helm chart.
c4's backend and frontend are now deployed as separate components.
Configuration values have been relocated as follows:
- All
c4.*settings moved tobackend.* - All
c4.ingress.*settings moved toingress.*
The new frontend.* settings are optional and only needed when customizing:
- Labels and annotations
- Extra environment variables
- Extra volumes and volume mounts
- Pod resources
The Helm Chart has been renamed to c4-genai-suite. As a result, you cannot upgrade an existing installation using
helm upgrade. However, because the chart’s components are stateless, you can install the new chart alongside the old
one and configure it to use the same persistence layer — specifically, your existing PostgreSQL database and vector
database (Azure OpenAI or PGVector).
To achieve a zero-downtime migration, install the new chart in parallel with the old chart, verify that everything is working as expected, and then uninstall the old chart.
There are breaking changes regarding the Ingress resource:
- TLS is no longer enabled by default. To enable it, you have to set
ingress.tlstotrue. - The value
ingress.tlsSecretNameis no longer required and should be removed. - The cluster issuer can no longer be set via the value
ingress.clusterIssuer. You have to add the annotationcert-manager.io/cluster-issuer: <your-issuer>for yourself by adding it to the valueingress.annotations.