앞서 작성한 포스팅에서 확인할 수 있겠지만 흔히 아는 HPA, CA에 관련한 정리를 참고하고 보면 좋다.
Kubernetes version에 따른 VPA version 확인하고 설치하기
git clone https://github.com/kubernetes/autoscaler.git
./hack/vpa-up.sh
kubectl get pod -n kube-system
kubectl create -f examples/hamster.yaml
kubectl describe vpa hamster-vpa
하단의 Recommendation을 보면 VPA가 추천해주는 리소스 크기를 확인할 수 있다.
위의 정보에서 Lower Bound는 리소스 사용량의 하한값, Target은 목표값, Upcapped Target은 제한이 없는 상태에서의 목표값, Upper Bound는 리소스 사용량의 상한값을 나타낸다.
vpa을 설치하면 VerticalPodAutoscaler라는 custom resource가 설치된다.
다음으로 k8s api안에 admission webhook을 등록합니다.
그리고 나서 특정한 pod가 vpa를 사용하도록 설정하면 앞서말한 hook이 VPA recommender가 추천하는 값에 따라서 pod template의 resource request를 수정합니다.
+---------------------+
| VPA Updater |
+---------------------+
|
| (Regular interval)
|
V
+---------------------+
| VPA Recommender |
+---------------------+
|
| (Recommendations)
|
V
+---------------------+
| VPA Admission Hook |
+---------------------+
|
| (Pod creation)
|
V
+---------------------+
| Pod Resource |
| Modification |
+---------------------+
|
| (Resource updates)
|
V
+---------------------+
| Node Eviction |
+---------------------+
|
| (Pod restart)
|
V
+-----------------------+
| New Pod |
+-----------------------+
사실 HPA를 사용하면서 가장 크게 고민했던 부분이 Requests 값에 대한 부분이었다. 클러스터 내부에서 운영 중인 어플리케이션 특성에 따라 리소스 사용량이 다를것이며 운영 방식에 따라 설정 방법이 다르기 때문에 이 부분을 자동으로 조절하고 싶었다. 그 부분을 어느정도 해결해줄 수 있는 것이 VPA 라고 생각한다.