쿠버네티스 컨트롤러 - Autoscaler

yunyoung·2021년 1월 26일

쿠버네티스

목록 보기
12/12

Autoscaler

쿠버네티스의 Autoscaler는 HPA, VPA, CA 세 가지가 있다.

HPA (Horizontal Pod Autoscaler)

  • Pod의 개수를 늘린다.

  • 사전에 HPA를 만들고 Controller와 연결을 해 놓는다면, HPA가 Pod의 리소스 상태를 감지하고 있다가 Pod의 Memory 또는 CPU가 위험한 상태일 때 Controller의 replicas를 변경한다. (1 -> 2)

  • 기동이 빠르게 되는 App에 사용한다. 장애 복구를 위한 기능이기 때문에 복구를 할 때에도 빨라야 하기 때문이다.

  • Stateless App일 때 사용한다. Stateful App의 경우 HPA는 어떤 파드를 Scale Out 해야 하는지 모르기 때문이다.

VPA (Vertical Pod Autoscaler)

  • Pod의 리소스를 증가시킨다.

  • 사전에 VPA를 만들어 Controller와 연결해 놓는다면, VPA가 Pod의 리소스 상태를 감지하고 있다가 Pod의 Memory 또는 CPU가 위험한 상태일 때 Pod를 restart 시키면서 리소스를 증가시킨다.

  • 즉, Scale Up 시켜준다. Scale Up : 리소스의 양이 수직적으로 증가하는 것 <-> Scale Down

  • Stateful App일 때 사용한다.

  • 한 Controller에 HPA와 함께 사용할 수 없다. 둘 다 달면 아예 기능이 작동하지 않는다.

CA (Cluster Autoscaler)

  • 클러스터에 노드를 추가한다.

  • 모든 worker node의 리소스가 모두 소모되었을 경우, Scheduler는 어느 노드에도 Pod를 배치할 수 없다는 것을 확인하고 CA에게 worker node를 생성해달라고 요청한다.

  • 사전에 CA를 특정 Cloud Provider와 연결해 놓았다면 (AWS, Azure, GCP) 이렇게 요청이 들어왔을 때 해당 Provider에 노드를 하나 만들어주고 Scheduler는 이 노드에 Pod를 배치시킨다.

  • 이렇게 사용하다가 로컬 노드에 자원이 남게 되면 Scheduler가 CA에게 노드를 삭제하도록 요청한다.

  • Cloud Provider에 있는 노드에 삭제되고, 그 안에 있던 Pod는 로컬 노드로 옮겨진다.

Metrics Server 설치

HPA는 Metrics Data를 받아와 그 정보를 바탕으로 작동하기 때문에 먼저 Metrics Server의 설치가 필요하다.

$ git clone https://github.com/kubernetes-sigs/metrics-server.git
$ cd metrics-server
$ kubectl apply -f deploy/kubernetes/

Metrics Server 내부에서 노드를 찾을 수 있도록 Metrics Deployment를 수정해준다.

$ kubectl edit deployment metrics-server -n kube-system
----------------------
spec:
  containers:
  - args:
    - --cert-dir=/tmp
    - --secure-port=4443
    # 추가
    - --kubelet-insecure-tls
    - --kubelet-preferred-address-types=InternalIP

설치 되었는지 확인

$ kubectl get apiservices |egrep metrics

메트릭 값 확인

$ kubectl top node

HPA (Horizontal Pod Autoscaler) 세부 내용

  • target 컨트롤러 지정

  • 증감되는 Replicas의 max 값, min 값 설정

  • 메트릭 정보의 어떤 조건을 통해서 replicas를 증가시킬지 metrics type 지정

    name : cpu / memory

    어떤 조건으로 증가시킬지?

    가장 기본적인 옵션 : Utilization

    averageUtilization: 50 -> Pod의 requests가 50%를 넘으면 replicas를 증가시켜준다.

spec:
  maxReplicas: 10
  minReplicas: 2
  scaleTargetRef:
    apiVersion: apps/v1
    kind: Deployment
    name: deployment-cpu1
  metrics:
  - type: Resource
  resource:
    name: cpu
    target:
      type: Utilization
      averageUtilization: 50
profile
🌈TIL과 개발 노트

0개의 댓글