쿠버네티스에서 애플리케이션의 부하가 증가할 때 자동으로 Pod 개수를 조정하는 것이 중요합니다.
이를 위해 Horizontal Pod Autoscaler(HPA)를 활용하여 CPU 및 메모리 사용량을 기준으로 동적으로 확장하는 방법을 다룹니다.
📌 글에서 다루는 상황들
1. HPA를 활용한 CPU 기반 자동 확장 설정
2. HPA를 활용한 메모리 기반 자동 확장 설정
3. HPA의 동작 방식 및 리소스 활용 최적화
각 문제를 실무에서 바로 활용할 수 있도록 Manifest 템플릿과 예상 결과 값을 제공합니다.
1️⃣ HPA를 활용한 CPU 기반 자동 확장 설정
❓ 문제 상황
운영팀에서 애플리케이션의 CPU 부하가 증가할 경우, Pod의 개수를 자동으로 확장해야 합니다.
CPU 사용률이 50%를 초과하면 최대 5개의 Pod까지 확장되도록 설정해야 합니다.
• Deployment 이름: cpu-autoscale-deployment
• 초기 Pod 개수: 1개
• CPU 사용률이 50%를 초과하면 최대 5개까지 확장
✅ 어떻게 해결할 수 있을까요?
🛠️ 해결 방법
1. Deployment를 생성하고, CPU 요청 값을 설정합니다.
2. kubectl autoscale 명령어를 사용하여 HPA를 생성합니다.
3. HPA가 정상적으로 동작하는지 확인합니다.
✅ 정답 Manifest (CPU 기반 HPA 설정)
🔹 Deployment 생성
apiVersion: apps/v1
kind: Deployment
metadata:
name: cpu-autoscale-deployment
spec:
replicas: 1 # 초기 Pod 개수
selector:
matchLabels:
app: cpu-autoscale
template:
metadata:
labels:
app: cpu-autoscale
spec:
containers:
- name: app-container
image: nginx
resources:
requests:
cpu: "250m" # 최소한 보장받을 CPU
limits:
cpu: "500m" # 최대 사용할 수 있는 CPU
🔹 HPA 설정
kubectl autoscale deployment cpu-autoscale-deployment --cpu-percent=50 --min=1 --max=5
📌 적용 후 예상 결과 값
1. HPA가 정상적으로 생성되었는지 확인
kubectl get hpa
💡 예상 출력 값
NAME REFERENCE TARGETS MINPODS MAXPODS AGE
cpu-autoscale-deployment Deployment/cpu-autoscale-deployment 30%/50% 1 5 5s
2. CPU 부하 발생 시 Pod 개수 증가 확인
kubectl get pods -l app=cpu-autoscale
💡 예상 출력 값 (CPU 부하 증가 시 Pod 확장됨)
NAME READY STATUS RESTARTS AGE
cpu-autoscale-deployment-74f6d7b6f5-1x3p 1/1 Running 0 5s
cpu-autoscale-deployment-74f6d7b6f5-2k9l 1/1 Running 0 5s
cpu-autoscale-deployment-74f6d7b6f5-4d7m 1/1 Running 0 5s
2️⃣ HPA를 활용한 메모리 기반 자동 확장 설정
❓ 문제 상황
운영팀에서 애플리케이션의 메모리 사용량이 증가할 경우, Pod의 개수를 자동으로 확장해야 합니다.
메모리 사용률이 75%를 초과하면 최대 4개의 Pod까지 확장되도록 설정해야 합니다.
• Deployment 이름: memory-autoscale-deployment
• 초기 Pod 개수: 1개
• 메모리 사용률이 75%를 초과하면 최대 4개까지 확장
✅ 어떻게 해결할 수 있을까요?
🛠️ 해결 방법
1. HPA를 설정하여 메모리 사용량을 기준으로 Pod 개수를 조정합니다.
2. kubectl get hpa 명령어를 사용하여 자동 확장 상태를 확인합니다.
✅ 정답 Manifest (메모리 기반 HPA 설정)
🔹 HPA 설정
apiVersion: autoscaling/v2
kind: HorizontalPodAutoscaler
metadata:
name: memory-autoscale-hpa
spec:
scaleTargetRef:
apiVersion: apps/v1
kind: Deployment
name: memory-autoscale-deployment
minReplicas: 1
maxReplicas: 4
metrics:
- type: Resource
resource:
name: memory
target:
type: Utilization
averageUtilization: 75 # 메모리 사용률이 75%를 초과하면 확장
📌 적용 후 예상 결과 값
1. HPA가 정상적으로 생성되었는지 확인
kubectl get hpa
💡 예상 출력 값
NAME REFERENCE TARGETS MINPODS MAXPODS AGE
memory-autoscale-hpa Deployment/memory-autoscale-deployment 60%/75% 1 4 5s
3️⃣ HPA의 동작 방식 및 리소스 활용 최적화
❓ 문제 상황
운영팀에서 HPA의 동작 방식을 이해하고, 클러스터 리소스를 효율적으로 운영해야 합니다.
다음과 같은 최적화 전략을 적용해야 합니다.
• CPU & 메모리 기반 HPA를 동시에 적용
• 최소 Pod 개수와 최대 Pod 개수를 조정하여 안정적인 확장 유지
• HPA가 과도한 확장을 방지하도록 조정
✅ 어떻게 해결할 수 있을까요?
🛠️ 해결 방법
1. HPA 설정 시 CPU와 메모리를 동시에 모니터링하도록 조정합니다.
2. HPA의 minReplicas와 maxReplicas 값을 적절하게 설정하여 과도한 확장을 방지합니다.
✅ 정답 Manifest (CPU & 메모리 기반 HPA 최적화 설정)
apiVersion: autoscaling/v2
kind: HorizontalPodAutoscaler
metadata:
name: optimized-hpa
spec:
scaleTargetRef:
apiVersion: apps/v1
kind: Deployment
name: optimized-deployment
minReplicas: 2 # 최소 2개 유지
maxReplicas: 6 # 최대 6개까지 확장
metrics:
- type: Resource
resource:
name: cpu
target:
type: Utilization
averageUtilization: 60 # CPU 사용률 60% 초과 시 확장
- type: Resource
resource:
name: memory
target:
type: Utilization
averageUtilization: 70 # 메모리 사용률 70% 초과 시 확장
📌 적용 후 예상 결과 값
1. HPA가 CPU & 메모리를 기준으로 확장하는지 확인
kubectl get hpa
💡 예상 출력 값
NAME REFERENCE TARGETS MINPODS MAXPODS AGE
optimized-hpa Deployment/optimized-deployment 55%/60%, 65%/70% 2 6 5s