Shared Helm Values

Helm values available in all three Edge Delta charts (node agent, gateway, coordinator).

These values are available in all three Edge Delta Helm charts: edgedelta/edgedelta (node agent), edgedelta/edgedelta-gateway, and edgedelta/edgedelta-coordinator.

For chart-specific values, see:

Authentication

VariableDefaultDescription
apiKey""Plaintext pipeline ID. Not recommended for production. Use secretApiKey instead.
secretApiKey.value""Pipeline ID stored as a Kubernetes Secret.
secretApiKey.name""Name of the Kubernetes Secret object. Defaults to ed-api-key.
secretApiKey.key"ed-api-key"Key within the Secret.
secretApiKey.enablefalseSet true when creating templates from charts.

Use either apiKey or secretApiKey.value, not both.

For production, store the pipeline ID in a secrets management tool. See Continuous Deployment.

Example:

helm upgrade edgedelta edgedelta/edgedelta -i \
  --set secretApiKey.value=<pipeline-id> \
  -n edgedelta --create-namespace

Environment Variables

These top-level Helm values map to environment variables injected into agent containers.

VariableDefaultDescription
edBackendDisabled""true to run fully offline — agents never contact the SaaS backend.
edClusterName""Friendly cluster name shown in the UI.
edSkipConfDownload""true to skip fetching config from backend. Combine with edConfigContent.
edDisableLeaderElection""true disables processor leader-election loop (single-agent labs).
edTraceFiles""Enable file tracing (debug only).
edAggregatorTraceFiles""Same as above but for aggregator mode.
edConfigContent""Base64-encoded full pipeline YAML injected directly into the agent.
edSkipTlsVerify""true to ignore SSL/TLS certificate errors.
edSuppressionMode""Suppress duplicate issue notifications across agents.
edEnableControllerDiscoverytrueEnables Kubernetes controller discovery.
goMemLimit""Go runtime memory limit for the main agent process.

Leave a value empty ("") to accept the chart’s default behavior.

Custom Tags

Variable: edCustomTags

Custom tags are pipe (|) delimited key:value pairs attached to all outgoing data from Edge Delta agents.

Example:

--set edCustomTags="cluster:prod_us_west_2|provider:aws|region:us_west_2"

Verify by checking the ED_CUSTOM_TAGS environment variable on the pod:

kubectl describe pod <pod-name> -n edgedelta

Tag Override

VariableDefaultDescription
edTagOverride""Override the pipeline tag. Use to deploy two pipelines with the same configuration.

Image

VariableDefaultDescription
repositorygcr.io/edgedeltaContainer registry.
image.nameagentImage name.
image.tag""Image tag. Defaults to chart appVersion.
image.fullPath""Full image path including registry and tag. Overrides repository + image.name + image.tag.
image.pullPolicyIfNotPresentImage pull policy: Always, IfNotPresent, or Never.
image.pullSecrets[]Image pull secrets for private registries.

Example:

--set image.pullPolicy=Always

RBAC

Starting with agent version v2.12.0, ClusterRole RBAC rules are defined in values.yaml rather than being hardcoded in chart templates.

rbac.scope

Variable: rbac.scope (default: cluster)

Requires agent version v2.24.0 or higher.

Selects whether the chart creates cluster-scoped or namespace-scoped RBAC.

ValueBehavior
clusterCreates a ClusterRole and ClusterRoleBinding from clusterRoleRules.
namespaceCreates a Role and RoleBinding in the release namespace from roleRules.

A Role cannot grant access to cluster-scoped resources, so node-level metrics and cluster-wide discovery are not available with namespace scope. The target allocator keeps its own cluster-scoped RBAC when targetAllocator.enabled is true, since it discovers scrape targets across the cluster.

rbac:
  scope: namespace

clusterRoleRules

Variable: clusterRoleRules

Defines the complete set of ClusterRole rules for the Edge Delta service account. See the full default rule set in the chart values.yaml.

Replacing clusterRoleRules overrides the entire default rule set. To add permissions for custom resources, use additionalClusterRoleRules instead.

Example — minimal baseline:

clusterRoleRules:
  - apiGroups: [""]
    resources: ["namespaces", "pods", "pods/log", "events", "nodes", "nodes/metrics", "services", "endpoints"]
    verbs: ["get", "watch", "list"]
  - apiGroups: [""]
    resources: ["events"]
    verbs: ["create"]
  - apiGroups: ["coordination.k8s.io"]
    resources: ["leases"]
    verbs: ["get", "list", "watch", "create", "update", "patch", "delete"]

additionalClusterRoleRules

Variable: additionalClusterRoleRules (default: [])

Appends extra ClusterRole rules without modifying the base rules.

Example — grant access to ArgoCD CRDs:

additionalClusterRoleRules:
  - apiGroups: ["argoproj.io"]
    resources: ["applications", "appprojects"]
    verbs: ["get", "list", "watch"]

See Kubernetes Event Source — Custom Resource Permissions for a walkthrough.

roleRules

Variable: roleRules

Requires agent version v2.24.0 or higher.

Defines the Role rules used when rbac.scope is namespace. It is ignored when the scope is cluster.

rbac:
  scope: namespace
roleRules:
  - apiGroups: [""]
    resources: ["namespaces", "pods", "pods/log", "events", "services", "endpoints"]
    verbs: ["get", "watch", "list"]
  - apiGroups: ["coordination.k8s.io"]
    resources: ["leases"]
    verbs: ["get", "list", "watch", "create", "update", "patch", "delete"]

resourceNames

Requires agent version v2.24.0 or higher.

Rules in clusterRoleRules, additionalClusterRoleRules, and roleRules accept an optional resourceNames list that restricts a rule to specific named resources.

additionalClusterRoleRules:
  - apiGroups: ["argoproj.io"]
    resources: ["appprojects"]
    resourceNames: ["default"]
    verbs: ["get"]

Pod Security

Configure pod security policies, Security Context Constraints (SCC) for OpenShift, SELinux labels, and AppArmor profiles.

VariableDefaultDescription
podSecurity.securityContextConstraints.createfalseCreate an OpenShift SCC or PodSecurityPolicy.
podSecurity.privilegedfalseGrant privileged: true to containers. Required for eBPF tracer.
podSecurity.seLinuxContext.typeMustRunAsSELinux context type.
podSecurity.seLinuxContext.seLinuxOptions.typespc_tSELinux label.
podSecurity.apparmor.enabledfalseEnable AppArmor profile enforcement.
podSecurity.apparmor.profileunconfinedAppArmor profile name.
podSecurity.capabilities(11 capabilities)Allowed Linux capabilities.
podSecurity.volumes[configMap, downwardAPI, emptyDir, hostPath, secret]Allowed volume types.
podSecurity.seccompProfiles["runtime/default"]Allowed seccomp profiles.

Example:

podSecurity:
  securityContextConstraints:
    create: true
  privileged: true
  seLinuxContext:
    type: MustRunAs
    seLinuxOptions:
      type: spc_t

Service Account

VariableDefaultDescription
serviceAccount.labels{}Labels for the service account.
serviceAccount.annotations{}Annotations for the service account (e.g., for IRSA).

Networking

VariableDefaultDescription
httpProxy""HTTP proxy for outbound traffic.
httpsProxy""HTTPS proxy for outbound traffic.
noProxy""Comma-separated list of hosts/CIDRs that bypass the proxy.

Example:

--set httpProxy="http://corp-proxy:8080" \
--set httpsProxy="http://corp-proxy:8443" \
--set noProxy="169.254.169.254,10.0.0.0/8,.svc.cluster.local"

See Proxy Configuration for detailed guidance.

Network Policy

VariableDefaultDescription
networkPolicy.enabledfalseCreate a network policy for Edge Delta pods.
networkPolicy.typeciliumPolicy type. Currently supports cilium.

Example — Cilium egress policy:

networkPolicy:
  enabled: true
  type: cilium
  cilium:
    dnsSelector:
      toEndpoints:
        - matchLabels:
            k8s-app: kube-dns
    customEndpoints:
      toFQDNs:
        - matchName: api.edgedelta.com
      toPorts:
        - ports:
            - port: "443"
              protocol: TCP

Resources

VariableDefaultDescription
resources.limits.cpu2000mMaximum CPU for agent pods.
resources.limits.memory2GiMaximum memory for agent pods.
resources.requests.cpu200mMinimum CPU for scheduling.
resources.requests.memory256MiMinimum memory for scheduling.
priorityClassName""PriorityClass for agent pods. Higher priority pods can preempt lower priority pods.

See Reducing Agent Resource Consumption for optimization strategies.

Scheduling

VariableDefaultDescription
annotations{}Custom annotations for pods.
nodeSelector{}Node selector labels for pod scheduling.
tolerations{}Tolerations for scheduling on tainted nodes.
updateStrategy.typeRollingUpdateUpdate strategy type.
updateStrategy.rollingUpdate.maxUnavailable1Max unavailable pods during rolling update.

Health Probes and Disruption Budgets

Requires agent version v2.24.0 or higher.

Each workload accepts probes, container lifecycle hooks, and a termination grace period, and most also accept a pod disruption budget. The values live under the key for that workload, which differs per chart:

ChartWorkloadValues key
Node agentDaemonset and processor deploymentdeployment
Node agentAggregatoraggregatorProps
Node agentCompactorcompactorProps
Node agentRolluprollUpProps
Node agentTarget allocatortargetAllocator
GatewayDeploymentdeployment
GatewayCompactorcompactorProps
GatewayRolluprollUpProps
CoordinatorDeploymenttop level, with no prefix

The daemonset and the processor deployment read the same deployment key, so a probe set there applies to both.

VariableDefaultDescription
<key>.livenessProbe{}Liveness probe for the container. Empty means no probe.
<key>.readinessProbe{}Readiness probe for the container. Empty means no probe.
<key>.startupProbe{}Startup probe for the container. Empty means no probe.
<key>.lifecycle{}Container lifecycle hooks, such as preStop.
<key>.terminationGracePeriodSeconds10 for the daemonset, processor deployment, and aggregator; 60 for the compactor, rollup, and target allocatorHow long Kubernetes waits for the pod to exit before killing it.
<key>.podDisruptionBudget.enabledfalseCreates a PodDisruptionBudget for the workload.
<key>.podDisruptionBudget.minAvailableunsetMinimum pods that must stay available.
<key>.podDisruptionBudget.maxUnavailableunsetMaximum pods that may be unavailable.

The daemonset has no pod disruption budget, since it runs one pod per node. The coordinator chart accepts probes, lifecycle hooks, and a termination grace period, but no pod disruption budget.

When podDisruptionBudget.enabled is true, set exactly one of minAvailable or maxUnavailable. Setting both, or neither, fails the render with an error naming the workload.

Example:

deployment:
  livenessProbe:
    httpGet:
      path: /healthz
      port: 6062
    initialDelaySeconds: 30
    periodSeconds: 10
  lifecycle:
    preStop:
      exec:
        command: ["/bin/sh", "-c", "sleep 15"]
  terminationGracePeriodSeconds: 30

compactorProps:
  podDisruptionBudget:
    enabled: true
    minAvailable: 1

Monitoring Ports

VariableDefaultDescription
storePort""Port for pipeline metrics storage.
profilerPort""Port for CPU/memory profiling via pprof. See Performance Profiling.
promPort""Port for Prometheus metrics scraping.

Watcher Sidecar

VariableDefaultDescription
watcherProps.enabledfalseDeploy a sidecar that monitors agent health (OOM kills, crash loops, evictions).
watcherProps.targetContainerName""Container to monitor. Empty = auto-detect.
watcherProps.checkInterval""Health check interval (e.g., 30s). Empty = default 30s.
watcherProps.resources.limits.cpu200mWatcher CPU limit.
watcherProps.resources.limits.memory256MiWatcher memory limit.
watcherProps.resources.requests.cpu50mWatcher CPU request.
watcherProps.resources.requests.memory64MiWatcher memory request.

Miscellaneous

VariableDefaultDescription
skipCommonLabelsfalseSkip adding standard Helm labels to resources.
nameOverride""Override the chart name in resource names.
fullnameOverride""Override the full resource name.

Deprecated Values

VariableDescription
edWorkflowsColon-separated list of workflow names to enable (v2 agents only).
edWorkflowPrefixesColon-separated list of workflow prefixes to enable (v2 agents only).

Viewing Default Values

To view all default values for any chart:

helm repo update
helm show values edgedelta/edgedelta
helm show values edgedelta/edgedelta-gateway
helm show values edgedelta/edgedelta-coordinator