포스트

[CKA] 컨테이너 스케일링

[CKA] 컨테이너 스케일링

스케일링이란?

수직적 확장이란 CPU나 메모리의 증설을 뜻하고, 수평적 확장은 서버의 갯수를 늘리는 것이다.

쿠버네티스에서는 이러한 두 가지 방식의 스케일링 방식을 지원한다.

HPA

Pod 수를 자동으로 스케일링(늘렸다가 줄였다가)하는 스케일러

언제나 자리에 앉아서 kubectl top depoly를 할 수는 없는 노릇이다. 이를 위해 자동으로 Metrics Server가 가져온 자원을 바탕으로 설정된 값에 따라 워크로드 크기(pod의 숫자)를 업데이트하는 리소스이다.

image.png

HPA 생성하기

cpu의 request가 100m라면 아래와 같이 HPA를 설정한다면?

1
2
3
4
kubectl autoscale deployment myapp \
  --cpu-percent=50 \
  --min=2 \
  --max=10

CPU가 50% 이상 점유되어진다면 pod를 최대 10개까지 스케일 업한다. 하지만 pod는 2개 이하로 줄어들지 않는다.

HPA yaml 예시

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
apiVersion: autoscaling/v2
kind: HorizontalPodAutoscaler
metadata:
  name: myapp-hpa
spec:
  scaleTargetRef:
    apiVersion: apps/v1
    kind: Deployment
    name: myapp
  minReplicas: 2
  maxReplicas: 10
  metrics:
  - type: Resource
    resource:
      name: cpu
      target:
        type: Utilization
        averageUtilization: 50

HPA 상태 확인 명령어

HPA는 쿠버네티스 리소스이기에 get으로 상태를 불러올 수 있다.

1
2
kubectl get hpa
kubectl describe hpa myapp-hpa

VPA

수직적 오토스케일러로 Pod의 CPU 및 메모리 요청과 제한을 자동으로 조절하는 컨트롤러

VPA의 구성요소

구성요소설명
Recommender파드의 리소스 사용량을 수집하고, 적절한 리소스를 계산
Updater파드가 리소스 조정이 필요하면 재시작 요청
Admission Controller새로 생성되는 파드에 추천된 리소스 적용

VPA는 pod의 리소스 사용 데이터를 직접 수집하는데 과거 데이터를 기반으로 cpu와 memory 등을 추천해준다.

Sample yaml

1
2
3
4
5
6
7
8
9
10
11
apiVersion: autoscaling.k8s.io/v1
kind: VerticalPodAutoscaler
metadata:
  name: myapp-vpa
spec:
  targetRef:
    apiVersion: "apps/v1"
    kind: Deployment
    name: myapp
  updatePolicy:
    updateMode: "Auto"

targetRef 은 리소스를 조정할 대상을 설정한다. 위 예에서는 Deployment를 target 리소스로 한다. updatePolicy의 경우 자동으로 리소스를 조정하고 pod를 재시작(pod를 지우고 시작하는 것과 동일)한 작업을 한다.

VPA 상태 확인

1
kubectl describe vpa myapp-vpa

VPA는 거의 대부분의 상황에서 스케일링시 Pod의 재시작이 요구되어진다. 또한 과거 기록을 기반으로 추천하기에 AP에 영향이 갈 확률이 높다.

⚠️ HPA와 동시 사용시 충돌한다!

이 기사는 저작권자의 CC BY 4.0 라이센스를 따릅니다.