Kubernetes/Kubernetes Best Practices

[Scenario Playbook Ep.28] 🚀 HPA 편 #1 | 기본적인 HPA 설정 및 CPU 기반 자동 확장

ygtoken 2025. 3. 16. 17:46
728x90

 

쿠버네티스에서 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
728x90