[AEWS] #5์ฃผ์ฐจ KEDA, CAS ์‹ค์Šต (2)

25๋…„๋„ AWS EKS Hands-on Study ์Šคํ„ฐ๋”” ์ •๋ฆฌ ๋‚ด์šฉ์ž…๋‹ˆ๋‹ค.

 

KEDA ์‹ค์Šต

KEDA์˜ ๋™์ž‘ ์›๋ฆฌ

KEDA(Kubernetes Event-Driven Autoscaling)๋Š” ์ด๋ฒคํŠธ ๊ธฐ๋ฐ˜ ์˜คํ† ์Šค์ผ€์ผ๋Ÿฌ(Event-Driven Autoscaler) ๋กœ
์ฟ ๋ฒ„๋„คํ‹ฐ์Šค์—์„œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ๋ถ€ํ•˜(Workload)๋ฅผ ์‹ค์‹œ๊ฐ„์œผ๋กœ ๊ฐ์ง€ํ•˜๊ณ  ๋™์ ์œผ๋กœ ํŒŒ๋“œ ๊ฐœ์ˆ˜๋ฅผ ์กฐ์ •ํ•˜๋Š” ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•œ๋‹ค.

 

์ผ๋ฐ˜์ ์ธ HPA(Horizontal Pod Autoscaler)๊ฐ€ CPU ๋ฐ ๋ฉ”๋ชจ๋ฆฌ ์‚ฌ์šฉ๋ฅ  ๊ธฐ๋ฐ˜์œผ๋กœ ์Šค์ผ€์ผ๋งํ•˜๋Š” ๋ฐ˜๋ฉด,
KEDA๋Š” Kafka, RabbitMQ, AWS SQS, Prometheus, HTTP ์š”์ฒญ๋Ÿ‰ ๋“ฑ ๋‹ค์–‘ํ•œ ์™ธ๋ถ€ ์ด๋ฒคํŠธ๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ์˜คํ† ์Šค์ผ€์ผ๋ง์„ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ๋‹ค.

 

Scaler

  • ๋‹ค์–‘ํ•œ ์™ธ๋ถ€ ์‹œ์Šคํ…œ(Kafka, Redis, AWS SQS ๋“ฑ)์˜ ์ด๋ฒคํŠธ๋ฅผ ๊ฐ์ง€ํ•˜๋Š” ์—ญํ• ์„ ํ•œ๋‹ค.
  • ํŠน์ • ์กฐ๊ฑด์„ ์ถฉ์กฑํ•˜๋ฉด ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค HPA๋ฅผ ํ†ตํ•ด ํŒŒ๋“œ๋ฅผ ์Šค์ผ€์ผ๋งํ•˜๋„๋ก ์š”์ฒญํ•œ๋‹ค.

KEDA ์˜คํผ๋ ˆ์ดํ„ฐ

  • ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค ํด๋Ÿฌ์Šคํ„ฐ์—์„œ KEDA์˜ ์ „์ฒด์ ์ธ ๋™์ž‘์„ ๊ด€๋ฆฌํ•˜๋Š” ์ปจํŠธ๋กค๋Ÿฌ์ด๋‹ค.
  • Scaler๋ฅผ ํ†ตํ•ด ๊ฐ์ง€๋œ ์ด๋ฒคํŠธ๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ HPA๋ฅผ ์ƒ์„ฑํ•˜๊ฑฐ๋‚˜ ์‚ญ์ œํ•˜๊ณ  ํŒŒ๋“œ๋ฅผ ์ž๋™์œผ๋กœ ์Šค์ผ€์ผ๋งํ•œ๋‹ค.

 

แ„‰แ…ณแ„แ…ณแ„…แ…ตแ†ซแ„‰แ…ฃแ†บ 2025-03-07 แ„‹แ…ฉแ„’แ…ฎ 6.40.17.png

 

CAS ์‹ค์Šต

CAS ๋™์ž‘ ์›๋ฆฌ

Cluster Autoscaler์˜ ์ค„์ž„๋ง์ธ CAS๋Š” ํด๋Ÿฌ์Šคํ„ฐ์—์„œ ์ž๋™์œผ๋กœ ๋…ธ๋“œ๋ฅผ ํ™•์žฅ(Scale-Out)ํ•˜๊ฑฐ๋‚˜ ์ถ•์†Œ(Scale-In)ํ•˜๋Š” ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•˜๋Š” ์˜คํ† ์Šค์ผ€์ผ๋Ÿฌ๋กœ ํด๋Ÿฌ์Šคํ„ฐ ๋‚ด์˜ ํŒŒ๋“œ ์ฆ๊ฐ€/๊ฐ์†Œ์— ๋”ฐ๋ผ ํด๋Ÿฌ์Šคํ„ฐ ๋…ธ๋“œ ๊ฐœ์ˆ˜๋ฅผ ์ž๋™์œผ๋กœ ์กฐ์ •ํ•œ๋‹ค.

 

Cluster Autoscaler๋Š” ํฌ๊ฒŒ 3๊ฐ€์ง€ ์ฃผ์š” ์ปดํฌ๋„ŒํŠธ๋กœ ๊ตฌ์„ฑ๋œ๋‹ค.

 

1. Cluster Autoscaler ์ปจํŠธ๋กค๋Ÿฌ

  • ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค ํด๋Ÿฌ์Šคํ„ฐ ๋‚ด๋ถ€์—์„œ ์‹คํ–‰๋˜๋Š” ์ปจํŠธ๋กค๋Ÿฌ๋กœ, ์ง€์†์ ์œผ๋กœ ํด๋Ÿฌ์Šคํ„ฐ ์ƒํƒœ๋ฅผ ๋ชจ๋‹ˆํ„ฐ๋งํ•œ๋‹ค.
  • ํŒŒ๋“œ๊ฐ€ Pending ์ƒํƒœ์ธ์ง€ ๊ฐ์ง€ํ•˜๊ณ  ํ•„์š”์— ๋”ฐ๋ผ ๋…ธ๋“œ๋ฅผ ์ถ”๊ฐ€ํ•˜๊ฑฐ๋‚˜ ์ œ๊ฑฐํ•œ๋‹ค.

2. Cloud Provider ์—ฐ๋™

  • CAS๋Š” AWS์˜ Auto Scaling Group(ASG), GKE์˜ Node Pool, Azure์˜ VMSS์™€ ๊ฐ™์€ ํด๋ผ์šฐ๋“œ ํ”„๋กœ๋ฐ”์ด๋”์˜ ์Šค์ผ€์ผ๋ง ๊ธฐ๋Šฅ๊ณผ ์ง์ ‘ ์—ฐ๋™๋œ๋‹ค.
  • ์ด๋ฅผ ํ†ตํ•ด CAS๊ฐ€ ํด๋Ÿฌ์Šคํ„ฐ์˜ ๋…ธ๋“œ ๊ฐœ์ˆ˜๋ฅผ ๋™์ ์œผ๋กœ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์žˆ๋‹ค.

3. ์Šค์ผ€์ค„๋Ÿฌ์™€ ์—ฐ๋™

  • CAS๋Š” ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค์˜ ๊ธฐ๋ณธ ์Šค์ผ€์ค„๋Ÿฌ์™€ ์—ฐ๋™๋˜์–ด ์ƒˆ๋กœ์šด ๋…ธ๋“œ๊ฐ€ ํ•„์š”ํ•œ์ง€ ์—ฌ๋ถ€๋ฅผ ๊ฒฐ์ •ํ•œ๋‹ค.

 

ํด๋Ÿฌ์Šคํ„ฐ ๋‚ด Nginx Pod๋ฅผ ๋ฐฐํฌํ•˜์—ฌ ํด๋Ÿฌ์Šคํ„ฐ ๋‚ด์— ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ๋…ธ๋“œ๊ฐ€ ๋ถ€์กฑํ•œ ์ƒํ™ฉ์„ ๋งŒ๋“ค์—ˆ์„ ๋•Œ ์˜คํ† ์Šค์ผ€์ผ๋ง ๋˜๋Š” ๋™์ž‘์„ ํ™•์ธํ•œ๋‹ค.

aws autoscaling describe-auto-scaling-groups \
>     --query "AutoScalingGroups[? Tags[? (Key=='eks:cluster-name') && Value=='myeks']].[AutoScalingGroupName, MinSize, MaxSize,DesiredCapacity]" \
>     --output table
-----------------------------------------------------------------
|                   DescribeAutoScalingGroups                   |
+------------------------------------------------+----+----+----+
|  eks-ng1-fecab7e6-19c7-eab3-e78a-30553a1e283c  |  3 |  3 |  3 |
+------------------------------------------------+----+----+----+

 

ํ˜„์žฌ ๋…ธ๋“œ ๊ทธ๋ฃน์€ ์ตœ์†Œ 3๊ฐœ, ์ตœ๋Œ€ 3๊ฐœ์˜ EC2 ์ธ์Šคํ„ด์Šค๋ฅผ ์œ ์ง€ํ•˜๋„๋ก ์„ค์ •๋ผ์žˆ๋‹ค.

 

export ASG_NAME=$(aws autoscaling describe-auto-scaling-groups --query "AutoScalingGroups[? Tags[? (Key=='eks:cluster-name') && Value=='myeks']].AutoScalingGroupName" --output text)

aws autoscaling update-auto-scaling-group --auto-scaling-group-name ${ASG_NAME} --min-size 3 --desired-capacity 3 --max-size 6

aws autoscaling describe-auto-scaling-groups --query "AutoScalingGroups[? Tags[? (Key=='eks:cluster-name') && Value=='myeks']].[AutoScalingGroupName, MinSize, MaxSize,DesiredCapacity]" --output table
-----------------------------------------------------------------
|                   DescribeAutoScalingGroups                   |
+------------------------------------------------+----+----+----+
|  eks-ng1-fecab7e6-19c7-eab3-e78a-30553a1e283c  |  3 |  6 |  3 |
+------------------------------------------------+----+----+----+

 

MaxSize๋ฅผ 6์œผ๋กœ ๋ณ€๊ฒฝํ•˜์—ฌ ์ตœ๋Œ€ 6๊ฐœ๊นŒ์ง€ ์ฆ๊ฐ€ํ•  ์ˆ˜ ์žˆ๋„๋ก ํ™•์žฅํ•œ๋‹ค.

 

kubectl apply -f nginx.yaml
deployment.apps/nginx-to-scaleout created

kubectl get deployment/nginx-to-scaleout
NAME                READY   UP-TO-DATE   AVAILABLE   AGE
nginx-to-scaleout   0/1     1            0           3s

kubectl scale --replicas=15 deployment/nginx-to-scaleout && date
deployment.apps/nginx-to-scaleout scaled
Fri Mar  7 21:41:32 KST 2025

แ„‰แ…ณแ„แ…ณแ„…แ…ตแ†ซแ„‰แ…ฃแ†บ 2025-03-07 แ„‹แ…ฉแ„’แ…ฎ 9.42.42.png
แ„‰แ…ณแ„แ…ณแ„…แ…ตแ†ซแ„‰แ…ฃแ†บ 2025-03-07 แ„‹แ…ฉแ„’แ…ฎ 9.43.22.png

 

๋…ธ๋“œ๊ฐ€ ์ฆ์„ค๋˜์—ˆ๋‹ค!

แ„‰แ…ณแ„แ…ณแ„…แ…ตแ†ซแ„‰แ…ฃแ†บ 2025-03-07 แ„‹แ…ฉแ„’แ…ฎ 9.46.02.png

 

EKS ํด๋Ÿฌ์Šคํ„ฐ์—์„œ ๋…ธ๋“œ๊ฐ€ ๋ถ€์กฑํ•˜๋ฉด Cluster AutoScaler๊ฐ€ ์˜คํ† ์Šค์ผ€์ผ๋ง ๊ธฐ๋Šฅ์œผ๋กœ EC2 Fleet์„ ์‚ฌ์šฉํ•˜์—ฌ ์ถ”๊ฐ€ ์›Œ์ปค ๋…ธ๋“œ๋ฅผ ์ž๋™์œผ๋กœ ์ฆ์„คํ•œ ๊ฒƒ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋Š”๋ฐ,

AWS CloudTrail > ์ด๋ฒคํŠธ ๊ธฐ๋ก > CreateFleet ํ™•์ธ ๊ฐ€๋Šฅํ•˜๋‹ค.

แ„‰แ…ณแ„แ…ณแ„…แ…ตแ†ซแ„‰แ…ฃแ†บ 2025-03-07 แ„‹แ…ฉแ„’แ…ฎ 10.09.36.png

 

๋…ธ๋“œ๊ฐ€ ์™„์ „ํžˆ ์ค„์–ด๋“œ๋Š”๋ฐ๊นŒ์ง€ ์‹œ๊ฐ„์ด ์กฐ๊ธˆ ๊ฑธ๋ฆฐ๋‹ค. ์›๋ž˜ 3๋Œ€๋กœ ์ •์ƒ์ ์œผ๋กœ ๊ฐ์†Œํ•œ ๊ฒƒ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค.