반응형
Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
Tags
- serving
- mlops
- MLflow
- Litmus
- tekton
- operator
- Kubernetes 인증
- nginx ingress
- Argo
- 오퍼레이터
- Kubeflow
- CI/CD
- gitea
- Pulumi
- opentelemetry
- Kopf
- opensearch
- gitops
- argo rollout
- blue/green
- 카오스 엔지니어링
- Continuous Deployment
- Model Serving
- knative
- kubernetes operator
- CANARY
- Kubernetes
- keda
- seldon core
- argocd
Archives
- Today
- Total
Kubernetes 이야기
Argo Event 본문
반응형
Argo Events 는 Webhook, S3, 일정, 메시징 대기열, gcp pubsub, sns, sqs와 같은 다양한 소스의 이벤트에서 K8s 개체, Argo Workflows, Serverless 워크로드 등을 트리거하는 데 도움이 되는 Kubernetes용 이벤트 기반 워크플로 자동화 프레임워크이다.
특징
- 20개 이상의 이벤트 소스에서 이벤트를 지원
- 워크플로 자동화를 위한 비즈니스 수준 제약 논리를 사용자 지정하는 기능
- 단순한 선형 실시간 이벤트부터 복잡한 다중 소스 이벤트까지 모든 것을 관리
- Kubernetes Objects, Argo Workflow, AWS Lambda, Serverless 등을 트리거로 지원
Architecture
Component | 설명 |
Event Source | 이벤트 소스는 AWS SQS, SNS, GCP Pub/Sub 및 Webhook과 같은 소스에서 이벤트를 소비하는 데 필요한 구성을 정의한다. 이벤트 소스는 이벤트를 클라우드 이벤트로 변환하고( CloudEvents 사양 에 따라) 이벤트 버스로 전달할 수 있다. 가능한 이벤트 소스
|
Sensor | 센서는 입력 및 출력에 해당하는 이벤트의 종속성과 트리거를 정의한다. 센서는 이벤트 버스에서 이벤트를 수신하고 이벤트 종속성을 독립적으로 관리하여 트리거를 해결하고 실행한다. |
Enentbus | 이벤트 버스는 전송 계층 역할을 하고 이벤트 소스와 센서 간에 이벤트를 전송하는 Kubernetes의 사용자 지정 리소이다. 이벤트 소스는 이벤트를 게시하고 센서는 이벤트 트리거를 실행하기 위해 이벤트를 구독한다. 이벤트 소스는 이벤트를 게시하는 반면 센서는 이벤트를 구독하여 트리거를 실행행한다. NATS 스트리밍은 현재 이벤트 버스 구현을 지원한다. |
Trigger | 트리거는 이벤트 종속성을 해결한 후 센서가 실행하는 리소스 또는 워크로드이다. 다양한 유형의 트리거는 다음과 같다.
|
설치
전제조건
- Kubernetes 1.11 이상
- kubectl 1.11.0 이상
1단계 : 설치
# kubectl create namespace argo-events
# kubectl apply -f https://raw.githubusercontent.com/argoproj/argo-events/stable/manifests/install.yaml
Install with a validating admission controller
# kubectl apply -f https://raw.githubusercontent.com/argoproj/argo-events/stable/manifests/install-validating-webhook.yaml
설치내역은 아래와 같다.
# k get all -n argo-events
NAME READY STATUS RESTARTS AGE
pod/eventbus-controller-6668956d87-dnz9l 1/1 Running 0 75s
pod/events-webhook-7f85cf8849-k6rfs 1/1 Running 0 65s
pod/eventsource-controller-797c9f4b66-dvgbg 1/1 Running 0 75s
pod/sensor-controller-6456f5f95d-m8mlm 1/1 Running 0 75s
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
service/events-webhook ClusterIP 10.110.138.127 <none> 443/TCP 65s
NAME READY UP-TO-DATE AVAILABLE AGE
deployment.apps/eventbus-controller 1/1 1 1 75s
deployment.apps/events-webhook 1/1 1 1 65s
deployment.apps/eventsource-controller 1/1 1 1 75s
deployment.apps/sensor-controller 1/1 1 1 75s
NAME DESIRED CURRENT READY AGE
replicaset.apps/eventbus-controller-6668956d87 1 1 1 75s
replicaset.apps/events-webhook-7f85cf8849 1 1 1 65s
replicaset.apps/eventsource-controller-797c9f4b66 1 1 1 75s
replicaset.apps/sensor-controller-6456f5f95d 1 1 1 75s
2단계 : 테스트
Argo Events 설치 후 Webhook 에 대한 센서 및 이벤트 소스를 설정해 보자. 이를 통해 HTTP Post 요청을 통해 K8S workload나 Argo workflow 등을 트리거 할 수 있다.
이번 글에서는 eventsource를 통해 특정 요청을 받으면 Sensor를 통해 Kubernetes Deployment를 실행하는 간단한 테스트를 해보자.
Eventbus 설치
# kubectl apply -n argo-events -f https://raw.githubusercontent.com/argoproj/argo-events/stable/examples/eventbus/native.yaml
Event Source 생성
apiVersion: argoproj.io/v1alpha1
kind: EventSource
metadata:
name: webhook
namespace: argo
spec:
service:
ports:
- port: 12000
targetPort: 12000
webhook:
example:
endpoint: /deploy
method: POST
port: "12000"
url: ""
마지막으로 webhook 센서를 생성한다.
apiVersion: v1
kind: ServiceAccount
metadata:
name: dev-user
kind: Role
apiVersion: rbac.authorization.k8s.io/v1
metadata:
name: dev-role
rules:
- apiGroups: ["", "extensions", "apps"]
resources: ["deployments", "replicasets", "pods", "services", "ingresses"]
verbs: ["get", "list", "watch", "create", "update", "patch", "delete"]
kind: RoleBinding
apiVersion: rbac.authorization.k8s.io/v1
metadata:
name: dev-rolebinding
subjects:
- kind: ServiceAccount
name: dev-user
roleRef:
apiGroup: rbac.authorization.k8s.io
kind: Role
name: dev-role
apiVersion: argoproj.io/v1alpha1
kind: Sensor
metadata:
name: webhook
spec:
template:
serviceAccountName: dev-user
dependencies:
- name: test-dep
eventSourceName: webhook
eventName: example
triggers:
- template:
name: webhook-pod-trigger
k8s:
operation: create
source:
resource:
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx-deployment
namespace: argo-events
labels:
app: nginx
spec:
replicas: 1
selector:
matchLabels:
app: nginx
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx:1.14.2
ports:
- containerPort: 80
parameters:
- src:
dependencyName: test-dep
dest: spec.containers.0.args.0
3. HTTP 요청 및 Trigger 실행 확인
# curl -d '{"message":"this is my first webhook"}' -H "Content-Type: application/json" -X POST http://10.107.232.23:12000/example
success
10.107.232.23는 webhook-eventsource의 service ip주소이다. 외부에서는 nodeport로 생성하여 호출하면 된다.
결과
# k get all -n argo-events
NAME READY STATUS RESTARTS AGE
pod/eventbus-controller-6668956d87-dnz9l 1/1 Running 0 141m
pod/eventbus-default-stan-0 2/2 Running 0 139m
pod/eventbus-default-stan-1 2/2 Running 0 138m
pod/eventbus-default-stan-2 2/2 Running 0 138m
pod/events-webhook-7f85cf8849-k6rfs 1/1 Running 0 141m
pod/eventsource-controller-797c9f4b66-dvgbg 1/1 Running 0 141m
pod/nginx-deployment-66b6c48dd5-2grsw 1/1 Running 0 32s
pod/sensor-controller-6456f5f95d-m8mlm 1/1 Running 0 141m
pod/webhook-eventsource-snlbk-7dc686497d-dx27n 1/1 Running 0 137m
pod/webhook-sensor-mrjhb-8b7874fc7-xjgtx 1/1 Running 0 4m22s
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
service/eventbus-default-stan-svc ClusterIP None <none> 4222/TCP,6222/TCP,8222/TCP 139m
service/events-webhook ClusterIP 10.110.138.127 <none> 443/TCP 141m
service/webhook-eventsource-svc ClusterIP 10.107.232.23 <none> 12000/TCP 137m
NAME READY UP-TO-DATE AVAILABLE AGE
deployment.apps/eventbus-controller 1/1 1 1 141m
deployment.apps/events-webhook 1/1 1 1 141m
deployment.apps/eventsource-controller 1/1 1 1 141m
deployment.apps/nginx-deployment 1/1 1 1 32s
deployment.apps/sensor-controller 1/1 1 1 141m
deployment.apps/webhook-eventsource-snlbk 1/1 1 1 137m
deployment.apps/webhook-sensor-mrjhb 1/1 1 1 4m22s
NAME DESIRED CURRENT READY AGE
replicaset.apps/eventbus-controller-6668956d87 1 1 1 141m
replicaset.apps/events-webhook-7f85cf8849 1 1 1 141m
replicaset.apps/eventsource-controller-797c9f4b66 1 1 1 141m
replicaset.apps/nginx-deployment-66b6c48dd5 1 1 1 32s
replicaset.apps/sensor-controller-6456f5f95d 1 1 1 141m
replicaset.apps/webhook-eventsource-snlbk-7dc686497d 1 1 1 137m
replicaset.apps/webhook-sensor-mrjhb-8b7874fc7 1 1 1 4m22s
NAME READY AGE
statefulset.apps/eventbus-default-stan 3/3 139m
위와 같이 nginx-deployment가 실행된 것을 볼 수 있다.
argo event 자체로는 별 거 아닌거 같지만, webhook이나 argo workflow등과 같이 이용하게 되면 많은 부분을 자동화 할 수 있는 좋은 오픈소스이다.
다음에 좀 더 다양한 테스트를 진행해 보자.
반응형
'Kubernetes > devops' 카테고리의 다른 글
argocd (설치) (0) | 2022.05.13 |
---|---|
GitOps and Flux (0) | 2022.05.07 |
Keda와 Prometheus를 이용한 Scale in/out (0) | 2022.04.28 |
Kubernetes의 Replica를 0으로 확장 (KEDA) (0) | 2022.04.27 |
OWASP ZAP 을 Kubernetes 환경에서 사용하기 (0) | 2022.04.02 |
Comments