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๋ฅผ ์์ฑํ๊ฑฐ๋ ์ญ์ ํ๊ณ ํ๋๋ฅผ ์๋์ผ๋ก ์ค์ผ์ผ๋งํ๋ค.

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


๋ ธ๋๊ฐ ์ฆ์ค๋์๋ค!

EKS ํด๋ฌ์คํฐ์์ ๋ ธ๋๊ฐ ๋ถ์กฑํ๋ฉด Cluster AutoScaler๊ฐ ์คํ ์ค์ผ์ผ๋ง ๊ธฐ๋ฅ์ผ๋ก EC2 Fleet์ ์ฌ์ฉํ์ฌ ์ถ๊ฐ ์์ปค ๋ ธ๋๋ฅผ ์๋์ผ๋ก ์ฆ์คํ ๊ฒ์ ํ์ธํ ์ ์๋๋ฐ,
AWS CloudTrail > ์ด๋ฒคํธ ๊ธฐ๋ก > CreateFleet ํ์ธ ๊ฐ๋ฅํ๋ค.

๋ ธ๋๊ฐ ์์ ํ ์ค์ด๋๋๋ฐ๊น์ง ์๊ฐ์ด ์กฐ๊ธ ๊ฑธ๋ฆฐ๋ค. ์๋ 3๋๋ก ์ ์์ ์ผ๋ก ๊ฐ์ํ ๊ฒ์ ํ์ธํ ์ ์๋ค.
'Infra > AWS' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
AWS MFA ์ญ์ ํ์ ๋ ์กฐ์น ๋ฐ PC๋ก ์ธ์ฆ ๋ณ๊ฒฝ (0) | 2025.03.10 |
---|---|
[AEWS] #5์ฃผ์ฐจ Karpenter ์ค์ต (3) (0) | 2025.03.08 |
EKS cloudformation DELETE_IN_PROGRESS ์ํ์ผ ๋ ์กฐ์น (0) | 2025.03.07 |
[AEWS] #5์ฃผ์ฐจ HPA๋ฅผ ํ์ฉํ ์คํ ์ค์ผ์ผ๋ง, ์ปค์คํ ๋งคํธ๋ฆญ ํ์ฉ (1) (0) | 2025.03.07 |
[AEWS] #4์ฃผ์ฐจ ํ๋ก๋ฉํ ์ฐ์ค๋งคํธ๋ฆญ๊ณผ PromQL (4) (0) | 2025.03.02 |