현재 운영 중인 EC2 위의 Minikube 클러스터에 HPA를 적용하여, 트래픽 부하에 따라 자동으로 애플리케이션(Pod)의 개수를 조절하는 방법을 설명해보겠습니다.
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
NAME CPU(cores) MEMORY(bytes)
backend-deployment-xxxxxxxxxx-abcde 1m 25Mi
frontend-deployment-xxxxxxxxxx-fghij 1m 30Mierror: Metrics API not available 오류가 계속 발생한다면, 잠시 더 기다렸다가 다시 시도하면 됩니다.이제 어떤 애플리케이션(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" # 최대 제한 자원 보장
...
이제 작성한 설정 파일들을 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%)이 표시됩니다.
| NAME | REFERENCE | TARGETS | MINPODS | MAXPODS | REPLICAS | AGE |
|---|---|---|---|---|---|---|
| backend-hpa | Deployment/backend-deployment | 1%/50% | 1 | 5 | 1 | 2m |
| frontend-hpa | Deployment/frontend-deployment | 1%/50% | 1 | 3 | 1 | 2m |

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