본문으로 건너뛰기

오토스케일링 및 리소스 관리

이 섹션에서는 Kubernetes의 리소스 관리와 다양한 오토스케일링 메커니즘을 실습합니다.

학습 목표

  • 리소스 Requests/Limits 이해 및 설정
  • LimitRange와 ResourceQuota를 통한 리소스 거버넌스
  • HPA를 이용한 CPU/Memory 기반 오토스케일링
  • KEDA를 활용한 이벤트 기반 오토스케일링
  • 시간 기반 스케일링 전략

실습 순서

  1. 리소스 관리 - Requests, Limits, LimitRange, ResourceQuota
  2. Horizontal Pod Autoscaler - CPU/Memory 기반 스케일링
  3. KEDA RabbitMQ 스케일링 - 큐 기반 이벤트 스케일링
  4. KEDA Cron 스케일러 - 시간 기반 스케일링

리소스 관리 개요

Resource Requests vs Limits

구분RequestsLimits
의미보장된 리소스최대 사용 가능 리소스
스케줄링스케줄러가 고려스케줄러 무시
초과 시N/ACPU: Throttling, Memory: OOMKilled

QoS 클래스

Kubernetes는 리소스 설정에 따라 Pod에 QoS 클래스를 할당합니다:

QoS 클래스조건우선순위
GuaranteedRequests = Limits (모든 컨테이너)최고
BurstableRequests < Limits 또는 일부만 설정중간
BestEffortRequests/Limits 미설정최저

리소스 부족 시 BestEffort → Burstable → Guaranteed 순서로 제거됩니다.

오토스케일링 유형

1. Horizontal Pod Autoscaler (HPA)

Pod 개수를 자동으로 조정:

  • 메트릭: CPU, Memory, Custom Metrics
  • 스케일링: 워크로드 증가 시 Pod 추가
  • 제한: minReplicas, maxReplicas

2. Vertical Pod Autoscaler (VPA)

Pod의 리소스 요청/제한을 자동으로 조정:

  • 메트릭: 실제 사용량 기반
  • 모드: Auto, Initial, Off
  • 주의: Pod 재시작 필요

3. Cluster Autoscaler

노드 개수를 자동으로 조정:

  • 트리거: Pending Pod 발생 시
  • 스케일 다운: 노드 사용률 낮을 때
  • AKS 통합: 노드 풀별 설정 가능

4. KEDA (Kubernetes Event-Driven Autoscaling)

이벤트 기반으로 Pod 자동 확장:

  • 메트릭: 메시지 큐, DB 쿼리, HTTP 요청 등
  • Scale to Zero: 이벤트 없을 때 0으로 축소
  • 다양한 Scaler: RabbitMQ, Azure Service Bus, Prometheus 등

AKS 오토스케일링 구성

Cluster Autoscaler 활성화

# 클러스터 생성 시
az aks create \
--resource-group myResourceGroup \
--name myAKSCluster \
--enable-cluster-autoscaler \
--min-count 1 \
--max-count 5

# 기존 노드 풀에 활성화
az aks nodepool update \
--resource-group myResourceGroup \
--cluster-name myAKSCluster \
--name nodepool1 \
--enable-cluster-autoscaler \
--min-count 1 \
--max-count 5

Metrics Server 확인

HPA를 위해서는 Metrics Server가 필요합니다:

# Metrics Server 확인
kubectl get deployment metrics-server -n kube-system

# 없으면 설치
kubectl apply -f https://github.com/kubernetes-sigs/metrics-server/releases/latest/download/components.yaml

AKS는 기본적으로 Metrics Server가 설치되어 있습니다.

모니터링

리소스 사용량 확인

# 노드 리소스 사용량
kubectl top nodes

# Pod 리소스 사용량
kubectl top pods

# Namespace별 사용량
kubectl top pods -n <namespace>

Azure Monitor

AKS는 Azure Monitor와 통합하여 상세한 메트릭을 제공합니다:

# Container Insights 활성화
az aks enable-addons \
--resource-group myResourceGroup \
--name myAKSCluster \
--addons monitoring

베스트 프랙티스

  1. 모든 Pod에 Requests/Limits 설정: LimitRange로 기본값 적용
  2. Namespace별 ResourceQuota 설정: 리소스 격리 및 제한
  3. QoS Guaranteed 사용: 중요한 워크로드는 Requests = Limits
  4. HPA와 Cluster Autoscaler 함께 사용: Pod와 노드 모두 자동 확장
  5. KEDA로 Scale to Zero: 비용 최적화
  6. 적절한 Stabilization Window 설정: 불필요한 스케일링 방지

다음 단계

각 실습을 통해 리소스 관리와 다양한 오토스케일링 전략을 익히고, 실제 프로덕션 환경에서 효율적인 리소스 사용과 비용 최적화를 달성합니다.