본문 바로가기
Tech/Kubernetes

[AEWS_1기] 5주차 - EKS Autoscaling (3/6) - VPA

by 구름_쟁이 2023. 5. 22.

 

 

본 시리즈는 가시다님의 AEWS(AWS EKS Workshop) 1기 진행 내용입니다. (가시다님 노션)

스터디에 사용되는 링크 (AWS EKS Workshop) 

 

목차

1. HPA - Horizontal Pod Autoscaler (링크)
2. KEDA - Kubernetes based Event Driven Autoscaler (링크)
3. VPA - Vertical Pod Autoscaler
4. CA - Cluster Autoscaler
5. CPA - Cluster Proportional Autoscaler

6. Karpenter : K8S Native AutoScaler & Fargate

 

 

 

EKS 클러스터 세팅 (Cloudformation)

https://s3.ap-northeast-2.amazonaws.com/cloudformation.cloudneta.net/K8S/eks-oneclick4.yaml

 

 

 


3. VPA - Vertical Pod Autoscaler

VPA - 링크 : pod resources.request을 최대한 최적값으로 수정, HPA와 같이 사용 불가능, 수정 시 파드 재실행 ← 악분님 포스팅 내용

 

 

 

 

 

# 코드 다운로드
git clone https://github.com/kubernetes/autoscaler.git
cd ~/autoscaler/vertical-pod-autoscaler/
tree hack

# 배포 과정에서 에러 발생 : 방안1 openssl 버전 1.1.1 up, 방안2 브랜치08에서 작업
ERROR: Failed to create CA certificate for self-signing. If the error is "unknown option -addext", update your openssl version or deploy VPA from the vpa-release-0.8 branch.

# 프로메테우스 임시 파일 시스템 사용으로 재시작 시 저장 메트릭과 대시보드 정보가 다 삭제되어서 스터디 시간 실습 시나리오는 비추천
helm upgrade kube-prometheus-stack prometheus-community/kube-prometheus-stack --reuse-values --set prometheusOperator.verticalPodAutoscaler.enabled=true -n monitoring

# openssl 버전 확인
openssl version
OpenSSL 1.0.2k-fips  26 Jan 2017

# openssl 1.1.1 이상 버전 확인
yum install openssl11 -y
openssl11 version
OpenSSL 1.1.1g FIPS  21 Apr 2020

# 스크립트파일내에 openssl11 수정
sed -i 's/openssl/openssl11/g' ~/autoscaler/vertical-pod-autoscaler/pkg/admission-controller/gencerts.sh

# Deploy the Vertical Pod Autoscaler to your cluster with the following command.
watch -d kubectl get pod -n kube-system
cat hack/vpa-up.sh
./hack/vpa-up.sh
kubectl get crd | grep autoscaling

그라파나 대시보드 - 링크 14588 16294

공식 예제 : pod가 실행되면 약 2~3분 뒤에 pod resource.reqeust가 VPA에 의해 수정 - 링크

# 모니터링
watch -d kubectl top pod

# 공식 예제 배포
cd ~/autoscaler/vertical-pod-autoscaler/
cat examples/hamster.yaml | yh
kubectl apply -f examples/hamster.yaml && kubectl get vpa -w

# 파드 리소스 Requestes 확인
kubectl describe pod | grep Requests: -A2
    Requests:
      cpu:        100m
      memory:     50Mi
--
    Requests:
      cpu:        587m
      memory:     262144k
--
    Requests:
      cpu:        587m
      memory:     262144k

# VPA에 의해 기존 파드 삭제되고 신규 파드가 생성됨
kubectl get events --sort-by=".metadata.creationTimestamp" | grep VPA
2m16s       Normal    EvictedByVPA             pod/hamster-5bccbb88c6-s6jkp         Pod was evicted by VPA Updater to apply resource recommendation.
76s         Normal    EvictedByVPA             pod/hamster-5bccbb88c6-jc6gq         Pod was evicted by VPA Updater to apply resource recommendation.

 

 

VPA 관련 리소스 배포

 

hamster 배포 후 리소스들 확인

 

우측 상단에 노드에 배포될 pod request resource양이 달라졌다

 

시간 좀 더 지나면 다른 파드의 request resource 양도 변경되며 노드의 컴퓨팅 리소스가 달라지는 것 확인

 

 

아쉽게도 그라파나로는 제대로 안보여서 패스...

#삭제
kubectl delete -f examples/hamster.yaml && cd ~/autoscaler/vertical-pod-autoscaler/ && ./hack/vpa-down.sh

 

번외 (KRR)

더보기

KRR : Prometheus-based Kubernetes Resource Recommendations

Difference with Kubernetes VPA

Feature 🛠️                  Robusta KRR 🚀                                                                      Kubernetes VPA 🌐

Resource Recommendations 💡 ✅ CPU/Memory requests and limits ✅ CPU/Memory requests and limits
Installation Location 🌍 ✅ Not required to be installed inside the cluster, can be used on your own device, connected to a cluster ❌ Must be installed inside the cluster
Workload Configuration 🔧 ✅ No need to configure a VPA object for each workload ❌ Requires VPA object configuration for each workload
Immediate Results ⚡ ✅ Gets results immediately (given Prometheus is running) ❌ Requires time to gather data and provide recommendations
Reporting 📊 ✅ Detailed CLI Report, web UI in https://home.robusta.dev/ ❌ Not supported
Extensibility 🔧 ✅ Add your own strategies with few lines of Python ⚠️ Limited extensibility
Custom Metrics 📏 🔄 Support in future versions ❌ Not supported
Custom Resources 🎛️ 🔄 Support in future versions (e.g., GPU) ❌ Not supported
Explainability 📖 🔄 Support in future versions (Robusta will send you additional graphs) ❌ Not supported
Autoscaling 🔀 🔄 Support in future versions ✅ Automatic application of recommendations

 

 

 

결론

무엇보다도 VPA를 이용해서 Scale Up 하는 경우 Pod를 리부팅해야 하는 부분이 가장 리스크로 보인다.

그럼에도 VPA를 쓴다면 어떨 때 쓰면 좋을까?

 

새로운 애플리케이션 배포 시의 초기 리소스 설정: 애플리케이션을 처음 배포할 때 적절한 리소스 요구량을 사전에 예측하기 어려운 경우 VPA를 사용

  • 애플리케이션의 동작을 모니터링하고 실제 사용량에 따라 자동으로 리소스 요구량을 조정하여 최적의 환경 제공

 

 

댓글