Skip to content

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