1️⃣ Kubernetes에서 자동 확장이 필요한 이유?
애플리케이션의 트래픽은 예측하기 어렵습니다.
사용자가 갑자기 증가하면 서비스 장애가 발생할 수 있고, 반대로 사용자가 적을 때 불필요한 리소스를 사용하면 비용이 낭비됩니다.
Kubernetes에서는 **HPA(Horizontal Pod Autoscaler)**를 사용하여 트래픽 변화에 맞춰 자동으로 Pod 개수를 조절할 수 있습니다.
✅ 트래픽이 많아지면 자동으로 Pod를 추가
✅ 트래픽이 줄어들면 자동으로 Pod를 감소
✅ CPU, 메모리 사용량을 기준으로 확장 가능
이제 Kubernetes에서 HPA를 설정하는 방법을 살펴보겠습니다!
2️⃣ Kubernetes HPA란?
📌 **HPA(Horizontal Pod Autoscaler)**는 Pod의 개수를 자동으로 조절하는 Kubernetes 기능입니다.
✅ Pod의 CPU, 메모리 사용량을 기준으로 자동 확장
✅ 최소/최대 Pod 개수를 설정 가능
✅ 트래픽 증가 시 Pod를 추가하고, 감소 시 자동 축소
📌 HPA 동작 방식
트래픽 증가 ➡ CPU 사용량 증가 ➡ HPA가 Pod 개수 증가
트래픽 감소 ➡ CPU 사용량 감소 ➡ HPA가 Pod 개수 감소
3️⃣ HPA를 설정하기 위한 사전 준비
📌 HPA를 사용하려면 Metric Server가 필요합니다.
Metric Server는 Kubernetes에서 CPU 및 메모리 사용량을 수집하는 역할을 합니다.
✅ Metric Server 설치하기
kubectl apply -f https://github.com/kubernetes-sigs/metrics-server/releases/latest/download/components.yaml
📌 Metric Server 정상 동작 확인
kubectl get apiservices | grep metrics
✅ Metric Server가 정상적으로 동작하면 HPA를 설정할 수 있습니다!
4️⃣ HPA 설정 및 배포 예제
이제 HPA를 사용하여 Nginx 웹 서버를 자동 확장해보겠습니다.
✅ Step 1: Deployment 생성
📌 Nginx Deployment (nginx-deployment.yaml)
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx-deployment
spec:
replicas: 2
selector:
matchLabels:
app: nginx
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx
resources:
requests:
cpu: "100m"
limits:
cpu: "500m"
📌 배포 명령어
kubectl apply -f nginx-deployment.yaml
✅ 기본적으로 Pod 2개가 실행됨
✅ Step 2: HPA 생성하기
📌 HPA 설정 (hpa.yaml)
apiVersion: autoscaling/v2
kind: HorizontalPodAutoscaler
metadata:
name: nginx-hpa
spec:
scaleTargetRef:
apiVersion: apps/v1
kind: Deployment
name: nginx-deployment
minReplicas: 2
maxReplicas: 10
metrics:
- type: Resource
resource:
name: cpu
target:
type: Utilization
averageUtilization: 50 # CPU 사용량이 50%를 넘으면 확장
📌 HPA 배포
kubectl apply -f hpa.yaml
✅ CPU 사용량이 50%를 넘으면 자동으로 Pod가 확장됨!
5️⃣ HPA 동작 확인 및 테스트
📌 HPA 상태 확인
kubectl get hpa
📌 현재 Pod 개수 확인
kubectl get pods
📌 HPA를 강제로 테스트하기 위한 부하 생성
kubectl run -i --tty load-generator --image=busybox -- /bin/sh
📌 부하 테스트 명령어
while true; do wget -q -O- http://nginx-deployment.default.svc.cluster.local; done
✅ 트래픽이 증가하면 Pod가 자동으로 확장되는지 확인 가능!
6️⃣ HPA의 작동 원리
📌 HPA는 Metric Server를 통해 CPU 및 메모리 사용량을 모니터링합니다.
📌 HPA 동작 과정
1. Metric Server가 Pod의 CPU 사용량을 수집
2. HPA가 CPU 사용률을 확인
3. 설정한 임계값(50%)을 초과하면 새로운 Pod 생성
4. 트래픽이 줄어들면 자동으로 Pod 개수 감소
✅ HPA를 사용하면 트래픽 변화에 맞춰 Pod 개수를 자동 조절할 수 있음!
7️⃣ HPA를 활용한 다양한 확장 조건
HPA는 CPU 외에도 메모리 사용량 및 사용자 정의 메트릭을 기반으로 확장할 수 있습니다.
📌 메모리 기반 확장 예제
metrics:
- type: Resource
resource:
name: memory
target:
type: Utilization
averageUtilization: 70 # 메모리 사용량이 70%를 넘으면 확장
📌 HTTP 요청 수 기반 확장 (Custom Metrics)
metrics:
- type: Object
object:
metric:
name: http_requests_per_second
target:
type: Value
value: 1000 # 초당 1000 요청을 넘으면 확장
✅ 다양한 조건을 기반으로 자동 확장 가능!
📌 결론: HPA를 사용하면 Kubernetes 운영이 훨씬 쉬워진다!
기능설명
CPU 기반 확장 | CPU 사용량이 임계값을 넘으면 Pod 추가 |
메모리 기반 확장 | 메모리 사용량이 일정 수준 이상이면 Pod 추가 |
사용자 정의 메트릭 확장 | HTTP 요청량, 네트워크 트래픽 등 맞춤 확장 가능 |
자동 축소 지원 | 트래픽 감소 시 Pod 자동 감소 |
🔥 HPA를 사용하면 트래픽 증가에 따른 수동 확장 없이, Kubernetes가 자동으로 확장/축소할 수 있습니다! 🚀
'Kubernetes > Kubernetes Basics' 카테고리의 다른 글
📌 Kubernetes CI/CD: GitOps로 자동 배포 환경 구축하기 (0) | 2025.03.03 |
---|---|
📌 Kubernetes 리소스 관리: Requests & Limits 설정하기 (0) | 2025.03.03 |
📌 Kubernetes 모니터링과 로깅: 운영 환경을 안정적으로 유지하기 (0) | 2025.03.03 |
📌 Kubernetes Helm: 애플리케이션 배포 자동화하기 (0) | 2025.03.03 |
📌 Kubernetes Ingress: 도메인 기반 트래픽 관리 이해하기 (0) | 2025.03.03 |