본문 바로가기
1. 개발/1.6. 쿠버네티스 (Kubernetes,K8s)

'HPA(Horizontal Pod Autoscaler)'와, 'Cluster Autoscaler(CA)'

by 엉짱 2026. 2. 9.
반응형

이제 쿠버네티스의 가장 지능적인 부분이자, 클라우드 비용 절감의 핵심인 '오토스케일링(Autoscaling)' 시스템에 오셨군요! 🫡

주식 데이터 공장이 24시간 내내 풀가동될 필요는 없죠. 장이 열리는 시간이나 급등주가 터지는 시간에만 화력을 집중하고, 밤에는 조용히 쉬면서 돈을 아껴야 합니다. 이를 가능하게 하는 HPACA의 유기적인 협업 과정을 분석해 드립니다!


📈 1. HPA (Horizontal Pod Autoscaler): "파드 숫자를 늘려라"

HPA는 애플리케이션 계층의 오토스케일러입니다. 파드의 부하를 감시하다가 사용자가 설정한 임계치를 넘으면 파드의 개수를 복제(Replication)합니다.

① 판단 지표 (Metrics)

  • CPU & Memory: 가장 기본입니다. "파드의 평균 CPU 사용률이 70%를 넘으면 파드를 늘려라" 같은 식입니다.
  • Custom Metrics: 주식 시스템에서는 이게 더 중요할 수 있습니다. "카프카 컨슈머의 랙(Lag)이 10만 건을 넘으면 파드를 늘려라" 혹은 "초당 요청 수(RPS)가 1,000을 넘으면 늘려라" 같은 지표를 Metrics ServerPrometheus를 통해 수집하여 판단 기준으로 삼습니다.

② 작동 원리 (The Equation)

HPA는 다음과 같은 공식을 통해 필요한 파드 수를 계산합니다.

예를 들어 현재 파드가 2개인데 CPU가 90%이고, 목표가 50%라면 , 즉 4개의 파드가 필요하다고 판단하여 즉시 2개를 더 띄웁니다.


🏗️ 2. CA (Cluster Autoscaler): "항구(서버)를 넓혀라"

HPA가 파드를 늘리려고 하는데, 더 이상 파드를 담을 노드(Node, 서버)의 여유 공간이 없다면 어떻게 될까요? 이때 등판하는 것이 바로 CA입니다.

① 판단 지표: "Pending 파드의 존재"

CA는 CPU 점유율을 보지 않습니다. 대신 '스케줄링되지 못한 파드(Pending Pod)'가 있는지를 감시합니다.

  • HPA가 파드를 늘렸는데, 노드에 자리가 없어 파드가 "Pending(대기)" 상태에 머물면, CA는 이를 감지하고 클라우드(AWS, GCP 등)에 "새 서버(Node) 한 대만 더 빌려줘!"라고 요청합니다.

② 스케일 다운 (Scale-in)

반대로 노드의 자원이 너무 많이 남으면(보통 50% 미만 활용), CA는 해당 노드에 있는 파드들을 다른 노드로 이사시키고 서버를 반납하여 비용을 절감합니다.


🤝 3. HPA와 CA의 연동 프로세스 (Chain Reaction)

사용자의 주식 공장에 갑자기 트래픽이 폭주하는 상황을 시나리오로 그려보겠습니다.

  1. 감지: HPA가 파드의 CPU가 90%인 것을 보고 파드를 5개에서 10개로 늘리기로 결정합니다.
  2. 시도: 쿠버네티스 스케줄러가 새 파드 5개를 노드에 배치하려 하지만, 노드에 빈자리가 없어 3개만 배치되고 2개는 Pending 상태가 됩니다.
  3. 개입: CA가 Pending 파드를 발견하고, AWS EC2 인스턴스를 하나 더 생성하여 클러스터에 붙입니다.
  4. 완료: 새 노드가 준비되면, 대기하던 파드 2개가 새 노드에 안착합니다. 트래픽이 분산되어 시스템이 안정화됩니다.
  5. 종료: 트래픽이 줄어들면 HPA가 파드를 줄이고, 노드가 비면 CA가 노드를 삭제합니다. (비용 절감!)

💡 4. 실전 주의사항: "스케일링의 함정"

① 쿨다운 타임 (Cooldown Period)

트래픽이 요동칠 때 파드가 생겼다 없어졌다를 반복하면(Thrashing) 시스템이 불안정해집니다. 이를 방지하기 위해 한 번 늘리면 일정 시간(기본 5분 등)은 줄이지 않도록 설정하는 것이 중요합니다.

② 리소스 제한 (Limits vs Requests)

HPA는 파드의 Requests(최소 보장 자원) 대비 사용률을 기준으로 계산하는 경우가 많습니다. 따라서 YAML 파일에 리소스 요청량을 정확히 적어주지 않으면 HPA가 멍청하게 작동할 수 있습니다.


💡 실전 비유: "맛집과 분점"

  • HPA: 맛집에 손님이 줄을 서면, 사장님이 '서빙 직원(Pod)'을 더 고용하는 것입니다.
  • CA: 직원을 더 뽑았는데 식당이 꽉 차서 더 이상 직원이 서 있을 곳조차 없다면, 옆 건물을 빌려 '분점(Node)'을 내는 것입니다.
  • 연동: 손님이 줄면 직원을 먼저 줄이고(HPA), 손님이 아예 없으면 분점 문을 닫습니다(CA).

🚀 꼬리 질문

이제 자동으로 늘어나고 줄어드는 똑똑한 인프라까지 마스터하셨습니다! 🫡 그런데 주식 데이터 파이프라인처럼 민감한 정보를 다룰 때는 DB 비밀번호나 API 키 같은 '보안 정보'를 YAML에 그대로 적을 순 없겠죠?

"그럼 보안이 필요한 설정값들을 안전하게 관리하고 파드에 전달하는 'Secret'과 일반 설정을 관리하는 'ConfigMap'은 어떤 차이가 있고 어떻게 사용해?"

반응형