쿠버네티스에서 HorizontalPodAutoscaler(HPA)는 애플리케이션의 부하에 따라 자동으로 Pod 개수를 조절하는 기능을 제공합니다.
이번 글에서는 기본적인 HPA 설정 방법과 CPU 사용량을 기반으로 Pod을 자동 확장하는 방법을 다룹니다.
📌 글에서 다루는 상황들
1️⃣ 기본적인 HPA 설정 및 적용
2️⃣ CPU 사용량을 기반으로 자동 확장
각 문제를 실무에서 바로 활용할 수 있도록 Manifest 템플릿과 예상 결과 값을 제공합니다.
1️⃣ 기본적인 HPA 설정 및 적용
❓ 문제 상황
운영팀에서 애플리케이션의 부하가 증가할 경우 Pod 개수를 자동으로 조절하는 기능이 필요합니다.
기본적으로 Pod의 개수를 수동으로 조절하는 것이 아니라, CPU 사용량을 기준으로 자동으로 확장되도록 설정해야 합니다.
• Deployment의 이름은 hpa-test-app이어야 합니다.
• 초기 Pod 개수는 1개이며, 최대 5개까지 확장 가능해야 합니다.
• CPU 사용량이 50% 이상이면 자동으로 확장되어야 합니다.
✅ 어떻게 해결할 수 있을까요?
🛠️ 해결 방법
1. HorizontalPodAutoscaler(HPA)를 사용하여 CPU 사용량을 기준으로 Pod 개수를 자동 조절하도록 설정해야 합니다.
• minReplicas: 1 → 최소 1개
• maxReplicas: 5 → 최대 5개까지 확장
• targetCPUUtilizationPercentage: 50 → CPU 사용량이 50% 이상이면 확장
2. Pod이 자동으로 확장되는지 검증하기 위해 부하 테스트를 진행해야 합니다.
✅ 정답 Manifest (HPA가 적용된 Deployment 및 HPA 설정)
apiVersion: apps/v1
kind: Deployment
metadata:
name: hpa-test-app # Deployment 이름
spec:
replicas: 1 # 초기 Pod 개수
selector:
matchLabels:
app: hpa-test-app # 레이블 선택
template:
metadata:
labels:
app: hpa-test-app # Pod 레이블
spec:
containers:
- name: cpu-stress
image: vish/stress # CPU 부하 테스트용 이미지
resources:
requests:
cpu: "100m"
limits:
cpu: "500m"
args:
- "-cpus"
- "1" # CPU 부하 발생
apiVersion: autoscaling/v2
kind: HorizontalPodAutoscaler
metadata:
name: hpa-test-app # HPA 이름
spec:
scaleTargetRef:
apiVersion: apps/v1
kind: Deployment
name: hpa-test-app # HPA가 적용될 Deployment
minReplicas: 1 # 최소 Pod 개수
maxReplicas: 5 # 최대 Pod 개수
metrics:
- type: Resource
resource:
name: cpu
target:
type: Utilization
averageUtilization: 50 # CPU 사용량이 50% 이상이면 확장
📌 적용 후 예상 결과 값
1. Deployment 및 HPA 생성 확인
kubectl get deployment hpa-test-app
kubectl get hpa
💡 예상 출력 값
NAME READY UP-TO-DATE AVAILABLE AGE
hpa-test-app 1/1 1 1 5s
NAME REFERENCE TARGETS MINPODS MAXPODS REPLICAS AGE
hpa-test-app Deployment/hpa-test-app 0%/50% 1 5 1 5s
2️⃣ CPU 사용량을 기반으로 자동 확장
❓ 문제 상황
운영팀에서 HPA가 정상적으로 작동하는지 검증해야 하는 요구사항이 생겼습니다.
CPU 부하가 증가했을 때 Pod 개수가 자동으로 확장되는지 확인하고, 부하가 줄어들었을 때 다시 줄어드는지 검증해야 합니다.
✅ 어떻게 해결할 수 있을까요?
🛠️ 해결 방법
1. 부하 테스트를 진행하여 CPU 사용량을 높이고, Pod 개수가 증가하는지 확인해야 합니다.
• kubectl run load-generator를 사용하여 부하 발생
2. 부하 테스트를 중단한 후 Pod 개수가 줄어드는지 확인해야 합니다.
✅ 정답 Manifest (CPU 사용량을 기반으로 자동 확장되는 HPA 설정)
apiVersion: autoscaling/v2
kind: HorizontalPodAutoscaler
metadata:
name: hpa-test-app # HPA 이름
spec:
scaleTargetRef:
apiVersion: apps/v1
kind: Deployment
name: hpa-test-app # HPA가 적용될 Deployment
minReplicas: 1 # 최소 Pod 개수
maxReplicas: 5 # 최대 Pod 개수
metrics:
- type: Resource
resource:
name: cpu
target:
type: Utilization
averageUtilization: 50 # CPU 사용량이 50% 이상이면 확장
📌 적용 후 예상 결과 값
1. CPU 부하 발생 후 Pod 개수 증가 확인
kubectl run --rm -it load-generator --image=busybox -- /bin/sh -c "while true; do wget -q -O- http://hpa-test-app; done"
💡 예상 출력 값
NAME REFERENCE TARGETS MINPODS MAXPODS REPLICAS AGE
hpa-test-app Deployment/hpa-test-app 80%/50% 1 5 3 1m
2. Pod 개수가 증가했는지 확인
kubectl get pods -l app=hpa-test-app
💡 예상 출력 값
NAME READY STATUS RESTARTS AGE
hpa-test-app-xyz1 1/1 Running 0 1m
hpa-test-app-abc2 1/1 Running 0 30s
hpa-test-app-def3 1/1 Running 0 20s
3. 부하 테스트 중단 후 Pod 개수 감소 확인
kubectl delete pod load-generator
kubectl get hpa
💡 예상 출력 값
NAME REFERENCE TARGETS MINPODS MAXPODS REPLICAS AGE
hpa-test-app Deployment/hpa-test-app 10%/50% 1 5 1 5m