Horizontal Pod Autoscaler (HPA)는 Kubernetes 환경에서 Pod의 수를 자동으로 조절하여 클러스터의 리소스 사용률을 최적화하는 기능이다. 이를 설명할 때 어떤 관점으로 접근할지는 상황에 따라 다릅니다. 각 관점에서의 내용을 살펴보자.
1. Kubernetes 관점에서의 HPA
Kubernetes 관점에서 HPA는 리소스 사용률에 기반해 Pod의 수를 조절하는 Kubernetes 객체이다. CPU 및 메모리 사용률뿐만 아니라 커스텀 메트릭을 통해서도 스케일링을 지원한다.
주요 기능
자동 스케일링: CPU, 메모리 사용률 또는 커스텀 메트릭을 기반으로 Pod 수를 자동으로 조절.
최소/최대 파드 수 설정: minReplicas와 maxReplicas로 Pod 수의 최소 및 최대치를 설정.
API 버전 차이:
autoscaling/v1: CPU 사용률만 지원.
autoscaling/v2: 메모리 및 커스텀 메트릭을 지원.
설정 예시
apiVersion:autoscaling/v2kind:HorizontalPodAutoscalermetadata:annotations:meta.helm.sh/release-name:stagingmeta.helm.sh/release-namespace:nestjs-boilerplate-config-variablecreationTimestamp:"2024-05-09T01:57:58Z"labels:app:stagingapp.kubernetes.io/instance:stagingapp.kubernetes.io/managed-by:Helmapp.kubernetes.io/name:stagingchart:auto-deploy-app-2.80.1helm.sh/chart:auto-deploy-app-2.80.1heritage:Helmrelease:stagingname:staging-auto-deploynamespace:nestjs-boilerplate-config-variableresourceVersion:"39297159"uid:d5d40b25-453f-43f2-a3d3-35e5d174fdf9spec:maxReplicas:10metrics: - resource:name:cputarget:averageUtilization:70type:Utilizationtype:ResourceminReplicas:3scaleTargetRef:apiVersion:apps/v1kind:Deploymentname:stagingstatus:conditions: - lastTransitionTime:"2024-05-09T01:58:13Z"message:recommended size matches current sizereason:ReadyForNewScalestatus:"True"type:AbleToScale - lastTransitionTime:"2024-05-09T01:58:29Z"message:the HPA was able to successfully calculate a replica count from cpu resourceutilization (percentage of request)reason:ValidMetricFoundstatus:"True"type:ScalingActive - lastTransitionTime:"2024-05-09T04:49:43Z"message:the desired replica count is less than the minimum replica countreason:TooFewReplicasstatus:"True"type:ScalingLimitedcurrentMetrics: - resource:current:averageUtilization:0averageValue:1mname:cputype:ResourcecurrentReplicas:3desiredReplicas:3lastScaleTime:"2024-05-09T04:44:28Z"