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 에서 소스를 다운받아 설치합니다.
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
관련 문서