2025. 2. 25. 14:34ㆍKubernetes/AutoScaling
# 테스트 환경
- OS : Ubuntu 24.04 LTS
- kubectl : v1.30.0
Kubernetes의 autoscaling 방법 중 하나인 HPA를 이용한 autoscaling 테스트를 진행하였다.
HPA
Horizontal Pod Autoscaler는 K8S에서 제공하는 기능으로 CPU, 메모리 사용량 또는 사용자 정의 메트릭에 따라 Pod의 수를 자동으로 확장 또는 축소하는 기능
주요 기능
1. 자동 확장 및 축소 : CPU, 메모리 사용량이 증가하면 pod 수를 자동으로 늘리고 사용량이 감소하면 자동으로 줄임
2. 리소스 최적화 : 트래픽 변화에 유연하게 대응하며 과도한 리소스 사용을 방지 가능
3. 확정성 보장 : 사용량 증가 시 빠르게 pod 수를 확장해 서비스의 안정성을 유지
동작 방식
1. metrics-server에서 리소스 사용량을 수집
2. 정의한 임계치와 수집된 실제 리소스 사용량을 비교
3. 임계치보다 사용량이 높으면 pod 수를 늘리고 낮아지면 pod 수를 감소 시킴
Test Case
hpa-test.yaml
cpu 부하 테스트를 진행할 Deployment를 정의한 yaml 파일
apiVersion: apps/v1
kind: Deployment
metadata:
name: hpa-cpu-test
labels:
app: hpa-cpu-test
spec:
replicas: 1
selector:
matchLabels:
app: hpa-cpu-test
template:
metadata:
labels:
app: hpa-cpu-test
spec:
containers:
- name: cpu-stress
image: polinux/stress # stress를 사용하기 위한 이미지
command:
- sh
- -c
- |
#!/bin/bash
i=2
# 부하 증가를 한 번만 실행할 수 있도록 flag 추가
increase_done=false
while true; do
# CPU 부하 증가 (i가 5 이하일 때만 실행, 한 번만 증가)
if [ $i -le 5 ] && [ "$increase_done" = false ]; then
echo "CPU 부하 증가 중: $i"
stress --cpu 1 --timeout 30s & # stress로 CPU 부하 증가
i=$((i + 1)) # 부하 증가
increase_done=true # 부하 증가 완료 표시
fi
# 부하를 점진적으로 줄이기 위한 로직 (30초 후)
sleep 30
# 부하 감소 (i가 2를 초과한 후에만 실행)
if [ $i -gt 2 ]; then
echo "CPU 부하 감소 중: $i"
# stress 프로세스 종료
pkill stress # stress 프로세스 종료
sleep 30
i=$((i - 2)) # 부하 감소
fi
# i가 0이면 종료
if [ $i -eq 0 ]; then
echo "CPU 부하 제거 완료: i = $i"
break # 무한 루프 종료
fi
done
resources:
requests:
cpu: "200m" # 최소 CPU 요청량
limits:
cpu: "400m" # 최대 CPU 제한량
hpa.yaml
hpa-cpu-test Deployment에 대한 cpu 부하 테스트 진행 시 설정할 hpa 정보들을 정의한 yaml 파일
apiVersion: autoscaling/v2
kind: HorizontalPodAutoscaler
metadata:
name: cpu-test-hpa
spec:
scaleTargetRef:
apiVersion: apps/v1
kind: Deployment
name: hpa-cpu-test # 해당 hpa를 적용하고자 하는 Deployment 명
minReplicas: 1 # 최소 유지 pod 갯수
maxReplicas: 6 # 최대 유지 pod 갯수
metrics:
- type: Resource
resource:
name: cpu
target:
type: Utilization
averageUtilization: 50 # CPU 사용량이 50 이상일 때 pod 수 확장, 반대로 50이하일 때 pod 수 축소
behavior: # 스케일 인/아웃 속도 설정
scaleDown:
stabilizationWindowSeconds: 30 # Pod 축소 확인 주기를 30초로 단축
1. Deployment와 HPA를 apply 하기
# Deployment
kubectl apply -f hpa-cpu-test.yaml
# HPA
kubectl apply -f hpa.yaml
2. 정상 apply 되었는지 확인
# Deployment
kubectl get deployment
# HPA
kubectl get hpa

3. 배포된 hpa를 통해 scale up / down 확인
kubectl get hpa -w
Test 결과

kubectl get hpa -w 명령어는 기본적으로 변경 사항을 15초에 한 번씩 실시간으로 보여준다.
최초에 stress 부하를 가하자 185%까지 늘어난 사용량으로 인해 pod의 수가 1개 → 4개 → 6개로 점차 늘어나는 것이 확인 가능하다.
부하를 주는 if문이 종료되고 부하를 주던 stress 프로세스를 삭제하자 cpu 사용량이 점차 줄어들고 그에 따라서 pod의 수도 6개 → 3개 → 1개 순서로 점차 줄어드는 것이 확인 가능하다.
'Kubernetes > AutoScaling' 카테고리의 다른 글
VPA를 이용한 autoscaling 테스트 - off (0) | 2025.03.04 |
---|---|
VPA를 이용한 autoscaling 테스트 - auto (0) | 2025.03.04 |