System Engineering/Kubernetes

8. K8s AutoScaling

Hopulence 2021. 4. 11. 23:49
반응형

1. AutoScaling

  • HPA (Horizontal Pod Autoscaler)

 RC / RS / Deploymen를 통해 실행되는 Pod의 Scaling이다. 설정된 주기(Default 30초)마다 CPU 사용률등의 Metric을 모니터링하며, DaemonSet에는 적용되지 않는다.

 

  apiVersion: autoscaling/v2alpha1
  kind: HorizontalPodAutoscaler
  metadata:
    name: hpa-ex
    namespace: default
  spec:
    scaleTargetRef:
      apiVersion: apps/v1beta1
      kind: Deployment
      name: hpa-ex
    minReplicas: 3
    maxRelpicas: 9
    metircs:
    - type: Resource
      reousrce:
        name: cpu
        targetAverageUtilization: 65

 

  • VPA (Vertical Pod Autoscaler)

 Pod의 Resource에 대한 Scaling으로 Auto와 Manual 2가지 모드가 있다.

 

  - Auto : Pod를 모니터링하여 Resource size를 분석하고 request 값을 수정하여, Sacling을 실행한다.

                (변경된 request 값을 반영하기 위해 Pod Restart 발생)

 

  - Manual : 분석하여 산출한 request 값만 출력하고 Scaling을 실행하지는 않는다

 

  apiVersion: autoscaling.k8s.io/v1beta2
  kind: VerticalPodAutoscaler
  metadata:
    name: api-server
  spec:
    targetRef:
      apiVersion: "extensions/v1beta1"
      kind: Deployment
      name: api-server
    updatePolicy:
      updataMode: "Auto"

  * HPA와 VPA를 동시에 사용하는 것은 K8s가 혼동할 수 있기 때문에 권고되지 않는다.

  * 서비스 환경에서는 HPA, 개발 환경에서는 VPA의 Manual 모드를 통한 성능 튜닝이 적합하다

 

  • CA (Clutser Autoscaler) - Node Scaling

 Pod가 생성될 때, 노드의 리소스 부족으로 Pod의 상태가 Pending이 되면 Node Scale-Out이 Trigger 된다. - Overcommitted state와는 별개

 

 - Node Scale-In

 리소스 모니터링 중 Scale-In이 Trriger되면 Pod를 Restart를 통해 Node를 비우는 작업을 진행하는데, 원하지 않는 Restart가 발생할 수 있어 주의가 필요하다. 이를 방지하기 위해서 아래와 같은 설정을 하는것이 좋다.

  • Locat Storage를 사용하는 Pod에 대해서는 'cluster-autoscaler.kubernetes.io/safe-to-svict: "true"' 설정을 통해 Pod가 제거되는 것을 방지한다.
  • Stateful한 Pod의 경우 Contoller의 관리에서 벗어나도록 하는 경우도 있다. 관리 밖의 Pod는 한 번 Eviction되면 다시 Restart될 수 없기때문에 강제적으로 Eviction되지 않는다.
  • PDB를 통해 Pod의 Restart나 Eviction이 발생하여도 다른 Replica가 생성되기 까지 기다려서 서비스 중단이 없도록 한다

 * PDB(Pod Disruption Budget) : Node 내에 최소로 유지되는 Pod의 개수(Quorum) 설정

 

2. Reference

Kubernetes Advanced Workshop
조대협의 블로그
 
반응형