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
| Composant | Valeur |
|---|---|
| EventBus | NATS JetStream (par défaut) ou Kafka |
| EventSources | Webhook, GitHub, GitLab, S3/MinIO, Calendar, Kafka, NATS, Pulsar, Redis, AMQP, HDFS... |
| Triggers | Argo Workflow, Kubernetes object (Job, Deployment...), HTTP, Kafka, Log |
| Namespace d'installation | argo-events |
Prérequis
| Ressource | Valeur |
|---|---|
| Kubernetes | 1.23+ |
| Argo Workflows | Recommandé (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.yamlinstalle 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
- Documentation : https://argoproj.github.io/argo-events/
- GitHub : https://github.com/argoproj/argo-events
- Exemples : https://github.com/argoproj/argo-events/tree/master/examples
- Releases : https://github.com/argoproj/argo-events/releases