루다의 선톡(사용자에게 먼저 보내는 메시지)은 기념일·모델 생성 등으로 불규칙하게 몰려 순간 트래픽이 급증하는데, 기존 HPA는 트래픽이 온 뒤에야 늘려 모델 서버가 뜨기 전 장애가 났다. 이 글은 쿠버네티스 커스텀 컨트롤러 Prescaler로 발송 전에 미리 스케일업하는 예측 오토스케일링을 다룬다.
핵심 포인트- 문제는 세 가지다: 선톡 발송의 예측 불가능성, RPS 기반 HPA의 반응 지연(모델 서버는 가중치 다운로드로 배포가 느림), 쿠버네티스가 Custom Metrics Server를 하나만 허용해 Prometheus와 병행 불가.
- 해결책 Prescaler는 VirtualMetric·VirtualMetricEvent·HorizontalPodPrescaler 세 커스텀 리소스로 예측 메트릭을 정의하고 스케일 목표를 잡는다.
- 선톡 수신자 조회와 실제 발송을 10분 간격으로 분리해 발송될 메시지 수를 미리 알고 대응 시간을 확보한다.
- 필요 replica는 desiredReplicas = ceil[currentReplicas x (currentMetricValue / desiredMetricValue)]로 계산해 HPA의 minReplicas로 주입한다.
- 기존 HPA를 덮지 않고 minReplicas만 올렸다가 트래픽 정상화 후 어노테이션 백업값으로 복구한다.
상세 정리- VirtualMetric: 예측 대상 메트릭(rps)을 정의한다. 기본값 0, 중복 리소스 값을 합치는 mergeStrategy(Sum)를 지정한다.
- VirtualMetricEvent: 메트릭 변화 요인을 정의한다. 메트릭 소스 API 주소와 서비스별 expression(예: scheduledMessage x 2)으로 값을 변환한다.
- HorizontalPodPrescaler: 기존 HPA를 참조하되 averageValue로 보장할 메트릭을 명시하고 minReplicas를 동적으로 조정한다.
- 운영 흐름: 선톡 발송 전 조회 단계에서 발송 예정 메시지 수를 파악한다. Source Metric API가 start·end·values(scheduledMessage) 형태 시계열을 반환한다.
- 스케일 계산: 반환 값을 desiredReplicas 공식에 넣어 필요 replica를 산출하고 HPA minReplicas로 설정한다. 평상시엔 기존 HPA 규칙이 그대로 동작한다.
- 복구: 기존 minReplicas는 어노테이션에 백업해 두고 스파이크가 지나면 원값으로 되돌린다.
- 배포·권한: Helm Chart로 배포하고 ClusterRole로 VirtualMetric·VirtualMetricEvent·HorizontalPodPrescaler에 Get·List, HPA에 Get·Update 권한을 준다. ServiceAccount·ClusterRoleBinding으로 Deployment에 바인딩한다.
- 결과: 선톡으로 인한 급증에 사전 대응이 가능해졌고, 선톡 응답률에 맞춰 target value와 event expression을 계속 조정 중이다.
- 의의: Custom Resource와 Custom Controller 조합으로 쿠버네티스 기본 기능을 확장해 복잡한 비즈니스 로직을 선언적으로 구현한 패턴이다.
왜 읽나예측 가능한 이벤트성 트래픽을 HPA만으로 못 막는 SRE·플랫폼 엔지니어에게 커스텀 컨트롤러 기반 예측 스케일링 설계 레퍼런스.