본 시리즈는 가시다님의 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.
아쉽게도 그라파나로는 제대로 안보여서 패스...
#삭제
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를 사용
- 애플리케이션의 동작을 모니터링하고 실제 사용량에 따라 자동으로 리소스 요구량을 조정하여 최적의 환경 제공
'Tech > Kubernetes' 카테고리의 다른 글
[AEWS_1기] 6주차 - EKS Security (2/3) - EKS 인증/인가 (0) | 2023.05.31 |
---|---|
[AEWS_1기] 6주차 - EKS Security (1/3) - K8S 인증/인가 (0) | 2023.05.31 |
[AEWS_1기] 5주차 - EKS Autoscaling (2/6) - KEDA (0) | 2023.05.22 |
[AEWS_1기] 5주차 - EKS Autoscaling (1/6) - HPA (0) | 2023.05.22 |
[AEWS_1기] 4주차 - Observability (6/6) - kubecost (0) | 2023.05.19 |
댓글