Skip to content

Latest commit

 

History

History
131 lines (111 loc) · 4.63 KB

HPA와 VPA.md

File metadata and controls

131 lines (111 loc) · 4.63 KB

HPA(Horizontal Pod Autoscaler)

image
  • Horizontal Pod Autoscaler는 metric server를 통해 파드의 리소스를 감시하여 리소스가 부족한 경우 Controller의 replicas를 증가시켜 파드의 수를 늘린다.

  • 위의 그림 처럼 Pod가 수평적으로 증가하는 것을 Scale Out, 수평적으로 감소하는 것을 Scale In 이라고 한다.

  • Pod를 증가시키기 때문에 기존의 트래픽이 분산되어 서비스를 더 안정적으로 유지할 수 있게 된다.

  • Replica의 수와 상관 없이 돌아갈 수 있는 Stateless 서비스에 적합하다.

  • 트래픽이 급증하여 spike가 생기는 경우에 대응할 수 있다.

  • 사용하는 매트릭과, 목표하는 매트릭을 계산하여 desire replica 수를 계산한다.

    desiredReplicas = ceil[currentReplicas * ( currentMetricValue / desiredMetricValue )]
  • Pod가 시작하고 얼마 되지 않았을 때는 적절한 메트릭 값이 나오지 않을 수 있으므로, HPA에는 시작한 지 30초 이상 된 포드부터 매트릭이 적용된다. --horizontal-pod-autoscaler-initial-readiness-delay 옵션을 사용하여 이 값을 직접 설정할 수 있다.

  • 예시

    apiVersion: autoscaling/v1
    kind: HorizontalPodAutoscaler
    metadata:
    name: k8s-autoscaler
    spec:
      maxReplicas: 10
      minReplicas: 2
      scaleTargetRef:
        apiVersion: apps/v1
        kind: Deployment
        name: k8s-autoscaler
      metrics:
      - type: Resource
        resource:
        name: cpu
        target:
          type: Utilization
          averageUtilization: 60
      behavior:
        scaleDown:
            policies:
            - type: Pods
            value: 4
            periodSeconds: 60
            - type: Percent
            value: 10
            periodSeconds: 60

Container resource

  • HorizontalPodAutoscaler API는 Pod 뿐만 아니라 각 컨테이너의 리소스도 스케일링의 조건으로 넣을 수 있도록 하는 설정을 제공한다.
...
type: ContainerResource
containerResource:
  name: cpu
  container: application
  target:
    type: Utilization
    averageUtilization: 60
...

Scaling policies

  • specbehavior 부분에 스케일링을 위한 정책을 설정할 수 있다.
  • 위에 정의된 policy부터 적용된다.
  • periodSeconds는 특정 시간 안에 scale을 조정할 수 있는 최대, 최소값을 정의한다.
    • 아래 예시에서는 60초동안 최대 4개의 replica가 scale down 될 수 있고, 60초 동안 현재의 최대 10% 만큼 scale down될 수 있다.
...
behavior:
  scaleDown:
    policies:
    - type: Pods
      value: 4
      periodSeconds: 60
    - type: Percent
      value: 10
      periodSeconds: 60
  scaleUp:
    stabilizationWindowSeconds: 0 # 메트릭들이 계속 변동하여 오차가 발생하는 것을 조정하기 위해 사용하는 옵션
    policies:
    - type: Percent
      value: 100
      periodSeconds: 15
    - type: Pods
      value: 4
      periodSeconds: 15
    selectPolicy: Max
...

VPA(Vertical Pod Autoscaler)

image
  • Vertical Pod Autoscaler는 파드의 리소스를 감시하여, 파드의 리소스가 부족한 경우 파드를 Restart하며 파드의 리소스 제한을 증가시킨다.

  • 이처럼 파드의 리소스가 수직적으로 증가하는 것을 Scale Up, 감소하는 것을 Scale Down이라고 한다.

  • 리소스 활용률을 최적화하고 비용을 절감할 수 있다.

  • 컨테이너의 리소스 Request를 조정한다.

  • 예시

    apiVersion: autoscaling.k8s.io/v1
    kind: VerticalPodAutoscaler
    metadata:
    name: k8s-autoscaler-vpa
    spec:
        targetRef:
            apiVersion: "apps/v1"
            kind:       Deployment
            name:       k8s-autoscaler
        updatePolicy:
            updateMode: "Auto"

여담

  • HPA와 VPA는 보통 Kubernetes component에 있는 metric 서버가 제공하는 값을 받아 스케일링 여부를 결정하는데, 원한다면 다른 custom metric을 적용할 수 있다. (참고)

참고