Kubernetes/Kubernetes Basics

📌 Kubernetes HPA: 자동 확장으로 효율적인 리소스 관리하기

ygtoken 2025. 3. 3. 07:26
728x90

 

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가 자동으로 확장/축소할 수 있습니다! 🚀

 

 

728x90