Documentation menu

Helm Chart Reference

All configurable values for the DataAgent agent Helm chart.

Install or upgrade the chart:

# Install
helm upgrade --install dataagent oci://ghcr.io/data-agent-co/dataagent-chart \
  --version <version> \
  --namespace dataagent --create-namespace \
  --set config.authToken=<token> \
  --set config.clusterName=<name> \
  --set imageCredentials.password=<pull-password> \
  --wait --timeout 10m

# Upgrade
helm upgrade dataagent oci://ghcr.io/data-agent-co/dataagent-chart \
  --namespace dataagent --reset-then-reuse-values

Top-level

KeyTypeDefaultDescription
namespacestringdataagentKubernetes namespace to deploy into
createNamespaceboolfalseCreate the namespace if it does not exist. Set to false when the namespace is managed externally (ArgoCD, GitOps)
replicaCountint1Number of orchestrator pod replicas. Keep at 1 — the agent is stateful per cluster
nameOverridestringdataagentOverride the resource name prefix
fullnameOverridestring""Override the full resource name

image — Orchestrator image

KeyTypeDefaultDescription
image.repositorystringghcr.io/data-agent-co/dataagent/orchestratorContainer image repository
image.pullPolicystringIfNotPresentImage pull policy
image.tagstring""Image tag. Defaults to the chart’s appVersion when empty

imageCredentials — GHCR authentication

KeyTypeDefaultDescription
imageCredentials.passwordstring""Image pull password from the dashboard’s Connect flow — you do not create it yourself. Creates an imagePullSecret automatically, and is also used by the fetch-ca-cert init container to fetch the agent’s CA certificate. When empty, neither is created, so set config.tlsCACert instead

config — Agent configuration

KeyTypeDefaultDescription
config.authTokenstring""Required. JWT auth token from the DataAgent dashboard
config.clusterNamestring""Human-readable cluster name shown in the dashboard. Always set it
config.agentNamestring""Agent identifier. Defaults to the pod name when empty
config.hubUrlstringtunnel.data-agent.co:443Tunnel Broker endpoint. Do not change unless instructed by support
config.heartbeatIntervalduration30sHow often the agent sends a heartbeat to the Hub
config.reconnectDelayduration5sInitial delay before reconnecting after a dropped connection
config.maxReconnectDelayduration60sMaximum back-off delay between reconnection attempts
config.tlsEnabledbooltrueEnable mTLS for the Hub connection. Must be true in production
config.tlsInsecureboolfalseSkip TLS certificate verification. Never set to true in production
config.tlsCACertstring""PEM-encoded CA certificate for manual override. When set, the chart mounts it at /etc/ssl/dataagent/ca.crt and skips the init container fetch

metricsCollector — Metrics collector sidecar

Collects pod, node, and workload metrics and streams them to the Hub for use in AI enrichment.

KeyTypeDefaultDescription
metricsCollector.enabledbooltrueEnable the metrics collector sidecar
metricsCollector.config.metricsIntervalduration60sCollection interval. Must be between 10s and 1h
metricsCollector.config.healthPortint8086Health server port
metricsCollector.config.k8sQPSint50Kubernetes API client max requests per second
metricsCollector.config.k8sBurstint100Kubernetes API client burst limit
metricsCollector.resources.limits.cpustring2000mCPU limit
metricsCollector.resources.limits.memorystring2GiMemory limit
metricsCollector.resources.requests.cpustring100mCPU request
metricsCollector.resources.requests.memorystring128MiMemory request

topologyAnalyzer — Topology analyzer sidecar

Builds a resource graph of your cluster and sends it to the Hub for relationship-aware analysis. It also runs the K8sGPT analysis in-process — there is no separate K8sGPT container. Disabling it turns off K8sGPT-based detection too.

KeyTypeDefaultDescription
topologyAnalyzer.enabledbooltrueEnable the topology analyzer sidecar
topologyAnalyzer.config.topoServerPortint8083Port the orchestrator’s topology service listens on (localhost only)
topologyAnalyzer.config.healthPortint8084Health and readiness probe port
topologyAnalyzer.config.resyncPeriodduration30mHow often the informer re-delivers its cached objects to its handlers (a resync, not an API re-list); the watch keeps the cache current between resyncs. Set to 0 to disable periodic resync entirely
topologyAnalyzer.config.snapshotIntervalduration5mHow often to send a full snapshot to the Hub
topologyAnalyzer.config.goMemLimitstring1638MiBSoft memory ceiling for the Go runtime (GOMEMLIMIT). Integer plus MiB or GiB only. Keep at ~80% of resources.limits.memory — it must stay below the limit; the chart refuses to render when it isn’t (checked when the limit uses Mi/Gi units). Set "" to unset
topologyAnalyzer.resources.limits.cpustring2000mCPU limit
topologyAnalyzer.resources.limits.memorystring2GiMemory limit. Informer-cache residency scales with total cluster object count — raise together with config.goMemLimit on very large clusters
topologyAnalyzer.resources.requests.cpustring100mCPU request
topologyAnalyzer.resources.requests.memorystring512MiMemory request. Higher than the other containers because this one keeps a copy of every cluster object it watches

topologyAnalyzer.analyze — K8sGPT analysis loop

These values pace the K8sGPT analysis that runs inside the topology analyzer.

KeyTypeDefaultDescription
topologyAnalyzer.analyze.portint8093Loopback port the analysis engine serves on (localhost only, never exposed as a Service)
topologyAnalyzer.analyze.intervalduration30sTarget time between the start of one analysis run and the next
topologyAnalyzer.analyze.minGapduration15sMinimum pause after a run finishes, so a slow run is never followed immediately by another
topologyAnalyzer.analyze.timeoutduration10mMaximum duration of a single analysis run
topologyAnalyzer.analyze.readyTimeoutduration120sHow long the agent waits at startup for the analysis engine to become ready before exiting. Covers the first cache sync on large clusters

watcher — Event and ConfigMap watcher sidecar

Watches Kubernetes Warning events and ConfigMap changes and turns them into signals.

KeyTypeDefaultDescription
watcher.enabledbooltrueEnable the watcher sidecar. false removes the container
watcher.resources.limits.cpustring2000mCPU limit
watcher.resources.limits.memorystring2GiMemory limit
watcher.resources.requests.cpustring100mCPU request
watcher.resources.requests.memorystring128MiMemory request

To report changes to a specific ConfigMap at critical severity, label it dataagent.io/critical: "true".


logWatcher — Log watcher sidecar

Follows pod log streams and matches lines against a built-in library of known error patterns, so application errors that never show up in pod status are still detected.

KeyTypeDefaultDescription
logWatcher.enabledbooltrueEnable the log watcher sidecar. false removes the container
logWatcher.config.namespaceslist[]Namespaces whose pod logs are read. Empty means all namespaces. A non-empty list scopes the log watcher’s own RBAC grant to those namespaces, but it does not remove cluster-wide pod-log read: the topology analyzer’s ClusterRole grants pods/log cluster-wide to the same service account. That remains unless you also set topologyAnalyzer.enabled=false
logWatcher.config.containerFilterlist[istio-proxy, linkerd-proxy]Container names whose logs are never read
logWatcher.config.customPatternsstring""Your own patterns (YAML, patterns: [{name, regex, severity, fault_class}]), merged with the built-in library. A pattern with the same name as a built-in one replaces it
logWatcher.resources.limits.cpustring2000mCPU limit
logWatcher.resources.limits.memorystring2GiMemory limit
logWatcher.resources.requests.cpustring100mCPU request
logWatcher.resources.requests.memorystring128MiMemory request

liveRead — Live object lookups during analysis

Lets root-cause analysis read the current state of individual Kubernetes objects during an incident, instead of only the snapshot the agent collected earlier. The lookups run as a separate dataagent-live-read ServiceAccount bound to the built-in view ClusterRole, which cannot read Secrets.

KeyTypeDefaultDescription
liveRead.enabledbooltrueCreate the live-read ServiceAccount. false removes it and turns the feature off
liveRead.extraReadRuleslist[]Extra RBAC read rules for custom resources the view role cannot see. Name specific API groups — never use a wildcard, which would also grant Secret access

da-monitoring — Bundled monitoring stack

KeyTypeDefaultDescription
da-monitoring.enabledbooltrueInstall the bundled monitoring pods: prometheus-server, kube-state-metrics, and node-exporter (one per node). They collect infrastructure metrics only — your application metrics are never scraped. The bundled Prometheus is the only Prometheus the agent supports, so setting this to false turns off Prometheus-based detection

Connecting the agent to a Prometheus you already run is not supported. Your own monitoring stack is optional and can keep running alongside the bundled one for your application metrics.

helm uninstall removes these pods along with the agent.


Orchestrator resources

KeyTypeDefaultDescription
resources.limits.cpustring2000mCPU limit
resources.limits.memorystring2GiMemory limit
resources.requests.cpustring100mCPU request
resources.requests.memorystring128MiMemory request
healthPortint8087Liveness (/health) and readiness (/ready) probe port

Scheduling

KeyTypeDefaultDescription
nodeSelectorobject{}Node selector labels. The agent images support both amd64 and arm64 (including Graviton), so no selector is needed. Supply your own to constrain scheduling
tolerationslist[]Pod tolerations
affinityobject{}Pod affinity rules
podAnnotationsobject{}Annotations added to the agent pod

Security

All containers run with a hardened security context by default. These values should not be changed.

SettingValue
runAsNonRoottrue
runAsUser1000
fsGroup1000
readOnlyRootFilesystemtrue
allowPrivilegeEscalationfalse
capabilities.dropALL
seccompProfileRuntimeDefault

RBAC

KeyTypeDefaultDescription
rbac.createbooltrueCreate all of the agent’s RBAC — every Role, ClusterRole, and binding listed on Agent permissions. Set to false only if you bind your own. The bundled monitoring pods’ RBAC is not affected; it follows da-monitoring.enabled
serviceAccount.createbooltrueCreate a dedicated service account
serviceAccount.namestring""Override the service account name. Defaults to the release name