쿠버네티스

[쿠버네티스] HPA(HorizontalPodAutoscaler)

saul 2026. 9. 10. 09:27

https://kubernetes.io/ko/docs/tasks/run-application/horizontal-pod-autoscale-walkthrough/

 

HorizontalPodAutoscaler 연습

HorizontalPodAutoscaler(약어: HPA)는 워크로드 리소스(예: 디플로이먼트 또는 스테이트풀셋)를 자동으로 업데이트하며, 워크로드의 크기를 수요에 맞게 자동으로 스케일링하는 것을 목표로 한다. 수평

kubernetes.io

 

 

 

HPA

Horizontal scaling means that the response to increased load is to deploy more Pods. This is different from vertical scaling, which for Kubernetes would mean assigning more resources (for example: memory or CPU) to the Pods that are already running for the workload.
  • CPU, 메모리 등의 부하를 관찰하여 Deployment 등의 Pod 개수를 자동으로 늘리거나 줄이는 기능입니다.
  • HPA는 Deployment의 scale 서브리소스를 통해 필요한 replica 수를 조정합니다.
  • 그러면 Deployment/ReplicaSet 컨트롤러가 실제 Pod를 생성하거나 제거합니다.

 

중요한 것은 HPA는 노드를 늘려주는 것이 아닌 파드 개수를 늘려주는 것입니다.

 

HPA는 직접적으로 Pod 개수를 늘리거나 명령하지 않습니다.

  • HPA는 Pod를 직접적으로 생성하지 않고 Deployment 리소스에 명령을 내려 파드의 개수를 늘립니다.
  • HPA는 Metric을 기반으로 Deployment 같은 workload의 원하는 replica 수를 자동 조절하고, 실제 Pod 생성/삭제는 Deployment와 ReplicaSet이 수행합니다

 

HPA 속성

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

 

 

속성 의미
apiVersion: autoscaling/v2 HPA의 API 버전. CPU뿐 아니라 Memory, Custom Metric 등 다양한 Metric 사용 가능
kind: HorizontalPodAutoscaler 생성할 Kubernetes 리소스가 HPA라는 의미
metadata.name HPA 리소스 이름
spec.scaleTargetRef HPA가 어떤 리소스의 replica를 조절할지 지정
scaleTargetRef.apiVersion 대상 리소스의 API 버전
scaleTargetRef.kind 대상 리소스 종류. 여기서는 Deployment
scaleTargetRef.name 대상 Deployment 이름
minReplicas: 2 아무리 부하가 낮아도 최소 Pod 2개 유지
maxReplicas: 10 아무리 부하가 높아도 최대 Pod 10개까지만 증가
metrics HPA가 스케일링 판단에 사용할 Metric
type: Resource CPU/Memory 같은 Kubernetes Resource Metric 사용
resource.name: cpu CPU 사용량 기준
target.type: Utilization CPU request 대비 사용률을 기준으로 판단
averageUtilization: 50 대상 Pod들의 평균 CPU 사용률을 50% 정도로 유지하도록 replica 조절

 

* averageUtilization: 50은 CPU limit의 50%가 아닙니다.

 

Deployment에 다음처럼 CPU request가 있다면:

 
resources:
  requests:
    cpu: 500m
 

실제 사용량이 250m이면:

250m / 500m × 100
= 50%
 

가 되는 구조입니다.