Argo Events Reference: EventSource, Sensor, Triggers — Webhook, Kafka, Cron & Conditions
Argo Events is the event-driven automation layer of the Argo ecosystem. It listens to event sources (webhooks, Kafka, NATS, S3, cron, etc.) and triggers Argo Workflows, Kubernetes resources, or HTTP endpoints — the glue that wires external signals into K8s workloads.
1. Architecture & Core Concepts
EventSource → EventBus → Sensor pipeline
| Component | Role |
|---|---|
| EventSource | Consumes external events (webhook, Kafka, S3, cron, GitHub, etc.) → converts to CloudEvents |
| EventBus | Message broker between EventSource and Sensor (NATS JetStream by default) |
| Sensor | Listens for events from EventBus, applies filters/conditions, fires Triggers |
| Trigger | What fires: Argo Workflow, K8s resource, HTTP call, Kafka message, AWS Lambda, etc. |
# Install Argo Events: kubectl create namespace argo-events kubectl apply -n argo-events -f https://github.com/argoproj/argo-events/releases/latest/download/install.yaml # Install EventBus (NATS JetStream — required): kubectl apply -n argo-events -f https://github.com/argoproj/argo-events/releases/latest/download/eventbus-native.yaml # Verify: kubectl get pods -n argo-events # argo-events-controller-manager, eventbus-controller, eventsource-controller, sensor-controller
2. Webhook EventSource
Receive HTTP webhooks (GitHub, GitLab, custom) and trigger workflows
# 1. EventBus (NATS JetStream):
apiVersion: argoproj.io/v1alpha1
kind: EventBus
metadata:
name: default
namespace: argo-events
spec:
nats:
native:
replicas: 3
auth: none
# 2. EventSource — listen on a webhook endpoint:
apiVersion: argoproj.io/v1alpha1
kind: EventSource
metadata:
name: webhook
namespace: argo-events
spec:
service:
ports:
- port: 12000
targetPort: 12000
webhook:
github-push: # event name (reference in Sensor)
port: "12000"
endpoint: /github # listens at /github
method: POST
# Optionally validate GitHub signature:
# authSecret:
# name: github-webhook-secret
# key: secret
# 3. Sensor — filter events + trigger Argo Workflow:
apiVersion: argoproj.io/v1alpha1
kind: Sensor
metadata:
name: webhook-sensor
namespace: argo-events
spec:
dependencies:
- name: github-push-dep
eventSourceName: webhook
eventName: github-push
filters:
data:
- path: body.ref # JSON path in webhook body
type: string
value: ["refs/heads/main"] # only trigger on main branch
triggers:
- template:
name: trigger-workflow
argoWorkflow:
operation: submit
source:
resource:
apiVersion: argoproj.io/v1alpha1
kind: Workflow
metadata:
generateName: ci-build-
namespace: argo-events
spec:
entrypoint: build
templates:
- name: build
container:
image: alpine
command: [echo, "Building!"]
3. Kafka & NATS EventSources
Consume messages from Kafka topics or NATS subjects as event triggers
# Kafka EventSource:
apiVersion: argoproj.io/v1alpha1
kind: EventSource
metadata:
name: kafka-source
namespace: argo-events
spec:
kafka:
order-events: # event name
url: kafka.kafka.svc:9092
topic: orders
partition: "0"
consumerGroup:
groupName: argo-events-orders
oldest: true
tls:
insecureSkipVerify: true
sasl:
mechanism: PLAIN
userSecret: {name: kafka-secret, key: username}
passwordSecret: {name: kafka-secret, key: password}
# Sensor for Kafka → HTTP trigger (call external service):
spec:
dependencies:
- name: order-dep
eventSourceName: kafka-source
eventName: order-events
triggers:
- template:
name: http-trigger
http:
url: https://my-service.example.com/process-order
method: POST
payload:
- src:
dependencyName: order-dep
dataKey: body # pass Kafka message body
dest: order
headers:
Content-Type: application/json
# NATS EventSource:
spec:
nats:
payments:
url: nats://nats.nats.svc:4222
subject: payments.completed
jsonBody: true
auth:
token:
name: nats-token-secret
key: token
4. Cron & Calendar EventSources
Time-based triggers — schedule workflows like cron jobs with event semantics
# Calendar EventSource (cron-based):
apiVersion: argoproj.io/v1alpha1
kind: EventSource
metadata:
name: calendar-source
namespace: argo-events
spec:
calendar:
nightly-report:
schedule: "0 1 * * *" # 1am UTC daily
timezone: Europe/London
interval: "" # use schedule OR interval, not both
every-5-minutes:
interval: 5m # use Go duration instead of cron
# Sensor trigger — submit Argo Workflow on schedule:
spec:
dependencies:
- name: calendar-dep
eventSourceName: calendar-source
eventName: nightly-report
triggers:
- template:
name: nightly-report-trigger
argoWorkflow:
operation: submit
source:
resource:
apiVersion: argoproj.io/v1alpha1
kind: Workflow
metadata:
generateName: nightly-report-
spec:
entrypoint: generate-report
templates:
- name: generate-report
container:
image: my-report-generator:latest
command: [python, /app/report.py]
# Combine conditions (AND logic — both must fire within a time window):
spec:
dependencies:
- name: schedule-dep
eventSourceName: calendar-source
eventName: every-5-minutes
- name: kafka-dep
eventSourceName: kafka-source
eventName: order-events
circuit: "schedule-dep && kafka-dep" # only trigger if both conditions met
5. Sensor Conditions & Transforms
Filter events by payload content, transform data, and use parameters in triggers
# Sensor dependency filters (filter events before triggering):
spec:
dependencies:
- name: dep
eventSourceName: webhook
eventName: github-push
filters:
time:
start: "09:00:00" # only trigger between 9am-5pm (business hours)
stop: "17:00:00"
data:
- path: body.ref # JSON path
type: string
value: ["refs/heads/main", "refs/heads/develop"]
- path: body.repository.full_name
type: string
value: ["my-org/my-repo"]
exprs:
- expr: "body.pusher.name != 'dependabot[bot]'" # exclude bot pushes
fields:
- name: body
path: body
# Parameter passing (inject event data into trigger):
triggers:
- template:
name: trigger
argoWorkflow:
operation: submit
parameters:
- src:
dependencyName: dep
dataKey: body.head_commit.id # extract from webhook body
dest: spec.arguments.parameters.0.value # inject into workflow arg
source:
resource:
spec:
arguments:
parameters:
- name: git-sha
value: placeholder # replaced by parameter injection
# Retries on trigger failure:
triggers:
- template:
name: trigger
retryStrategy:
steps: 3
duration: 10s
factor: 2.0 # exponential backoff: 10s, 20s, 40s
Track Argo Events, Argo Workflows, and Kubernetes automation tool releases.
ReleaseRun monitors Kubernetes, Docker, and 13+ DevOps technologies.
Related: Argo Workflows Reference | ArgoCD Reference | Apache Kafka Reference
🔍 Free tool: K8s YAML Security Linter — check your Argo Events Sensor and K8s workload manifests for 12 security misconfigurations.
Founded
2023 in London, UK
Contact
hello@releaserun.com