본문으로 건너뛰기

HPA 자동 스케일링

파드 목록 탭

트래픽이 급증할 때마다 수동으로 스케일을 조정하는 것은 번거롭고 위험합니다. HPA(Horizontal Pod Autoscaler)를 설정하면 서비스 부하에 따라 Pod가 자동으로 확장/축소됩니다.

왜 HPA를 사용해야 할까요?
  • 24시간 자동 대응: 새벽에 트래픽이 급증해도 자동으로 처리됩니다 .
  • 비용 절약: 트래픽이 적을 때는 Pod를 줄여 리소스를 절약합니다 .
  • 안정성 향상: 수동 조작 실수를 방지합니다 .

HPA란?

HPA(Horizontal Pod Autoscaler)는 CPU, 메모리 사용률, 또는 커스텀 메트릭을 기반으로 Pod 수를 자동 조정하는 Kubernetes의 핵심 기능입니다. "수평 확장"이라고 부르는 이유는 Pod의 "수"를 늘리기 때문입니다(수직 확장은 Pod의 리소스를 늘리는 것).

작동 원리

[Metrics Server] → [HPA Controller] → [Deployment Scale]
↓ ↓ ↓
메트릭 수집 목표값 비교 Pod 수 조정

지원 메트릭

HPA는 다양한 메트릭을 기준으로 스케일링할 수 있습니다.

  • CPU 사용률 (가장 일반적): Pod의 CPU 사용률을 기준으로 스케일링합니다. 웹 서버, API 서버 등 계산 집약적인 워크로드에 적합합니다.

  • 메모리 사용률: Pod의 메모리 사용률을 기준으로 스케일링합니다. 캐시, 데이터 처리 등 메모리 집약적인 워크로드에 적합합니다.

  • 커스텀 메트릭 (고급): Prometheus 등에서 수집한 메트릭을 기준으로 스케일링합니다. 초당 요청 수, 메시지 큐 길이 등 비즈니스 로직에 맞는 스케일링이 필요할 때 사용합니다.

어떤 메트릭을 선택해야 할까요?

대부분의 웹 서비스는 CPU 사용률 기준으로 시작하는 것이 좋습니다. 메모리 집약적인 워크로드라면 메모리 사용률을 추가하세요.


사전 요구사항

  • Kubernetes 클러스터에 Metrics Server가 설치되어 있어야 합니다 .
  • 서비스가 K8s에 배포되어 있어야 합니다 .

메트릭 서버가 없으면 메트릭 서버 설치 가이드를 참고하세요.

권한 안내: 이 기능에 접근할 수 없다면 기관 관리자에게 권한을 요청하세요.


HPA 설정

Step 1: 서비스 배포 설정 열기

  1. [서비스 관리] 페이지에서 대상 서비스를 클릭합니다 .
  2. 배포 탭을 클릭합니다 .
  3. 배포 설정 또는 HPA 설정 버튼을 클릭합니다 .

Step 2: HPA 활성화

  1. 자동 스케일링(HPA) 섹션을 찾습니다 .
  2. HPA 활성화 토글을 켭니다 .

Step 3: 기본 설정

  • 최소 레플리카 (권장: 2 이상): 부하가 낮아도 유지할 최소 Pod 수입니다. 고가용성을 위해 최소 2개 이상을 권장합니다. 1개로 설정하면 단일 장애점이 됩니다.
  • 최대 레플리카 (권장: 10, 리소스에 따라 조정): 부하가 높아도 확장할 수 있는 최대 Pod 수입니다. 클러스터 리소스와 비용을 고려하여 적절하게 설정하세요.
  • 스케일 업 안정화 (권장: 0초): Pod를 추가하기 전 대기하는 시간입니다. 일반적으로 0초로 설정하여 부하 증가에 즉시 대응합니다.
  • 스케일 다운 안정화 (권장: 300초): Pod를 줄이기 전 대기하는 시간입니다. 너무 짧으면 부하 변동에 따라 Pod가 자주 생성/삭제되는 플래핑 현상이 발생합니다. 최소 5분(300초)을 권장합니다.

Step 4: 메트릭 설정

CPU 기반 스케일링

  1. 메트릭 추가 버튼을 클릭합니다 .
  2. 메트릭 유형: CPU 선택
  3. 목표값 설정:
    • 평균 사용률: 50-80% 권장
    • 예: 70% → CPU 평균 70% 초과 시 확장

메모리 기반 스케일링

  1. 메트릭 추가 버튼을 클릭합니다 .
  2. 메트릭 유형: 메모리 선택
  3. 목표값 설정:
    • 평균 사용률: 70-90% 권장
    • 예: 80% → 메모리 평균 80% 초과 시 확장

Step 5: 저장 및 적용

  1. 저장 버튼을 클릭합니다 .
  2. KIWI가 HPA 리소스를 클러스터에 생성합니다 .
  3. "HPA가 적용되었습니다" 메시지를 확인합니다 .

HPA 상태 모니터링

서비스 관리에서 확인

배포된 서비스 카드에서 HPA 상태를 확인할 수 있습니다:

  • 현재 레플리카: 현재 실행 중인 Pod 수
  • 목표 레플리카: HPA가 결정한 목표 Pod 수
  • 현재 메트릭: 현재 CPU/메모리 사용률
  • 목표 메트릭: 설정된 목표값

운영 모달에서 확인

  1. 서비스의 운영 버튼을 클릭합니다 .
  2. 스케일링 탭을 선택합니다 .
  3. HPA 상태 및 이력을 확인합니다:
    • 스케일 업/다운 이벤트
    • 메트릭 트렌드 그래프
    • 레플리카 변경 이력

고급 설정

스케일링 정책

스케일링 동작을 세밀하게 제어합니다.

스케일 업 정책

  • 유형(Pods / Percent): 확장 단위를 절대 개수(Pods) 또는 비율(Percent)로 지정합니다. 예를 들어 Pods로 설정하면 정해진 개수만큼, Percent로 설정하면 현재 Pod 수의 비율만큼 확장합니다.
  • : 확장할 Pod 개수 또는 비율입니다. 예를 들어 유형이 Pods이고 값이 4이면 한 번에 최대 4개 Pod를 추가합니다.
  • 기간: 정책이 적용되는 시간 간격입니다. 예를 들어 15초로 설정하면 15초마다 스케일 업 여부를 판단합니다.

예: 유형 Pods, 값 4, 기간 15초 → 15초마다 최대 4개 Pod 추가

스케일 다운 정책

  • 유형(Pods / Percent): 축소 단위를 절대 개수(Pods) 또는 비율(Percent)로 지정합니다. 점진적인 축소를 위해 Percent를 권장합니다.
  • : 축소할 Pod 개수 또는 비율입니다. 예를 들어 유형이 Percent이고 값이 10이면 현재 Pod 수의 10%씩 축소합니다.
  • 기간: 정책이 적용되는 시간 간격입니다. 스케일 다운은 스케일 업보다 긴 간격을 권장합니다.

예: 유형 Percent, 값 10, 기간 60초 → 60초마다 최대 10% Pod 감소

다중 메트릭

여러 메트릭을 조합하여 스케일링할 수 있습니다.

  1. 메트릭 추가로 여러 메트릭 설정
  2. HPA는 모든 메트릭 중 가장 높은 레플리카 수를 선택
  3. 예: CPU 70%, 메모리 80% 모두 설정
    • CPU가 4개 요구, 메모리가 6개 요구 → 6개로 스케일

커스텀 메트릭 (고급)

Prometheus 연동 시 커스텀 메트릭 사용 가능:

  1. 커스텀 메트릭 옵션 선택
  2. 메트릭 이름 입력 (예: http_requests_per_second)
  3. 목표값 설정 (예: 1000)

실제 사용 시나리오

시나리오 1: 웹 애플리케이션

요구사항: 트래픽에 따라 자동 확장

설정:

  • 최소: 2, 최대: 20
  • CPU: 70% 목표
  • 스케일 다운 안정화: 300초

시나리오 2: API 서버

요구사항: 빠른 확장, 점진적 축소

설정:

  • 최소: 3, 최대: 50
  • CPU: 60% 목표
  • 스케일 업: 즉시 (0초)
  • 스케일 다운: 10분 안정화

시나리오 3: 배치 프로세서

요구사항: 메모리 집약적 작업

설정:

  • 최소: 1, 최대: 10
  • 메모리: 80% 목표
  • 스케일 다운: 5분 안정화

리소스 요청 설정

HPA가 정확하게 작동하려면 Pod의 리소스 요청(requests)이 설정되어야 합니다.

리소스 요청 설정 방법

  1. 배포 설정에서 리소스 섹션 확인
  2. 리소스 요청 설정:
  • CPU 요청 (권장: 100m - 500m): Pod가 보장받을 CPU 양입니다. 애플리케이션의 평균 CPU 사용량을 기준으로 설정하세요. HPA는 이 값을 기준으로 사용률을 계산합니다.
  • 메모리 요청 (권장: 128Mi - 512Mi): Pod가 보장받을 메모리 양입니다. 애플리케이션의 평균 메모리 사용량을 기준으로 설정하세요.
  • CPU 제한 (권장: 요청의 2-4배): Pod가 사용할 수 있는 최대 CPU 양입니다. 버스트 트래픽에 대응할 수 있도록 요청의 2-4배로 설정합니다.
  • 메모리 제한 (권장: 요청의 1.5-2배): Pod가 사용할 수 있는 최대 메모리 양입니다. 이 값을 초과하면 OOM으로 Pod가 종료되므로 여유있게 설정하세요.

예시 설정

resources:
requests:
cpu: "200m"
memory: "256Mi"
limits:
cpu: "500m"
memory: "512Mi"

이 설정에서 HPA CPU 목표 70%는:

  • 200m × 70% = 140m 평균 사용 시 유지
  • 200m × 70% 초과 시 스케일 업

문제 해결

HPA가 스케일하지 않음

  • 메트릭이 표시되지 않는 경우: Metrics Server가 설치되어 있지 않습니다. 메트릭 서버 설치 가이드를 참고하여 먼저 Metrics Server를 설치하세요.
  • Unknown 상태로 표시되는 경우: HPA가 메트릭을 수집하지 못하고 있습니다. Pod에 리소스 요청(requests)이 설정되어 있는지 확인하세요. 리소스 요청이 없으면 HPA가 사용률을 계산할 수 없습니다.
  • 목표값에 도달하지 않는 경우: 현재 부하가 낮아 스케일링이 필요하지 않은 상태입니다. 이는 정상적인 동작이며, 부하가 증가하면 자동으로 스케일됩니다.

과도한 스케일링

  • 빈번하게 확장/축소가 반복되는 경우 (플래핑): 스케일 다운 안정화 시간이 너무 짧습니다. 안정화 시간을 300초(5분) 이상으로 증가시키세요.
  • 너무 많은 Pod가 생성되는 경우: CPU/메모리 목표값이 너무 낮게 설정되어 있습니다. 목표값을 70-80%로 상향 조정하세요.
  • 리소스 부족으로 Pod가 Pending 상태인 경우: 최대 레플리카에 도달했거나 클러스터 리소스가 부족합니다. 최대 레플리카 값을 조정하거나 노드를 추가하세요.

스케일 다운 지연

  • 원인: 스케일 다운 안정화 시간
  • 해결: 필요시 안정화 시간 단축 (단, 플래핑 주의)

베스트 프랙티스

HPA를 효과적으로 사용하기 위한 권장 사항입니다.

설정 권장사항

검증된 설정값

아래 설정은 많은 프로젝트에서 검증된 값입니다. 참고하여 사용하세요.

  1. 최소 레플리카: 2개 이상 - 고가용성을 위해 필수입니다. 1개면 단일 장애점이 됩니다.
  2. 목표 CPU: 70-80% - 너무 낮으면 불필요한 비용이 발생합니다.
  3. 스케일 다운 안정화: 최소 300초 - 플래핑(빈번한 확장/축소)을 방지합니다.
  4. 리소스 요청: 실제 사용량 기반 - HPA가 정확하게 동작하려면 필수입니다.

모니터링

HPA가 잘 동작하는지 정기적으로 확인하세요.

  1. 메트릭 확인: 정기적으로 HPA 상태와 현재 레플리카 수를 확인합니다 .
  2. 알림 설정: 최대 레플리카에 도달하면 알림을 받도록 설정합니다 .
  3. 비용 모니터링: 스케일링에 따른 클라우드 비용을 추적합니다 .

테스트

프로덕션 배포 전에 HPA 동작을 검증하세요.

  1. 부하 테스트: 트래픽을 증가시켜 스케일 업이 잘 동작하는지 확인합니다 .
  2. 안정화 테스트: 트래픽을 줄여 스케일 다운이 적절히 동작하는지 확인합니다 .
  3. 한계 테스트: 최대 레플리카에 도달했을 때 서비스가 어떻게 동작하는지 확인합니다 .
프로덕션 전 테스트 필수

HPA 설정을 프로덕션에 바로 적용하지 마세요. 스테이징 환경에서 충분히 테스트한 후 적용하세요.


HPA 비활성화

HPA를 비활성화하려면:

  1. 배포 설정에서 HPA 활성화 토글을 끕니다 .
  2. 저장 버튼을 클릭합니다 .
  3. HPA 리소스가 삭제되고 수동 스케일링으로 전환됩니다 .

관련 가이드