Skip to main content
Migration Notice
We're migrating documentation from the old portal into this one. Some things may look a little different or out of place in the meantime — we know, and we're working to get it right. If something's unclear or doesn't look right, let us know.

Helm Values Reference

These are the settings you can put in your values file, with their defaults. Set a key in your values file to override its default; anything you leave out keeps the default shown here. The platform guides start from a values file with the validated settings for each platform: RKE2, kubeadm and OpenShift / OKD.

The same list, for the chart version you install, is in the chart: helm show values <install-dir>/charts/<version>-<build>/aisec (the chart directory from the installation guide) prints every setting with its comments.

Release and namespace​

KeyTypeDescriptionDefault
nameOverridestringOverride the release-name-derived resource name prefix""
deployTimestampstringSet to force a rollout on helm upgrade even when the rendered spec is otherwise unchanged"" (no annotation rendered, no effect)
namespaceOverridestringOverride the namespace for all chart resources; leave empty to use -n <ns> from the helm command""
namespace.createboolLet the chart create and own the release namespacefalse
namespace.podSecurity.enforcestringPod Security Standard enforce level applied to the namespace"restricted"
namespace.podSecurity.auditstringPod Security Standard audit level applied to the namespace"restricted"
namespace.podSecurity.warnstringPod Security Standard warn level applied to the namespace"restricted"

Storage​

KeyTypeDescriptionDefault
storage.createStorageClassboolCreate a local-path-retain StorageClass (reclaimPolicy: Retain) for clusters without onetrue
storage.classNamestringStorageClass name used by all PVCs unless overridden per-component"local-path-retain"

Defaults for all product pods​

KeyTypeDescriptionDefault
default.labelsobjectExtra labels applied to every chart-managed resource{}
default.image.registrystringRegistry for the AISec app images (console, extraction, classify, lc)"northamerica-northeast2-docker.pkg.dev/superna-579/oci/aisecurity"
default.image.pullPolicystringImage pull policy for the AISec app images"IfNotPresent"
default.image.pullSecretslistImage pull secrets for the AISec app images[]
default.readOnlyRootFilesystemboolMount every container's root filesystem read-only; validate per image before enablingfalse
default.podSecurityContext.runAsNonRootboolRequire containers to run as a non-root usertrue
default.podSecurityContext.runAsUserintUser ID containers run as — keep pinned on every platform, including OpenShift1000
default.podSecurityContext.runAsGroupintGroup ID containers run as — keep pinned on every platform, including OpenShift1000
default.podSecurityContext.fsGroupintGroup ID that owns mounted volumes — keep pinned on every platform, including OpenShift1000
default.podSecurityContext.seccompProfile.typestringSeccomp profile type applied to the pod"RuntimeDefault"

Image registry credentials​

KeyTypeDescriptionDefault
imageRegistry.createPullSecretboolGenerate an imagePullSecret and attach it to every podfalse
imageRegistry.serverstringPrivate registry hostname""
imageRegistry.usernamestringRegistry username""
imageRegistry.passwordstringRegistry password""
imageRegistry.emailstringRegistry account email (required by the dockerconfigjson format)""

Console​

KeyTypeDescriptionDefault
console.extraEnvobjectArbitrary extra env vars rendered into the console ConfigMap (e.g. future feature flags) — lets a values override expose a new console env var without a chart template change.{}
console.image.namestringConsole image repository"aisec-console"
console.image.tagstringConsole image tag"1.0.0"
console.image.digeststringConsole image digest ("sha256:..."); takes priority over tag when set""
console.initImage.registrystringRegistry for the init-container image; a public image, does not use default.image.registry"docker.io"
console.initImage.namestringInit-container image repository"library/busybox"
console.initImage.tagstringInit-container image tag"1.37"
console.service.typestringConsole Service type — ClusterIP+Ingress is the only supported path"ClusterIP"
console.service.httpPortintConsole UI + REST API port8081
console.service.healthPortintDedicated health-connector port8082
console.service.nodePortintNodePort used only when service.type is NodePort (valid range 30000-32767)30081
console.service.loadBalancerIPstringStatic IP used only when service.type is LoadBalancer (MetalLB/cloud)""
console.heap.initialstringJVM initial heap size (JAVA_HEAP_INITIAL)"512m"
console.heap.maxstringJVM max heap size (JAVA_HEAP_MAX); keep console.resources.limits.memory well above this for JVM overhead"8g"
console.resources.requestsobjectConsole container resource requests{"cpu":"500m","memory":"1Gi"}
console.resources.limitsobjectConsole container resource limits; leave headroom above heap.max for JVM overhead{"memory":"12Gi"}
console.persistence.sizestringSize of the console's /data PVC (keystores, settings, agent keys, reports)"10Gi"
console.persistence.storageClassstringStorageClass for the console PVC; falls back to storage.className when empty""
console.auditWorkspace.sizeLimitstringSize limit of the console's ephemeral audit scratch volume (emptyDir)"5Gi"
console.probes.pathstringHTTP path used by the startup, readiness, and liveness probes below"/api/version"
console.probes.startupobjectStartup probe timing (periodSeconds, failureThreshold) — covers JVM + application warmup{"failureThreshold":12,"periodSeconds":10}
console.probes.readinessobjectReadiness probe timing (initialDelaySeconds, periodSeconds, failureThreshold){"failureThreshold":3,"initialDelaySeconds":20,"periodSeconds":10}
console.probes.livenessobjectLiveness probe timing (initialDelaySeconds, periodSeconds, failureThreshold){"failureThreshold":5,"initialDelaySeconds":45,"periodSeconds":30}

Pipeline agents​

KeyTypeDescriptionDefault
pipeline.waitForConsoleboolAdd a wait-for-console init container to all agent pods that polls /api/version before the agent starts, avoiding a restart loop on fresh installs where agents start before the console HTTP endpoint is readytrue
pipeline.terminationGracePeriodSecondsintGrace period (seconds) for pod shutdown; must be long enough for the preStop hook (deregisters the agent from the console) to complete before SIGTERM is sent30
pipeline.commonEnv.AGENT_LOG_LEVELstringLog level applied to every pipeline agent"INFO"
pipeline.commonEnv.WORKER_COUNTstringWorker thread/process count applied to every pipeline agent"4"
pipeline.stages.extraction.enabledboolEnable the extraction agent stagetrue
pipeline.stages.extraction.workloadstringStatefulSet so the per-pod PVC persists the agent's minted token across restarts"StatefulSet"
pipeline.stages.extraction.replicasintExtraction agent replica count1
pipeline.stages.extraction.image.namestringExtraction agent image repository"extraction-agent"
pipeline.stages.extraction.image.tagstringExtraction agent image tag"1.0.0"
pipeline.stages.extraction.image.digeststringExtraction agent image digest ("sha256:..."); takes priority over tag when set""
pipeline.stages.extraction.resources.requestsobjectExtraction agent resource requests{"cpu":"500m","memory":"512Mi"}
pipeline.stages.extraction.resources.limitsobjectExtraction agent resource limits{"memory":"2Gi"}
pipeline.stages.extraction.persistence.sizestringSize of the extraction agent's per-pod PVC (/var/lib/argus — agent token + state)"1Gi"
pipeline.stages.extraction.persistence.storageClassstringStorageClass for the extraction agent PVC; falls back to storage.className when empty""
pipeline.stages.extraction.portslistPorts exposed by the extraction agent: agent ingress (9101), in-pod Tika (9998), metrics (9100)[9100,9101,9998]
pipeline.stages.extraction.agentKeystringPre-minted agent token; leave empty for self-enrollment via the shared enrollment token""
pipeline.stages.extraction.env.AGENT_STAGEstringPipeline stage identifier reported by this agent"extraction"
pipeline.stages.extraction.env.AGENT_MAX_CONCURRENT_JOBSstringMaximum concurrent extraction jobs per pod"4"
pipeline.stages.extraction.probeobjectStartup/health probe: TCP check on the agent ingress port, which only opens once Tika is ready; startupFailureThreshold covers slow/CPU-starved dev environments{"port":9101,"startupFailureThreshold":60,"type":"tcp"}
pipeline.stages.extraction.scratch.enabledboolEnable the ephemeral processing scratch volumetrue
pipeline.stages.extraction.scratch.typestringScratch volume type — emptyDir, or pvc for large ingest volumes"emptyDir"
pipeline.stages.extraction.scratch.sizeLimitstringScratch volume size limit"10Gi"
pipeline.stages.extraction.scratch.paths[0]stringTika fork watchdog scratch (java.io.tmpdir)"/tmp/tika-scratch"
pipeline.stages.extraction.scratch.paths[1]stringPipeline file staging + tmpjanitor sweep target"/tmp/argus-pipeline"
pipeline.stages.classify.enabledboolEnable the classify agent stagetrue
pipeline.stages.classify.workloadstringStatefulSet so the per-pod PVC persists the agent's minted token across restarts"StatefulSet"
pipeline.stages.classify.replicasintClassify agent replica count2
pipeline.stages.classify.image.namestringClassify agent image repository"classify-agent"
pipeline.stages.classify.image.tagstringClassify agent image tag"1.0.0"
pipeline.stages.classify.image.digeststringClassify agent image digest ("sha256:..."); takes priority over tag when set""
pipeline.stages.classify.resources.requestsobjectClassify agent resource requests{"cpu":"1","memory":"2Gi"}
pipeline.stages.classify.resources.limitsobjectClassify agent resource limits{"memory":"10Gi"}
pipeline.stages.classify.persistence.sizestringSize of the classify agent's per-pod PVC (/var/lib/argus — agent token + state)"1Gi"
pipeline.stages.classify.persistence.storageClassstringStorageClass for the classify agent PVC; falls back to storage.className when empty""
pipeline.stages.classify.portslistPorts exposed by the classify agent: agent ingress (9101), uvicorn classify API (5012), metrics (9100)[9100,9101,5012]
pipeline.stages.classify.agentKeystringPre-minted agent token; leave empty for self-enrollment via the shared enrollment token""
pipeline.stages.classify.env.AGENT_STAGEstringPipeline stage identifier reported by this agent"classify"
pipeline.stages.classify.env.AGENT_MAX_CONCURRENT_JOBSstringMaximum concurrent classify jobs per pod"2"
pipeline.stages.classify.probeobjectHealth probe: HTTP POST to /classify; startupFailureThreshold covers Presidio model load (~60s){"body":"{\"text\":\"healthcheck\",\"threshold\":0.5}","path":"/classify","port":5012,"startupFailureThreshold":8,"type":"httpPost"}
pipeline.stages.classify.scratch.enabledboolEnable the ephemeral processing scratch volumetrue
pipeline.stages.classify.scratch.typestringScratch volume type — emptyDir, or pvc for large ingest volumes"emptyDir"
pipeline.stages.classify.scratch.sizeLimitstringScratch volume size limit"4Gi"
pipeline.stages.classify.scratch.paths[0]stringPipeline file staging + tmpjanitor sweep target"/tmp/argus-pipeline"
pipeline.stages.lc.enabledboolEnable the linguistic-coherence (lc) agent stagetrue
pipeline.stages.lc.workloadstringStatefulSet so the per-pod PVC persists the agent's minted token across restarts"StatefulSet"
pipeline.stages.lc.replicasintLC agent replica count2
pipeline.stages.lc.image.namestringLC agent image repository"lc-agent"
pipeline.stages.lc.image.tagstringLC agent image tag"1.0.0"
pipeline.stages.lc.image.digeststringLC agent image digest ("sha256:..."); takes priority over tag when set""
pipeline.stages.lc.resources.requestsobjectLC agent resource requests{"cpu":"4","memory":"12Gi"}
pipeline.stages.lc.resources.limitsobjectLC agent resource limits — large multi-chunk documents need headroom for the transient scoring memory peak{"memory":"12Gi"}
pipeline.stages.lc.persistence.sizestringSize of the LC agent's per-pod PVC (/var/lib/argus — agent token + state)"1Gi"
pipeline.stages.lc.persistence.storageClassstringStorageClass for the LC agent PVC; falls back to storage.className when empty""
pipeline.stages.lc.portslistPorts exposed by the LC agent: agent ingress (9101), uvicorn lc API (5019), metrics (9100)[9100,9101,5019]
pipeline.stages.lc.agentKeystringPre-minted agent token; leave empty for self-enrollment via the shared enrollment token""
pipeline.stages.lc.env.AGENT_STAGEstringPipeline stage identifier reported by this agent"lc"
pipeline.stages.lc.env.AGENT_MAX_CONCURRENT_JOBSstringMaximum concurrent lc jobs per pod"2"
pipeline.stages.lc.env.LC_APP_MAX_CONCURRENCYstringMaximum concurrent requests the lc application itself will process"2"
pipeline.stages.lc.env.LC_INTERNAL_PARALLELISMstringInternal model parallelism within a single lc request"3"
pipeline.stages.lc.probeobjectHealth probe: HTTP POST to /analyze/text; startupFailureThreshold covers HF model load (~120s){"body":"{\"text\":\"healthcheck\",\"filename\":\"hc.txt\",\"mime_type\":\"text/plain\"}","path":"/analyze/text","port":5019,"startupFailureThreshold":16,"type":"httpPost"}
pipeline.stages.lc.scratch.enabledboolEnable the ephemeral processing scratch volumetrue
pipeline.stages.lc.scratch.typestringScratch volume type — emptyDir, or pvc for large ingest volumes"emptyDir"
pipeline.stages.lc.scratch.sizeLimitstringScratch volume size limit"4Gi"
pipeline.stages.lc.scratch.paths[0]stringPipeline file staging + tmpjanitor sweep target"/tmp/argus-pipeline"

PostgreSQL​

KeyTypeDescriptionDefault
postgres.enabledboolEnable the bundled Postgres cluster (CloudNativePG)true
postgres.databasestringPostgres database name"aisec"
postgres.ownerstringPostgres database owner role"aisec"
postgres.instancesintNumber of Postgres instances (CNPG HA) — needs 3 worker nodes for real HA1
postgres.image.registrystringPostgres image registry; set explicitly so this doesn't fall back to default.image.registry"ghcr.io/cloudnative-pg"
postgres.image.namestringPostgres image repository"postgresql"
postgres.image.tagstringPostgres image tag — pinned to a fixed, known version instead of CNPG's own auto-selected default"17.10"
postgres.image.digeststringPostgres image digest ("sha256:..."); takes priority over tag when set""
postgres.storage.sizestringSize of the Postgres data PVC"100Gi"
postgres.storage.storageClassstringStorageClass for the Postgres PVC; falls back to storage.className when empty""
postgres.resources.requestsobjectPostgres container resource requests{"cpu":"250m","memory":"512Mi"}
postgres.resources.limitsobjectPostgres container resource limits{"cpu":"1","memory":"1Gi"}

ClickHouse​

KeyTypeDescriptionDefault
clickhouse.enabledboolEnable the bundled ClickHouse installation (Altinity operator)true
clickhouse.httpPortintClickHouse HTTP port8123
clickhouse.userstringClickHouse username"aisec"
clickhouse.databasestringClickHouse database name"aisec"
clickhouse.image.registrystringRegistry for the ClickHouse image; a public image, does not use default.image.registry"docker.io"
clickhouse.image.namestringClickHouse image repository"clickhouse/clickhouse-server"
clickhouse.image.tagstringClickHouse image tag — pinned to the 26.3 LTS branch's latest patch"26.3.10.62"
clickhouse.image.digeststringClickHouse image digest ("sha256:..."); takes priority over tag when set""
clickhouse.storage.sizestringSize of the ClickHouse data PVC"500Gi"
clickhouse.storage.storageClassstringStorageClass for the ClickHouse PVC; falls back to storage.className when empty""
clickhouse.resources.requestsobjectClickHouse container resource requests{"cpu":"2","memory":"8Gi"}
clickhouse.resources.limitsobjectClickHouse container resource limits{"cpu":"4","memory":"48Gi"}
clickhouse.shardsCountintNumber of ClickHouse shards1
clickhouse.retentionConfigboolSystem-log retention config (files/clickhouse/), injected into the CHI — caps unbounded system._log growth via logger=warning + TTLs on the system tablestrue
clickhouse.podSecurityContext.runAsUserintUser ID the ClickHouse container runs as — keep pinned on every platform, including OpenShift101
clickhouse.podSecurityContext.runAsGroupintGroup ID the ClickHouse container runs as — keep pinned on every platform, including OpenShift101
clickhouse.podSecurityContext.fsGroupintGroup ID that owns the ClickHouse data volume — keep pinned on every platform, including OpenShift101

Exposing the console (Ingress and Route)​

KeyTypeDescriptionDefault
ingress.enabledboolEnable the console Ingress. On OpenShift, either this (with className: openshift-default, relying on the ingress-to-route sync controller) or route.enabled below works — both confirmed live, see K8S-INSTALL-GUIDE.md's OpenShift sectiontrue
ingress.classNamestringIngress class: "nginx", "haproxy", "openshift-default" (OpenShift's ingress-to-route sync), or any custom class""
ingress.hoststringConsole hostname"aisec.local"
ingress.pathstringIngress path"/"
ingress.annotationsobjectExtra annotations, merged last — always wins over controllerDefaults below{}
ingress.tls.enabledboolEnable TLS on the Ingresstrue
ingress.tls.secretNamestringTLS secret name; auto-generated when tls.generate is true"<fullname>-tls" (when tls.generate is true)
ingress.tls.generateboolGenerate a self-signed TLS certificate at install time (no cert-manager needed); the certificate is preserved across upgrades so browsers don't see a new cert each timetrue
ingress.tls.forceRedirectboolInject an ssl-redirect annotation automatically when tls.enabled is truetrue
ingress.controllerDefaults.nginx."nginx.ingress.kubernetes.io/proxy-body-size"stringMaximum request body size accepted by the ingress-nginx controller"100m"
ingress.controllerDefaults.nginx."nginx.ingress.kubernetes.io/proxy-read-timeout"stringUpstream read timeout (seconds) for the ingress-nginx controller"3600"
ingress.controllerDefaults.nginx."nginx.ingress.kubernetes.io/proxy-send-timeout"stringUpstream send timeout (seconds) for the ingress-nginx controller"3600"
ingress.controllerDefaults.haproxy."haproxy.org/client-max-body-size"stringMaximum request body size accepted by the HAProxy Technologies controller"100m"
ingress.controllerDefaults.haproxy."haproxy.org/timeout-client"stringClient timeout for the HAProxy Technologies controller"3600s"
ingress.controllerDefaults.haproxy."haproxy.org/timeout-server"stringServer timeout for the HAProxy Technologies controller"3600s"
route.enabledboolEnable an OpenShift Route; set this true AND ingress.enabled false together on OpenShiftfalse
route.hoststringConsole hostname for the Route""
route.tls.terminationstringRoute TLS termination mode: edge, passthrough, or reencrypt"edge"
route.tls.insecureEdgeTerminationPolicystringHTTP-to-HTTPS behavior — Redirect, or None to allow plain HTTP"Redirect"

Secrets​

KeyTypeDescriptionDefault
secrets.createboolLet the chart create its Secrets; set false when supplying your own (External Secrets, sealed-secrets)true
secrets.postgres.usernamestringPostgres username"aisec"
secrets.postgres.passwordstringPostgres passwordauto-generated (randAlphaNum) if left empty
secrets.clickhouse.passwordstringClickHouse passwordauto-generated (randAlphaNum) if left empty
secrets.enrollmentTokenstringPer-customer agent enrollment token, presented by every agent on first bootauto-generated (unique per install) if left empty
secrets.agentKekstringPer-install key-encryption-key used to encrypt each agent's cached token at restauto-generated (unique per install) if left empty
secrets.attestationKeystringShared secret for AI support bot attestation; left empty disables attestation signing entirely""

Operators​

KeyTypeDescriptionDefault
operators.cnpg.installboolDeploy the bundled CloudNativePG controller (CRD: postgresql.cnpg.io/v1)true
operators.clickhouse.installboolDeploy the bundled Altinity ClickHouse operator (CRD: clickhouse.altinity.com/v1)true
cloudnative-pg.image.repositorystringCloudNativePG operator image repository (full path, registry included)"ghcr.io/cloudnative-pg/cloudnative-pg"
cloudnative-pg.image.tagstringCloudNativePG operator image tag"1.30.0"
cloudnative-pg.config.clusterWideboolLet the CNPG operator watch every namespace on the cluster instead of just this release's ownfalse
altinity-clickhouse-operator.operator.image.registrystringOptional registry prefix for the Altinity operator image; empty uses Docker Hub directly""
altinity-clickhouse-operator.operator.image.repositorystringAltinity ClickHouse operator image repository"altinity/clickhouse-operator"
altinity-clickhouse-operator.operator.image.tagstringAltinity ClickHouse operator image tag"0.27.1"
altinity-clickhouse-operator.metrics.image.registrystringOptional registry prefix for the Altinity metrics-exporter image; empty uses Docker Hub directly""
altinity-clickhouse-operator.metrics.image.repositorystringAltinity metrics-exporter sidecar image repository"altinity/metrics-exporter"
altinity-clickhouse-operator.metrics.image.tagstringAltinity metrics-exporter sidecar image tag"0.27.1"

Availability and scheduling​

KeyTypeDescriptionDefault
podDisruptionBudget.enabledboolCreate a PodDisruptionBudget for every workload with replicas > 1true
podDisruptionBudget.minAvailableintMinimum available pods to maintain during a voluntary disruption1
topologySpread.enabledboolAdd a hostname topologySpreadConstraint per multi-replica agent stagefalse
scheduling.nodeSelectorobjectNode selector applied to all workloads{}
scheduling.affinityobjectAffinity rules applied to all workloads (only nodeAffinity reaches Postgres/ClickHouse){}
scheduling.tolerationslistTolerations applied to all workloads[]

Network policy​

KeyTypeDescriptionDefault
networkPolicy.enabledboolEnable default-deny NetworkPolicies plus the explicit allows belowfalse
networkPolicy.dnsNamespacestringNamespace where CoreDNS runs; egress :53 is allowed to it from all pods"kube-system"
networkPolicy.ingressControllerNamespacestringIngress controller namespace, allowed to reach console :8081; empty allows :8081 from ANY namespace""
networkPolicy.dataTierOperatorNamespaceslistCNPG + Altinity operator namespaces, allowed to reach Postgres/ClickHouse (e.g. ["cnpg-system", "kube-system"])[]
networkPolicy.apiServerCidrslistKubernetes API server IPs, allowed for the console's cluster-scan egress["0.0.0.0/0"]
networkPolicy.consoleExternal.cidrslistCIDRs the console is allowed to reach externally (PowerScale/ECS mgmt, CVE feeds)["0.0.0.0/0"]
networkPolicy.consoleExternal.portslistPorts the console is allowed to reach externally[443,4443]
networkPolicy.extraction.sftpCidrslistCIDRs the extraction agent is allowed to reach over SFTP (PowerScale data interface)["0.0.0.0/0"]
networkPolicy.extraction.sftpPortintSFTP port22
networkPolicy.extraction.s3CidrslistCIDRs the extraction agent is allowed to reach over S3 (ECS/ObjectScale endpoint)["0.0.0.0/0"]
networkPolicy.extraction.s3PortslistS3 ports[443,9020,9021]

Service account and RBAC​

KeyTypeDescriptionDefault
serviceAccount.createboolCreate a ServiceAccount for the consoletrue
serviceAccount.namestringServiceAccount name override"<fullname>-console"
serviceAccount.annotationsobjectExtra annotations for the ServiceAccount{}
rbac.createboolCreate the console's ClusterRole/ClusterRoleBinding (needed for cluster scanning)true