워크로드 오토스케일링

워크로드 오토스케일링 (Autoscaling Workloads)

쿠버네티스에서는 리소스의 현재 수요에 따라 워크로드를 스케일링할 수 있어요. 덕분에 클러스터가 리소스 수요의 변화에 더 유연하고 효율적으로 대응할 수 있죠.

워크로드를 스케일링할 때는 워크로드가 관리하는 레플리카 수를 늘리거나 줄이거나, 레플리카에 제공되는 리소스를 제자리에서(in-place) 조정할 수 있어요.

첫 번째 접근 방식을 수평 스케일링(horizontal scaling), 두 번째를 수직 스케일링(vertical scaling)이라고 해요.

사용 사례에 따라 워크로드를 수동 또는 자동으로 스케일링할 수 있어요.

출처: 문서

본문

워크로드 수동 스케일링

쿠버네티스는 워크로드의 수동 스케일링을 지원해요. 수평 스케일링은 kubectl CLI로 할 수 있어요. 수직 스케일링은 워크로드의 리소스 정의를 패치해야 해요.

두 전략의 예는 아래를 참고하세요.

  • 수평 스케일링: 애플리케이션의 여러 인스턴스 실행하기
  • 수직 스케일링: 컨테이너에 할당된 CPU와 메모리 리소스 크기 조정하기

워크로드 자동 스케일링

쿠버네티스는 워크로드의 자동 스케일링도 지원하는데, 이 페이지의 핵심 주제가 바로 그것이에요.

쿠버네티스에서 오토스케일링(Autoscaling)이라는 개념은 파드 집합을 관리하는 객체(예: Deployment)를 자동으로 업데이트하는 능력을 뜻해요.

워크로드 수평 스케일링

쿠버네티스에서는 HorizontalPodAutoscaler(HPA)를 사용해 워크로드를 수평으로 자동 스케일링할 수 있어요.

HPA는 쿠버네티스 API 리소스이자 컨트롤러로 구현되며, CPU나 메모리 사용량 같은 관찰된 리소스 활용률에 맞춰 워크로드의 레플리카 수를 주기적으로 조정해요.

Deployment를 위한 HorizontalPodAutoscaler를 구성하는 워크스루 튜토리얼이 있어요.

워크로드 수직 스케일링

VerticalPodAutoscaler(VPA)를 사용하면 워크로드를 수직으로 자동 스케일링할 수 있어요. HPA와 달리 VPA는 쿠버네티스에 기본으로 포함되지 않아요. 사용하기 전에 사용자나 클러스터 관리자가 배포해야 하는 애드온(add-on)이에요.

설치하면 워크로드에 대해 CRD(CustomResourceDefinitions)를 만들 수 있는데, 이를 통해 관리되는 레플리카의 리소스가 어떻게, 언제 스케일링될지 정의할 수 있어요.

참고:

제자리 파드 수직 스케일링 (In-place pod vertical scaling)

이 기능은 쿠버네티스에서 안정(stable) 기능이에요. v1.35부터 그랬으며, 처음에는 v1.27 릴리스에서 제공됐어요. 이 기능이나 동작을 더 이상 비활성화하거나 선택 해제할 수 없어요(잠겨 있음). 관련 기능 게이트인 InPlacePodVerticalScaling에 값을 명시적으로 설정하면 쿠버네티스는 이를 무시하지만 오류를 보고하지는 않아요.

쿠버네티스 1.37 기준으로 VPA는 파드를 제자리에서 리사이징하지 못하지만, 이 통합은 작업 중이에요. 파드를 제자리에서 수동으로 리사이징하려면 '컨테이너 리소스 제자리 리사이징' 문서를 참고하세요.

클러스터 크기 기반 오토스케일링

클러스터 크기에 따라 스케일링해야 하는 워크로드(예: cluster-dns나 다른 시스템 구성 요소)는 Cluster Proportional Autoscaler를 사용할 수 있어요. VPA처럼 이것은 쿠버네티스 코어의 일부가 아니라 GitHub에 별도 프로젝트로 호스팅돼요.

Cluster Proportional Autoscaler는 스케줄링 가능한 노드와 코어의 수를 감시하고, 그에 따라 대상 워크로드의 레플리카 수를 스케일링해요.

레플리카 수를 그대로 유지하면서 클러스터 크기에 따라 워크로드를 수직으로 스케일링하려면 Cluster Proportional Vertical Autoscaler를 사용할 수 있어요. 이 프로젝트는 현재 베타이며 GitHub에서 찾을 수 있어요.

Cluster Proportional Autoscaler가 워크로드의 레플리카 수를 스케일링하는 반면, Cluster Proportional Vertical Autoscaler는 클러스터의 노드 및/또는 코어 수에 따라 워크로드(예: Deployment나 DaemonSet)의 리소스 요청을 조정해요.

이벤트 기반 오토스케일링

이벤트에 따라 워크로드를 스케일링하는 것도 가능해요. 예를 들어 KEDA(Kubernetes Event Driven Autoscaler)를 사용할 수 있어요.

KEDA는 CNCF 졸업 프로젝트로, 처리할 이벤트 수(예: 큐의 메시지 양)에 따라 워크로드를 스케일링할 수 있게 해줘요. 다양한 이벤트 소스에 대한 광범위한 어댑터가 있어 선택할 수 있어요.

스케줄 기반 오토스케일링

워크로드를 스케일링하는 또 다른 전략은 스케일링 작업을 예약하는 것이에요. 예를 들어 비수요 시간대에 리소스 소비를 줄이기 위한 것이죠.

이벤트 기반 오토스케일링과 비슷하게, 이러한 동작은 KEDA를 그 Cron 스케일러와 함께 사용해 이룰 수 있어요. Cron 스케일러는 워크로드를 스케일 인/아웃할 일정(및 시간대)을 정의할 수 있게 해줘요.

클러스터 인프라 스케일링

워크로드 스케일링으로 충분하지 않다면 클러스터 인프라 자체를 스케일링할 수도 있어요.

클러스터 인프라 스케일링은 보통 노드를 추가하거나 제거하는 것을 의미해요. 자세한 내용은 '노드 오토스케일링' 문서를 읽어 보세요.

더 알아보기 (Learn more)