비밀번호

커뮤니티2

  • 맑음속초23.9맑음북춘천22.1구름조금철원21.0구름조금동두천21.0구름조금파주20.5구름조금대관령17.5맑음춘천21.8맑음백령도18.5맑음북강릉24.0구름조금강릉24.9구름조금동해22.7맑음서울20.9구름조금인천17.9맑음원주21.5구름조금울릉도18.1맑음수원20.8맑음영월21.0맑음충주22.2맑음서산19.1구름조금울진18.1맑음청주22.6맑음대전22.3맑음추풍령21.3맑음안동22.2맑음상주23.1맑음포항23.8맑음군산19.4맑음대구23.3맑음전주21.4맑음울산20.0맑음창원22.1맑음광주22.5맑음부산19.1맑음통영20.1맑음목포19.6맑음여수20.1맑음흑산도19.4맑음완도22.4맑음고창20.8맑음순천22.3맑음홍성20.7맑음서청주21.1맑음제주20.6맑음고산18.6맑음성산20.7맑음서귀포20.7맑음진주22.6구름조금강화18.0구름조금양평22.0맑음이천22.2구름조금인제20.8맑음홍천21.5맑음태백20.3구름조금정선군23.1구름조금제천20.6맑음보은21.5맑음천안21.8맑음보령18.3맑음부여21.5맑음금산21.0맑음세종22.2맑음부안21.3맑음임실21.2맑음정읍21.8맑음남원22.5맑음장수20.8맑음고창군21.8맑음영광군20.7맑음김해시20.6맑음순창군22.3맑음북창원23.6맑음양산시22.0맑음보성군23.2맑음강진군23.0맑음장흥22.5맑음해남21.7맑음고흥22.6맑음의령군24.2맑음함양군23.1맑음광양시23.1맑음진도군19.5맑음봉화21.3맑음영주21.2맑음문경22.0맑음청송군22.5맑음영덕22.6맑음의성23.0맑음구미24.4맑음영천23.5맑음경주시24.8맑음거창23.6맑음합천24.9맑음밀양24.4맑음산청24.5맑음거제20.0맑음남해22.5맑음북부산20.8
  • 2024.05.09(목)

데이터 엔지니어링데이터 엔지니어링

AWS EKS에서 Fargate 노드 기반 비동기 워크플로 아키텍처 구성하기

EKS 클러스터에서는 AWS의 서버리스 컴퓨팅 엔진인 Fargate를 노드로 사용할 수 있습니다.

Fargate를 노드로 사용하면 필요할 때만 노드를 띄워 비용을 절감할 수 있습니다.

이 글에선 Kubernetes Job을 통해 워크플로우를 구성하며 AWS SQS 및 KEDA를 오토스케일러로 사용합니다.

 

EKS 및 SQS는 구성되어있다고 가정합니다

 

 

1. KEDA Operator에서 사용할 ServiceAccount 객체 생성

 

KEDA가 SQS 메시지 대기열을 폴링하기위한 IAM 정책을 작성한 json파일을 생성합니다.

+ 최소 권한 원칙을 위해 Resource 항목에는 사용할 SQS ARN을 명시합니다

 

AWS CLI로 통해 작성한 json파일을 기반으로 IAM 정책을 생성합니다.

 

eksctl로 EKS에 생성한 정책을 연결한 역할을 가진 ServiceAccount를 생성합니다

위 명령어 실행 시 AWS CloudFormation 스택에서 리소스를 생성합니다.

위에서 생성한 IAM 정책을 기반으로 IAM 역할을 만들고, EKS 내에 ServiceAccount 객체를 지정한 네임스페이스 내에 생성합니다. 

 

IAM 역할 및 ServiceAccount가 잘 생성되었는지 확인해봅니다



2. KEDA helm 차트 배포


KEDA

 

Kubernetes

 

v2.12

v1.26 - v1.28

v2.11

v1.25 - v1.27

v2.10

v1.24 - v1.26

v2.9

v1.23 - v1.25

v2.8

v1.17 - v1.25

v2.7

v1.17 - v1.25

사용중인 Kubernetes 버전에 주의하여 설치합니다


Deployment

 

CPU

 

Memory

 

Admission Webhooks

Limit: 1, Request: 100m

Limit: 1000Mi, Request: 100Mi

Metrics Server

Limit: 1, Request: 100m

Limit: 1000Mi, Request: 100Mi

Operator

Limit: 1, Request: 100m

Limit: 1000Mi, Request: 100Mi

KEDA 설치 시 위 3개의 deployment가 배포되며 각 Pod의 리소스 요구사항입니다.

 

KEDA Helm Repository를 추가합니다

$ helm repo add kedacore https://kedacore.github.io/charts

$ helm repo update

 

KEDA Operator에 적용할 ServiceAccount 메니페스트를 작성합니다 (values.yaml)

 

KEDA를 배포할 노드에 주의하며 차트를 설치하고 배포합니다

$ kubectl create namespace keda

$ helm install keda kedacore/keda --namespace keda --values values.yaml

$ kubectl get pods -n keda

 

 

3. KEDA Autoscaler 생성

SQS 메시지 대기열을 폴링하며 Kubernetes Job을 오토스케일링하는 ScaledJob 객체를 생성합니다.

https://keda.sh/docs/2.12/concepts/scaling-jobs/

  • spec.jobTargetRef
    Job 오브젝트를 생성할 때 spec에 들어갈 내용

    • parallelism(int) - 하나의 작업에 필요한 최대 pod 수(병렬 처리할 pod 수)

    • completions(int) - 작업을 수행할 pod 중 성공으로 끝나야 할 pod 수

    • backoffLimit(int) - 작업이 실패할 경우 재시도 할 횟수

    • activeDeadlineSeconds(int) - 작업 시작 시간으로부터 시스템이 작업 종료를 시도하기 전에 작업이 활성화 되어있을 기간(초)을 지정, 작업이 일시중지된 기간은 측정하지 않음(작업 활성 시간을 보장)

    • ttlSecondsAfterFinished(int) - 작업이 성공 또는 실패한 후에 작업이 자동으로 삭제되기까지의 시간(초) 이 필드가 0으로 설정되면 작업이 완료된 후 즉시 삭제됨

    • template - Job 객체 설정 시 실행될 spec.template와 동일

  • spec.pollingInterval(int) - ScaledJob 객체가 trigger를 폴링할 시간 간격(초)

  • spec.successfulJobsHistoryLimit(int) - 성공한 작업 기록을 보관할 개수

  • spec.failedJobsHistoryLimit(int) - 실패한 작업 기록을 보관할 개수

  • spec.envSourceContainerName(string) - KEDA가 Secret 등을 포함하는 환경 속성을 가져올 작업 컨테이너의 이름을 지정. 정의되지 않을 경우 첫 번째 컨테이너에서 환경 속성을 가져옴(.spec.JobTargetRef.template.spec.containers[0])

  • spec.minReplicaCount(int) - 기본으로 생성되는 최소 작업 수

  • spec.maxReplicaCount(int) - 최대로 생성될 수 있는 작업 수

 


Queue Length

 

Max Replica Count

 

Target Average Value

 

Running Job Count

 

Number of the Scale

 

10

3

1

0

3

10

3

2

0

3

10

3

1

1

2

10

100

1

0

10

4

3

5

0

1

 
  • spec.rollout

    • propagationPolicy - rollout 시 작업이 종료되는 순서 지정

    • strategy - 기존 ScaledJob을 업데이트 하는 동안 KEDA가 사용할 롤 아웃 전략

  • spec.scalingStrategy

    • strategy(string) - 스케일링 전략을 설정(default | custom | accurate)

 

 

 

클러스터에 ScaledJob을 배포합니다

$ kubectl apply -f <작성한 ScaledJob 메니페스트 YAML>

 

 

 

전체댓글0

검색결과는 총 12건 입니다.    글쓰기
1