본문 바로가기

인프라/kubernetes

kubernetes 파드와 클러스터 노드의 오토 스케일링

파드와 클러스터 노드의 오토 스케일링

예측이 가능하거나 점진적으로 리소스가 변화할때는 수동으로 스케일링을 해도 되지만

갑작스럽게 예측할 수 없을때는 수동으로 처리하는게 이상적이지 않다.

쿠버네티스는 파드를 모니터링 하다가 CPU 사용량이나 등등이 증가하는 것을 감지하면 즉시 확장 할 수 있다.

노드를 추가 생성하는 것도 가능하다.

 

 

수평적 파드 오토 스케일링

수평적 파드 오토 스케일링은 컨트롤러가 파드의 레플리카 수를 자동으로 조정하는것을 말한다.

HorizontalPodAutoscaler 리소스로 활성화한다.

컨트롤러는 주기적으로 파드의 메트릭을 확인해서 리소스에 설정되어 있는 메트릭 값을 만족하는 레플리카 수를 계산해서 레플리카 수를 조정한다.

 

오토스케일링 프로세스 이해

1. 관리되는 모든 파드 메트릭 얻기,  kubelet 에서 실행되는 에이전트에 의해 수집된다.

2. 메트릭 목표값에 근사하기 위해 필요한 파드 수를 계산핟.

3. 레플리카 필드를 갱신한다.

 

 

파드 메트릭 얻기

kubelet 에서 실행되는 cAdvisor 에 의해서 수집

수집된 메트릭은 메트릭스 서버에 저장, 집계

HPA가 API 를 이용해 모든 파드의 메트릭을 얻을 수 있다.

 

필요한 파드 수 계산

메트릭 정보의 평균 값을 이용해 목표 값과 가깝게 하는 수를 찾는다.

목표 CPU 사용량이 50% (Target CPU) 고 3개의 파드의 CPU 사용량의 합을 구해서 목표값으로 나눈 값 (200/50)이

레플리카 수 후보가 된다.

 

QPS도 목표가 20이면 3개의 파드 QPS 를 구해서 전체 QPS/목표 QPS 를 나눠서 레플리카 수 후보를 만들어서

 

모든 후보들 중 가장 큰 값으로 레플리카 수가 결정된다.

 

레플리카 수 조정

HPA 는 스케일 서브 리소스를 수정한다.

 

전체 오토스케일링 과정 이해

 

 

구성요소들은 메트릭을 주기적으로 가져오게 되는데

이 수집된 메트릭을 오토스케일러가 수집해서 레플리카 수를 조정해준다.

 

결과가 즉각적으로 조정되는건 아니다.

 

CPU 사용률 기반 스케일링

 

CPU 가 100%에 도달하면 스케일 업(수직적 스케일링: CPU 양의 증가), 스케일아웃(수평적 스케일링: 파드 수 증가)

이 필요하다.

 

CPU 사용량을 기준으로 오토 스케일링 할때는 90%를 넘지 않도록 해야 한다.

완전 바쁜 상황 도달 전에 스케일아웃이 이루어지는것이 좋다.

 

CPU 사용량에 기반한 HorizontalPodAutoscaler 생성

 

오토 스케일링 대상은 디플로이먼트를 기준으로 하는것이 좋다.

 

Deployment

apiVersion: extensions/v1beta1
kind: Deployment
metadata:
  name: kubia
spec:
  replicas: 3 # 초기 레플리카 수를 3으로 지정
  template:
    metadata:
      name: kubia
      labels:
        app: kubia
    spec:
      containers:
      - image: luksa/kubia:v1 # 특정 nodejs 이미지 실행
        name: nodejs
        resources:
          requests:
            cpu: 100m # 파드당 100밀리코어 CPU 요청 (0.1 코어)
  •  

 

오토 스케일링 활성화

 

목표 CPU 사용륭이 30% 고 레플리카 수는 최소 1개 최대 5개를 만든다는 의미

kubectl autoscale deployment kubia --cpu-percent=30 --min=1 --max=5

hpa 살펴보기

kubectl describe hpa

 

수평적 클러스터 노드 확장

 

 

모든 노드가 한계에 도달해 파드를 더 생성 못할때 쿠버네티스는 노드 추가도 제공해준다.

쿠버네티스는 노드가 필요한 상황이 오면 클라우드 제공자에게 요청 하는 기능도 가지고 있다.

'인프라 > kubernetes' 카테고리의 다른 글

kubernetes 내부 이해  (0) 2021.08.26
kubernetes 스테이트풀셋  (0) 2021.08.25
kubernetes 디플로이먼트  (0) 2021.08.25
kubernetes 컨피그맵과 시크릿  (0) 2021.08.24
kubernetes 볼륨  (0) 2021.08.24