콘텐츠로 이동

수평 확장 (Horizontal Scaling)

Feb 12, 2026 · Updated Mar 15, 2026

Kubernetes에서 수평 확장은 핵심 기능 중 하나이며, 매우 간단하게 수행할 수 있다.

수평 확장의 원리:

  • Scale Out (확장): 부하가 증가하면 애플리케이션 인스턴스(Pod)를 추가하여 부하 분산
  • Scale In (축소): 부하가 감소하면 불필요한 인스턴스를 제거하여 리소스 절약
  • 선언적 접근: “3개의 복제본이 실행되어야 한다”고 선언하면 Kubernetes가 현재 상태와의 차이를 계산하여 조치

Kubernetes의 수평 확장 방식:

  1. 수동 확장: kubectl scale deployment 명령으로 복제본 수 직접 지정
  2. 자동 확장(Autoscaling): Kubernetes가 리소스 소비량과 기타 메트릭을 모니터링하여 자동으로 인스턴스 수 조절
  3. 클러스터 수준 확장: 클라우드 환경에서 노드가 부족하면 클라우드 프로바이더 API를 통해 추가 노드를 자동 프로비저닝

수평 확장 vs 수직 확장:

  • 수직 확장(Vertical Scaling): 과거 모놀리식 아키텍처에서 주로 사용. 더 강력한 하드웨어로 교체
  • 수평 확장(Horizontal Scaling): 마이크로서비스 아키텍처에서 선호. 여러 인스턴스에 부하 분산

전제조건:

  • 애플리케이션 자체가 수평 확장을 지원해야 함 (stateless 설계 등)
  • Kubernetes는 복제를 용이하게 만들 뿐, 애플리케이션을 자동으로 확장 가능하게 만들지 않음
Terminal window
# 수동 수평 확장 (1개 -> 3개)
$ kubectl scale deployment web-server --replicas=3
deployment.apps/web-server scaled
# 결과 확인
$ kubectl get deploy
NAME READY UP-TO-DATE AVAILABLE AGE
web-server 3/3 3 3 18m
# 수평 축소 (3개 -> 1개)
$ kubectl scale deployment web-server --replicas=1

수평 확장 전후:

graph LR
  subgraph After["확장 후"]
      S2["Service"] --> PB["Pod A (33%)"]
      S2 --> PC["Pod B (33%)"]
      S2 --> PD["Pod C (33%)"]
  end
  subgraph Before["확장 전"]
      S1["Service"] --> PA["Pod A (부하 100%)"]
  end

클라우드 환경에서의 자동 확장 흐름:

graph TD
  Load["부하 증가"] --> HPA["HPA가 감지"]
  HPA --> Scale["복제본 수 증가"]
  Scale --> Check{"노드 용량 부족?"}
  Check -->|No| Done["스케줄링 완료"]
  Check -->|Yes| CA["클러스터 오토스케일러가
클라우드에 노드 추가 요청"]
  CA --> Done