고기 대신 SW 한점/Public Cloud

[AWS] HPA - Horizontal Pod Autoscaler

지식한점 2023. 1. 5. 10:35
반응형

> 개요

 

  • 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