argo-workflows Documentation

Workflow Engine for Kubernetes

RAW Doc

Docker & Self-Hosted Deployment Verified OCI

Deploy argo-workflows on any server, homelab, or cloud container platform.

1-Click Terminal Command
bash (docker run)
docker run -d --name argo-workflows --restart always argoproj/argo-workflows:latest

File: README.md










What is Argo Workflows?

Argo Workflows is an open source container-native workflow engine for orchestrating parallel jobs on Kubernetes.
Argo Workflows is implemented as a Kubernetes CRD (Custom Resource Definition).

  • Define workflows where each step is a container.
  • Model multi-step workflows as a sequence of tasks or capture the dependencies between tasks using a directed acyclic graph (DAG).
  • Easily run compute intensive jobs for machine learning or data processing in a fraction of the time using Argo Workflows on Kubernetes.

Argo is a Cloud Native Computing Foundation (CNCF) graduated project.

Use Cases

Why Argo Workflows?

  • Argo Workflows is the most popular workflow execution engine for Kubernetes.
  • Light-weight, scalable, and easier to use.
  • Designed from the ground up for containers without the overhead and limitations of legacy VM and server-based environments.
  • Cloud agnostic and can run on any Kubernetes cluster.

Read what people said in our latest survey

Try Argo Workflows

You can try Argo Workflows via one of the following:

  1. Interactive Training Material
  2. Access the demo environment

Who uses Argo Workflows?

About 200+ organizations are officially using Argo Workflows

Ecosystem

Just some of the projects that use or rely on Argo Workflows (complete list here):

Client Libraries

Check out our Java, Golang, Python (Hera), and Typescript (Juno) clients.

Quickstart

Documentation

View the docs

Features

An incomplete list of features Argo Workflows provides:

  • UI to visualize and manage Workflows
  • Artifact support (S3, Artifactory, Alibaba Cloud OSS, Azure Blob Storage, HTTP, Git, GCS, raw, plugins)
  • Workflow templating to store commonly used Workflows in the cluster
  • Archiving Workflows after executing for later access
  • Scheduled workflows using cron
  • Server interface with REST API (HTTP and GRPC)
  • DAG or Steps based declaration of workflows
  • Step level input & outputs (artifacts/parameters)
  • Loops
  • Parameterization
  • Conditionals
  • Timeouts (step & workflow level)
  • Retry (step & workflow level)
  • Resubmit (memoized)
  • Suspend & Resume
  • Cancellation
  • K8s resource orchestration
  • Exit Hooks (notifications, cleanup)
  • Garbage collection of completed workflow
  • Scheduling (affinity/tolerations/node selectors)
  • Volumes (ephemeral/existing)
  • Parallelism limits
  • Daemoned steps
  • DinD (docker-in-docker)
  • Script steps
  • Event emission
  • Prometheus metrics
  • Multiple executors
  • Multiple pod and workflow garbage collection strategies
  • Automatically calculated resource usage per step
  • Java, Golang, Python (Hera), and Typescript (Juno) SDKs
  • Pod Disruption Budget support
  • Single-sign on (OAuth2/OIDC)
  • Webhook triggering
  • CLI
  • Out-of-the box and custom Prometheus metrics
  • Windows container support
  • Embedded widgets
  • Multiplex log viewer

Community Meetings

We host monthly community meetings where we and the community showcase demos and discuss the current and future state of the project. Feel free to join us!
For Community Meeting information, minutes and recordings, please see here.

Participation in Argo Workflows is governed by the CNCF Code of Conduct

Community Blogs and Presentations

Project Resources

Security

See SECURITY.md.

Generative AI

Contributions using generative AI tools must follow the Argo project Generative AI policy.


File: community/README.md

Argo Community

Welcome to the Argo community!

Argo is an open, community driven project to make it easy to use Kubernetes for getting useful work done.
The Argoproj Community README describes the organizational structure and governance of Argo projects including roles, responsibilities, and processes.

Contributions using generative AI tools must follow the Argo project Generative AI policy.


File: docs/cli/argo.md

argo

argo is the command line interface to Argo

Synopsis

You can use the CLI in the following modes:

Kubernetes API Mode (default)

Requests are sent directly to the Kubernetes API. No Argo Server is needed. Large workflows and the workflow archive are not supported.

Use when you have direct access to the Kubernetes API, and don't need large workflow or workflow archive support.

If you're using instance ID (which is very unlikely), you'll need to set it:

text
ARGO_INSTANCEID=your-instanceid

Argo Server GRPC Mode

Requests are sent to the Argo Server API via GRPC (using HTTP/2). Large workflows and the workflow archive are supported. Network load-balancers that do not support HTTP/2 are not supported.

Use if you do not have access to the Kubernetes API (e.g. you're in another cluster), and you're running the Argo Server using a network load-balancer that support HTTP/2.

To enable, set ARGO_SERVER:

text
ARGO_SERVER=localhost:2746 ;# The format is "host:port" - do not prefix with "http" or "https"

If you're have transport-layer security (TLS) enabled (i.e. you are running "argo server --secure" and therefore has HTTPS):

text
ARGO_SECURE=true

If your server is running with self-signed certificates. Do not use in production:

text
ARGO_INSECURE_SKIP_VERIFY=true

By default, the CLI uses your KUBECONFIG to determine default for ARGO_TOKEN and ARGO_NAMESPACE. You probably error with "no configuration has been provided". To prevent it:

text
KUBECONFIG=/dev/null

You will then need to set:

text
ARGO_NAMESPACE=argo

And:

text
ARGO_TOKEN='Bearer ******' ;# Should always start with "Bearer " or "Basic ".

Argo Server HTTP1 Mode

As per GRPC mode, but uses HTTP. Can be used with ALB that does not support HTTP/2. The command "argo logs --since-time=2020...." will not work (due to time-type).

Use this when your network load-balancer does not support HTTP/2.

Use the same configuration as GRPC mode, but also set:

text
ARGO_HTTP1=true

If your server is behind an ingress with a path (running "argo server --base-href /argo" or "ARGO_BASE_HREF=/argo argo server"):

text
ARGO_BASE_HREF=/argo
text
argo [flags]

Options

text
/* Detailed source-code truncated for AI context efficiency. */

SEE ALSO


File: docs/cli/argo_archive.md

argo archive

manage the workflow archive

text
argo archive [flags]

Options

text
-h, --help   help for archive

Options inherited from parent commands

text
/* Detailed source-code truncated for AI context efficiency. */

SEE ALSO


File: docs/cli/argo_archive_delete.md

argo archive delete

delete a workflow in the archive

text
argo archive delete WORKFLOW... [flags]

Examples

text
# Delete an archived workflow by name:
  argo archive delete my-workflow

# Delete an archived workflow by UID (auto-detected):
  argo archive delete a0eebc99-9c0b-4ef8-bb6d-6bb9bd380a11

# Delete multiple archived workflows:
  argo archive delete my-workflow my-other-workflow

# Delete an archived workflow by name (forced):
  argo archive delete my-workflow --name

# Delete an archived workflow by UID (forced):
  argo archive delete a0eebc99-9c0b-4ef8-bb6d-6bb9bd380a11 --uid

Options

text
-h, --help   help for delete
      --name   force the argument to be treated as a name
      --uid    force the argument to be treated as a UID

Options inherited from parent commands

text
/* Detailed source-code truncated for AI context efficiency. */

SEE ALSO


File: docs/cli/argo_archive_get.md

argo archive get

get a workflow in the archive

text
argo archive get WORKFLOW [flags]

Examples

text
# Get information about an archived workflow by name:
  argo archive get my-workflow

# Get information about an archived workflow by UID (auto-detected):
  argo archive get a0eebc99-9c0b-4ef8-bb6d-6bb9bd380a11

# Get information about an archived workflow in YAML format:
  argo archive get my-workflow -o yaml

# Get information about an archived workflow by name (forced):
  argo archive get my-workflow --name

# Get information about an archived workflow by UID (forced):
  argo archive get a0eebc99-9c0b-4ef8-bb6d-6bb9bd380a11 --uid

Options

text
-h, --help            help for get
      --name            force the argument to be treated as a name
  -o, --output string   Output format. One of: json|yaml|wide (default "wide")
      --uid             force the argument to be treated as a UID

Options inherited from parent commands

text
/* Detailed source-code truncated for AI context efficiency. */

SEE ALSO


File: docs/cli/argo_archive_list.md

argo archive list

list workflows in the archive

text
argo archive list [flags]

Examples

text
# List all archived workflows:
  argo archive list

# List all archived workflows fetched in chunks of 100:
  argo archive list --chunk-size 100

# List all archived workflows in YAML format:
  argo archive list -o yaml

# List archived workflows that have both labels:
  argo archive list -l key1=value1,key2=value2

Options

text
--chunk-size int    Return large lists in chunks rather than all at once. Pass 0 to disable.
  -h, --help              help for list
  -o, --output string     Output format. One of: name|json|yaml|wide (default "wide")
  -l, --selector string   Selector (label query) to filter on, not including uninitialized ones, supports '=', '==', and '!='.(e.g. -l key1=value1,key2=value2)

Options inherited from parent commands

text
/* Detailed source-code truncated for AI context efficiency. */

SEE ALSO


File: docs/cli/argo_archive_list-label-keys.md

argo archive list-label-keys

list workflows label keys in the archive

text
argo archive list-label-keys [flags]

Options

text
-h, --help   help for list-label-keys

Options inherited from parent commands

text
/* Detailed source-code truncated for AI context efficiency. */

SEE ALSO


File: docs/cli/argo_archive_list-label-values.md

argo archive list-label-values

get workflow label values in the archive

text
argo archive list-label-values [flags]

Options

text
-h, --help              help for list-label-values
  -l, --selector string   Selector (label query) to query on, allows 1 value (e.g. -l key1)

Options inherited from parent commands

text
/* Detailed source-code truncated for AI context efficiency. */

SEE ALSO