values.yaml parameters reference

Description of each parameter of the CAST Imaging Helm chart values.yaml file, when it can be changed and the risks of changing it

This section describes each parameter of the values.yaml file provided at the root of the Helm chart, when and how to adjust it, and the risks of changing it on a deployment that is already running. The parameters are listed in the order in which they appear in values.yaml.

Unless stated otherwise, a change in values.yaml is applied by running helm-upgrade.bat|sh. The When can it be changed column uses the following conventions:

Label Fresh installation Existing deployment
Safe Can be set Can be changed at any time; the affected pods are restarted by the upgrade.
Caution Can be set Can be changed, but requires extra steps, causes downtime or has side effects described in the column.
Install-time only Set it before the initial installation if your environment requires it Never change it once CAST Imaging is deployed: the upgrade fails, the deployment breaks, or data is permanently lost.
Keep default Do not change it, even on a fresh installation Do not change it. These are internal values that the Helm chart and the CAST Imaging images depend on.

Sections in this reference:

Which values to review before deploying

Most parameters can keep their default values. Use the following overview to focus on the ones that matter for your installation.

1. Always review and set before the initial installation

Review these values for one or more of the following reasons:

  • Environment-specific: the default is a placeholder or a generic choice that must be adapted to your cluster (for example FrontEndHost, K8SProvider or the storage classes).
  • Security-sensitive: the default is publicly known or exposes CAST Imaging more than you may want (passwords, public load balancer).
  • Install-time only: the value can be set now, but never changed once CAST Imaging is deployed.
Parameter Why
K8SProvider Must match your cluster (EKS, AKS, GKE or K8S). Install-time only.
FrontEndHost The default (https://myhostname.com) is a placeholder: set the URL your users will use.
One Application networking option (CreateLoadBalancer, CreateIngress, UseIstioGateway, UseGatewayAPI or UseApplicationGateway) Defines how CAST Imaging is exposed to users. The default (CreateLoadBalancer: true) creates a public cloud load balancer: check that this matches your security requirements, or use UseInternalLoadBalancer or another option.
PostgresDbPassword, OperatorDbPassword + OperatorDbPasswordCrypted2, KeycloakDbPassword, Neo4jPassword, KeycloakAdminPassword (or existingSecret) The defaults are publicly known. Change them on any installation that is not a short-lived test, before the first deployment: changing them afterwards requires manual steps.
AnalysisNodeFS.* for your provider (EFSsystemID on EKS, AKSprotocol and storage account settings on AKS) Install-time only: the shared volume configuration cannot be changed after analyses have been run. EFSsystemID is mandatory on EKS. On FIPS-enabled AKS nodes, AKSprotocol: nfs is required.
CreateStorageClass, DiskClassName, FileClassName Must be false / your existing class names on-premises or when your administrator provides the storage classes. DiskClassName and FileClassName are install-time only.
RestrictedSecurityMode Set to true if your cluster enforces the restricted Pod Security Standard. Install-time only.
size_castdir, size_shared_datadir, size_db_data, size_neo4jdata Size them for the applications you plan to analyze: volumes can be extended later, but never reduced, and some require manual steps.

2. Set only if it applies to your situation

These values must be set when you use the corresponding feature or environment, and can otherwise keep their defaults:

Situation Parameters
Namespace other than castimaging-v3 namespace, and the helm-* and Util-* scripts
External PostgreSQL instead of the embedded one CastStorageService.enable, CustomPostgres.* (decide before installation)
CAST Imaging served under a context path ContextUrl.*
Ingress with automatic certificates CertManager.*
Istio or Gateway API specifics ExistingIstioGatewayName, CustomIstio*, Gateway.*
Private network only UseInternalLoadBalancer
Analysis nodes without direct internet access to CAST Extend ExtendProxy.*
License and Extend API key provided at deployment rather than in the UI ImagingLicense, ImagingLicenseType, ExtendApiKey
Private registry or mirrored images UseImagePullSecrets, Base64EncodedDockerconfigjson, ServiceAccountName, *Image.name
Passwords managed outside of values.yaml existingSecret
E-mail notifications SMTP.*
MCP server, or deployment without the Viewer McpServer.enable, Viewer.enable
Domain/tenant mapping CONTROLPANEL.IMAGING_DOMAIN_SYNCHRO_ENABLED (decide before installation)
Several analysis nodes AnalysisNodeReplicaCount, or AnalysisNodeAutoscaling.*
Large applications AnalysisNodeResources, MaxParallelAnalysisPerNode, ViewerNeo4jResources and NEO4J.* heap settings
Dedicated node pool, or specific pod distribution EnforceNodeAffinity, nodeSelector, tolerations, EnforceBalancedAffinity, BalancedAffinity.*
Remote access to the embedded PostgreSQL CreatePostgresLoadBalancer together with CastStorageService.ssl
Timeouts on long-running requests NetworkTimeoutSeconds, ExtendProxy.timeoutSeconds

3. Never change, even on a fresh installation (Keep default)

version, postgresqlDataMountPath, anadir.*, and the labelSelector* / podAffinityGroup* affinity rules.

4. Keep the defaults unless advised by CAST Support

*Image.tag and *Image.pullPolicy, the CSI driver names (*_DSdriver, *_FSdriver, install-time only), the log volume sizes, the other replica counts, the other *Resources, postgres_shmsize, AnalysisNode_shmsize, ConsoleEnableBackup, KCADMIN_USERNAME, and the ETL, AIMANAGER and GATEWAYSERVICE environment variables.

General settings

Parameter Default Description and when to adjust When can it be changed
version Current CAST Imaging release CAST Imaging release delivered by this Helm chart, used as a label (and as a fallback image tag). Do not edit: it is updated with the chart. Keep default.
namespace castimaging-v3 Kubernetes namespace in which CAST Imaging is deployed. If you need a different namespace, also replace castimaging-v3 in the helm-*.bat|sh and Util-* scripts provided with the Helm chart, which pass the namespace to helm and kubectl. Safe, provided the scripts are adjusted accordingly.
K8SProvider AKS Kubernetes provider: EKS (AWS), AKS (Azure), GKE (Google) or K8S (on-premises, with CreateStorageClass: false). Selects the CSI drivers of the storage classes, the internal load balancer annotations and some provider-specific options. Install-time only: storage classes are immutable and kept on uninstall, and existing volumes cannot move between providers.

License and CAST Extend

Parameter Default Description and when to adjust When can it be changed
ImagingLicenseType SCOPE_CD License type: SCOPE_CD (by Contributing Developers) or SCOPE_APP (by Named Application). Only used when ImagingLicense is set. Safe.
ImagingLicense empty License key. If empty, the license is entered in the Console UI after installation. Caution: when set, the value is written to the database each time console-service starts, overwriting any license entered in the UI. Keep it empty if you manage the license from the UI, or keep it up to date here.
ExtendApiKey empty CAST Extend API key. If empty, it is entered in the Console UI after installation. When set (and ExtendProxy.enable: false), the Extend URL is also set to https://extend.castsoftware.com. Caution: same behavior as ImagingLicense - re-applied at each console-service start, overwriting the value set in the UI.

Application networking

Only one of CreateIngress, UseIstioGateway, UseGatewayAPI and UseApplicationGateway can be enabled (the installation fails otherwise). CreateLoadBalancer should be set to false when one of them is used.

Parameter Default Description and when to adjust When can it be changed
FrontEndHost https://myhostname.com URL used by end users to reach CAST Imaging: scheme and host name only, no context path and no trailing /. Must match the certificate and DNS entry of your entry point. Caution: the Keycloak URL stored in the database is updated when console-service and console-control-panel restart. Update DNS and certificates at the same time, and check the Keycloak redirect URIs if you customized them. Users must log in again.
NetworkTimeoutSeconds 300 Maximum duration of a request between the entry point (Ingress, Istio or Gateway API) and console-gateway-service, after which a 504 Gateway Timeout is returned. Increase it if long-running operations time out. Safe.
CreateLoadBalancer true Exposes console-gateway-service (and extendproxy if enabled) as a cloud LoadBalancer Service. Set to false when using an Ingress, Istio, Gateway API or Azure Application Gateway. Caution: the LoadBalancer Service is kept on helm uninstall (to preserve its IP address); disabling it changes the entry point, so update DNS accordingly.
CreatePostgresLoadBalancer false Exposes the embedded PostgreSQL (console-postgres) as its own LoadBalancer Service, for example for external reporting tools. Caution: exposes the database outside the cluster. Also set CastStorageService.ssl: true, prefer UseInternalLoadBalancer: true, and restrict inbound access at network level. The Service is kept on helm uninstall.
UseInternalLoadBalancer false Requests a private (VPC/VNet only) load balancer instead of a public one for all LoadBalancer Services created by the chart. No effect with Ingress, Istio, Gateway API or Application Gateway. Caution: the load balancer is re-created with a new IP address; update DNS. Clients outside the private network lose access.
CreateIngress false Routes traffic through an NGINX Ingress controller (installed separately). Caution: changes the entry point (new IP address/DNS).
CertManager.enable false Only with CreateIngress: true. Adds cert-manager annotations so that the TLS certificates (tls-secret-cast, and tls-secret-cast-extend with ExtendProxy) are requested and renewed automatically. cert-manager and the Issuer must already exist. Safe.
CertManager.issuer vault-issuer Name of the cert-manager Issuer or ClusterIssuer. Safe.
CertManager.issuerKind Issuer Issuer (in the CAST Imaging namespace) or ClusterIssuer. Safe.
CertManager.privateKeySize "4096" Private key size in bits. Safe (applies to the next certificate issued).
UseIstioGateway false Routes traffic through an Istio Gateway and VirtualServices (Istio installed separately). Caution: changes the entry point.
ExistingIstioGatewayName "" Name of an existing Istio Gateway to attach to (e.g. aks-istio-ingress/gateway-wildcard) instead of creating one. Caution: changes the entry point.
CustomIstioSelector empty Optional value of the istio label selecting the Istio ingress gateway pods (default: ingressgateway). Caution: changes the entry point.
CustomIstioMainCredentialName empty Optional name of the TLS Secret used by the Istio Gateway for FrontEndHost (default: tls-secret-cast). Safe, if the Secret exists.
CustomIstioExtendCredentialName empty Optional name of the TLS Secret used for the ExtendProxy host name (default: tls-secret-cast-extend). Safe, if the Secret exists.
UseGatewayAPI false Routes traffic through a Kubernetes Gateway API Gateway and HTTPRoutes (a GatewayClass controller such as NGINX Gateway Fabric must be installed). Caution: changes the entry point.
Gateway.create true true creates a dedicated Gateway; false attaches the HTTPRoutes to an existing shared Gateway (Gateway.name / Gateway.namespace). Caution: changes the entry point.
Gateway.name / Gateway.namespace castimaging-gateway / "" Gateway to attach to when Gateway.create: false. Caution.
Gateway.className nginx GatewayClass of the dedicated Gateway (nginx for NGINX Gateway Fabric). Caution: the Gateway is re-created.
UseApplicationGateway false AKS only: set to true when an Azure Application Gateway (created separately) is used in front of CAST Imaging. Caution: changes the entry point.
ContextUrl.enable false Serves CAST Imaging under a context path (e.g. https://myhostname.com/cast). Requires CreateIngress, UseIstioGateway or UseGatewayAPI. Caution: after helm upgrade, restart all CAST Imaging services once (Util-ScaleDownAll then Util-ScaleUpAll). On a first installation with enable: true, also restart all services once after the initial startup.
ContextUrl.appcontext /mycontext Context path, starting with / and without trailing /. Caution: same as ContextUrl.enable.

Storage

See Kubernetes storage location information for the list of volumes.

Parameter Default Description and when to adjust When can it be changed
CreateStorageClass true Creates the block (DiskClassName) and file (FileClassName) storage classes. Set to false if your cluster administrator provides them (mandatory on-premises); DiskClassName and FileClassName must then match the existing class names. Safe: the storage classes are kept on uninstall and are not deleted when switching to false.
DiskClassName castimaging-ds Storage class used for all block (ReadWriteOnce) volumes. Install-time only: the storage class of an existing PVC or StatefulSet volume template is immutable, so the upgrade fails. Re-creating the volumes causes permanent data loss.
FileClassName castimaging-fs Storage class used for the shared pvc-shared-datadir volume, which must support ReadWriteMany, even with a single analysis node: the volume is also mounted by console-service and console-control-panel. Install-time only: on an instance that has run analyses, it requires deleting pvc-shared-datadir, causing permanent data loss.
AnalysisNodeFS.EFSsystemID fs-xxxxxxxxxxx EKS only, required: ID of the Amazon EFS file system used for pvc-shared-datadir. Install-time only: storage class parameters are immutable and the shared data lives on this file system.
AnalysisNodeFS.EFSaccessPointID empty EKS only, optional: when set, an explicit PersistentVolume bound to this EFS access point is created instead of a dynamically provisioned one. Install-time only.
AnalysisNodeFS.AKSresourceGroup empty AKS only, optional: resource group of the storage account used for Azure Files. Install-time only: storage class parameters are immutable.
AnalysisNodeFS.AKSstorageAccount empty AKS only, optional: existing storage account used for Azure Files (otherwise created automatically by the CSI driver). Install-time only.
AnalysisNodeFS.AKSprotocol smb AKS only: smb or nfs. nfs is required on FIPS-enabled nodes and needs a Premium FileStorage account reachable on TCP 2049. Install-time only: on an instance that has run analyses, switching requires deleting the storage class and pvc-shared-datadir, causing permanent data loss.
AnalysisNodeFS.AKSnfsEncryptInTransit true AKS with AKSprotocol: nfs only: encrypts NFS traffic with TLS, which allows “Secure transfer required” to stay enabled on the storage account. Set to false only for plain-text NFS. Install-time only: storage class parameter, immutable.
AnalysisNodeFS.AKSsharedDatadirPV.create false AKS only: set to true when dynamic provisioning cannot be used, to create an explicit PersistentVolume on an existing Azure File Share (SMB only). Install-time only.
AnalysisNodeFS.AKSsharedDatadirPV.secretName / shareName cast-fs-secret / cast-fileshare Secret holding the storage account credentials and name of the Azure File Share, required when AKSsharedDatadirPV.create: true. Install-time only.
EKS_DSdriver, EKS_FSdriver, AKS_DSdriver, AKS_FSdriver, GKE_DSdriver, GKE_FSdriver CSI drivers of each provider CSI provisioners used by the storage classes. Only change them if your cluster uses a different CSI driver. Install-time only: storage classes are immutable.

Volume sizes

Parameter Default Volume
size_castdir 100Gi castdir of each analysis node (StatefulSet volume template)
size_shared_datadir 100Gi pvc-shared-datadir (shared analysis data)
size_db_data 128Gi db-data (embedded PostgreSQL)
size_neo4jdata 100Gi neo4jdata of viewer-neo4j (StatefulSet volume template)
size_imagingviewer_v3_server_log 1Gi viewer-server logs
size_imagingviewer_v3_etl_logs 10Gi viewer-etl logs
size_imagingviewer_v3_etl_csvarchive 10Gi viewer-etl CSV archive
size_imagingviewer_v3_aimanager_logs 2Gi viewer-aimanager logs
size_imagingviewer_v3_api_logs 2Gi viewer-api logs
size_extendproxy_data 10Gi extendproxy data
size_mcpserver_logs 2Gi mcp-server logs
size_mcpserver_data 1Gi mcp-server data: Text2Cypher SQLite stores (≥ 3.6.9)
size_consoleservice_logs, size_controlpanel_logs, size_gatewayservice_logs, size_authenticationservice_logs, size_ssoservice_logs, size_dashboards_logs 2Gi each Console services logs

Size the volumes according to the number and size of the applications you plan to analyze: size_castdir, size_shared_datadir, size_db_data and size_neo4jdata are the ones that grow with usage.

PostgreSQL

Enable either CastStorageService (embedded PostgreSQL) or CustomPostgres (external PostgreSQL), not both.

Parameter Default Description and when to adjust When can it be changed
CastStorageService.enable true Deploys the embedded PostgreSQL (console-postgres StatefulSet and db-data volume). Set to false to use an external PostgreSQL instance. Install-time only: switching between embedded and external PostgreSQL does not migrate any data, and the deployment restarts on an empty database. A migration requires a backup/restore procedure.
CastStorageService.ssl false Enforces SSL connections to the embedded PostgreSQL, with a self-signed certificate generated at startup. Recommended when CreatePostgresLoadBalancer: true. Caution: restarts PostgreSQL and therefore interrupts all services; do it when no analysis is running.
CustomPostgres.enable false Uses an existing external PostgreSQL server (PostgreSQL 15, 8GB RAM minimum recommended). The required users and databases are created by a one-time Job. Install-time only: see CastStorageService.enable.
CustomPostgres.host mypostgreshostname Host name of the external PostgreSQL server. Caution: the new server must contain the CAST Imaging data (restored from a backup), otherwise CAST Imaging starts on an empty database.
CustomPostgres.adminlogin postgres Superuser login of the external server; its password is set in PostgresDbPassword. Safe, if the login is valid.
CustomPostgres.port 2285 Port of the external PostgreSQL server. Safe, if the port is valid.
postgres_shmsize 4G Shared memory (/dev/shm) of the embedded PostgreSQL, used for parallel queries. Increase only if PostgreSQL reports shared memory errors. Caution: restarts PostgreSQL.
postgresqlDataMountPath /var/lib/postgresql/data Data directory of the embedded PostgreSQL, matching the PostgreSQL image provided with the chart. Keep default: on an existing deployment, PostgreSQL would start on an empty data directory.

Passwords and Secrets

All passwords are base64-encoded: echo -n "mypassword" | base64 on Linux, or [Convert]::ToBase64String([Text.Encoding]::UTF8.GetBytes("mypassword")) in PowerShell.

Parameter Default Description and when to adjust When can it be changed
existingSecret "" Name of an existing Kubernetes Secret holding the passwords, for example when passwords are managed by an external secret store (see Using an external secret store). When set, all password values below are ignored, and the Secret must contain the keys postgres-db-password, operator-db-password, operator-db-password-crypted2, keycloak-db-password, keycloak-admin-password, neo4j-password and optionally smtp-password. Otherwise, the chart creates the imaging-pwd-sec Secret. Caution: the new Secret must contain the passwords currently in use, otherwise services can no longer connect to the databases.
PostgresDbPassword postgres (encoded) Password of the postgres superuser of the embedded PostgreSQL, or of CustomPostgres.adminlogin on an external server. Caution: changing the value alone breaks the connection. First change the password in PostgreSQL (ALTER USER ... WITH PASSWORD '...') while CAST Imaging is running, then update the value and run helm upgrade.
OperatorDbPassword CastAIP (encoded) Password of the operator database user used by all Console services. Caution: change it first in PostgreSQL, then in the Console (Global configuration > CSS and Measurement settings), then update both OperatorDbPassword and OperatorDbPasswordCrypted2 and run helm upgrade.
OperatorDbPasswordCrypted2 CRYPTED2:... operator password encrypted with the cast-imaging-encryption-tool.jar tool (provided with the CAST Imaging Linux installer). Not base64-encoded. Must always match OperatorDbPassword. Caution: see OperatorDbPassword.
KeycloakDbPassword keycloak (encoded) Password of the keycloak database user. Caution: change it first in PostgreSQL, then update the value and run helm upgrade.
Neo4jPassword imaging (encoded) Password of the Neo4j database used by the Viewer services. Caution: the Neo4j password is stored in the Neo4j data volume. Changing only the value breaks the Viewer; it must also be changed in Neo4j.
KeycloakAdminPassword admin (encoded) Password of the Keycloak admin service account, used for communication between components. Change it on fresh installations. Caution: change it first in the Keycloak admin UI while CAST Imaging is running, then update the value, run Util-ScaleDownAll and helm-upgrade. See Keycloak accounts and passwords.
KCADMIN_USERNAME kcadmin Login of the Keycloak administrator account created at installation, used to access the Keycloak UI. Caution: the Keycloak initialization Job runs again and creates a new administrator with the new name; the previous account is not deleted.

Using an external secret store

existingSecret accepts any Kubernetes Secret, whatever tool creates it. To keep the passwords in an external secret store, use a tool that creates the Secret in the CAST Imaging namespace from that store. The most common one is External Secrets Operator external link (ESO), which works the same way on every platform and supports, among others:

Platform Typical secret store Authentication of ESO to the store
EKS AWS Secrets Manager or AWS Systems Manager Parameter Store IAM Roles for Service Accounts (IRSA) or EKS Pod Identity
AKS Azure Key Vault Microsoft Entra Workload ID
GKE Google Cloud Secret Manager Workload Identity Federation for GKE
On-premises HashiCorp Vault, CyberArk Conjur, Akeyless, or the store already used in your organization Kubernetes auth method, AppRole or token, depending on the store

Vendor operators (for example HashiCorp Vault Secrets Operator) and GitOps tools that decrypt secrets in the cluster (Sealed Secrets, SOPS) also work, as long as the result is a Secret with the expected keys. The Secrets Store CSI Driver is not suitable: it only synchronizes a Secret while a pod mounts the corresponding CSI volume, and CAST Imaging pods do not.

To use ESO:

  1. Install ESO and create a SecretStore (in the CAST Imaging namespace) or a ClusterSecretStore for your store. See the list of ESO providers external link for the configuration of your store.

  2. In your secret store, create a secret (for example cast-imaging/passwords) containing a JSON object with the keys postgres-db-password, operator-db-password, operator-db-password-crypted2, keycloak-db-password, keycloak-admin-password, neo4j-password and, when SMTP.enable is true, smtp-password. Store the values in plain text, not base64-encoded. For operator-db-password-crypted2, store the complete CRYPTED2:... string generated by cast-imaging-encryption-tool.jar.

  3. Create the namespace (kubectl create namespace castimaging-v3) and an ExternalSecret in it:

    apiVersion: external-secrets.io/v1
    kind: ExternalSecret
    metadata:
      name: imaging-passwords
      namespace: castimaging-v3
    spec:
      refreshInterval: 1h
      secretStoreRef:
        kind: ClusterSecretStore      # or SecretStore
        name: my-secret-store
      target:
        name: imaging-passwords       # Secret name to set in existingSecret
      dataFrom:
        - extract:
            key: cast-imaging/passwords
    

    On ESO versions earlier than 0.17, use apiVersion: external-secrets.io/v1beta1. If your store holds one secret per password instead of a JSON object, replace dataFrom with one data entry per key (secretKey set to the expected key name, remoteRef.key set to the name in your store).

  4. Check that the Secret is synchronized: kubectl get externalsecret imaging-passwords -n castimaging-v3 must show SecretSynced.

  5. Set existingSecret: imaging-passwords in values.yaml and run the installation (or helm-upgrade on an existing deployment, with the passwords currently in use).

Optional components

Parameter Default Description and when to adjust When can it be changed
ExtendProxy.enable false Deploys the CAST Extend Proxy (extendproxy), used when the analysis nodes cannot reach extend.castsoftware.com directly. Safe to enable. When disabled, its data volume is kept.
ExtendProxy.exthostname myextendhost.com Host name used to reach the Extend Proxy. Same host name as FrontEndHost: routed under /extendproxy. Different host name: routed on a dedicated host name and certificate. Caution: update DNS and certificates; clients configured with the previous URL must be updated.
ExtendProxy.timeoutSeconds 3600 Same as NetworkTimeoutSeconds for the Extend Proxy path (bundle uploads can be large). Safe.
Viewer.enable true Deploys the Viewer components (viewer-neo4j, viewer-server, viewer-etl, viewer-api, viewer-aimanager) and mcp-server. Set to false for a deployment without the Viewer. Caution: disabling removes the Viewer services; their volumes, including the Neo4j data, are kept and reused if re-enabled.
McpServer.enable false Deploys the MCP server (ignored when Viewer.enable: false). Starting with 3.6.9 (MCP Server 3.1), the mcp-server pod runs the MCP Aggregator Gateway (port 8285, registered in the Control Panel and reached by MCP clients at <FrontEndHost>/mcp) with the Structural, Semantic search and Text2Cypher MCP servers behind it, and connects to Neo4j (viewer-neo4j). GraphRAG (Semantic search) requires a specific CAST Imaging license. Its settings are in the MCPSERVER section (see Extra environment variables). Safe. When disabled, its volumes are kept.
SMTP.enable false Enables e-mail notifications from the Control Panel. Safe.
SMTP.SPRING_MAIL_HOST, SPRING_MAIL_PORT, SPRING_MAIL_USERNAME, SPRING_MAIL_PROTOCOL example values SMTP server settings. Safe.
SMTP.SPRING_MAIL_PASSWORD encoded example SMTP password, base64-encoded. Safe.
SMTP.SPRING_MAIL_PROPERTIES_MAIL_SMTP_AUTH, SPRING_MAIL_PROPERTIES_MAIL_SMTP_STARTTLS_ENABLE true SMTP authentication and STARTTLS. Safe.

Extra environment variables

The sections NEO4J, ETL, SERVER, AIMANAGER, MCPSERVER, CONTROLPANEL, ANALYSISNODE, API, AUTHENTICATIONSERVICE, CONSOLESERVICE, DASHBOARDS, GATEWAYSERVICE, SSOSERVICE and EXTENDPROXY add environment variables to the corresponding containers (NAME: value). Only add variables documented by CAST or requested by CAST Support. Changing them restarts the corresponding pods.

Parameter Default Description and when to adjust
NEO4J.NEO4J_server_memory_heap_initial__size / NEO4J_server_memory_heap_max__size 12G Neo4j Java heap. Increase for large applications, keeping it well below the ViewerNeo4jResources memory limit.
NEO4J.NEO4J_dbms_memory_transaction_total_max 10G Maximum memory used by Neo4j transactions.
ETL.WORKER_POOL_SIZE 4 Number of parallel ETL workers when importing analysis results into Neo4j.
ETL.NEO4J_IMPORT_BATCH_SIZE / NEO4J_DELETE_BATCH_SIZE 1000 / 2000 Batch sizes used by the ETL when writing to and deleting from Neo4j. Keep the defaults unless advised by CAST Support.
AIMANAGER.SUMMARY_LOG_LEVEL info Log level of the AI Manager.
MCPSERVER.STRUCTURAL_MCP_ENABLED, SEMANTIC_MCP_ENABLED, TEXT_TO_CYPHER_MCP_ENABLED true MCP servers run behind the MCP Aggregator Gateway (≥ 3.6.9). Semantic search (the GraphRAG MCP tools) requires the Neo4j embeddings to be configured in the CAST Imaging AI settings, and a specific CAST Imaging license to enable GraphRAG: contact CAST to obtain it.
MCPSERVER.STRUCTURAL_MCP_TOOL_SURFACE_PROFILE, SEMANTIC_MCP_TOOL_SURFACE_PROFILE intents Tools exposed to MCP clients: intents (meta-tools) or full (every tool) (≥ 3.6.9).
MCPSERVER.IMAGING_CODE "False" Set to "True" to let MCP clients read the application source code. Security sensitive: enable it only if the MCP clients and their users are allowed to access the source code.
MCPSERVER.LOG_LEVEL INFO Log level of the MCP server: INFO or DEBUG only (any other value stops the container) (≥ 3.6.9).
MCPSERVER.TELEMETRY_ENABLED, TELEMETRY_PUSH_ENABLED true MCP usage telemetry, and its periodic push to CAST (every TELEMETRY_PUSH_INTERVAL_MINUTES, default 120) (≥ 3.6.9). Set TELEMETRY_PUSH_ENABLED: false when the cluster has no outbound internet access.
CONTROLPANEL.IMAGING_DOMAIN_SYNCHRO_ENABLED false Enables domain/tenant mapping. Decide it at installation time if you need it: it is not straightforward to enable after installation.
GATEWAYSERVICE.SPRING_CLOUD_GATEWAY_SERVER_WEBFLUX_TRUSTEDPROXIES ".*" Regular expression of the proxies trusted by console-gateway-service to forward the X-Forwarded-* headers; required for correct login redirects behind an Ingress, Istio or Gateway API. Can be restricted to the IP range of your gateway pods (e.g. "10\..*"). Do not remove it.

Analysis settings

Parameter Default Description and when to adjust When can it be changed
MaxParallelAnalysisPerNode 2 Maximum number of analyses run in parallel by each analysis node. Increase only if AnalysisNodeResources (CPU and memory) are increased accordingly. Caution: restarts the analysis nodes; do it when no analysis is running.
ConsoleEnableBackup true Takes a backup of each application before it is upgraded. Disabling it saves time and disk space, but no backup is then available if an application upgrade fails. Caution: restarts the analysis nodes.
AnalysisNode_shmsize 1G Shared memory (/dev/shm) of the analysis nodes. Caution: restarts the analysis nodes.
anadir.* /opt/cast/shared/..., /usr/share/CAST/... Folders used by the analysis nodes in their volumes. Keep default: the analysis node image expects these paths, and analysis data would no longer be found.

Security and registry access

Parameter Default Description and when to adjust When can it be changed
RestrictedSecurityMode false Set to true when the cluster enforces the Kubernetes “restricted” Pod Security Standard (or an equivalent policy): non-root users, read-only root file systems, dropped capabilities, seccomp profile. Install-time only: cannot be changed after CAST Imaging is deployed.
UseImagePullSecrets false Set to true to pull images from a private registry with the credentials provided in Base64EncodedDockerconfigjson (creates the imagepull-sec Secret). Safe.
Base64EncodedDockerconfigjson empty Base64-encoded content of a Docker config.json file with the registry credentials. Safe.
ServiceAccountName empty Existing Kubernetes ServiceAccount used by the CAST Imaging pods, for example one with its own imagePullSecrets or cloud identity. Caution: all pods restart.

Replica counts

Parameter Default Description and when to adjust
AnalysisNodeReplicaCount 1 Number of analysis nodes. Increase to run more analyses in parallel; each analysis node requires its own cluster node when EnforceBalancedAffinity: true. Ignored when AnalysisNodeAutoscaling.enabled: true. Reducing it removes the analysis nodes with the highest numbers, even if they are running an analysis: reduce it only when no analysis is running.
ConsolePostgresReplicaCount, ViewerNeo4jReplicaCount 1 Single-instance databases: must be 1 (or 0 to stop them). Never set more than 1.
SSOServiceReplicaCount, ConsoleServiceReplicaCount, GatewayServiceReplicaCount, ControlPaneReplicaCount, AuthenticationServiceReplicaCount, DashboardReplicaCount, ExtendProxyReplicaCount, ViewerServerReplicaCount, ViewerEtlReplicaCount, ViewerAiManagerReplicaCount, ViewerApiReplicaCount, McpServerReplicaCount 1 Must be 1. 0 is used to deploy without starting the services (for example with EnforceNodeAffinity, see below).

To stop and start CAST Imaging, use the Util-ScaleDownAll and Util-ScaleUpAll scripts rather than changing the replica counts.

Analysis node autoscaling

The AnalysisNodeAutoscaling parameters (enabled, minNodes, maxNodes, pollIntervalSeconds, scaleUpStabilizationSeconds, scaleDownStabilizationSeconds, stuckPodTimeoutSeconds, dryRun, allowNodeRead, resources) are described in the Analysis node autoscaling section of this page.

Images

Each *Image parameter (InitUtilImage, ConsolePostgresImage, ConsoleSSOServiceImage, ConsoleServiceImage, ConsoleGatewayServiceImage, ConsoleAnalysisNodeImage, ConsoleControlPaneImage, ConsoleAuthenticationServiceImage, ConsoleIntegratedDashboardsImage, ViewerNeo4jImage, ViewerServiceImage, ViewerEtlImage, ViewerAiManagerImage, ViewerApiImage, McpServerImage, ExtendProxyImage) has three settings:

Setting Description and when to adjust
name Image repository. Change it only to pull the images from your own registry (mirror of Docker Hub), keeping the same image path.
tag Image version. The tags are validated together for a given release: do not change them individually. To upgrade CAST Imaging, use the values.yaml of the new release branch instead.
pullPolicy Always or IfNotPresent. Keep the defaults.

Resources

The *Resources parameters (ConsolePostgresResources, SSOServiceResources, ConsoleServiceResources, GatewayServiceResources, AnalysisNodeResources, ControlPanelResources, AuthenticationServiceResources, IntegratedDashboardsResources, ViewerNeo4jResources, ViewerServerServiceResources, ViewerEtlResources, ViewerAiManagerResources, ViewerApiResources, McpServerResources, ExtendProxyResources, InitContainerResources) define the CPU and memory requests (reserved for the pod) and limits (maximum allowed) of each container.

  • Increase AnalysisNodeResources when analyzing large applications or when increasing MaxParallelAnalysisPerNode, and ViewerNeo4jResources (together with the NEO4J heap settings) for large applications in the Viewer.
  • The cluster nodes must have enough allocatable CPU and memory for the requests, otherwise pods stay Pending.
  • A container exceeding its memory limit is restarted (OOMKilled).

On an existing deployment, changing resources restarts the corresponding pods: for AnalysisNodeResources, ConsolePostgresResources and ViewerNeo4jResources, do it when no analysis is running.

Pod placement

Parameter Default Description and when to adjust When can it be changed
EnforceBalancedAffinity true Spreads pods over the cluster nodes: viewer-neo4j and analysis nodes never share a node, and two analysis nodes never share a node. Requires at least 2 usable cluster nodes, plus one per additional analysis node. Cannot be combined with EnforceNodeAffinity. Caution: pods may move to other nodes. With zonal block storage, a pod cannot move to a node in another zone than its volume and stays Pending.
BalancedAffinity.EnforceAnalysisNodeIsolation false Runs each analysis node on a dedicated cluster node (no other CAST Imaging pod). Requires additional cluster nodes. Caution: same as EnforceBalancedAffinity.
BalancedAffinity.EnforceNeo4jIsolation false Runs viewer-neo4j on a dedicated cluster node. Caution.
BalancedAffinity.EnforcePostgresIsolation false Runs the embedded PostgreSQL on a dedicated cluster node. Caution.
EnforceNodeAffinity false Runs CAST Imaging on a dedicated node pool (XL deployments, 4 nodes minimum: PostgreSQL, Console services, Viewer services, one per analysis node). The nodes must have the label app: castimaging and the taint workload=castimaging:NoSchedule. Deploy initially with all replica counts at 0, then run Util-ScaleUpAllWithNodeAffinities. Cannot be combined with EnforceBalancedAffinity. Caution: all pods move to the dedicated node pool. Block volumes cannot move between zones: the dedicated nodes must be in the same zones as the existing volumes.
nodeSelector, tolerations, nodeSelectorAppcastimaging app: castimaging, workload=castimaging:NoSchedule Label and taint of the dedicated node pool used with EnforceNodeAffinity. Change them only if your node pool uses other labels or taints. Caution: same as EnforceNodeAffinity.
labelSelector*, podAffinityGroup* - Affinity rules used internally by EnforceBalancedAffinity and EnforceNodeAffinity. Keep default.