새소식

AWS/EKS

[EKS Study 5주차] EKS AutoScaling - VPA

  • -

CloudNet@ 팀의 가시다님께서 Leading 하시는 AEWS Study 5주차 스터디 내용 정리

Kubernetes 에서 기본으로 제공하는 Pod AutoScaling 기능으로는 HPA, VPA 가 존재합니다.

이번 포스팅에서는 EKS AutoScaling 중 Pod의 수직적 오토스케일링을 할 수 있는 VPA 에 대해 알아보겠습니다.

 

1. VPA (Vertical Pod Autoscaling)

VPA 는 용어 그대로 수직적 파드 오토스케일링 기능으로

현재의 Pod 사용 메트릭에 따라 Pod 의 적정 리소스 크기를 확장 축소 할 수 있습니다. [Scale Up - Down 기능]

 

HPA 와 함께 사용할 수 없으며,

VPA 작동 시 Pod 를 새로 배포하고 기존 Pod 는 삭제하는 식으로 동작합니다. (updateMode 를 Off로 수정하여 기능을 끌 수 있습니다.)

 

1.1. VPA 설치

 

vpa는 별도의 helm 설치를 제공하고 있지않아 GitHub 에서 소스를 다운받아 설치합니다.

 

GitHub - kubernetes/autoscaler: Autoscaling components for Kubernetes

Autoscaling components for Kubernetes. Contribute to kubernetes/autoscaler development by creating an account on GitHub.

github.com

git clone https://github.com/kubernetes/autoscaler.git
cd ~/autoscaler/vertical-pod-autoscaler/hack

 

vpa 는 openssl 1.1.1 버전 이상이 필요하기에 openssl 버전을 확인해보고 필요하다면 최신 버전을 설치합니다.

openssl version

# OpenSSL 1.1.1 버전 설치
yum install openssl11 -y

# OpenSSL 버전 확인
openssl11 version

# VPA 설치
sh vpa-up.sh

 

kubectl get crd | grep vertical

 

 

1.2. VPA 테스트 앱 배포

 

cd ~/autoscaler/vertical-pod-autoscaler/
kubectl apply -f examples/hamster.yaml && kubectl get vpa -w

 

cat examples/hamster.yaml | yh

apiVersion: apps/v1
kind: Deployment
metadata:
  name: hamster
spec:
  selector:
    matchLabels:
      app: hamster
  replicas: 2
    spec:
      containers:
        - name: hamster
          image: registry.k8s.io/ubuntu-slim:0.1
          resources:
            requests:
              cpu: 100m
              memory: 50Mi
          command: ["/bin/sh"]
          args:
            - "-c"
            - "while true; do timeout 0.5s yes >/dev/null; sleep 0.5s; done"
kubectl describe pod | grep Requests: -A2

 

 

VPA 가 동작한 후 Pod 가 변경된 것을 확인할 수 있습니다.

 

 

VPA 사용 시 Pod 를 자동으로 변경하는 것이 어려운 상황이 있습니다.

이 때, VPA Update Mode 를 Off 로 변경하면 최적의 리소스를 추천받을 수 있지만 VPA 가 자동으로 변경해주지는 않습니다.
Default = Auto 입니다.

kubectl get vpa -o yaml | kubectl neat | yh

 

 

관련 문서

 

GitHub - kubernetes/autoscaler: Autoscaling components for Kubernetes

Autoscaling components for Kubernetes. Contribute to kubernetes/autoscaler development by creating an account on GitHub.

github.com

 

Contents

포스팅 주소를 복사했습니다