HPA(Horizontal Pod Autoscale)
CPU나 메모리 사용률을 기준으로 자동으로 파드 수를 조절할 수 있게 해주는 기능.
autoscaling/v1 과 autoscaling/v2 가 있는데,
autoscaling/v1 는 기본적인 CPU와 메모리 사용률 기준으로만 세팅이 가능하고 별다른 커스텀이 불가능하다.
다양한 메트릭 종류 및 스케일 인/아웃의 속도, 빈도, 조건에 대한 세밀한 조정이 필요하다면 v2를 사용해야한다.
| 항목 | autoscaling/v1 | autoscaling/v2 |
| 지원 메트릭 종류 | 리소스 (CPU, 메모리) | 리소스 (CPU, 메모리) external 메트릭 (ALB 요청 수 등 클러스터 외부 메트릭) object 메트릭 (클러스터 내부 메트릭) |
| 여러 메트릭 동시 지원 | X | O |
v2는 다양한 메트릭을 지원하지만, 기본으로 제공하는 CPU와 Memory 외에는
promethus나 datadog같은 메트릭 수집 도구가 있어야 사용 가능하다.
예를 들어, Datadog으로 AWS target group에 대한 request 수 대비 pod 스케일아웃/인을 하려면
timeseries 개수 대비 비용이 발생하므로 비용적인 측면도 고려해야한다.
(2개의 target group에 대한 request 수를 수집하려면 timeseries 가 2개로 계산됨)
기본 Scale In, Scale Out 동작 원리
아래와 같이 커스텀이 들어가지 않은 일반적인 HPA의 경우
apiVersion: autoscaling/v1
kind: HorizontalPodAutoscaler
metadata:
name: hpa-test
namespace: ns-test
spec:
maxReplicas: 80
minReplicas: 40
scaleTargetRef:
apiVersion: apps/v1
kind: Deployment
name: test-deployment
targetCPUUtilizationPercentage: 70
apiVersion: autoscaling/v2
kind: HorizontalPodAutoscaler
metadata:
name: hpa-test
namespace: ns-test
spec:
scaleTargetRef:
apiVersion: apps/v1
kind: Deployment
name: test-deployment
minReplicas: 2
maxReplicas: 4
metrics:
- type: Resource
resource:
name: cpu
target:
type: Utilization
averageUtilization: 60
스케일인/아웃은 기본 동작을 따른다.
| scaleUp | scaleDown | |
| 적용 대기 시간 | 없음 | 300초(5분) |
| 감소/증가량 제한 | 없음 | 없음 |
| 평가 주기 |
약 15초 | 약 15초 |
1. Scale out
desiredReplicas(목표 파드 수) = 현재 파드 수 × 현재 리소스 사용률 ÷ 목표 사용률
예를 들어 현재 CPU 사용률이 150%고, CPU 사용률이 50%가 넘는 경우 스케일 아웃되도록 설정했다.
현재 파드수가 5라면,
5 × 150 ÷ 50 = 15
15대로 증가하게 된다.
즉, 스케일아웃은 기본적으로 5분 동안의 desiredReplicas 중에서, 가장 큰 값으로 파드 수를 감소시킨다.
(예: 5분간 desiredReplicas 가 5~8개를 왔다갔다 한다면 그 중에서 가장 큰 값인 8대로 감소)
2. Scale in
desiredReplicas(목표 파드 수) = 현재 파드 수 × 현재 평균 리소스 사용률 ÷ 목표 사용률
예를 들어 현재 평균 CPU 사용률이 35%고, CPU 사용률 기준이 70%인 경우, 현재 파드수가 10이라면,
10 × 35 / 70 = 5
파드 5대로 줄어든다.
기본적으로 5분간 리소스가 지속적으로 낮아야 스케일인이 된다.
즉, 스케일인은 기본적으로 15초마다 메트릭을 확인해서 desiredReplicas 에 맞는 파드 수로 증가시킨다.
(예: 체크할 때 당시의 desiredReplicas 에 맞게 증가)
세부적인 설정 커스터마이징
v2 기준 behavior 필드로 스케일 업/다운의 속도를 제어할 수 있다
예를들어,
1. test-deployment 의 cpu 평균 사용률 70% 초과 시 스케일 아웃
2. test-deployment 의 memory 평균 사용률 70% 초과 시 스케일 아웃
하는 HPA가 있다.
apiVersion: autoscaling/v2
kind: HorizontalPodAutoscaler
metadata:
name: hpa
namespace: ns-test
spec:
scaleTargetRef:
apiVersion: apps/v1
kind: Deployment
name: test-deployment
minReplicas: 10
maxReplicas: 20
metrics:
- type: Resource
resource:
name: cpu
target:
type: Utilization
averageUtilization: 70
- type: Resource
resource:
name: memory
target:
type: Utilization
averageUtilization: 70
여기서 스케일인/아웃 속도, 빈도, 조건에 대한 설정 추가를 할수있다(behavior 필드 추가).
apiVersion: autoscaling/v2
kind: HorizontalPodAutoscaler
metadata:
name: hpa
namespace: ns-test
spec:
scaleTargetRef:
apiVersion: apps/v1
kind: Deployment
name: test-deployment
minReplicas: 10
maxReplicas: 20
metrics:
- type: Resource
resource:
name: cpu
target:
type: Utilization
averageUtilization: 70
- type: Resource
resource:
name: memory
target:
type: Utilization
averageUtilization: 70
behavior:
scaleUp:
stabilizationWindowSeconds: 300 # 5분간 리소스 초과를 유지해야 스케일업
policies:
- type: Percent
value: 50 # 한 번에 현재 파드 수의 50% 증가 가능
periodSeconds: 60 # 60초마다 한 번 적용
- type: Pods
value: 4 # 한 번에 최대 4개 증가
periodSeconds: 60 # 60초마다 한 번 적용
selectPolicy: Max # Percent와 Pods 중 더 큰 쪽 적용
scaleDown:
stabilizationWindowSeconds: 600 # 10분 동안 기준 이하 유지돼야 스케일인
policies:
- type: Percent
value: 25 # 한 번에 25% 이하로만 감소
periodSeconds: 60 # 60초에 한 번 평가
'MSA > 쿠버네티스' 카테고리의 다른 글
| [Kubernetes] RBAC 설정 (0) | 2025.12.05 |
|---|---|
| [Kubernetes] Fluentbit 로그 수집 방법(Sidecar vs DaemonSet) (0) | 2025.09.16 |
| [Kubernetes] zookeeper 역할 확인 (0) | 2025.07.21 |
| [Kubernetes] docker hub에 이미지 안올리고 로컬 이미지 사용하는 방법 (0) | 2025.04.25 |
| [Kubernetes] 네임스페이스가 다른 서비스끼리 통신하는 방법(DNS) (0) | 2025.03.27 |