쿠버네티스(Kubernetes) 오토스케일링(Autoscaling)은 애플리케이션의 부하(트래픽, CPU, 메모리 사용량 등)에 따라 자동으로 리소스를 확장하거나 축소하는 기능을 제공합니다. 오토스케일링을 활용하면 비용 절감과 성능 최적화를 동시에 이룰 수 있습니다.
이 글에서는 쿠버네티스 오토스케일링의 개념, 주요 유형, 동작 방식, 설정 방법 및 실전 예제를 다룹니다.
📌 목차
- 쿠버네티스 오토스케일링이란?
- 오토스케일링의 필요성
- 쿠버네티스 오토스케일링의 주요 유형
- Horizontal Pod Autoscaler (HPA)
- Vertical Pod Autoscaler (VPA)
- Cluster Autoscaler (CA)
- 오토스케일링 동작 방식
- HPA 설정 및 실전 예제
- VPA 설정 및 실전 예제
- Cluster Autoscaler 설정 및 실전 예제
- 결론
1. 쿠버네티스 오토스케일링이란?
쿠버네티스 오토스케일링은 클러스터의 부하 변화에 따라 자동으로 리소스를 확장하거나 축소하는 기능입니다. 이를 통해 애플리케이션이 최적의 성능을 유지하면서도 불필요한 리소스 낭비를 줄일 수 있습니다.
✅ 오토스케일링의 목표
- 트래픽 증가 시 자동으로 파드(Pod) 개수 증가
- 부하 감소 시 불필요한 리소스를 줄여 비용 절감
- 클러스터 노드(Node)를 자동 확장 및 축소
2. 오토스케일링의 필요성
🔹 1) 수요 변화에 따른 리소스 조정
- 웹 애플리케이션, API 서버, 배치 작업 등은 트래픽과 부하가 시간에 따라 변동합니다.
- 오토스케일링을 활용하면, 필요할 때만 리소스를 늘리고 줄일 수 있어 비용 절감 가능.
🔹 2) 장애 대응 및 가용성 보장
- 특정 노드가 장애를 일으키거나 CPU 사용량이 급증할 경우, 자동으로 새 파드를 추가하여 애플리케이션을 안정적으로 운영 가능.
🔹 3) 클러스터 리소스 활용 최적화
- 적절한 크기의 파드를 배치하고, 불필요한 노드를 제거하여 최적의 인프라 환경을 유지.
3. 쿠버네티스 오토스케일링의 주요 유형
쿠버네티스는 세 가지 주요 오토스케일링 방법을 제공합니다.
오토스케일링 유형 | 설명 |
---|---|
HPA (Horizontal Pod Autoscaler) | CPU, 메모리 등의 부하에 따라 파드 개수를 조정 |
VPA (Vertical Pod Autoscaler) | 개별 파드의 CPU, 메모리 리소스를 조정 |
CA (Cluster Autoscaler) | 필요할 때 노드(Node) 개수를 자동 확장 및 축소 |
4. 오토스케일링 동작 방식
쿠버네티스 오토스케일링은 다음과 같은 순서로 동작합니다.
- 모니터링: 쿠버네티스는
metrics-server
를 통해 CPU 및 메모리 사용량을 실시간으로 감시합니다. - 트리거 감지: 사전에 정의된 임계치(예: CPU 50% 초과)가 발생하면 스케일링 트리거가 활성화됩니다.
- 리소스 조정:
- HPA는 파드 개수를 조정.
- VPA는 파드의 CPU 및 메모리 크기를 조정.
- CA는 클러스터의 노드 개수를 조정.
5. HPA 설정 및 실전 예제
🔹 HPA 설치 및 활성화
먼저, metrics-server
를 설치하여 HPA가 CPU 사용량을 감지할 수 있도록 설정합니다.
<bash>kubectl apply -f https://github.com/kubernetes-sigs/metrics-server/releases/latest/download/components.yaml
🔹 HPA 적용 대상 Deployment 생성
<yaml>apiVersion: apps/v1
kind: Deployment
metadata:
name: my-app
spec:
replicas: 2
selector:
matchLabels:
app: my-app
template:
metadata:
labels:
app: my-app
spec:
containers:
- name: my-container
image: nginx
resources:
requests:
cpu: "200m"
limits:
cpu: "500m"
<bash>kubectl apply -f my-app-deployment.yaml
🔹 HPA 설정 및 적용
<bash>kubectl autoscale deployment my-app --cpu-percent=50 --min=2 --max=10
- CPU 사용량이 50%를 초과하면 파드 개수를 자동 확장 (
min=2
,max=10
).
🔹 HPA 상태 확인
<bash>kubectl get hpa
6. VPA 설정 및 실전 예제
🔹 VPA 컨트롤러 설치
<bash>kubectl apply -f https://github.com/kubernetes/autoscaler/releases/latest/download/vertical-pod-autoscaler.yaml
🔹 VPA 리소스 정의
<yaml>apiVersion: autoscaling.k8s.io/v1
kind: VerticalPodAutoscaler
metadata:
name: my-vpa
spec:
targetRef:
apiVersion: "apps/v1"
kind: Deployment
name: my-app
updatePolicy:
updateMode: "Auto"
<bash>kubectl apply -f vpa.yaml
🔹 VPA는 실행 중인 파드의 리소스 사용량을 분석하여 CPU/메모리를 자동 조정합니다.
🔹 VPA 상태 확인
<bash>kubectl describe vpa my-vpa
7. Cluster Autoscaler 설정 및 실전 예제
🔹 Cluster Autoscaler 설치
클러스터 오토스케일러를 설치하기 위해, 클라우드 제공업체(GCP, AWS, Azure)의 지원이 필요합니다.<
<bash>kubectl apply -f https://github.com/kubernetes/autoscaler/releases/latest/download/cluster-autoscaler.yaml
🔹 노드 자동 확장 설정
<yaml>apiVersion: cluster.k8s.io/v1alpha1
kind: ClusterAutoscaler
metadata:
name: my-cluster-autoscaler
spec:
scaleDown:
enabled: true
unneededTime: 10m
scaleUp:
enabled: true
<bash>kubectl apply -f cluster-autoscaler.yaml
🔹 Cluster Autoscaler는 필요할 때 노드를 자동으로 추가/삭제하여 클러스터를 최적화합니다.
8. 결론
쿠버네티스 오토스케일링을 활용하면 애플리케이션의 부하에 맞춰 자동으로 리소스를 조정할 수 있습니다.
✅ 오토스케일링 유형 정리
- HPA (Horizontal Pod Autoscaler) → 파드 개수 자동 확장.
- VPA (Vertical Pod Autoscaler) → 파드 리소스(CPU/메모리) 자동 조정.
- Cluster Autoscaler (CA) → 노드 개수 자동 확장.
✅ 오토스케일링 도입 효과
- 트래픽 변화에 대한 자동 대응.
- 비용 최적화 및 리소스 낭비 감소.
- 애플리케이션의 가용성과 성능 보장.
🚀 쿠버네티스 오토스케일링을 적용하여 더욱 효율적인 클라우드 네이티브 환경을 구축해보세요!