brunch

You can make anything
by writing

C.S.Lewis

by Master Seo Nov 14. 2023

EKS9탄-15. EKS DB -KEDA설정-15/18

KEDA 오토 스케일러를 사용해 카펜터 스케일링을 해보자~



<1> KEDA AutoScaler 소개

<2> KEDA 설치




<1> KEDA AutoScaler 소개 : https://keda.sh/docs/2.12/concepts/


기존의 HPA(Horizontal Pod Autoscaler)는 리소스(CPU, Memory) 메트릭을 기반으로 스케일 여부를 결정하게 됩니다.

반면에 KEDA는 특정 이벤트를 기반으로 스케일 여부를 결정할 수 있습니다.


예)  Producer 와 Consumer 간 메시지 처리 지연 LAG 발생 시 - 링크




KEDA Scalers : kafka trigger for an Apache Kafkatopic - Link




Producer 와 Consumer 간 메시지 처리 지연 LAG 발생 시 - 링크


스케일 대응이 없을 시 : producer 의 traffic rate 를 consumer 이 처리 하지 못해서 문제 발생

KEDA 를 통한 스케일 관리 대응 시, producer 의 traffic rate 가 기준 이상 시 consumer instances 를 자동으로 증가해서 처리할 수 있게 해줌



KEDA with Helm : 

특정 이벤트(카프카의 특정 토픽의 LAG Threshold 가 '1' 이상 일 때) 기반의 파드오토 스케일링 - Chart참고링크



<2> KEDA 설치


1

kubectl create namespace keda

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

helm install keda kedacore/keda --version 2.12.0 --namespace keda



# KEDA 설치 확인

kubectl get all -n keda

kubectl get-all -n keda

kubectl get crd | grep keda



2

# Deploy Consumer application : 컨슈머로 인해 토픽도 생성됨


curl -s -O https://raw.githubusercontent.com/gasida/DOIK/main/3/keda-deploy-svc.yaml

cat keda-deploy-svc.yaml | yh

kubectl apply -f keda-deploy-svc.yaml

kubectl get pod -n keda -l app=consumer-service



# 확인

kubectl get kafkatopics -n kafka

kubectl exec -it ds/myclient -- kafka-topics.sh --bootstrap-server $SVCDNS --topic my-topic --describe

kubectl exec -it ds/myclient -- kafka-consumer-groups.sh --bootstrap-server $SVCDNS --group keda-consumer --describe

kubectl logs -n keda -l app=consumer-service -f



# kube-ops-view 로 증가/감소 확인


# KEDA 스케일 관련 정책 생성 : LAG 1 기준 달성 시 파드 증가, producer traffic rate 가 기준 이상이 되면 consumer instances 증가



3

# 컨슈머 LAG (지연) = ‘프로듀서가 보낸 메시지 갯수(카프카에 남아 있는 메시지 갯수)’ - 컨슈머가 가져간 메시지 갯수’

curl -s -O https://raw.githubusercontent.com/gasida/DOIK/main/3/keda-scale.yaml

cat keda-scale.yaml | yh

kubectl apply -f keda-scale.yaml



4

# 모니터링

watch 'kubectl get ScaledObject,hpa,pod -n keda' 

kubectl get ScaledObject,hpa -n keda

kubectl logs -n keda -l app=consumer-service



컴슈머가 증가되더록 부하를 준다.



5

# (터미널1) for문 반복 메시지 보내기

for ((i=1; i<=100;  i++)); do echo "keda-scale-test-$i" ; kubectl exec -it ds/myclient -- sh -c "echo test1-$i | kafka-console-producer.sh --bootstrap-server $SVCDNS --topic my-topic" ; date ; done



# 모니터링 : 증가한 consumer 파드 확인

kubectl get pod -n keda -l app=consumer-service



# 메시지 보내기 취소 후 일정 시간이 지나면 자동으로 consumer 파드가 최소 갯수 1개로 줄어든다



6

(옵션) KEDA 및 deployment 등 삭제


kubectl delete ScaledObject -n keda consumer-scaler

kubectl delete deploy -n keda consumer

kubectl delete svc -n keda consumer-service

kubectl delete kafkatopics -n kafka my-topic

helm uninstall keda -n keda

kubectl delete namespace keda




7

(실습 완료 후) 자원  삭제

Kafka 클러스터 삭제



kubectl delete -f kafka-1.yaml -n kafka

혹은

kubectl delete -f kafka-2.yaml -n kafka



삭제 방안 : 장점(1줄 명령어로 완전 삭제), 단점(삭제 실행과 완료까지 SSH 세션 유지 필요)


eksctl delete cluster --name $CLUSTER_NAME && aws cloudformation delete-stack --stack-name $CLUSTER_NAME





전체 다시 보기

https://brunch.co.kr/@topasvga/3511





위 내용은  주말 CloudNet  스터디 내용 참고하여  정리한 부분입니다.

https://gasidaseo.notion.site/gasidaseo/CloudNet-Blog-c9dfa44a27ff431dafdd2edacc8a1863  


다음

https://brunch.co.kr/@topasvga/3537




브런치는 최신 브라우저에 최적화 되어있습니다. IE chrome safari