[워크삽] AWS 트레니엄 워크삽(13)-수평 포드 오토스케일러
이번에는 vLLM 배포에 수평 Pod 오토스케일러(Horizontal Pod Autoscaler, HPA)를 구성해 CPU 사용률에 따라 Pod 수를 자동으로 조정한다. 이를 통해 필요에 따라 Pod를 추가하거나 제거하여 변동하는 부하를 효율적으로 처리할 수 있다.
1. 사전 요구 사항
이전 실습에서 모니터링을 활성화한 vLLM 배포가 실행 중인지 확인한다.
2/ Metrics Server 설치
HPA가 동작하는 데 필요한 Metrics Server를 설치한다.
# Install metrics server
kubectl apply -f https://github.com/kubernetes-sigs/metrics-server/releases/latest/download/components.yaml
# Wait for deployment
kubectl wait --for=condition=available --timeout=300s deployment/metrics-server -n kube-system
# Verify installation
kubectl top nodes
kubectl top pods -n default
3. HPA 구성 생성
CPU 사용률을 기준으로 확장하는 HPA를 생성한다.
cat > vllm-hpa.yaml <<EOF
apiVersion: autoscaling/v2
kind: HorizontalPodAutoscaler
metadata:
name: vllm-hpa
namespace: default
spec:
scaleTargetRef:
apiVersion: apps/v1
kind: Deployment
name: vllm-deployment
minReplicas: 1
maxReplicas: 3
metrics:
- type: Resource
resource:
name: cpu
target:
type: Utilization
averageUtilization: 70
behavior:
scaleUp:
stabilizationWindowSeconds: 30
policies:
- type: Percent
value: 100
periodSeconds: 60
scaleDown:
stabilizationWindowSeconds: 30
policies:
- type: Percent
value: 50
periodSeconds: 60
EOF
# Apply the HPA configuration
kubectl apply -f vllm-hpa.yaml
HPA 상태 모니터링
HPA 상태와 현재 지표를 확인한다.
echo "=== HPA Status ==="
kubectl get hpa vllm-hpa
echo -e "\n=== HPA Description ==="
kubectl describe hpa vllm-hpa
echo -e "\n=== Current Pod Status ==="
kubectl get pods -l app.kubernetes.io/name=vllm-server
4. HPA 확장 동작 테스트
vLLM Pod에 직접 CPU 부하를 생성해 수평 Pod 자동 확장기를 테스트한다.
# Create CPU stress test on the vLLM pod
POD=$(kubectl get pods -l app.kubernetes.io/name=vllm-server -o jsonpath='{.items[0].metadata.name}')
echo "Creating CPU load on $POD for 5 minutes..."
kubectl exec $POD -- bash -c 'for i in {1..8}; do (while true; do :; done) & done; sleep 300; pkill -f "while true"'
echo "Done."
다른 터미널 창을 열어 30초의 안정화 기간이 지난 뒤 HPA 자동 확장 동작을 모니터링한다.
# Monitor pods in real-time to see HPA scaling
kubectl get pods -l app.kubernetes.io/name=vllm-server -w
HPA 상태도 확인할 수 있다.
# Check HPA status
kubectl get hpa vllm-hpa
# View detailed HPA information
kubectl describe hpa vllm-hpa
5. 스트레스 테스트 중 리소스 사용량 모니터링
스트레스 테스트가 실행되는 동안 Pod 내부에서 CPU 및 Neuron 디바이스 사용량을 모니터링할 수 있다.
# Connect to the pod shell and use neuron-top to monitor device usage
kubectl exec -it $(kubectl get pod -l app.kubernetes.io/name=vllm-server -o jsonpath='{.items[0].metadata.name}') -- neuron-top
다음 정보를 실시간으로 표시한다.
- Pod의 CPU 사용률
- Neuron 디바이스 사용량과 사용률
- 메모리 사용량
- 활성 상태인 추론 프로세스

6. HPA 구성 요약
HPA 구성은 다음 기능을 제공한다.
- 자동 확장: CPU 사용률에 따라 Pod 수를 1개에서 3개 사이로 조정한다.
- CPU 목표값: 모든 Pod의 평균 CPU 사용률을 70%로 유지한다.
- 안정화: 5분의 안정화 기간을 사용해 빈번한 확장 및 축소 진동을 방지한다.
- 확장 정책: 필요할 때 60초마다 처리 용량을 두 배로 늘릴 수 있다.
- 축소 정책: 60초마다 처리 용량을 최대 50%까지 줄인다.
7. HPA 정리(선택 사항)
HPA가 더 이상 필요하지 않으면 제거한다.
# Delete the HPA
kubectl delete hpa vllm-hpa
# Verify removal
kubectl get hpa
8. 다음 단계
HPA 구성을 마치면 vLLM 배포가 수요에 따라 자동으로 확장 및 축소된다. 다음 작업을 수행할 수 있다.
- 다양한 부하 패턴에서 확장 및 축소 동작을 모니터링한다.
- 요구 사항에 맞게 확장 및 축소 정책을 조정한다.
- 관측 가능성 섹션으로 이동해 종합적인 모니터링을 구성한다.
- Cluster Autoscaler와 결합해 노드 수준의 확장을 구성한다.
이제 정리(Teardown) 실습으로 이동해 모든 리소스를 정리한다.
댓글남기기