쿠버네티스에서 애플리케이션이 증가하는 트래픽을 자동으로 처리하고, 장애 발생 시 빠르게 대응하는 방법은 필수적입니다.
이번 글에서는 Horizontal Pod Autoscaler(HPA)와 Pod 장애 감지를 위한 Liveness & Readiness Probe 설정 방법을 다룹니다.
📌 글에서 다루는 상황들
1️⃣ Horizontal Pod Autoscaler(HPA) 적용
2️⃣ Liveness & Readiness Probe 설정
각 문제를 실무에서 바로 활용할 수 있도록 Manifest 템플릿과 예상 결과 값을 제공합니다.
1️⃣ Horizontal Pod Autoscaler(HPA) 적용
📍 상황 설명
운영팀에서 트래픽이 증가할 때 자동으로 Pod 개수를 확장하여 처리량을 유지하도록 설정하려 합니다.
이를 위해 Horizontal Pod Autoscaler(HPA)를 적용하여 CPU 사용량이 일정 수준을 넘으면 자동으로 확장되도록 해야 합니다.
• Deployment의 이름은 web-autoscale이어야 합니다.
• 기본적으로 2개의 Replica를 실행해야 합니다.
• CPU 사용량이 50%를 초과하면 최대 5개까지 자동으로 확장해야 합니다.
🛠️ 해결 방법
1. Horizontal Pod Autoscaler(HPA)를 사용하여 CPU 사용량에 따라 Pod 개수를 자동 조정해야 합니다.
• kubectl autoscale deployment 명령어를 활용하여 HPA 생성
• spec.metrics.resource.name: cpu를 설정하여 CPU 기준으로 확장
✅ 정답 Manifest (HPA가 적용된 Deployment)
apiVersion: apps/v1
kind: Deployment
metadata:
name: web-autoscale # Deployment의 이름
spec:
replicas: 2 # 기본 실행 Pod 개수
selector:
matchLabels:
app: web
template:
metadata:
labels:
app: web
spec:
containers:
- name: nginx
image: nginx:latest # 웹 애플리케이션 컨테이너
ports:
- containerPort: 80
resources:
requests:
cpu: "250m" # 기본 요청 CPU
limits:
cpu: "500m" # 최대 사용 CPU
---
apiVersion: autoscaling/v2
kind: HorizontalPodAutoscaler
metadata:
name: web-autoscale-hpa # HPA 이름
spec:
scaleTargetRef:
apiVersion: apps/v1
kind: Deployment
name: web-autoscale # 타겟 Deployment
minReplicas: 2 # 최소 Pod 개수
maxReplicas: 5 # 최대 Pod 개수
metrics:
- type: Resource
resource:
name: cpu
target:
type: Utilization
averageUtilization: 50 # CPU 사용률이 50%를 넘으면 확장
📌 적용 후 예상 결과 값
1. HPA 및 Deployment 생성 확인
kubectl get hpa,deployments
💡 예상 출력 값
NAME REFERENCE TARGETS MINPODS MAXPODS AGE
hpa/web-autoscale-hpa Deployment/web-autoscale 10%/50% 2 5 5s
NAME READY UP-TO-DATE AVAILABLE AGE
web-autoscale 2/2 2 2 5s
2. CPU 부하 증가 시 자동 확장 확인
kubectl get hpa
💡 예상 출력 값
NAME REFERENCE TARGETS MINPODS MAXPODS AGE
hpa/web-autoscale-hpa Deployment/web-autoscale 70%/50% 2 5 1m
3. 확장된 Pod 개수 확인
kubectl get pods
💡 예상 출력 값
NAME READY STATUS RESTARTS AGE
web-autoscale-5c9d4b7c5f-abc 1/1 Running 0 10s
web-autoscale-5c9d4b7c5f-def 1/1 Running 0 10s
web-autoscale-5c9d4b7c5f-ghi 1/1 Running 0 5s
web-autoscale-5c9d4b7c5f-jkl 1/1 Running 0 5s