[Scenario Playbook - 심화편 | Medium Level #8] HPA 및 Cluster Autoscaler 연동을 통한 동적 확장
쿠버네티스에서는 애플리케이션 부하가 증가할 때, 자동으로 리소스를 확장하여 서비스 안정성을 유지해야 합니다.
이를 위해 HPA(Horizontal Pod Autoscaler)와 Cluster Autoscaler를 연동하여 Pod 및 노드 수준에서 자동 확장하는 방법을 다룹니다.
📌 글에서 다루는 상황들
1. HPA를 활용한 Pod 자동 확장 설정
2. Cluster Autoscaler와 HPA를 연동하여 리소스 최적화
3. kubectl을 활용한 HPA 및 Cluster Autoscaler 작동 상태 모니터링
각 문제를 실무에서 바로 활용할 수 있도록 Manifest 템플릿과 예상 결과 값을 제공합니다.
1️⃣ HPA를 활용한 Pod 자동 확장 설정
❓ 문제 상황
운영팀에서 트래픽 증가 시 Pod이 자동으로 확장되도록 설정해야 합니다.
CPU 사용률이 50%를 초과하면 최대 5개의 Pod까지 자동으로 확장되도록 HPA를 설정해야 합니다.
• Deployment 이름: web-app
• 최소 Pod 개수: 2개
• 최대 Pod 개수: 5개
• CPU 사용률 임계값: 50%
✅ 어떻게 해결할 수 있을까요?
🛠️ 해결 방법
1. HPA를 설정하여 CPU 사용률이 50%를 초과하면 Pod 개수를 자동 확장합니다.
2. kubectl 명령어를 활용하여 HPA가 정상적으로 작동하는지 확인합니다.
✅ 정답 Manifest (HPA 설정)
apiVersion: autoscaling/v2
kind: HorizontalPodAutoscaler
metadata:
name: web-app-hpa
spec:
scaleTargetRef:
apiVersion: apps/v1
kind: Deployment
name: web-app
minReplicas: 2
maxReplicas: 5
metrics:
- type: Resource
resource:
name: cpu
target:
type: Utilization
averageUtilization: 50 # CPU 사용률이 50%를 초과하면 확장
📌 적용 후 예상 결과 값
1. HPA가 정상적으로 생성되었는지 확인
kubectl get hpa
💡 예상 출력 값
NAME REFERENCE TARGETS MINPODS MAXPODS REPLICAS AGE
web-app-hpa Deployment/web-app 30%/50% 2 5 2 10s
2. 부하 테스트 후 HPA 작동 확인
kubectl get hpa
💡 예상 출력 값 (CPU 사용률이 50%를 초과하여 Pod 확장됨)
NAME REFERENCE TARGETS MINPODS MAXPODS REPLICAS AGE
web-app-hpa Deployment/web-app 70%/50% 2 5 4 1m
✅ CPU 사용률이 증가하면 자동으로 Pod 개수가 확장됨
2️⃣ Cluster Autoscaler와 HPA를 연동하여 리소스 최적화
❓ 문제 상황
운영팀에서 HPA에 의해 Pod 개수가 증가했지만, 클러스터 내 가용 노드 리소스가 부족하여 새 Pod이 스케줄링되지 못하는 문제가 발생했습니다.
이를 해결하기 위해 Cluster Autoscaler를 활성화하여 노드가 자동으로 추가되도록 설정해야 합니다.
• 최소 노드 개수: 2개
• 최대 노드 개수: 5개
✅ 어떻게 해결할 수 있을까요?
🛠️ 해결 방법
1. Cluster Autoscaler를 활성화하여 노드의 자동 확장을 설정합니다.
2. HPA와 연동하여 Pod이 증가하면 필요한 노드가 추가될 수 있도록 구성합니다.
✅ Cluster Autoscaler 설정 (GKE, EKS, AKS 예제 포함)
🔹 GKE에서 Cluster Autoscaler 활성화
gcloud container clusters update my-cluster \
--enable-autoscaling \
--min-nodes 2 \
--max-nodes 5 \
--node-pool default-pool
🔹 EKS에서 Cluster Autoscaler 활성화
eksctl scale nodegroup --cluster=my-cluster \
--name=my-nodegroup --nodes-min=2 --nodes-max=5
🔹 AKS에서 Cluster Autoscaler 활성화
az aks update --resource-group my-resource-group \
--name my-cluster --enable-cluster-autoscaler \
--min-count 2 --max-count 5
✅ 이제 HPA가 Pod을 확장하면, Cluster Autoscaler가 필요한 경우 노드를 추가함
📌 적용 후 예상 결과 값
1. HPA에 의해 Pod이 확장되었지만, 노드 리소스 부족으로 Pending 상태 확인
kubectl get pods
💡 예상 출력 값 (노드 부족으로 Pending 상태)
NAME READY STATUS RESTARTS AGE
web-app-5df5c4d4c5-1a2b3 1/1 Running 0 5m
web-app-5df5c4d4c5-2b3c4 1/1 Running 0 5m
web-app-5df5c4d4c5-3c4d5 0/1 Pending 0 30s <- 노드 부족
2. Cluster Autoscaler가 새로운 노드를 추가하여 Pending 상태 해소
kubectl get nodes
💡 예상 출력 값 (새로운 노드 추가됨)
NAME STATUS ROLES AGE VERSION
node-1 Ready <none> 15m v1.26.2
node-2 Ready <none> 15m v1.26.2
node-3 Ready <none> 1m v1.26.2
✅ Cluster Autoscaler가 새로운 노드를 추가하고, Pod이 정상적으로 배포됨
3️⃣ kubectl을 활용한 HPA 및 Cluster Autoscaler 작동 상태 모니터링
❓ 문제 상황
운영팀에서 HPA와 Cluster Autoscaler가 정상적으로 동작하는지 확인하고, 현재 상태를 모니터링해야 합니다.
kubectl 명령어를 활용하여 HPA 및 노드 자동 확장 상태를 점검해야 합니다.
✅ 어떻게 해결할 수 있을까요?
🛠️ 해결 방법
1. kubectl get hpa 명령어를 사용하여 HPA 상태를 확인합니다.
2. kubectl get nodes 명령어를 사용하여 노드 확장 상태를 점검합니다.
✅ HPA 및 Cluster Autoscaler 상태 확인 명령어
🔹 현재 HPA 상태 확인
kubectl get hpa
💡 예상 출력 값
NAME REFERENCE TARGETS MINPODS MAXPODS REPLICAS AGE
web-app-hpa Deployment/web-app 75%/50% 2 5 5 2m
🔹 현재 노드 상태 확인
kubectl get nodes
💡 예상 출력 값
NAME STATUS ROLES AGE VERSION
node-1 Ready <none> 20m v1.26.2
node-2 Ready <none> 20m v1.26.2
node-3 Ready <none> 2m v1.26.2
✅ HPA와 Cluster Autoscaler가 정상적으로 작동하고 있으며, 부하에 따라 확장이 이루어지고 있음