GitOps & CI/CD

Argo Events

Framework event-driven Kubernetes - EventSource (Git, S3, webhooks, Kafka), Sensor, triggers vers Argo Workflows et K8s. CNCF Incubating. Apache 2.0, argoproj.

Argo Events est un framework event-driven pour Kubernetes qui connecte des sources d'événements à des actions. Il repose sur trois CRDs : EventBus (transport de messages, NATS JetStream par défaut), EventSource (où écouter les événements - webhooks, S3, Kafka, Git, calendrier, etc.) et Sensor (quelle action déclencher - Argo Workflow, Job Kubernetes, HTTP call, etc.). Il s'intègre nativement avec Argo Workflows pour créer des pipelines entièrement event-driven.


Informations essentielles

Origine : argoproj → CNCF Incubating  ·  Licence : Apache 2.0  ·  Architectures : x86_64, ARM64

Liens : Documentation  ·  GitHub  ·  Releases

Support : CNCF Incubating. Projet actif, partie de l'écosystème Argo.

Stack par défaut

ComposantValeur
EventBusNATS JetStream (par défaut) ou Kafka
EventSourcesWebhook, GitHub, GitLab, S3/MinIO, Calendar, Kafka, NATS, Pulsar, Redis, AMQP, HDFS...
TriggersArgo Workflow, Kubernetes object (Job, Deployment...), HTTP, Kafka, Log
Namespace d'installationargo-events

Prérequis

RessourceValeur
Kubernetes1.23+
Argo WorkflowsRecommandé (pour les triggers Workflow)

Installation

kubectl create namespace argo-events

# Installer les CRDs et le contrôleur Argo Events (installation cluster-wide)
kubectl apply -f \
  https://github.com/argoproj/argo-events/releases/latest/download/install.yaml

# Créer l'EventBus dans le namespace (OBLIGATOIRE avant tout EventSource/Sensor)
# L'EventBus assure le transport des événements via NATS JetStream
kubectl apply -n argo-events -f \
  https://raw.githubusercontent.com/argoproj/argo-events/stable/examples/eventbus/native.yaml

# Vérifier
kubectl get pods -n argo-events
# eventbus-default-* Running (3 pods NATS JetStream)
# controller-manager Running

Note : install.yaml installe le contrôleur en mode cluster-wide (recommandé). Il existe une alternative namespace-scoped (namespace-install.yaml) à utiliser à la place, pas en plus.


Cas d'usage - Déclencher un workflow sur webhook

1. EventSource webhook

apiVersion: argoproj.io/v1alpha1
kind: EventSource
metadata:
  name: webhook-source
  namespace: argo-events
spec:
  service:
    ports:
      - port: 12000
        targetPort: 12000
  webhook:
    trigger-endpoint:
      port: "12000"
      endpoint: /trigger
      method: POST

2. Sensor - écouter et déclencher

apiVersion: argoproj.io/v1alpha1
kind: Sensor
metadata:
  name: webhook-sensor
  namespace: argo-events
spec:
  template:
    serviceAccountName: operate-workflow-sa
  dependencies:
    - name: webhook-dep
      eventSourceName: webhook-source
      eventName: trigger-endpoint
  triggers:
    - template:
        name: argo-workflow-trigger
        argoWorkflow:
          operation: submit
          source:
            resource:
              apiVersion: argoproj.io/v1alpha1
              kind: Workflow
              metadata:
                generateName: webhook-triggered-
                namespace: argo
              spec:
                entrypoint: main
                templates:
                  - name: main
                    container:
                      image: alpine
                      command: [echo, "workflow triggered by webhook!"]

3. Exposer l'EventSource (via port-forward ou Ingress)

kubectl port-forward svc/webhook-source-eventsource-svc -n argo-events 12000:12000

# Tester le webhook
curl -X POST http://localhost:12000/trigger -d '{"message": "hello"}'

Cas d'usage - Déclencher sur push GitHub

apiVersion: argoproj.io/v1alpha1
kind: EventSource
metadata:
  name: github-source
  namespace: argo-events
spec:
  github:
    my-repo:
      repositories:
        - owner: mon-org
          names:
            - mon-repo
      webhook:
        endpoint: /push
        port: "12000"
        method: POST
        url: https://argo-events.example.com  # URL publique exposée
      events:
        - push
      apiToken:
        name: github-access
        key: token
      webhookSecret:
        name: github-webhook-secret
        key: secret
      insecure: false
      active: true
      contentType: json

Cas d'usage - Trigger calendrier (cron)

apiVersion: argoproj.io/v1alpha1
kind: EventSource
metadata:
  name: calendar-source
  namespace: argo-events
spec:
  calendar:
    nightly-trigger:
      schedule: "0 2 * * *"
      timezone: "Europe/Paris"
      userPayload: '{"job": "backup"}'

Mise à jour

kubectl apply -f \
  https://github.com/argoproj/argo-events/releases/latest/download/install.yaml

Troubleshooting

# État des pods
kubectl get pods -n argo-events

# Logs du contrôleur
kubectl logs -n argo-events -l app=controller-manager --tail=50

# Logs d'un EventSource spécifique
kubectl logs -n argo-events -l eventsource-name=webhook-source --tail=50

# Logs d'un Sensor spécifique
kubectl logs -n argo-events -l sensor-name=webhook-sensor --tail=50

# Vérifier que l'EventBus est Ready
kubectl get eventbus -n argo-events

# Vérifier l'état d'une EventSource
kubectl get eventsource -n argo-events
kubectl describe eventsource webhook-source -n argo-events

Ressources

Newsletter · 2 000+ abonnés

Reste au courant de ce qui bouge en prod

RudeOps veille devops hebdo, droit au but.

Gratuit · Sans spam · Désinscription en un clic