2 분 소요

이번에는 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 디바이스 사용량과 사용률
  • 메모리 사용량
  • 활성 상태인 추론 프로세스

그림 1. neuron-top 출력

6. HPA 구성 요약

HPA 구성은 다음 기능을 제공한다.

  1. 자동 확장: CPU 사용률에 따라 Pod 수를 1개에서 3개 사이로 조정한다.
  2. CPU 목표값: 모든 Pod의 평균 CPU 사용률을 70%로 유지한다.
  3. 안정화: 5분의 안정화 기간을 사용해 빈번한 확장 및 축소 진동을 방지한다.
  4. 확장 정책: 필요할 때 60초마다 처리 용량을 두 배로 늘릴 수 있다.
  5. 축소 정책: 60초마다 처리 용량을 최대 50%까지 줄인다.

7. HPA 정리(선택 사항)

HPA가 더 이상 필요하지 않으면 제거한다.

# Delete the HPA
kubectl delete hpa vllm-hpa

# Verify removal
kubectl get hpa

8. 다음 단계

HPA 구성을 마치면 vLLM 배포가 수요에 따라 자동으로 확장 및 축소된다. 다음 작업을 수행할 수 있다.

  • 다양한 부하 패턴에서 확장 및 축소 동작을 모니터링한다.
  • 요구 사항에 맞게 확장 및 축소 정책을 조정한다.
  • 관측 가능성 섹션으로 이동해 종합적인 모니터링을 구성한다.
  • Cluster Autoscaler와 결합해 노드 수준의 확장을 구성한다.

이제 정리(Teardown) 실습으로 이동해 모든 리소스를 정리한다.

댓글남기기