[cloud native][workflow][Argo] Argo Events
Updated:
개요
- 사이트 / GitHub
- Kubernetes용 이벤트 기반 워크플로 자동화 프레임워크
- 특징
- 다양한 이벤트 소스의 종속성을 관리
- 이벤트 종속성 해결을 위한 비즈니스 수준 제약 논리를 사용자 정의하는 기능
- 단순한 선형 실시간 종속성부터 복잡한 다중 소스 일괄 작업 종속성까지 모든 것을 관리
- 자신만의 이벤트 소스 리스너를 추가하기 위해 프레임워크를 확장하는 기능
- 이벤트 종속성을 해결하기 위해 임의의 부울 논리를 정의
- CloudEvents를 준수
- 런타임 시 이벤트 소스를 관리하는 기능
아키텍쳐
주요 구성 요소
- EventSource
- 외부 소스의 이벤트를 사용하는 데 필요한 구성을 정의
- 이벤트를 cloudevents로 변환하여 이벤트 버스로 전달
- Multiple Events
- Names
- Services
spec.service
는 테스트를 위한 편의 기능- 프로덕션 환경에선 Load Balancer, Service, Ingress를 이용
- High Availability
- spec.replicas로 설정
- strategy
- Active-Active
- 모든 파드가 트래픽을 처치
- 지원
- AWS SNS
- AWS SQS
- Bitbucket
- Bitbucket Server
- GitHub
- GitLab
- NetApp Storage GRID
- Slack
- Stripe
- Webhook
- Active-Passive
- 파드 하나만 트래픽을 처리하고 나머지 파드는 대기
- 이전 파드가 사라지면 대기 파드 중 하나가 자동으로 활성화
- 지원
- AMQP
- Azure Events Hub
- Calendar
- Emitter
- GCP PubSub
- Generic
- File
- HDFS
- Kafka
- Minio
- MQTT
- NATS
- NSQ
- Pulsar
- Redis
- Resource
- Active-Active
- Kubernetes Leader Election
- Kafka Eventbus를 사용하는 경우를 제외하고 HA 리더 선택에 NATS를 사용
- Filtering
- 이벤트 게시 여부 결정
- Webhook
- Authentication
- authSecret 필드 지정
- Health Check
- 엔드포인트 외에
:${port}/health
도 생성
- 엔드포인트 외에
- Authentication
- Calender Catch Up
- GCP PubSub
- Generic EventSource
- gRPC를 이용하여 EventSource를 확장
- 아키텍쳐
- 지원
- AMQP
- AWS SNS
- AWS SQS
- Azure Events Hub
- Azure Service Bus
- Azure Queue Storage
- Bitbucket
- Bitbucket Server
- Calendar
- Emitter
- File Based Events
- GCP PubSub
- Generic EventSource
- GitHub
- GitLab
- HDFS
- K8s Resources
- Kafka
- Minio
- NATS
- NetApp StorageGrid
- MQTT
- NSQ
- Pulsar
- Redis
- Redis Streams
- Slack
- Stripe
- Webhooks
- Specification
- 예제
- Sensor
- 이벤트 종속성(입력) 및 트리거(출력)를 정의
- 이벤트버스에서 이벤트를 수신하고 이벤트 종속성 관리자 역할을 하여 트리거를 해결하고 실행
- Specification
- Filters
- 유효성을 확인하기 위해 이벤트에 제약 조건을 적용
- 유효하다고 판단 된 이벤트만 트리거
- 타입
- Event Transformation
- 필터 적용전에 변환
- Lua 스크립트 또는 JQ 명령 중 하나를 변환에 사용
- 이벤트 데이터만 가능
- 변환에 실패하면 이벤트 삭제
- High Availability
- Multiple Dependencies
- 트리거 조건이 true로 확인되는 순간 각 종속성의 최신 이벤트가 작업을 트리거하는 데 사용
- A && B일 때 a1~a10이 발생하고 b1이 발생하면 a10과 b1이 트리거에 사용
- 트리거 조건이 true로 확인되는 순간 각 종속성의 최신 이벤트가 작업을 트리거하는 데 사용
- Duplicate Dependencies
- NATS Streaming의 경우 기술적인 이유로 eventSourceName와 eventName를 두번 참조할 수 없음
- 이벤트 전달 순서
- 일반적으로 게시된 순서이지만 보장되지 않음
- 센서가 첫 번째 메시지를 확인하지 못한 후 첫 번째 메시지가 다시 전송되기 전에 두 번째 메시지를 확인하는 경우
- 일반적으로 게시된 순서이지만 보장되지 않음
- 이벤트 전달 보장
- 모든 경우에 최소 한번, 메세지 처리 중에 파드가 죽지 않으면 정확히 한번 전송 보장
- NATS Streaming
- 적어도 한 번 전송 보장
- Jetstream
- 정확히 한 번 전송 보장
- 지난 5분 동안 전달된 이벤트 ID를 캐시하기 위해 메모리 내 캐시가 구현
- 전달된 중복 이벤트가 없는지 확인하는 데 사용
- 트리거 재시도
- 기본적으로 트리거 실행에 대한 재시도를 하지 않음
- 재시도 실패로 인해 예상치 못한 결과가 발생할지 여부를 센서가 전혀 알 수 없다는 사실에 근거
- retryStrategy 필드를 이용
- 기본적으로 트리거 실행에 대한 재시도를 하지 않음
- Trigger Rate Limit
- rateLimit 필드 이용
- Revision History Limit
- revisionHistoryLimit 필드 이용
- 예제
- EventBus
- EventSource와 Sensor를 연결하는 전송 계층 역할
- EventSource는 이벤트를 게시하고 Sensor는 이벤트를 구독하여 트리거를 실행
- 유형
- Trigger
- 이벤트 종속성이 해결되면 센서가 실행하는 리소스/워크로드
- Conditions
- 다양한 종속성 조건에 따라 실행
- 조건이 없으면 모든 종속성 &&
- 조건 리셋 가능
- 지원
- Service Accounts
설치
- kubectl
kubectl create namespace argo-events
kubectl apply -f https://raw.githubusercontent.com/argoproj/argo-events/stable/manifests/install.yaml
- Helm
helm repo add argo https://argoproj.github.io/argo-helm
helm install argo-events argo/argo-events -n argo-events --create-namespace