Environment Variables

July 16, 2026 ยท View on GitHub

This document outlines environment variables that can be used to customize behavior.

!!! Warning Environment variables are typically added to test out experimental features and should not be used by most users. Environment variables may be removed at any time.

Controller

NameTypeDefaultDescription
ARGO_AGENT_TASK_WORKERSint16The number of task workers for the agent pod.
ALL_POD_CHANGES_SIGNIFICANTboolfalseWhether to consider all pod changes as significant during pod reconciliation.
ALWAYS_OFFLOAD_NODE_STATUSboolfalseWhether to always offload the node status.
ARCHIVED_WORKFLOW_GC_PERIODtime.Duration24hThe periodicity for GC of archived workflows.
ARGO_PPROFboolfalseEnable pprof endpoints
ARGO_PROGRESS_PATCH_TICK_DURATIONtime.Duration1mHow often self reported progress is patched into the pod annotations which means how long it takes until the controller picks up the progress change. Set to 0 to disable self reporting progress.
ARGO_PROGRESS_FILE_TICK_DURATIONtime.Duration3sHow often the progress file is read by the executor. Set to 0 to disable self reporting progress.
ARGO_REMOVE_PVC_PROTECTION_FINALIZERbooltrueRemove the kubernetes.io/pvc-protection finalizer from persistent volume claims (PVC) after marking PVCs created for the workflow for deletion, so deleted is not blocked until the pods are deleted. #6629
ARGO_TRACEstring``Whether to enable tracing statements in Argo components.
ARGO_AGENT_PATCH_RATEtime.DurationDEFAULT_REQUEUE_TIMERate that the Argo Agent will patch the workflow task-set.
ARGO_AGENT_CPU_LIMITresource.Quantity100mCPU resource limit for the agent.
ARGO_AGENT_MEMORY_LIMITresource.Quantity256mMemory resource limit for the agent.
ARGO_POD_STATUS_CAPTURE_FINALIZERboolfalseThe finalizer blocks the deletion of pods until the controller captures their status.
BUBBLE_ENTRY_TEMPLATE_ERRbooltrueWhether to bubble up template errors to workflow.
CACHE_GC_PERIODtime.Duration0sHow often to perform memoization cache GC, which is disabled by default and can be enabled by providing a non-zero duration.
CACHE_GC_AFTER_NOT_HIT_DURATIONtime.Duration30sWhen a memoization cache has not been hit after this duration, it will be deleted.
CRON_SYNC_PERIODtime.Duration10sHow often to sync cron workflows.
DEFAULT_REQUEUE_TIMEtime.Duration10sThe re-queue time for the rate limiter of the workflow queue.
DISABLE_MAX_RECURSIONboolfalseSet to true to disable the recursion preventer, which will stop a workflow running which has called into a child template 100 times
EXPRESSION_TEMPLATESbooltrueEscape hatch to disable expression templates.
EVENT_AGGREGATION_WITH_ANNOTATIONSboolfalseWhether event annotations will be used when aggregating events.
GZIP_IMPLEMENTATIONstringPGZipThe implementation of compression/decompression. Currently only "PGZip" and "GZip" are supported.
HEALTHZ_AGEtime.Duration5mHow old a un-reconciled workflow is to report unhealthy.
INDEX_WORKFLOW_SEMAPHORE_KEYSbooltrueWhether or not to index semaphores.
LEADER_ELECTION_IDENTITYstringController's metadata.nameThe ID used for workflow controllers to elect a leader.
LEADER_ELECTION_DISABLEboolfalseWhether leader election should be disabled. When set to true, also set the Deployment's rollout strategy to Recreate to prevent two controllers running concurrently during rollouts โ€” see High Availability.
LEADER_ELECTION_LEASE_DURATIONtime.Duration15sThe duration that non-leader candidates will wait to force acquire leadership.
LEADER_ELECTION_RENEW_DEADLINEtime.Duration10sThe duration that the acting master will retry refreshing leadership before giving up.
LEADER_ELECTION_RETRY_PERIODtime.Duration5sThe duration that the leader election clients should wait between tries of actions.
MAX_OPERATION_TIMEtime.Duration30sThe maximum time a workflow operation is allowed to run for before re-queuing the workflow onto the work queue.
OFFLOAD_NODE_STATUS_TTLtime.Duration5mThe TTL to delete the offloaded node status. Currently only used for testing.
OPERATION_DURATION_METRIC_BUCKET_COUNTint6The number of buckets to collect the metric for the operation duration.
POD_NAMESstringv2Whether to have pod names contain the template name (v2) or be the node id (v1) - should be set the same for Argo Server.
PROMETHEUS_LEGACY_NAME_VALIDATION_SCHEMEboolfalseMakes Prometheus emit metrics with only underscores as delimiters by setting NameValidationScheme to LegacyValidation.
RECENTLY_STARTED_POD_DURATIONtime.Duration10sThe duration of a pod before the pod is considered to be recently started.
RECENTLY_DELETED_POD_DURATIONtime.Duration2mThe duration of a pod before the pod is considered to be recently deleted.
TASK_RESULT_TIMEOUT_DURATIONtime.Duration10mThe duration of time before a node is marked completed but the taskresult has not arrived yet, this is a more general and more conservative version of RECENTLY_DELETED_POD_DURATION that is used when a taskresult hasn't arrived but the pod is still around.
RETRY_BACKOFF_DURATIONtime.Duration10msThe retry back-off duration when retrying API calls.
RETRY_BACKOFF_FACTORfloat2.0The retry back-off factor when retrying API calls.
RETRY_BACKOFF_STEPSint5The retry back-off steps when retrying API calls.
RETRY_HOST_NAME_LABEL_KEYstringkubernetes.io/hostnameThe label key for host name used when retrying templates.
TRANSIENT_ERROR_PATTERNstring""The regular expression that represents additional patterns for transient errors.
WORKFLOW_COMPRESSION_ALGORITHMstringgzipThe algorithm used to compress node statuses of large workflows: "gzip", "zstd", or "brotli". Decompression auto-detects the algorithm, but workflows written with a non-gzip algorithm cannot be read by versions without support for it, so only change this after all components are upgraded. See node status compression.
WORKFLOW_COMPRESSION_LEVELintper algorithmThe compression level for WORKFLOW_COMPRESSION_ALGORITHM. Range and default depend on the algorithm: gzip 1-9 (default 6), zstd 1-4 (default 2), brotli 0-11 (default 6). See node status compression for size/speed trade-offs.
WF_DEL_PROPAGATION_POLICYstring""The deletion propagation policy for workflows.
WORKFLOW_GC_PERIODtime.Duration5mThe periodicity for GC of workflows.
SEMAPHORE_NOTIFY_DELAYtime.Duration1sTuning Delay when notifying semaphore waiters about availability in the semaphore
WATCH_CONTROLLER_SEMAPHORE_CONFIGMAPSbooltrueWhether to watch the Controller's ConfigMap and semaphore ConfigMaps for run-time changes. When disabled, the Controller will only read these ConfigMaps once and will have to be manually restarted to pick up new changes.
SKIP_WORKFLOW_DURATION_ESTIMATIONboolfalseWhether to lookup resource usage from prior workflows to estimate usage for new workflows.
WORKFLOW_ESTIMATION_DB_QUERY_TIMEOUT_SECONDSint5Timeout in seconds for database queries when estimating workflow duration. Prevents workflow execution from being blocked when database is slow or locked.
WORKFLOW_USER_OVERRIDE_ALLOWLISTstring""Comma-separated WorkflowSpec field names (YAML/JSON names, e.g. podSpecPatch,volumes) to add to the allow-list of fields a workflowTemplateRef submitter may set under templateReferencing: Strict/Secure. Invalid names fail the Controller at startup. The nested artifactGC security fields are not relaxed.

CLI parameters of the Controller can be specified as environment variables with the ARGO_ prefix. For example:

workflow-controller --managed-namespace=argo

Can be expressed as:

ARGO_MANAGED_NAMESPACE=argo workflow-controller

You can set environment variables for the Controller Deployment's container spec like the following:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: workflow-controller
spec:
  selector:
    matchLabels:
      app: workflow-controller
  template:
    metadata:
      labels:
        app: workflow-controller
    spec:
      containers:
        - env:
            - name: WORKFLOW_GC_PERIOD
              value: 30s

Executor

NameTypeDefaultDescription
ARGO_DEBUG_PAUSE_AFTERboolfalseEnable Debug Pause after step execution
ARGO_DEBUG_PAUSE_BEFOREboolfalseEnable Debug Pause before step execution
ARTIFACT_S3_UPLOAD_THREADSint4Number of threads for artifact upload through S3. Default: 4.
ARTIFACT_S3_UPLOAD_PART_SIZE_MIBint``Size in MiB of the part of a Multipart upload. Default: let MinIO calculate automatically (16 MiB for file <= 156 GiB).
EXECUTOR_RETRY_BACKOFF_DURATIONtime.Duration1sThe retry back-off duration when the workflow executor performs retries.
EXECUTOR_RETRY_BACKOFF_FACTORfloat1.6The retry back-off factor when the workflow executor performs retries.
EXECUTOR_RETRY_BACKOFF_JITTERfloat0.5The retry back-off jitter when the workflow executor performs retries.
EXECUTOR_RETRY_BACKOFF_STEPSint5The retry back-off steps when the workflow executor performs retries.
REMOVE_LOCAL_ART_PATHboolfalseWhether to remove local artifacts.
RESOURCE_STATE_CHECK_INTERVALtime.Duration5sThe time interval between resource status checks against the specified success and failure conditions.
WAIT_CONTAINER_STATUS_CHECK_INTERVALtime.Duration5sThe time interval for wait container to check whether the containers have completed.

You can set environment variables for the Executor in your workflow-controller-configmap like the following:

apiVersion: v1
kind: ConfigMap
metadata:
  name: workflow-controller-configmap
data:
  config: |
    executor:
      env:
      - name: RESOURCE_STATE_CHECK_INTERVAL
        value: 3s

Argo Server

NameTypeDefaultDescription
ARGO_ARTIFACT_SERVERbooltrueEnable Workflow Archive endpoints
ARGO_PPROFboolfalseEnable pprof endpoints
ARGO_SERVER_MAX_ARTIFACT_UPLOAD_BYTESint1073741824Maximum total request body size accepted by the input artifact upload endpoint, in bytes. Requests over this size receive 413 Request Entity Too Large.
ARGO_SERVER_METRICS_AUTHbooltrueEnable auth on the /metrics endpoint
CI_ONLY_DISABLE_ARTIFACT_SERVER_CHECKSboolfalseDisable validation checks for artifact plugin sidecars. For CI/testing use only.
DISABLE_VALUE_LIST_RETRIEVAL_KEY_PATTERNstring""Disable the retrieval of the list of label values for keys based on this regular expression.
FIRST_TIME_USER_MODALbooltrueShow this modal.
FEEDBACK_MODALbooltrueShow this modal.
GRPC_MESSAGE_SIZEstring104857600Use different GRPC Max message size for Server (supporting huge workflows).
IP_KEY_FUNC_HEADERSstring""List of comma separated request headers containing IPs to use for rate limiting. For example, "X-Forwarded-For,X-Real-IP". By default, uses the request's remote IP address.
NEW_VERSION_MODALbooltrueShow this modal.
POD_NAMESstringv2Whether to have pod names contain the template name (v2) or be the node id (v1) - should be set the same for Controller
SSO_DELEGATE_RBAC_TO_NAMESPACEboolfalseEnable SSO RBAC Namespace Delegation

CLI parameters of the Server can be specified as environment variables with the ARGO_ prefix. For example:

argo server --managed-namespace=argo

Can be expressed as:

ARGO_MANAGED_NAMESPACE=argo argo server

You can set environment variables for the Server Deployment's container spec like the following:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: argo-server
spec:
  selector:
    matchLabels:
      app: argo-server
  template:
    metadata:
      labels:
        app: argo-server
    spec:
      containers:
        - args:
            - server
          image: quay.io/argoproj/argocli:latest
          name: argo-server
          env:
            - name: GRPC_MESSAGE_SIZE
              value: "209715200"
          ports:
          # ...