Kubernetes/Kubernetes Best Practices

[Scenario Playbook - 심화편 | Low Level #7] Horizontal Pod Autoscaler(HPA) 설정 및 활용 방법

ygtoken 2025. 3. 16. 18:54
728x90

 

쿠버네티스에서 애플리케이션의 부하가 증가할 때 자동으로 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
728x90