쿠버네티스
쿠버네티스에서 오토 스케일링(Auto Scaling)
ipxy
2025. 3. 20. 11:15
728x90
쿠버네티스에서 오토 스케일링(Auto Scaling)은 워크로드의 변화에 따라 애플리케이션의 인스턴스(파드)를 자동으로 증가하거나 감소시켜 자원을 효율적으로 사용하는 기술입니다. 쿠버네티스 환경에서 오토 스케일링 방법은 크게 세 가지로 나눌 수 있습니다.
- Horizontal Pod Autoscaler (HPA): 파드 수를 자동으로 조정
- Vertical Pod Autoscaler (VPA): 파드의 CPU 및 메모리 리소스를 자동으로 조정
- Cluster Autoscaler (CA): 클러스터 내의 노드 수를 자동으로 확장/축소
각각의 방법에 대해 상세하게 설명하겠습니다.
✅ 1. Horizontal Pod Autoscaler (HPA)
Horizontal Pod Autoscaler는 파드의 복제본(replica)의 수를 자동으로 늘리거나 줄여주는 쿠버네티스 컨트롤러입니다.
작동 원리
- Metrics Server에서 수집한 CPU/메모리 사용률 또는 커스텀 지표를 기반으로 파드의 개수를 조정합니다.
- 리소스 사용량이 설정된 목표치(예: CPU 50%)를 초과하면 자동으로 파드를 추가하고, 사용량이 목표치 이하로 내려가면 파드를 축소합니다.
구성 방법 예시
아래는 HPA를 설정하는 YAML 예시입니다.
apiVersion: autoscaling/v2
kind: HorizontalPodAutoscaler
metadata:
name: my-app-hpa
spec:
scaleTargetRef:
apiVersion: apps/v1
kind: Deployment
name: my-app
minReplicas: 2
maxReplicas: 10
metrics:
- type: Resource
resource:
name: cpu
target:
type: Utilization
averageUtilization: 50
위 설정은 my-app 디플로이먼트의 CPU 사용률이 평균 50%를 넘으면 파드를 늘리고, 50% 이하로 떨어지면 파드를 줄입니다. 최소 2개에서 최대 10개의 파드까지 조정됩니다.
사용 가능한 Metrics
- CPU 사용률
- 메모리 사용률
- Prometheus를 활용한 커스텀 메트릭 (예: HTTP 요청 수, 응답시간 등)
✅ 2. Vertical Pod Autoscaler (VPA)
Vertical Pod Autoscaler는 파드의 CPU와 메모리와 같은 리소스를 자동으로 조정하는 도구입니다.
작동 원리
- VPA는 파드의 실제 사용량을 모니터링하고, 사용량 패턴에 따라 요청(Request) 및 제한(Limit)을 자동으로 조정합니다.
- 리소스 설정을 잘못 구성하거나 예측이 어려울 때 효과적으로 활용됩니다.
- HPA와 동시에 사용하는 것은 권장되지 않습니다. (충돌 가능성이 있음)
구성 방법 예시
apiVersion: autoscaling.k8s.io/v1
kind: VerticalPodAutoscaler
metadata:
name: my-app-vpa
spec:
targetRef:
apiVersion: apps/v1
kind: Deployment
name: my-app
updatePolicy:
updateMode: Auto
- Auto 모드에서는 권장된 리소스에 따라 자동으로 파드를 재시작합니다.
- 다른 옵션은 Off(추천만 제공), Initial(생성 시에만 적용)이 있습니다.
✅ 3. Cluster Autoscaler (CA)
Cluster Autoscaler는 클러스터 노드 수를 늘리거나 줄여서 클러스터 용량을 관리하는 역할을 합니다.
작동 원리
- Pending 상태의 파드가 있을 때, 파드를 배치할 수 있는 노드가 없으면 노드를 추가하여 배치 가능하도록 합니다.
- 노드가 사용되지 않아 자원이 낭비되는 경우, 노드를 제거하여 자원을 절약합니다.
지원 환경
- AWS, GCP, Azure, OpenStack, DigitalOcean 등 다양한 클라우드 제공자를 지원합니다.
구성 방법 예시 (AWS)
클러스터 오토스케일러를 배포할 때 YAML 예시:
apiVersion: apps/v1
kind: Deployment
metadata:
name: cluster-autoscaler
namespace: kube-system
labels:
app: cluster-autoscaler
spec:
replicas: 1
selector:
matchLabels:
app: cluster-autoscaler
template:
metadata:
labels:
app: cluster-autoscaler
spec:
serviceAccountName: cluster-autoscaler
containers:
- image: k8s.gcr.io/autoscaling/cluster-autoscaler:v1.29.0
name: cluster-autoscaler
command:
- ./cluster-autoscaler
- --cloud-provider=aws
- --nodes=2:10:my-nodegroup
- --scale-down-enabled=true
- --nodes 플래그를 통해 최소 및 최대 노드 수를 설정할 수 있습니다.
📝 오토스케일링 전략 및 활용법
각 오토스케일링 방식은 상호보완적으로 활용할 수 있습니다.
오토스케일러 적용 대상 주된 기준 용도 및 특징
HPA | 파드 개수 | CPU, 메모리, 커스텀 지표 | 일반적이고 가장 많이 사용 |
VPA | 파드의 리소스 크기 | 실제 리소스 사용 패턴 | 파드 리소스 최적화 |
CA | 클러스터 노드 수 | 파드 스케줄링 불가능 여부 | 클러스터 확장성 및 자원 효율화 |
일반적인 권장 전략:
- 기본적으로 HPA를 사용하여 서비스의 로드를 처리합니다.
- 서비스 사용량이 매우 불규칙하거나 리소스 예측이 어렵다면 VPA로 리소스를 최적화합니다.
- 노드의 자원 한계를 초과하여 HPA로도 대응이 불가능해지면 CA로 노드를 확장하여 대응합니다.
🚩 오토스케일링 적용 시 주의사항
- Metric Server 또는 외부 메트릭(Prometheus)이 정확히 작동하는지 확인합니다.
- 최소/최대 복제본 수 및 리소스를 적절히 설정하여 과도한 스케일링을 방지합니다.
- 클라우드 환경일 경우 비용 관리에 신경 쓰며, 불필요한 리소스 낭비를 방지합니다.
이처럼, 쿠버네티스 환경에서는 여러 오토스케일링 방법을 결합하여 서비스의 효율적이고 안정적인 운영을 지원할 수 있습니다. 서비스의 특성에 따라 적합한 방법을 선택하여 사용하는 것이 중요합니다.
728x90