Minikube 인프라에 HPA (Horizontal Pod Autoscaler) 도입하기

Devkty·2025년 8월 30일

취업도전기

목록 보기
19/32

현재 운영 중인 EC2 위의 Minikube 클러스터에 HPA를 적용하여, 트래픽 부하에 따라 자동으로 애플리케이션(Pod)의 개수를 조절하는 방법을 설명해보겠습니다.

1단계: 계측 장치(Metrics Server) 활성화

HPA는 Pod의 CPU나 메모리 사용량을 보고 확장 여부를 결정합니다. 이 사용량을 측정해주는 "계측 장치"가 바로 Metrics Server입니다. Minikube 환경에서는 이 기능이 기본적으로 비활성화되어 있을 수 있으므로, 먼저 활성화해야 합니다.

활성화 명령어

EC2 터미널에 아래 명령어를 입력하여 Metrics Server 애드온을 활성화해주세요.

minikube addons enable metrics-server
  • metrics-server was successfully enabled 라는 메시지가 나오면 성공입니다.

설치 확인

활성화 후, Metrics Server가 제대로 실행될 때까지 1~2분 정도 기다린 후 아래 명령어를 입력하여 상태를 확인합니다.

kubectl top pods
  • 성공: 아래와 같이 각 Pod의 CPU와 메모리 사용량이 보인다면, Metrics Server가 잘 작동하고 있는 것입니다.
    NAME                                     CPU(cores)   MEMORY(bytes)
    backend-deployment-xxxxxxxxxx-abcde      1m           25Mi
    frontend-deployment-xxxxxxxxxx-fghij     1m           30Mi
  • 실패: 만약 error: Metrics API not available 오류가 계속 발생한다면, 잠시 더 기다렸다가 다시 시도하면 됩니다.

2단계: 자동 조절 장치(HPA) 설정 파일 작성

이제 어떤 애플리케이션(Deployment)을, 어떤 조건으로 확장할지 정의하는 설정 파일을 작성합니다. 트래픽 변동이 심한 백엔드와 프론트엔드 모두에 적용해 보겠습니다.

backend-hpa.yaml 파일 생성

apiVersion: autoscaling/v2
kind: HorizontalPodAutoscaler
metadata:
  # HPA의 이름을 지정합니다.
  name: backend-hpa
spec:
  # 어떤 Deployment를 조절할지 대상을 지정합니다.
  scaleTargetRef:
    apiVersion: apps/v1
    kind: Deployment
    name: backend-deployment # 백엔드 Deployment의 이름
  # Pod 개수의 최소/최대 범위를 정합니다.
  minReplicas: 1 # 평소에는 1개만 유지
  maxReplicas: 5 # 트래픽이 몰리면 최대 5개까지 증가
  # 조절 조건을 설정합니다.
  metrics:
  - type: Resource
    resource:
      name: cpu
      # 모든 Pod의 평균 CPU 사용량이 50%를 넘으면 Pod 개수를 늘립니다.
      target:
        type: Utilization
        averageUtilization: 50

frontend-hpa.yaml 파일 생성

apiVersion: autoscaling/v2
kind: HorizontalPodAutoscaler
metadata:
  name: frontend-hpa
spec:
  scaleTargetRef:
    apiVersion: apps/v1
    kind: Deployment
    name: frontend-deployment # 프론트엔드 Deployment의 이름
  minReplicas: 1
  maxReplicas: 3 # 프론트엔드는 최대 3개까지
  metrics:
  - type: Resource
    resource:
      name: cpu
      target:
        type: Utilization
        averageUtilization: 50

backend-deployment.yaml 파일 수정

HPA가 CPU의 사용량 퍼센트를 계산할 수 있는 기준값을 설정합니다. 이 기준값을 Deployment 설정 파일에 resources.requests 라는 항목으로 직접 알려줘야 합니다. 이 설정이 없으면 HPA는 "기준값을 모르니, 현재 사용량이 몇 퍼센트인지도 계산할 수 없어"라고 하면서 계속 <unknown>으로 표시하게 됩니다.

...
ports:
        - containerPort: 5000
        # 환경 변수 설정
        resources:
          requests:
            cpu: "100m" # 최소한의 자원 보장
          limits:
            cpu: "500m" # 최대 제한 자원 보장
...

frontend-deployment.yaml 파일 수정

...
ports:
        - containerPort: 3000
        # 환경 변수 설정
        resources:
          requests:
            cpu: "100m" # 최소한의 자원 보장
          limits:
            cpu: "500m" # 최대 제한 자원 보장
...

3단계: HPA 적용 및 상태 확인

이제 작성한 설정 파일들을 Minikube 클러스터에 적용하여 자동 확장 기능을 활성화합니다.

적용 명령어

kubectl apply -f backend-hpa.yaml
kubectl apply -f frontend-hpa.yaml
kubectl apply -f frontend-deployment.yaml
kubectl apply -f backend-deployment.yaml

상태 확인 명령어

적용 후, 아래 명령어로 HPA의 현재 상태를 확인할 수 있습니다.

kubectl get hpa

처음에는 TARGETS 부분이 <unknown>/50%로 보일 수 있습니다. 이는 HPA가 Metrics Server로부터 데이터를 수집하는 데 시간이 조금 걸리기 때문입니다. 몇 분 정도 기다리면 현재 CPU 사용량(예: 1%/50%)이 표시됩니다.

NAMEREFERENCETARGETSMINPODSMAXPODSREPLICASAGE
backend-hpaDeployment/backend-deployment1%/50%1512m
frontend-hpaDeployment/frontend-deployment1%/50%1312m

REPLICAS1로 표시되면, 현재 Pod가 1개 실행 중이라는 의미입니다. 이제 부하를 주면 이 숫자가 자동으로 늘어나는 것을 볼 수 있습니다.

profile
모든걸 기록하며 성장하고 싶은 개발자입니다. 현재 크래프톤 정글 8기를 수료하고 구직활동 중입니다.

0개의 댓글