반응형
> 개요
- HPA는 지정된 메트릭 값을 기준으로 Pod의 Replica 수를 제어
- 일반적으로 Pod의 CPU Utilization 메트릭 지정
- CPU, Memory 사용량 수집을 위해 EKS Cluster 내 metric-server 구성 필요
- 기본적인 CPU/Memory 메트릭 이외에도 Custom Metric도 이용 가능
- DaemonSet 등 Auto Scaling 적용이 불가능한 Object에는 적용할 수 없음
> 동작 원리
- 특정 시간 간격마다 kube-controller-manager가 HPA Object에 정의되어 있는 Resource의 utilization을 확인
- 기본 시간 간격은 15초
- kube-controller-manager에 --horizontal-pod-autoscaler-sync-period flag를 적용하여 시간 간격을 조정 가능
- 다음 알고리즘을 기준으로 레플리카 수를 설정
- 원하는 레플리카 수 = ceil[현재 레플리카 수 * ( 현재 메트릭 값 / 원하는 메트릭 값 )]
> 지원 Metric 유형
metrics.k8s.io API (metrics-server)
- cpu
- 1 vCPU를 얼마나 나누어 제공할 지에 대한 지표로, 소수점 또는 m(1/1000) 단위로 리소스 설정할 것을 권장
- memory
- EC2는 Memory에 대해 2진수 단위의 GiB(Gigabytes)를 사용하고 있으므로, Mi 또는 Gi 단위로 설정할 것을 권장
autoscaling/v2beta2 API (MetricSpec v2beta2 autoscaling)
ContainerResource metric
단일 Pod에서 특정 컨테이너에 대한 리소스 지표를 기준으로 HPA 구성
- 예) Application + Sidecar로 구성된 Pod에서 Application Container이 리소스를 가지고 autoscale 구성
# metrics in hpa spec - type: ContainerResource containerResource: name: cpu container: application target: type: Utilization averageUtilization: 60 |
Pods metric
단일 Pod의 리소스 지표를 기준으로 HPA 구성
- 예) packet-per-second, transactions-processed-per-second
# metrics in hpa spec - type: Pods pods: metric: name: packets-per-second target: type: AverageValue averageValue: 1k |
Object metric
쿠버네티스 API를 통해 수집되는 특정 지표를 기준으로 HPA 구성
- 예) request-per-second in Ingress
# metrics in hpa spec - type: Object object: metric: name: requests-per-second describedObject: apiVersion: networking.k8s.io/v1beta1 kind: Ingress name: main-route target: type: Value value: 10k |
External metric
쿠버네티스 오브젝트가 아닌 대상의 지표를 기준으로 HPA 구성
- 예) queue, prometheus, ...
# metrics in hpa spec - type: External external: metric: name: queue_messages_ready selector: "queue=worker_tasks" target: type: AverageValue averageValue: 30 |
custom.metrics.k8s.io API (metric solution vendor's adapter API)
참고
반응형
'고기 대신 SW 한점 > Public Cloud' 카테고리의 다른 글
[AWS] LandingZone - VPC Design (1) | 2023.01.06 |
---|---|
[AWS] LandingZone - OU 설계안 (0) | 2023.01.06 |
[AWS] Cluster Autoscaler (CA) (0) | 2023.01.04 |
[AWS] WAF Managed Rule Set 적용 예 (0) | 2023.01.04 |
[AWS] DynamoDB에 대해서.. (0) | 2023.01.03 |