values.yaml parameters reference
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. |
Before changing any value marked Caution on an existing deployment, take a backup of CAST Imaging (ImagingBackup.bat|sh, see ImagingBackupRestore.md in the Helm chart) and make sure that no analysis is running.
Sections in this reference:
- Which values to review before deploying
- General settings
- License and CAST Extend
- Application networking
- Storage
- PostgreSQL
- Passwords and Secrets
- Optional components
- Extra environment variables
- Analysis settings
- Security and registry access
- Replica counts
- Analysis node autoscaling
- Images
- Resources
- Pod placement
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,K8SProvideror 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.
Resizing volumes on an existing deployment
- Volumes can only be increased, never reduced: a smaller value makes the upgrade fail.
- For the PVCs created directly by the chart (all except
castdirandneo4jdata), increasing the value and runninghelm upgradeexpands the volume, provided the storage class allows volume expansion (allowVolumeExpansion: true, which is the case of the storage classes created by the chart). On Amazon EFS, the size is not enforced and does not need to be changed. - For
castdirandneo4jdata, which are created from StatefulSet volume templates, changingsize_castdirorsize_neo4jdatamakeshelm upgradefail, because volume templates cannot be modified. Instead, keep the value unchanged and expand each existing PVC directly, for example:kubectl patch pvc castdir-console-analysis-node-core-0 -n castimaging-v3 -p '{"spec":{"resources":{"requests":{"storage":"200Gi"}}}}'. - Never delete a PVC to resize it: this causes permanent data loss.
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 (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:
-
Install ESO and create a
SecretStore(in the CAST Imaging namespace) or aClusterSecretStorefor your store. See the list of ESO providers for the configuration of your store. -
In your secret store, create a secret (for example
cast-imaging/passwords) containing a JSON object with the keyspostgres-db-password,operator-db-password,operator-db-password-crypted2,keycloak-db-password,keycloak-admin-password,neo4j-passwordand, whenSMTP.enableistrue,smtp-password. Store the values in plain text, not base64-encoded. Foroperator-db-password-crypted2, store the completeCRYPTED2:...string generated bycast-imaging-encryption-tool.jar. -
Create the namespace (
kubectl create namespace castimaging-v3) and anExternalSecretin 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/passwordsOn 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, replacedataFromwith onedataentry per key (secretKeyset to the expected key name,remoteRef.keyset to the name in your store). -
Check that the Secret is synchronized:
kubectl get externalsecret imaging-passwords -n castimaging-v3must showSecretSynced. -
Set
existingSecret: imaging-passwordsinvalues.yamland run the installation (orhelm-upgradeon an existing deployment, with the passwords currently in use).
- Changing a value in the secret store does not change the password in the database, Keycloak or Neo4j. Follow the order given in the table above for each password, and update the secret store at the step where the table says to update the value.
- CAST Imaging pods read the passwords only when they start. After ESO updates the Secret (at the next
refreshInterval), restart the pods withUtil-ScaleDownAllandUtil-ScaleUpAll.
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.
Enabling or disabling AnalysisNodeAutoscaling.enabled on an existing deployment replaces the analysis node StatefulSet and restarts the analysis nodes: any running analysis is lost. Never set minNodes to 0.
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. |
Never downgrade image tags on an existing deployment: the databases are upgraded when a new version starts, and older versions cannot use them. Keep ConsolePostgresImage.tag at 15: changing the PostgreSQL major version requires a database migration.
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
AnalysisNodeResourceswhen analyzing large applications or when increasingMaxParallelAnalysisPerNode, andViewerNeo4jResources(together with theNEO4Jheap settings) for large applications in the Viewer. - The cluster nodes must have enough allocatable CPU and memory for the
requests, otherwise pods stayPending. - A container exceeding its memory
limitis 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. |